0
0

Base Deleting

This commit is contained in:
Sergey Chebotar 2023-03-02 08:02:02 +03:00
parent 607d029030
commit cdd58a8f51
2 changed files with 147 additions and 126 deletions

View File

@ -1,132 +1,145 @@
using System.Data; using System.Data;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using MyDarling.Models; using MyDarling.Models;
namespace MyDarling.Controllers namespace MyDarling.Controllers
{ {
public class BundleController : Controller public class BundleController : Controller
{ {
private DataContext context; private DataContext context;
private IWebHostEnvironment environment; private IWebHostEnvironment environment;
public BundleController(DataContext context, IWebHostEnvironment environment) public BundleController(DataContext context, IWebHostEnvironment environment)
{ {
this.environment = environment; this.environment = environment;
this.context = context; this.context = context;
} }
public ActionResult Index() public ActionResult Index()
{ {
return View(context.UnderwearBundles.Include(b => b.Figures)); return View(context.UnderwearBundles.Include(b => b.Figures));
} }
public ActionResult Create() public ActionResult Create()
{ {
return View(); return View();
} }
[HttpPost] [HttpPost]
public async Task<ActionResult> Create([Bind] UnderwearBundle bundle) public async Task<ActionResult> Create([Bind] UnderwearBundle bundle)
{ {
try try
{ {
if (ModelState.IsValid) if (ModelState.IsValid)
{ {
await context.UnderwearBundles.AddAsync(bundle); await context.UnderwearBundles.AddAsync(bundle);
context.SaveChanges(); context.SaveChanges();
return RedirectToAction(nameof(Index)); return RedirectToAction(nameof(Index));
} }
} }
catch (DataException) catch (DataException)
{ {
ModelState.AddModelError("", "Unable to save changes"); ModelState.AddModelError("", "Unable to save changes");
} }
return View(bundle); return View(bundle);
} }
public async Task<ActionResult> Details(int id) public async Task<ActionResult> Details(int id)
{ {
return View(await context.UnderwearBundles.Include(b => b.Figures).Where(b => b.Id == id).FirstOrDefaultAsync()); return View(await context.UnderwearBundles.Include(b => b.Figures).Where(b => b.Id == id).FirstOrDefaultAsync());
} }
public async Task<ActionResult> Edit(int id) public async Task<ActionResult> Edit(int id)
{ {
return View(nameof(Details), await context.UnderwearBundles.FindAsync(id)); return View(nameof(Details), await context.UnderwearBundles.FindAsync(id));
} }
[HttpPost] [HttpPost]
public async Task<ActionResult> Edit(int? id) public async Task<ActionResult> Edit(int? id)
{ {
if (id == null) if (id == null)
{ {
return NotFound(); return NotFound();
} }
var bundle = await context.UnderwearBundles.FindAsync(id); var bundle = await context.UnderwearBundles.FindAsync(id);
if (bundle == null) if (bundle == null)
{ {
return NotFound(); return NotFound();
} }
var file = Request.Form.Files.FirstOrDefault(); var file = Request.Form.Files.FirstOrDefault();
if (await TryUpdateModelAsync<UnderwearBundle>( if (await TryUpdateModelAsync<UnderwearBundle>(
bundle, bundle,
"", "",
b => b.Name, b => b.Description, b => b.Figures, b => b.Price)) b => b.Name, b => b.Description, b => b.Figures, b => b.Price))
{ {
if (file != null) if (file != null)
{ {
var newFigure = new Figure(); var newFigure = new Figure();
bundle.Figures.Add(newFigure); bundle.Figures.Add(newFigure);
newFigure.FilePath = $"/Content/{bundle.Id}/{Guid.NewGuid()}{Path.GetExtension(file.FileName)}"; newFigure.FilePath = $"/Content/{bundle.Id}/{Guid.NewGuid()}{Path.GetExtension(file.FileName)}";
var savePath = environment.WebRootPath + "/Content/" + bundle.Id + "/"; var savePath = environment.WebRootPath + "/Content/" + bundle.Id + "/";
if (!Directory.Exists(savePath)) if (!Directory.Exists(savePath))
{ {
Directory.CreateDirectory(savePath); Directory.CreateDirectory(savePath);
} }
using var fileStream = new FileStream(environment.WebRootPath + newFigure.FilePath, FileMode.Create); using var fileStream = new FileStream(environment.WebRootPath + newFigure.FilePath, FileMode.Create);
await file.CopyToAsync(fileStream); await file.CopyToAsync(fileStream);
} }
try try
{ {
await context.SaveChangesAsync(); await context.SaveChangesAsync();
return RedirectToAction(nameof(Index)); return RedirectToAction(nameof(Index));
} }
catch (System.Exception) catch (System.Exception)
{ {
ModelState.AddModelError("", "Unable to save changes"); ModelState.AddModelError("", "Unable to save changes");
} }
} }
return View(bundle); return View(bundle);
} }
[HttpPost] [HttpPost]
public async Task<ActionResult> Delete(int id) public async Task<ActionResult> Delete(int id)
{ {
var bundleToDelete = await context.UnderwearBundles.FindAsync(id); var bundleToDelete = await context.UnderwearBundles.FindAsync(id);
if (bundleToDelete == null) if (bundleToDelete == null)
{ {
return NotFound(); return NotFound();
} }
try try
{ {
context.UnderwearBundles.Remove(bundleToDelete); var bundleDirPath = String.Concat(environment.WebRootPath,
await context.SaveChangesAsync(); "/Content/",
return RedirectToAction(nameof(Index)); bundleToDelete.Id);
}
catch (DbUpdateException) if (Directory.Exists(bundleDirPath))
{ {
return RedirectToAction(nameof(Delete), new { id = id, saveChangesError = true }); Directory.Delete(bundleDirPath, true);
} }
} // foreach (var figure in bundleToDelete.Figures)
} // {
// using FigureController controller = new(context, environment);
// await controller.Delete(figure.Id);
// }
context.UnderwearBundles.Remove(bundleToDelete);
await context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
catch (DbUpdateException)
{
return RedirectToAction(nameof(Delete), new { id = id, saveChangesError = true });
}
}
}
} }

View File

@ -8,9 +8,11 @@ namespace MyDarling.Controllers
public class FigureController : Controller public class FigureController : Controller
{ {
private DataContext context; private DataContext context;
public FigureController(DataContext context) private IWebHostEnvironment environment;
public FigureController(DataContext context, IWebHostEnvironment environment)
{ {
this.context = context; this.context = context;
this.environment = environment;
} }
public async Task<IActionResult> Details(int id) public async Task<IActionResult> Details(int id)
@ -56,24 +58,30 @@ namespace MyDarling.Controllers
} }
[HttpPost] [HttpPost]
public async Task<ActionResult> Delete(int id) public async Task<ActionResult> Delete(int id)
{ {
var figureToDelete = await context.Figures.FindAsync(id); var figureToDelete = await context.Figures.FindAsync(id);
if (figureToDelete == null) if (figureToDelete == null)
{ {
return NotFound(); return NotFound();
} }
try try
{ {
context.Figures.Remove(figureToDelete); FileInfo figureFile = new FileInfo(environment.WebRootPath + figureToDelete.FilePath);
await context.SaveChangesAsync(); if (figureFile.Exists)
return RedirectToAction(nameof(Index), "Bundle"); {
} figureFile.Delete();
catch (DbUpdateException) }
{
return RedirectToAction(nameof(Delete), new { id = id, saveChangesError = true }); context.Figures.Remove(figureToDelete);
} await context.SaveChangesAsync();
} return RedirectToAction(nameof(Index), "Bundle");
}
catch (DbUpdateException)
{
return RedirectToAction(nameof(Delete), new { id = id, saveChangesError = true });
}
}
} }
} }