From bee85bf92aab84087798ffa9f3f16336acef2fce Mon Sep 17 00:00:00 2001 From: Ariel Costas Guerrero Date: Thu, 19 Mar 2026 18:56:34 +0100 Subject: Basic backoffice for alert management --- .../Controllers/Backoffice/AlertsController.cs | 83 ++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/Enmarcha.Backend/Controllers/Backoffice/AlertsController.cs (limited to 'src/Enmarcha.Backend/Controllers/Backoffice/AlertsController.cs') diff --git a/src/Enmarcha.Backend/Controllers/Backoffice/AlertsController.cs b/src/Enmarcha.Backend/Controllers/Backoffice/AlertsController.cs new file mode 100644 index 0000000..4e83abc --- /dev/null +++ b/src/Enmarcha.Backend/Controllers/Backoffice/AlertsController.cs @@ -0,0 +1,83 @@ +using Enmarcha.Backend.Data; +using Enmarcha.Backend.ViewModels; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; + +namespace Enmarcha.Backend.Controllers.Backoffice; + +[Route("backoffice/alerts")] +[Authorize(AuthenticationSchemes = "Backoffice")] +public class AlertsController(AppDbContext db) : Controller +{ + [HttpGet("")] + public async Task Index() + { + var alerts = await db.ServiceAlerts + .OrderByDescending(a => a.InsertedDate) + .ToListAsync(); + return View(alerts); + } + + [HttpGet("create")] + public IActionResult Create() => View("Edit", new AlertFormViewModel()); + + [HttpPost("create")] + [ValidateAntiForgeryToken] + public async Task CreatePost(AlertFormViewModel model) + { + if (!ModelState.IsValid) + { + return View("Edit", model); + } + + db.ServiceAlerts.Add(model.ToServiceAlert()); + await db.SaveChangesAsync(); + return RedirectToAction(nameof(Index)); + } + + [HttpGet("{id}/edit")] + public async Task Edit(string id) + { + var alert = await db.ServiceAlerts.FindAsync(id); + if (alert is null) return NotFound(); + return View(AlertFormViewModel.FromServiceAlert(alert)); + } + + [HttpPost("{id}/edit")] + [ValidateAntiForgeryToken] + public async Task EditPost(string id, AlertFormViewModel model) + { + if (!ModelState.IsValid) + { + return View("Edit", model); + } + + var alert = await db.ServiceAlerts.FindAsync(id); + if (alert is null) return NotFound(); + + model.ApplyTo(alert); + await db.SaveChangesAsync(); + return RedirectToAction(nameof(Index)); + } + + [HttpGet("{id}/delete")] + public async Task Delete(string id) + { + var alert = await db.ServiceAlerts.FindAsync(id); + if (alert is null) return NotFound(); + return View(alert); + } + + [HttpPost("{id}/delete")] + [ValidateAntiForgeryToken] + public async Task DeleteConfirm(string id) + { + var alert = await db.ServiceAlerts.FindAsync(id); + if (alert is null) return NotFound(); + + db.ServiceAlerts.Remove(alert); + await db.SaveChangesAsync(); + return RedirectToAction(nameof(Index)); + } +} -- cgit v1.3