Refactorisation of deletion

broken/ef
Paul Schneider 3 years ago
parent 6dd76ac1a5
commit 95aae91156
6 changed files with 33 additions and 21 deletions

@ -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<IActionResult> 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<IActionResult> Delete(string pkgid, string version)
public async Task<IActionResult> 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<IActionResult> DeleteConfirmed(string PackageId, string FullString)
public async Task<IActionResult> 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));
}
}
}

@ -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<Resource> GetResources(IUnleash unleashĈlient);
void ÛpdateCatalogFor(Commit commit);
Task<PackageDeletionReport> DeletePackageAsync(string pkgId, string fullVersion, string pkgType);
Task<PackageVersion> GetPackageAsync(string pkgid, string version, string type);
}
}

@ -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 };
}
}
}

@ -1,7 +1,11 @@
using isnd.Data;
namespace isnd.ViewModels
{
public class PackageDeletionReport
{
public bool Deleted { get; set; }
public PackageVersion DeletedVersion { get; set; }
}
}

@ -46,6 +46,7 @@
<form asp-action="Delete">
<input type="hidden" asp-for="PackageId" />
<input type="hidden" asp-for="FullString" />
<input type="hidden" asp-for="Type" />
<input type="submit" value="Delete" class="btn btn-default" /> |
<a asp-action="Index">Back to List</a>
</form>

@ -59,8 +59,8 @@
@Html.DisplayFor(modelItem => item.IsPrerelease)
</td>
<td>
@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 })
</td>
</tr>
}

Loading…