Files
Kg.SeaTime/Service/Application.Web/Controllers/Pub/TeamController.cs
2026-06-08 18:56:28 +08:00

267 lines
7.6 KiB
C#

using Microsoft.AspNetCore.Mvc;
namespace Application.Web.Controllers.Pub;
/// <summary>
/// 队伍接口
/// </summary>
[Route("[controller]/[action]")]
[ApiController]
[Authorize]
public class TeamController : ControllerBase
{
private readonly IUnitUserService _userService;
private readonly IGameTeamService _teamService;
private readonly IGameChatService _chatService;
public TeamController(IUnitUserService userService, IGameTeamService teamService,IGameChatService chatService)
{
_userService = userService;
_teamService = teamService;
_chatService = chatService;
}
/// <summary>
/// 获取我的队伍
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<IPoAction> GetMyTeam()
{
string userId = StateHelper.userId;
var teamInfo = await _teamService.GetUserTeamInfo(userId);
return PoAction.Ok(teamInfo);
}
/// <summary>
/// 创建队伍
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<IPoAction> CreateTeam(int type, string? par)
{
string userId = StateHelper.userId;
var teamId = StringAssist.NewGuid;
var myTeam = await _teamService.GetUserTeamData(userId);
if (myTeam.teamId != "0")
{
return PoAction.Message("退出当前队伍后才可创建!");
}
var userInfo = await _userService.GetUserInfoByUserId(userId);
string name = $"{userInfo.nick}的队伍";
bool result = await _teamService.Add(userId, teamId, true, name, (int)userInfo.areaId,
nameof(TeamEnum.TeamCode.Default), "", 5);
if (result)
{
return PoAction.Ok(true);
}
else
{
return PoAction.Message("创建失败,请稍后尝试!");
}
}
/// <summary>
/// 加入队伍
/// </summary>
/// <param name="teamId"></param>
/// <returns></returns>
[HttpGet]
public async Task<IPoAction> JoinTeam(string teamId)
{
string userId = StateHelper.userId;
var myTeam = await _teamService.GetUserTeamData(userId);
if (myTeam.teamId != "0")
{
return PoAction.Message("退出当前队伍后才可创建!");
}
var onTeam = await _teamService.GetTeamDataByTeamId(teamId);
if (onTeam.state != 1)
{
return PoAction.Message("队伍不存在!");
}
if (onTeam.team.areaId != StateHelper.areaId)
{
return PoAction.Message("队伍不存在!");
}
if (onTeam.user.Count >= onTeam.team.count)
{
return PoAction.Message("队伍已满员!");
}
if (await _teamService.Add(userId, teamId))
{
var myInfo = await _userService.GetUserInfoByUserId(userId);
string msg = $"[{myInfo.nick}]加入了队伍!";
await _chatService.SendChat("0", (int)myInfo.areaId, nameof(GameChatEnum.Code.Team), msg, teamId);
return PoAction.Ok(true);
}
else
{
return PoAction.Message("加入失败,请稍后尝试!");
}
}
/// <summary>
/// 获取队伍信息
/// </summary>
/// <param name="no"></param>
/// <returns></returns>
[HttpGet]
public async Task<IPoAction> GetTeamInfo(string teamId)
{
string userId = StateHelper.userId;
var teamInfo = await _teamService.GetTeamDataByTeamId(teamId);
int isMyTeam = teamInfo.user.Any(it => it.user.userId == userId) ? 1 : 0;
int manger = teamInfo.team.masterId == userId ? 1 : 0;
return PoAction.Ok(new
{
data = teamInfo,
isMyTeam = isMyTeam
});
}
/// <summary>
/// 退出队伍
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<IPoAction> ExitTeam()
{
string userId = StateHelper.userId;
var myTeam = await _teamService.GetUserTeamInfo(userId);
if (myTeam.state == 0)
{
return PoAction.Message("您未加入队伍,无需退出!");
}
if (myTeam.team.masterId == userId)//如果队长,解散队伍解散
{
await _teamService.DisTeam(myTeam.team.teamId);
return PoAction.Ok(true);
}
else
{
if (await _teamService.Remove(userId, myTeam.team.teamId))
{
var myInfo = await _userService.GetUserInfoByUserId(userId);
string msg = $"[{myInfo.nick}]退出了队伍!";
await _chatService.SendChat("0", (int)myInfo.areaId, nameof(GameChatEnum.Code.Team), msg, myTeam.team.teamId);
return PoAction.Ok(true);
}
else
{
return PoAction.Message("退出失败,请稍后尝试!");
}
}
}
/// <summary>
/// 修改队名
/// </summary>
/// <param name="parms"></param>
/// <returns></returns>
[HttpPost]
public async Task<IPoAction> UpdateTeamName([FromBody] UpdateTeamNameParms parms)
{
string name = StringAssist.NoHTML( parms.name);
if(string.IsNullOrEmpty(name))
{
return PoAction.Message("名称不能为空!");
}
string userId = StateHelper.userId;
var myTeam = await _teamService.GetUserTeamInfo(userId);
if (myTeam.state == 0)
{
return PoAction.Message("暂无队伍!");
}
if (myTeam.team.masterId != userId)
{
return PoAction.Message("队长才可以修改队名哦!");
}
if (await _teamService.UpdateTeamName(myTeam.team.teamId, name))
{
return PoAction.Ok(true);
}
else
{
return PoAction.Message("修改失败,请稍后尝试!");
}
}
/// <summary>
/// 踢出成员
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
[HttpGet]
public async Task<IPoAction> RemoveUser(string user)
{
string userId = StateHelper.userId;
if (userId == user)
{
return PoAction.Message("无权限!");
}
var myTeam = await _teamService.GetUserTeamInfo(userId);
if (myTeam.state == 0)
{
return PoAction.Message("暂无队伍!");
}
if (myTeam.team.masterId != userId)
{
return PoAction.Message("您无权限!");
}
if (myTeam.user.Any(it => it.user.userId == user) == false)
{
return PoAction.Message("您无权限!");
}
if (await _teamService.Remove(user, myTeam.team.teamId))
{
return PoAction.Ok(true);
}
else
{
return PoAction.Message("操作失败,请稍后尝试!");
}
}
/// <summary>
/// 获取队伍列表
/// </summary>
/// <param name="type"></param>
/// <param name="page"></param>
/// <returns></returns>
[HttpGet]
public async Task<IPoAction> GetTeamData(int type, int page)
{
int area = StateHelper.areaId;
string code = nameof(TeamEnum.TeamCode.Default);
switch (type)
{
case 0:
code = nameof(TeamEnum.TeamCode.Default);
break;
case 1:
code = nameof(TeamEnum.TeamCode.Dup);
break;
case 2:
code = nameof(TeamEnum.TeamCode.Ot);
break;
}
RefAsync<int> total = 0;
var data = await _teamService.GetTeamDataPage(area, code, page, 10, total);
return PoAction.Ok(new { data, total = total.Value });
}
}