summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Controllers/BundleController.cs110
-rw-r--r--Controllers/BundlesController.cs47
-rw-r--r--Controllers/HomeController.cs8
-rw-r--r--Models/IRepository.cs10
-rw-r--r--Models/MyDarlingRepository.cs32
-rw-r--r--Program.cs2
-rw-r--r--Views/Bundle/Create.cshtml (renamed from Views/Bundles/Add.cshtml)4
-rw-r--r--Views/Bundle/Details.cshtml34
-rw-r--r--Views/Bundle/Index.cshtml (renamed from Views/Bundles/Index.cshtml)10
-rw-r--r--Views/Bundles/Edit.cshtml34
-rw-r--r--Views/Home/_Projects.cshtml4
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
diff --git a/Program.cs b/Program.cs
index 2d52ee9..5309b9f 100644
--- a/Program.cs
+++ b/Program.cs
@@ -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">