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);
        }
Beispiel #2
0
        /// <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);
        }