diff options
Diffstat (limited to 'src/Enmarcha.Backend/Controllers/Backoffice')
4 files changed, 143 insertions, 0 deletions
diff --git a/src/Enmarcha.Backend/Controllers/Backoffice/AlertsApiController.cs b/src/Enmarcha.Backend/Controllers/Backoffice/AlertsApiController.cs new file mode 100644 index 0000000..fe425d4 --- /dev/null +++ b/src/Enmarcha.Backend/Controllers/Backoffice/AlertsApiController.cs @@ -0,0 +1,14 @@ +using Enmarcha.Backend.Services; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Enmarcha.Backend.Controllers.Backoffice; + +[Route("backoffice/api")] +[Authorize(AuthenticationSchemes = "Backoffice")] +public class AlertsApiController(BackofficeSelectorService selectors) : ControllerBase +{ + [HttpGet("selectors/transit")] + public async Task<IActionResult> GetTransit() => + Ok(await selectors.GetTransitDataAsync()); +} 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<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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)); + } +} diff --git a/src/Enmarcha.Backend/Controllers/Backoffice/BackofficeController.cs b/src/Enmarcha.Backend/Controllers/Backoffice/BackofficeController.cs new file mode 100644 index 0000000..a3c41dc --- /dev/null +++ b/src/Enmarcha.Backend/Controllers/Backoffice/BackofficeController.cs @@ -0,0 +1,18 @@ +using Enmarcha.Backend.Data; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; + +namespace Enmarcha.Backend.Controllers.Backoffice; + +[Route("backoffice")] +[Authorize(AuthenticationSchemes = "Backoffice")] +public class BackofficeController(AppDbContext db) : Controller +{ + [HttpGet("")] + public async Task<IActionResult> Index() + { + ViewData["AlertCount"] = await db.ServiceAlerts.CountAsync(); + return View(); + } +} diff --git a/src/Enmarcha.Backend/Controllers/Backoffice/LoginController.cs b/src/Enmarcha.Backend/Controllers/Backoffice/LoginController.cs new file mode 100644 index 0000000..1e9f12f --- /dev/null +++ b/src/Enmarcha.Backend/Controllers/Backoffice/LoginController.cs @@ -0,0 +1,28 @@ +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Enmarcha.Backend.Controllers.Backoffice; + +[Route("backoffice/auth")] +public class LoginController : Controller +{ + [HttpGet("login")] + [AllowAnonymous] + public IActionResult Login(string returnUrl = "/backoffice") + { + return Challenge(new AuthenticationProperties { RedirectUri = returnUrl }, "Auth0"); + } + + [HttpPost("logout")] + [ValidateAntiForgeryToken] + [Authorize(AuthenticationSchemes = "Backoffice")] + public IActionResult Logout() + { + return SignOut( + new AuthenticationProperties { RedirectUri = "/backoffice" }, + "Backoffice", + "Auth0"); + } +} + |
