public async Task UserAvatar(IFormFile avatar) { var userId = userManager.GetUserId(User); var user = await userManager.FindByIdAsync(userId); if (avatar == null) { throw new BadRequestException("文件格式不正确"); } if (!avatar.ContentType.StartsWith("image/")) { throw new BadRequestException("文件格式不正确"); } if (avatar.Length > 1048576) { throw new BadRequestException("文件大小不能超过 1 Mb"); } await using var stream = new System.IO.MemoryStream(); await avatar.CopyToAsync(stream); stream.Seek(0, System.IO.SeekOrigin.Begin); var buffer = new byte[stream.Length]; await stream.ReadAsync(buffer); user.Avatar = buffer; await userManager.UpdateAsync(user); }
public async Task VoteProblem([FromBody] ProblemVoteModel model) { var userId = userManager.GetUserId(User); var result = model.VoteType switch { 1 => await voteService.UpvoteProblemAsync(userId, model.ProblemId), 2 => await voteService.DownvoteProblemAsync(userId, model.ProblemId), _ => false }; if (!result) { throw new BadRequestException("评价失败"); } }
private async Task <UserInfoModel> GetCurrentUserInfo() { var userInfoRet = new UserInfoModel { SignedIn = signInManager.IsSignedIn(User) }; var userId = userManager.GetUserId(User); var user = await userManager.FindByIdAsync(userId); if (user == null) { return(new UserInfoModel()); } userInfoRet.Name = user.Name; userInfoRet.UserId = user.Id; userInfoRet.UserName = user.UserName; userInfoRet.Privilege = user.Privilege; userInfoRet.Coins = user.Coins; userInfoRet.Experience = user.Experience; if (userInfoRet.SignedIn) { userInfoRet.EmailConfirmed = user.EmailConfirmed; userInfoRet.PhoneNumberConfirmed = user.PhoneNumberConfirmed; userInfoRet.Email = user.Email; userInfoRet.PhoneNumber = user.PhoneNumber; userInfoRet.OtherInfo = IdentityHelper.GetOtherUserInfo(string.IsNullOrEmpty(user.OtherInfo) ? "{}" : user.OtherInfo); } return(userInfoRet); }
public async Task <ContestListModel> ContestList([FromBody] ContestListQueryModel model) { var userId = userManager.GetUserId(User); var ret = new ContestListModel(); IQueryable <Contest> contests; try { contests = await(model.GroupId switch { 0 => contestService.QueryContestAsync(userId), _ => contestService.QueryContestAsync(userId, model.GroupId) }); }
public async Task <ProblemListModel> ProblemList([FromBody] ProblemListQueryModel model) { var userId = userManager.GetUserId(User); var ret = new ProblemListModel(); // use an invalid value when userId is empty or null var judges = await judgeService.QueryJudgesAsync(string.IsNullOrEmpty(userId)? "-1" : userId, model.GroupId == 0?null : (int?)model.GroupId, model.ContestId == 0?null : (int?)model.ContestId); IQueryable <Problem> problems; try { problems = await(model switch { { ContestId: 0, GroupId: 0 } => problemService.QueryProblemAsync(userId), { GroupId: 0 } => problemService.QueryProblemAsync(userId, model.ContestId),
public async Task <GroupListModel> GroupList([FromBody] GroupListQueryModel model) { var userId = userManager.GetUserId(User); var groups = await groupService.QueryGroupAsync(userId); var ret = new GroupListModel(); if (model.Filter.Id != 0) { groups = groups.Where(i => i.Id == model.Filter.Id); } if (!string.IsNullOrEmpty(model.Filter.Name)) { groups = groups.Where(i => i.Name.Contains(model.Filter.Name)); } var groupJoin = await groupService.QueryGroupJoinRecordsAsync(); if (model.Filter.Status.Count < 2) { if (!string.IsNullOrEmpty(userId)) { foreach (var status in allStatus) { if (!model.Filter.Status.Contains(status)) { groups = status switch { 0 => groups.Where(i => groupJoin.Any(j => j.GroupId == i.Id && j.UserId == userId)), 1 => groups.Where(i => !groupJoin.Any(j => j.GroupId == i.Id && j.UserId == userId)), _ => groups }; } } } } if (model.RequireTotalCount) { ret.TotalCount = await groups.Select(i => i.Id) /*.Cacheable()*/.CountAsync(); } groups = groups.OrderByDescending(i => i.Id); if (model.StartId == 0) { groups = groups.Skip(model.Start); } else { groups = groups.Where(i => i.Id <= model.StartId); } ret.Groups = await groups.Take(model.Count).Select(i => new GroupListModel.GroupListItemModel { Id = i.Id, CreationTime = i.CreationTime, IsPrivate = i.IsPrivate, Name = i.Name, UserId = i.UserId, UserName = i.UserInfo.UserName }) /*.Cacheable()*/.ToListAsync(); return(ret); }