using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using PlotLine.Services; using PlotLine.ViewModels; namespace PlotLine.Controllers; [Authorize] public sealed class PlotLinesController(IPlotService plots) : Controller { public async Task Index(int projectId) { var model = await plots.GetPlotLinesAsync(projectId); return model is null ? NotFound() : View(model); } public async Task Create(int projectId) { var model = await plots.GetCreatePlotLineAsync(projectId); return model is null ? NotFound() : View("Edit", model); } public async Task Edit(int id) { var model = await plots.GetEditPlotLineAsync(id); return model is null ? NotFound() : View(model); } [HttpPost] [ValidateAntiForgeryToken] public async Task Save(PlotLineEditViewModel model) { if (!ModelState.IsValid) { var editModel = await plots.PopulatePlotLineFormAsync(model); return editModel is null ? NotFound() : View("Edit", editModel); } await plots.SavePlotLineAsync(model); return RedirectToAction(nameof(Index), new { projectId = model.ProjectID }); } [HttpPost] [ValidateAntiForgeryToken] public async Task Archive(int id, int projectId) { await plots.ArchivePlotLineAsync(id); TempData["ArchiveMessage"] = "Plot line archived. You can restore it from Archived Items."; return RedirectToAction(nameof(Index), new { projectId }); } }