public async Task <ResponseMessage> AddTitle(Models.UserInfo user, [FromBody] TitleAddRequest titleRequest) { Logger.Trace($"用户{user?.UserName ?? ""}({user?.Id ?? ""})添加称号,请求参数为:\r\n" + (titleRequest != null ? JsonHelper.ToJson(titleRequest) : "")); var response = new ResponseMessage(); if (!ModelState.IsValid) { response.Code = ResponseCodeDefines.ModelStateInvalid; response.Message = ModelState.GetAllErrors(); Logger.Warn("添加称号模型验证失败:\r\n{0}", response.Message ?? ""); return(response); } try { response = await _titleManager.AddTitleAsync(user, titleRequest, HttpContext.RequestAborted); } catch (Exception e) { response.Code = ResponseCodeDefines.ServiceError; response.Message = e.Message; Logger.Error($"用户{user?.UserName ?? ""}({user?.Id ?? ""})添加称号,报错:{e.Message}\r\n{e.StackTrace}"); } return(response); }
/// <summary> /// 添加称号 /// </summary> /// <param name="user"></param> /// <param name="titleRequest"></param> /// <param name="requestAborted"></param> /// <returns></returns> public async Task <ResponseMessage> AddTitleAsync(UserInfo user, TitleAddRequest titleRequest, CancellationToken requestAborted) { var response = new ResponseMessage(); if (!user.IsAdmin) { response.Code = ResponseCodeDefines.NotAllow; response.Message = "权限不足"; return(response); } if (titleRequest.StartScore >= titleRequest.EndScore) { response.Code = ResponseCodeDefines.NotFound; response.Message = "开始值不能大于或等于结束值"; return(response); } var periodInfo = await _iTitleStore.GetScorePeriods().Where(w => !w.IsDelete && w.Id == titleRequest.PeriodId).FirstOrDefaultAsync(); if (periodInfo == null || periodInfo.State != 1) { response.Code = ResponseCodeDefines.ModelStateInvalid; response.Message = "只有进行中的赛季才能操作"; return(response); } var titles = await _iTitleStore.GetScoreTitles().Where(w => w.PeriodId == titleRequest.PeriodId && !w.IsDelete).ToListAsync(); if (titles != null && titles.Count != 0) { if (titleRequest.EndScore <= titles.Max(w => w.EndScore) && (titleRequest.EndScore + 1) != titles.Min(w => w.StartScore)) { response.Code = ResponseCodeDefines.ModelStateInvalid; response.Message = "开始值和结束值不能重复,且必须保持连续"; return(response); } if (titleRequest.StartScore >= titles.Min(w => w.StartScore) && (titleRequest.StartScore - 1) != titles.Max(w => w.EndScore)) { response.Code = ResponseCodeDefines.ModelStateInvalid; response.Message = "开始值和结束值不能重复,且必须保持连续"; return(response); } } //需要保存的数据 var title = new RankTitle { Id = Guid.NewGuid().ToString(), PeriodId = titleRequest.PeriodId, Title = titleRequest.Title, StartScore = titleRequest.StartScore, EndScore = titleRequest.EndScore, Icon = titleRequest.Icon?.Replace(_config["FileUrl"], ""), Card = titleRequest.Card?.Replace(_config["FileUrl"], ""), CreateTime = DateTime.Now, CreateUser = user.Id, UpdateTime = DateTime.Now, UpdateUser = user.Id, IsDelete = false, FontColor = titleRequest.FontColor, }; //保存 await _iTitleStore.AddTitleAsync(title, requestAborted); // 触发赛季和排行榜 await _sendClientMessageHelper.SendInfos(new List <Dto.Common.SendClientType>() { Dto.Common.SendClientType.Season, Dto.Common.SendClientType.Rank }); return(response); }