Add base crud actions for bundles
This commit is contained in:
parent
c740669676
commit
3c83f9f4b0
110
Controllers/BundleController.cs
Normal file
110
Controllers/BundleController.cs
Normal file
@ -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});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
@ -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();
|
||||
|
@ -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>
|
34
Views/Bundle/Details.cshtml
Normal file
34
Views/Bundle/Details.cshtml
Normal file
@ -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>
|
@ -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>
|
||||
|
@ -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>
|
@ -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">
|
||||
|
Loading…
Reference in New Issue
Block a user