From 95aae9115623ee81561aef9da718ec487704928b Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Sun, 5 Sep 2021 17:10:50 +0100 Subject: [PATCH] Refactorisation of deletion --- .../Controllers/PackageVersionController.cs | 40 ++++++++++--------- src/isnd/Interfaces/IPackageManager.cs | 2 + src/isnd/Services/PackageManager.cs | 3 +- src/isnd/ViewModels/DeletePackageReport.cs | 4 ++ src/isnd/Views/PackageVersion/Delete.cshtml | 1 + src/isnd/Views/PackageVersion/Index.cshtml | 4 +- 6 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/isnd/Controllers/PackageVersionController.cs b/src/isnd/Controllers/PackageVersionController.cs index cf06584..f4483e0 100644 --- a/src/isnd/Controllers/PackageVersionController.cs +++ b/src/isnd/Controllers/PackageVersionController.cs @@ -7,23 +7,28 @@ using Microsoft.EntityFrameworkCore; using isnd.Data; using isnd.ViewModels; using isnd.Helpers; +using isnd.Interfaces; + namespace isnd { [AllowAnonymous] public class PackageVersionController : Controller { private readonly ApplicationDbContext _context; + private readonly IPackageManager _pm; - public PackageVersionController(ApplicationDbContext context) + public PackageVersionController(ApplicationDbContext context, + IPackageManager pm) { _context = context; + _pm = pm; } // GET: PackageVersion public async Task Index(PackageVersionIndexViewModel model) { var applicationDbContext = _context.PackageVersions.Include(p => p.Package).Where( - p => ( model.Prerelease || !p.IsPrerelease) + p => (model.Prerelease || !p.IsPrerelease) && ((model.PackageId == null) || p.PackageId.StartsWith(model.PackageId))); model.Versions = await applicationDbContext.ToArrayAsync(); return View(model); @@ -63,40 +68,39 @@ namespace isnd } [Authorize] - public async Task Delete(string pkgid, string version) + public async Task Delete(string pkgid, string version, string pkgtype) { if (pkgid == null || version == null) { return NotFound(); } - var packageVersion = await _context.PackageVersions - .Include(p => p.Package) - .FirstOrDefaultAsync(m => m.PackageId == pkgid && m.FullString == version); - if (packageVersion == null) - { - return NotFound(); - } - + var packageVersion = await _context.PackageVersions.Include(p => p.Package) + .FirstOrDefaultAsync(m => m.PackageId == pkgid + && m.FullString == version && m.Type == pkgtype); + if (packageVersion == null) return NotFound(); if (!User.IsOwner(packageVersion)) return Unauthorized(); - - return View(packageVersion); + var pkg = await _pm.GetPackageAsync(pkgid, version, pkgtype); + return View(pkg); } // POST: PackageVersion/Delete/5 [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] - public async Task DeleteConfirmed(string PackageId, string FullString) + public async Task DeleteConfirmed(string PackageId, string FullString, + string Type) { - var packageVersion = await _context.PackageVersions.Include(p => p.Package) - .FirstOrDefaultAsync(m => m.PackageId == PackageId && m.FullString == FullString); + PackageVersion packageVersion = await _context.PackageVersions.Include(p => p.Package) + .FirstOrDefaultAsync(m => m.PackageId == PackageId + && m.FullString == FullString && m.Type == Type); if (packageVersion == null) return NotFound(); if (!User.IsOwner(packageVersion)) return Unauthorized(); - _context.PackageVersions.Remove(packageVersion); - await _context.SaveChangesAsync(); + await _pm.DeletePackageAsync(PackageId, FullString, Type); return RedirectToAction(nameof(Index)); } + + } } diff --git a/src/isnd/Interfaces/IPackageManager.cs b/src/isnd/Interfaces/IPackageManager.cs index c8994bb..b7af9a1 100644 --- a/src/isnd/Interfaces/IPackageManager.cs +++ b/src/isnd/Interfaces/IPackageManager.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using isnd.Controllers; +using isnd.Data; using isnd.Data.Catalog; using isnd.Services; using isnd.ViewModels; @@ -19,6 +20,7 @@ namespace isnd.Interfaces IEnumerable GetResources(IUnleash unleashĈlient); void ÛpdateCatalogFor(Commit commit); Task DeletePackageAsync(string pkgId, string fullVersion, string pkgType); + Task GetPackageAsync(string pkgid, string version, string type); } } \ No newline at end of file diff --git a/src/isnd/Services/PackageManager.cs b/src/isnd/Services/PackageManager.cs index d886008..f1521d7 100644 --- a/src/isnd/Services/PackageManager.cs +++ b/src/isnd/Services/PackageManager.cs @@ -256,6 +256,7 @@ namespace isnd.Services Action = PackageAction.DeletePackage, TimeStamp = DateTime.Now }; + dbContext.Commits.Add(commit); var pkg = await dbContext.PackageVersions.SingleOrDefaultAsync( v => v.PackageId == pkgId && v.FullString == fullVersion && @@ -268,7 +269,7 @@ namespace isnd.Services dbContext.PackageVersions.Remove(pkg); await dbContext.SaveChangesAsync(); ÛpdateCatalogFor(commit); - return new PackageDeletionReport{ Deleted = true }; + return new PackageDeletionReport{ Deleted = true, DeletedVersion = pkg }; } } } \ No newline at end of file diff --git a/src/isnd/ViewModels/DeletePackageReport.cs b/src/isnd/ViewModels/DeletePackageReport.cs index 3b4c5ab..eba5bd5 100644 --- a/src/isnd/ViewModels/DeletePackageReport.cs +++ b/src/isnd/ViewModels/DeletePackageReport.cs @@ -1,7 +1,11 @@ +using isnd.Data; + namespace isnd.ViewModels { public class PackageDeletionReport { public bool Deleted { get; set; } + + public PackageVersion DeletedVersion { get; set; } } } \ No newline at end of file diff --git a/src/isnd/Views/PackageVersion/Delete.cshtml b/src/isnd/Views/PackageVersion/Delete.cshtml index d1b47d2..8a2074d 100644 --- a/src/isnd/Views/PackageVersion/Delete.cshtml +++ b/src/isnd/Views/PackageVersion/Delete.cshtml @@ -46,6 +46,7 @@
+ | Back to List
diff --git a/src/isnd/Views/PackageVersion/Index.cshtml b/src/isnd/Views/PackageVersion/Index.cshtml index 800ae0e..4f13d48 100644 --- a/src/isnd/Views/PackageVersion/Index.cshtml +++ b/src/isnd/Views/PackageVersion/Index.cshtml @@ -59,8 +59,8 @@ @Html.DisplayFor(modelItem => item.IsPrerelease) - @Html.ActionLink("Details", "Details", new { pkgid = item.PackageId, version = item.FullString }) | - @Html.ActionLink("Delete", "Delete", new { pkgid = item.PackageId, version = item.FullString }) + @Html.ActionLink("Details", "Details", new { pkgid = item.PackageId, version = item.FullString, pkgtype = item.Type }) | + @Html.ActionLink("Delete", "Delete", new { pkgid = item.PackageId, version = item.FullString, pkgtype = item.Type }) }