private async Task <IActionResult> ForgeVersion(string minecraftVersionId, string forgeVersionId, string action, VersionsPostViewModel model) { var minecraftVersion = await _context.MinecraftVersions.FindAsync(minecraftVersionId); if (minecraftVersion == null) { return(NotFound()); } if (!Util.IsCorrectUuid(forgeVersionId)) { return(NotFound()); } switch (action) { case "Edit": { var forgeVersion = await _context.ForgeVersions.FindAsync(forgeVersionId); if (forgeVersion == null) { return(NotFound()); } forgeVersion.Version = model.ForgeEditViewModel.Version; forgeVersion.IsRecommend = model.ForgeEditViewModel.IsRecommend; // File check if (model.ForgeEditViewModel.ForgeZipFile != null) { var file = _storageSetting.GetForgeStorageSetting().GetForgeZipFile(minecraftVersion, forgeVersion); using (var target = file.OpenWrite()) { await model.ForgeEditViewModel.ForgeZipFile.CopyToAsync(target); } } await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Versions), "Admin", new RouteValueDictionary { { "id", minecraftVersionId }, { "subaction", "" }, { "subsubaction", "" }, { "message", "success_save" } })); } } return(NotFound()); }
public async Task <IActionResult> Versions(string id, string subaction, string subsubaction, VersionsPostViewModel model) { switch (id) { case "New": { if (await _context.MinecraftVersions.AnyAsync(v => v.Version == model.NewVersionViewModel.Version)) { return(BadRequest()); } var maxRank = await _context.MinecraftVersions .AsNoTracking() .OrderByDescending(v => v.Rank) .Select(v => v.Rank + 1) .FirstOrDefaultAsync(); var now = DateTime.UtcNow; var entry = await _context.MinecraftVersions.AddAsync(new MinecraftVersion { Version = model.NewVersionViewModel.Version, DockerImageVersion = model.NewVersionViewModel.DockerImageVersion, ForgeVersions = new List <ForgeVersion>(), CreatedAt = now, UpdatedAt = now, Rank = maxRank }); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Versions), "Admin", new RouteValueDictionary { { "id", entry.Entity.Id }, { "subaction", "" }, { "message", "success_create" } })); } } if (!Util.IsCorrectUuid(id)) { return(NotFound()); } var minecraftVersion = await _context.MinecraftVersions.Include(v => v.ForgeVersions).FirstOrDefaultAsync(v => v.Id == id); switch (subaction) { case "New": { if (_context.ForgeVersions.Any(v => v.Version == model.NewForgeVersionViewModel.Version)) { return(BadRequest()); } var newForgeList = new List <ForgeVersion>(minecraftVersion.ForgeVersions); var forgeVersion = await _context.ForgeVersions.AddAsync(new ForgeVersion { Version = model.NewForgeVersionViewModel.Version, IsRecommend = model.NewForgeVersionViewModel.IsRecommend }); newForgeList.Add(forgeVersion.Entity); minecraftVersion.ForgeVersions = newForgeList; _context.MinecraftVersions.Update(minecraftVersion); await _context.SaveChangesAsync(); var file = _storageSetting.GetForgeStorageSetting().GetForgeZipFile(minecraftVersion, forgeVersion.Entity); file.Directory.Create(); using (var target = file.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite)) { await model.NewForgeVersionViewModel.ForgeZipFile.CopyToAsync(target); } return(RedirectToAction(nameof(Versions), "Admin", new RouteValueDictionary { { "id", id }, { "subaction", "" }, { "message", "success_create_forge" } })); } case "DockerImageVersion": { minecraftVersion.DockerImageVersion = model.DockerImageVersionViewModel.Version; _context.MinecraftVersions.Update(minecraftVersion); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Versions), "Admin", new RouteValueDictionary { { "id", id }, { "subaction", "" }, { "message", "success_save" } })); } default: { return(await ForgeVersion(id, subaction, subsubaction, model)); } } }