using Microsoft.AspNetCore.Mvc; namespace Application.Web.Controllers.Pub; /// /// 队伍接口 /// [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; } /// /// 获取我的队伍 /// /// [HttpGet] public async Task GetMyTeam() { string userId = StateHelper.userId; var teamInfo = await _teamService.GetUserTeamInfo(userId); return PoAction.Ok(teamInfo); } /// /// 创建队伍 /// /// [HttpGet] public async Task 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("创建失败,请稍后尝试!"); } } /// /// 加入队伍 /// /// /// [HttpGet] public async Task 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("加入失败,请稍后尝试!"); } } /// /// 获取队伍信息 /// /// /// [HttpGet] public async Task GetTeamInfo(string teamId) { string userId = StateHelper.userId; var teamInfo = await _teamService.GetTeamDataByTeamId(teamId); return PoAction.Ok(teamInfo); } /// /// 退出队伍 /// /// [HttpGet] public async Task 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("退出失败,请稍后尝试!"); } } } /// /// 修改队名 /// /// /// [HttpPost] public async Task 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("修改失败,请稍后尝试!"); } } /// /// 踢出成员 /// /// /// [HttpGet] public async Task 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("操作失败,请稍后尝试!"); } } /// /// 获取队伍列表 /// /// /// /// [HttpGet] public async Task 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 total = 0; var data = await _teamService.GetTeamDataPage(area, code, page, 10, total); return PoAction.Ok(new { data, total = total.Value }); } }