private async Task <bool> PopulateGamePointAttributes(Models.NormalPoint normalPoint, NormalPointCreateOrUpdateOneRequestDto requestDto, bool isKeylolOperator, bool keepSteamAppId = false) { if (requestDto.DisplayAliases == null) { ModelState.AddModelError("vm.DisplayAliases", "游戏据点必须填写别名"); return(false); } if (requestDto.CoverImage == null) { ModelState.AddModelError("vm.CoverImage", "游戏据点必须填写封面图片"); return(false); } if (!Helpers.IsTrustedUrl(requestDto.CoverImage)) { ModelState.AddModelError("vm.CoverImage", "不允许使用可不信图片来源"); return(false); } if (requestDto.DeveloperPointsId == null) { ModelState.AddModelError("vm.DeveloperPointsId", "游戏据点必须填写开发商据点"); return(false); } if (requestDto.PublisherPointsId == null) { ModelState.AddModelError("vm.PublisherPointsId", "游戏据点必须填写发行商据点"); return(false); } if (requestDto.GenrePointsId == null) { ModelState.AddModelError("vm.GenrePointsId", "游戏据点必须填写类型据点"); return(false); } if (requestDto.TagPointsId == null) { ModelState.AddModelError("vm.TagPointsId", "游戏据点必须填写特性据点"); return(false); } if (requestDto.MajorPlatformPointsId == null) { ModelState.AddModelError("vm.MajorPlatformPointsId", "游戏据点必须填写主要平台据点"); return(false); } if (requestDto.MinorPlatformPointsId == null) { ModelState.AddModelError("vm.MinorPlatformPointsId", "游戏据点必须填写次要平台据点"); return(false); } if (requestDto.SeriesPointsId == null) { ModelState.AddModelError("vm.SeriesPointsId", "游戏据点必须填写系列据点"); return(false); } if (isKeylolOperator) { if (!keepSteamAppId) { if (requestDto.SteamAppId == null) { ModelState.AddModelError("vm.SteamAppId", "游戏据点的 App ID 不能为空"); return(false); } normalPoint.SteamAppId = requestDto.SteamAppId.Value; } if (requestDto.ReleaseDate == null) { ModelState.AddModelError("vm.ReleaseDate", "游戏据点的面世日期不能为空"); return(false); } normalPoint.ReleaseDate = requestDto.ReleaseDate.Value; } normalPoint.DisplayAliases = requestDto.DisplayAliases; normalPoint.CoverImage = requestDto.CoverImage; normalPoint.DeveloperPoints = await _dbContext.NormalPoints .Where( p => p.Type == NormalPointType.Manufacturer && requestDto.DeveloperPointsId.Contains(p.Id)) .ToListAsync(); normalPoint.PublisherPoints = await _dbContext.NormalPoints .Where( p => p.Type == NormalPointType.Manufacturer && requestDto.PublisherPointsId.Contains(p.Id)) .ToListAsync(); normalPoint.GenrePoints = await _dbContext.NormalPoints .Where(p => p.Type == NormalPointType.Genre && requestDto.GenrePointsId.Contains(p.Id)) .ToListAsync(); normalPoint.TagPoints = await _dbContext.NormalPoints .Where(p => p.Type == NormalPointType.Genre && requestDto.TagPointsId.Contains(p.Id)) .ToListAsync(); normalPoint.MajorPlatformPoints = await _dbContext.NormalPoints .Where( p => p.Type == NormalPointType.Platform && requestDto.MajorPlatformPointsId.Contains(p.Id)) .ToListAsync(); normalPoint.MinorPlatformForPoints = await _dbContext.NormalPoints .Where( p => p.Type == NormalPointType.Platform && requestDto.MinorPlatformPointsId.Contains(p.Id)) .ToListAsync(); normalPoint.SeriesPoints = await _dbContext.NormalPoints .Where(p => p.Type == NormalPointType.Genre && requestDto.SeriesPointsId.Contains(p.Id)) .ToListAsync(); return(true); }
public async Task <IHttpActionResult> UpdateOneById(string id, [NotNull] NormalPointCreateOrUpdateOneRequestDto requestDto) { var normalPoint = await _dbContext.NormalPoints .Include(p => p.DeveloperPoints) .Include(p => p.PublisherPoints) .Include(p => p.SeriesPoints) .Include(p => p.GenrePoints) .Include(p => p.TagPoints) .Include(p => p.MajorPlatformPoints) .Include(p => p.MinorPlatformPoints) .Include(p => p.SteamStoreNames) .SingleOrDefaultAsync(p => p.Id == id); if (normalPoint == null) { return(NotFound()); } if (!Helpers.IsTrustedUrl(requestDto.BackgroundImage)) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.BackgroundImage), Errors.Invalid)); } if (!Helpers.IsTrustedUrl(requestDto.AvatarImage)) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.AvatarImage), Errors.Invalid)); } var isKeylolOperator = User.IsInRole(KeylolRoles.Operator); if (isKeylolOperator) { if (string.IsNullOrWhiteSpace(requestDto.EnglishName)) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.EnglishName), Errors.Required)); } if (requestDto.PreferredName == null) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.PreferredName), Errors.Required)); } if (string.IsNullOrWhiteSpace(requestDto.IdCode)) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.IdCode), Errors.Required)); } if (!Regex.IsMatch(requestDto.IdCode, @"^[A-Z0-9]{5}$")) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.IdCode), Errors.Invalid)); } if (requestDto.IdCode != normalPoint.IdCode && await _dbContext.NormalPoints.AnyAsync(u => u.IdCode == requestDto.IdCode)) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.IdCode), Errors.Duplicate)); } normalPoint.EnglishName = requestDto.EnglishName; normalPoint.IdCode = requestDto.IdCode; normalPoint.PreferredName = requestDto.PreferredName.Value; if (normalPoint.Type == NormalPointType.Genre || normalPoint.Type == NormalPointType.Manufacturer) { if (requestDto.NameInSteamStore == null) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.NameInSteamStore), Errors.Required)); } var nameStrings = requestDto.NameInSteamStore.Split(';') .Select(n => n.Trim()) .Where(n => !string.IsNullOrWhiteSpace(n)); var names = new List <SteamStoreName>(); foreach (var nameString in nameStrings) { var name = await _dbContext.SteamStoreNames.Where(n => n.Name == nameString).SingleOrDefaultAsync() ?? _dbContext.SteamStoreNames.Create(); name.Name = nameString; names.Add(name); } normalPoint.SteamStoreNames = names; } } normalPoint.BackgroundImage = requestDto.BackgroundImage; normalPoint.AvatarImage = requestDto.AvatarImage; normalPoint.ChineseName = requestDto.ChineseName; normalPoint.ChineseAliases = requestDto.ChineseAliases; normalPoint.EnglishAliases = requestDto.EnglishAliases; normalPoint.Description = requestDto.Description.Length > 256 ? requestDto.Description.Substring(0, 256) : requestDto.Description; if ((normalPoint.Type == NormalPointType.Game || normalPoint.Type == NormalPointType.Hardware) && !await PopulateGamePointAttributes(normalPoint, requestDto, isKeylolOperator, true)) { return(BadRequest(ModelState)); } await _dbContext.SaveChangesAsync(); return(Ok()); }
public async Task <IHttpActionResult> CreateOneManually( [NotNull] NormalPointCreateOrUpdateOneRequestDto requestDto) { if (string.IsNullOrWhiteSpace(requestDto.IdCode)) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.IdCode), Errors.Required)); } if (!Regex.IsMatch(requestDto.IdCode, @"^[A-Z0-9]{5}$")) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.IdCode), Errors.Invalid)); } if (await _dbContext.NormalPoints.AnyAsync(u => u.IdCode == requestDto.IdCode)) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.IdCode), Errors.Duplicate)); } if (string.IsNullOrWhiteSpace(requestDto.EnglishName)) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.EnglishName), Errors.Required)); } if (requestDto.PreferredName == null) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.PreferredName), Errors.Required)); } if (requestDto.Type == null) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.Type), Errors.Required)); } if (!Helpers.IsTrustedUrl(requestDto.BackgroundImage)) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.BackgroundImage), Errors.Invalid)); } if (!Helpers.IsTrustedUrl(requestDto.AvatarImage)) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.AvatarImage), Errors.Invalid)); } var normalPoint = _dbContext.NormalPoints.Create(); normalPoint.IdCode = requestDto.IdCode; normalPoint.BackgroundImage = requestDto.BackgroundImage; normalPoint.AvatarImage = requestDto.AvatarImage; normalPoint.ChineseName = requestDto.ChineseName; normalPoint.EnglishName = requestDto.EnglishName; normalPoint.PreferredName = requestDto.PreferredName.Value; normalPoint.ChineseAliases = requestDto.ChineseAliases; normalPoint.EnglishAliases = requestDto.EnglishAliases; normalPoint.Type = requestDto.Type.Value; normalPoint.Description = requestDto.Description; if (requestDto.Type.Value == NormalPointType.Genre || requestDto.Type.Value == NormalPointType.Manufacturer) { if (requestDto.NameInSteamStore == null) { return(this.BadRequest(nameof(requestDto), nameof(requestDto.NameInSteamStore), Errors.Required)); } var nameStrings = requestDto.NameInSteamStore.Split(';') .Select(n => n.Trim()) .Where(n => !string.IsNullOrWhiteSpace(n)); var names = new List <SteamStoreName>(); foreach (var nameString in nameStrings) { var name = await _dbContext.SteamStoreNames.Where(n => n.Name == nameString).SingleOrDefaultAsync() ?? _dbContext.SteamStoreNames.Create(); name.Name = nameString; names.Add(name); } normalPoint.SteamStoreNames = names; } if ((normalPoint.Type == NormalPointType.Game || normalPoint.Type == NormalPointType.Hardware) && !await PopulateGamePointAttributes(normalPoint, requestDto, User.IsInRole(KeylolRoles.Operator))) { return(BadRequest(ModelState)); } _dbContext.NormalPoints.Add(normalPoint); await _dbContext.SaveChangesAsync(); return(Created($"normal-point/{normalPoint.Id}", new NormalPointDto(normalPoint))); }