diff options
-rw-r--r-- | Controllers/BundleController.cs | 110 | ||||
-rw-r--r-- | Controllers/BundlesController.cs | 47 | ||||
-rw-r--r-- | Controllers/HomeController.cs | 8 | ||||
-rw-r--r-- | Models/IRepository.cs | 10 | ||||
-rw-r--r-- | Models/MyDarlingRepository.cs | 32 | ||||
-rw-r--r-- | Program.cs | 2 | ||||
-rw-r--r-- | Views/Bundle/Create.cshtml (renamed from Views/Bundles/Add.cshtml) | 4 | ||||
-rw-r--r-- | Views/Bundle/Details.cshtml | 34 | ||||
-rw-r--r-- | Views/Bundle/Index.cshtml (renamed from Views/Bundles/Index.cshtml) | 10 | ||||
-rw-r--r-- | Views/Bundles/Edit.cshtml | 34 | ||||
-rw-r--r-- | Views/Home/_Projects.cshtml | 4 |
11 files changed, 157 insertions, 138 deletions
diff --git a/Controllers/BundleController.cs b/Controllers/BundleController.cs new file mode 100644 index 0000000..8e72dd3 --- /dev/null +++ b/Controllers/BundleController.cs @@ -0,0 +1,110 @@ +using System.Data; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using MyDarling.Models; + +namespace MyDarling.Controllers +{ + public class BundleController : Controller + { + private DataContext context; + public bool TryUpdateModel { get; private set; } + + public BundleController(DataContext context) + { + this.context = context; + } + + public ActionResult Index() + { + return View(context.UnderwearBundles.Include(b => b.Figures)); + } + + public ActionResult Create() + { + return View(); + } + + [HttpPost] + public async Task<ActionResult> Create([Bind] UnderwearBundle bundle) + { + try + { + if (ModelState.IsValid) + { + await context.UnderwearBundles.AddAsync(bundle); + context.SaveChanges(); + return RedirectToAction(nameof(Index)); + } + } + catch (DataException) + { + ModelState.AddModelError("", "Unable to save changes"); + } + return View(bundle); + } + + public async Task<ActionResult> Details(int id) + { + return View(await context.UnderwearBundles.FindAsync(id)); + } + + public async Task<ActionResult> Edit(int id) + { + return View(nameof(Details), await context.UnderwearBundles.FindAsync(id)); + } + + [HttpPost] + public async Task<ActionResult> Edit(int? id) + { + if (id == null) + { + return NotFound(); + } + + var bundle = await context.UnderwearBundles.FindAsync(id); + if (bundle == null) + { + return NotFound(); + } + + if (await TryUpdateModelAsync<UnderwearBundle>( + bundle, + "", + b => b.Name, b => b.Description, b => b.Price)) + { + try + { + await context.SaveChangesAsync(); + return RedirectToAction(nameof(Index)); + } + catch (System.Exception) + { + ModelState.AddModelError("", "Unable to save changes"); + } + } + return View(bundle); + } + + [HttpPost] + public async Task<ActionResult> Delete(int id) + { + var bundleToDelete = await context.UnderwearBundles.FindAsync(id); + if (bundleToDelete == null) + { + return NotFound(); + } + + try + { + context.UnderwearBundles.Remove(bundleToDelete); + await context.SaveChangesAsync(); + return RedirectToAction(nameof(Index)); + } + catch(DbUpdateException) + { + return RedirectToAction(nameof(Delete), new {id = id, saveChangesError = true}); + } + } + } +}
\ No newline at end of file diff --git a/Controllers/BundlesController.cs b/Controllers/BundlesController.cs deleted file mode 100644 index aeefebb..0000000 --- a/Controllers/BundlesController.cs +++ /dev/null @@ -1,47 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using Microsoft.EntityFrameworkCore; -using MyDarling.Models; - -namespace MyDarling.Controllers -{ - public class BundlesController : Controller - { - private IRepository repository; - - public BundlesController(IRepository repository) - { - this.repository = repository; - } - - public ActionResult Index() - { - return View(repository); - } - - public ActionResult Edit(int id) - { - return View(repository.Bundles.Where(b => b.Id == id).FirstOrDefault()); - } - - public ActionResult Delete(int id) - { - var bundle = repository.Bundles.Where(b => b.Id == id).FirstOrDefault(); - if (bundle != null) - { - repository.Remove(bundle); - } - return RedirectToAction("Index"); - } - - public ActionResult Add() - { - return View(); - } - [HttpPost] - public ActionResult Add(UnderwearBundle b) - { - repository.Add(b); - return RedirectToAction("Index"); - } - } -}
\ No newline at end of file diff --git a/Controllers/HomeController.cs b/Controllers/HomeController.cs index 228a9c3..028322c 100644 --- a/Controllers/HomeController.cs +++ b/Controllers/HomeController.cs @@ -6,14 +6,14 @@ namespace MyDarling.Controllers { public class HomeController : Controller { - private IRepository repository; - public HomeController(IRepository repository) + private DataContext context; + public HomeController(DataContext context) { - this.repository = repository; + this.context = context; } public IActionResult Index() { - return View(repository); + return View(context.UnderwearBundles.Include(b => b.Figures)); } } }
\ No newline at end of file diff --git a/Models/IRepository.cs b/Models/IRepository.cs deleted file mode 100644 index 363f48d..0000000 --- a/Models/IRepository.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace MyDarling.Models -{ - public interface IRepository - { - public IQueryable<UnderwearBundle> Bundles { get; } - public void Add(UnderwearBundle b); - public void Remove(UnderwearBundle p); - public void Save(); - } -}
\ No newline at end of file diff --git a/Models/MyDarlingRepository.cs b/Models/MyDarlingRepository.cs deleted file mode 100644 index 15f058c..0000000 --- a/Models/MyDarlingRepository.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace MyDarling.Models -{ - public class MyDarlingRepository : IRepository - { - private DataContext DbContext { get; } - public MyDarlingRepository(IServiceProvider provider) - { - DbContext = provider.CreateScope().ServiceProvider.GetRequiredService<DataContext>(); - } - - public IQueryable<UnderwearBundle> Bundles => DbContext.UnderwearBundles.Include(b => b.Figures); - - public void Add(UnderwearBundle b) - { - DbContext.UnderwearBundles.Add(b); - DbContext.SaveChanges(); - } - - public void Remove(UnderwearBundle b) - { - DbContext.UnderwearBundles.Remove(b); - DbContext.SaveChanges(); - } - - public void Save() - { - DbContext.SaveChanges(); - } - } -}
\ No newline at end of file @@ -8,7 +8,7 @@ builder.Services.AddDbContext<DataContext>(opts => opts.UseSqlite(builder.Configuration["ConnectionStrings:MyDarlingDb"]); opts.EnableSensitiveDataLogging(true); }); -builder.Services.AddSingleton<IRepository, MyDarlingRepository>(); +// builder.Services.AddSingleton<IRepository, MyDarlingRepository>(); builder.Services.AddControllersWithViews(); var app = builder.Build(); diff --git a/Views/Bundles/Add.cshtml b/Views/Bundle/Create.cshtml index 36b329b..4afc5e1 100644 --- a/Views/Bundles/Add.cshtml +++ b/Views/Bundle/Create.cshtml @@ -11,7 +11,7 @@ <body> <container> - <form asp-action="Add" method="post" class="m-2"> + <form asp-action="Create" method="post" class="m-2"> <div asp-validation-summary="All"></div> <div class="form-group"> <label asp-for="Name" class="form-label">Name:</label> @@ -23,7 +23,7 @@ </div> <div class="form-group"> <label asp-for="Price" class="form-label">Price:</label> - <input asp-for="Price" type="number" class="form-control" /> + <input asp-for="Price" class="form-control" /> </div> <button type="submit" class="btn btn-primary mt-3">Submit</button> </form> diff --git a/Views/Bundle/Details.cshtml b/Views/Bundle/Details.cshtml new file mode 100644 index 0000000..edaec11 --- /dev/null +++ b/Views/Bundle/Details.cshtml @@ -0,0 +1,34 @@ +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers +@model MyDarling.Models.UnderwearBundle + +<!DOCTYPE html> +<html> + +<head> + <title>Bundles list</title> + <link href="/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" /> +</head> + +<body> + <container> + <form asp-action="Edit" asp-route-id="@Model.Id" method="post" class="m-2"> + <div asp-validation-summary="All"></div> + <div class="form-group"> + <label asp-for="Name" class="form-label">Name:</label> + <input asp-for="Name" class="form-control" /> + </div> + <div class="form-group"> + <label asp-for="Description" class="form-label">Descrition:</label> + @Html.TextAreaFor(model => model.Description, new { @class="form-control", @rows = 4 }) + </div> + <div class="form-group"> + <label asp-for="Price" class="form-label">Price:</label> + <input asp-for="Price" class="form-control" /> + </div> + <button type="submit" class="btn btn-primary mt-3">Save</button> + <button asp-action="Delete" asp-route-id="@Model.Id" method="post" class="btn btn-primary mt-3">Delete</button> + </form> + </container> +</body> + +</html>
\ No newline at end of file diff --git a/Views/Bundles/Index.cshtml b/Views/Bundle/Index.cshtml index 01c5a31..678caf0 100644 --- a/Views/Bundles/Index.cshtml +++ b/Views/Bundle/Index.cshtml @@ -1,5 +1,5 @@ @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers -@model MyDarling.Models.IRepository +@model IQueryable<MyDarling.Models.UnderwearBundle> <!DOCTYPE html> <html> @@ -18,23 +18,21 @@ <th scope="col">Name</th> <th scope="col">Descrition</th> <th scope="col">Price</th> - <th scope="col">Actions</th> </tr> </thead> <tbody> - @foreach (var bundle in Model.Bundles) + @foreach (var bundle in Model) { <tr> <th scope="row">@bundle.Id</th> - <td><a asp-action="Edit" asp-route-id="@bundle.Id">@bundle.Name</a></td> + <td><a asp-action="Details" asp-route-id="@bundle.Id">@bundle.Name</a></td> <td>@bundle.Description</td> <td>@bundle.Price</td> - <td><a asp-action="Delete" asp-route-id="@bundle.Id">Delete</a></td> </tr> } </tbody> </table> - <a asp-action="Add">Add bundle</a> + <a asp-action="Create">Add bundle</a> </container> </body> diff --git a/Views/Bundles/Edit.cshtml b/Views/Bundles/Edit.cshtml deleted file mode 100644 index 60a2420..0000000 --- a/Views/Bundles/Edit.cshtml +++ /dev/null @@ -1,34 +0,0 @@ -@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers - -<!DOCTYPE html> -<html> - -<head> - <title>Bundles list</title> - <link href="/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" /> -</head> - -<body> - <container> - <table class="table table-striped"> - <thead> - <tr> - <th scope="col">#</th> - <th scope="col">Name</th> - <th scope="col">Descrition</th> - <th scope="col">Price</th> - </tr> - </thead> - <tbody> - <tr> - <th scope="row">@Model.Id</th> - <td>@Model.Name</a></td> - <td>@Model.Description</td> - <td>@Model.Price</td> - </tr> - </tbody> - </table> - </container> -</body> - -</html>
\ No newline at end of file diff --git a/Views/Home/_Projects.cshtml b/Views/Home/_Projects.cshtml index 314a9f0..0603c06 100644 --- a/Views/Home/_Projects.cshtml +++ b/Views/Home/_Projects.cshtml @@ -1,10 +1,10 @@ -@model MyDarling.Models.IRepository; +@model IQueryable<MyDarling.Models.UnderwearBundle>; @using System.Globalization; <section class="projects-section bg-light" id="projects"> <div class="container px-3 px-lg-4 mt-4"> <div class="row gx-4 gx-lg-5 row-cols-2 row-cols-md-3 row-cols-xl-4 justify-content-center"> - @foreach (var bundle in @Model.Bundles.Where(b => b.Price != 0)) + @foreach (var bundle in @Model.Where(b => b.Price != 0)) { <div class="col mb-5"> <div class="card h-100"> |