using Manganese.Array; using Masuit.Tools; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.Security.Claims; namespace asg_form.Controllers { public class InviteReferee : ControllerBase { private readonly RoleManager roleManager; private readonly UserManager userManager; public InviteReferee( RoleManager roleManager, UserManager userManager) { this.roleManager = roleManager; this.userManager = userManager; } public class InviteBg { public int id { get; set; } public int user_id { get; set; } public List<(int invitor_id, int match_id)>? my_request { get; set; } = new List<(int, int)>(); } public class inv { public int invitedId { get; set; } public int matchId { get; set; } } [Route("api/v1/Invite")] [HttpPost] [Authorize] public async Task> GetReferee([FromBody] inv msg) { string Invitorid = this.User.FindFirst(ClaimTypes.NameIdentifier)!.Value; var user = await userManager.FindByIdAsync(Invitorid); long userId = user.Id; using (TestDbContext sb = new TestDbContext()) { try { var userInvited = await userManager.Users.FirstOrDefaultAsync(x => x.Id == msg.invitedId); if (userInvited == null) return Ok(new { code = 404, message = "用户未找到" }); var invitationRecord = await sb.T_Invitation.FindAsync(msg.invitedId); if (invitationRecord != null) { if (invitationRecord.my_request.Any(req => req.invitor_id == userId && req.match_id == msg.matchId)) { return Ok(new { code = 409, message = "邀请已存在" }); } } invitationRecord = new InviteBg { user_id = msg.invitedId, my_request = new List<(int, int)>() }; invitationRecord.my_request.Add((invitor_id: (int)userId, match_id: msg.matchId)); await sb.SaveChangesAsync(); var data = new { invitedId = (int)userId, matchId = msg.matchId, }; return Ok(new { code = 200, message = "邀请成功", data }); } catch (Exception ex) { return Ok(new { code = 500, message = "服务器错误", details = ex.Message }); } } } } }