using Microsoft.AspNetCore.Mvc; using PlotLine.Services; using PlotLine.ViewModels; namespace PlotLine.Controllers; public sealed class StoryAssetsController(IAssetService assets) : Controller { public async Task Index(int projectId) { var model = await assets.GetAssetsAsync(projectId); return model is null ? NotFound() : View(model); } public async Task Create(int projectId) { var model = await assets.GetCreateAssetAsync(projectId); return model is null ? NotFound() : View("Edit", model); } public async Task Edit(int id) { var model = await assets.GetEditAssetAsync(id); return model is null ? NotFound() : View(model); } public async Task Details(int id) { var model = await assets.GetAssetDetailAsync(id); return model is null ? NotFound() : View(model); } [HttpPost] [ValidateAntiForgeryToken] public async Task Save(StoryAssetEditViewModel model) { if (!ModelState.IsValid) { return View("Edit", model); } var assetId = await assets.SaveAssetAsync(model); return RedirectToAction(nameof(Details), new { id = assetId }); } [HttpPost] [ValidateAntiForgeryToken] public async Task Archive(int id, int projectId) { await assets.ArchiveAssetAsync(id); return RedirectToAction(nameof(Index), new { projectId }); } [HttpPost] [ValidateAntiForgeryToken] public async Task AddDependency(AssetDependencyEditViewModel model, int returnAssetId) { await assets.SaveDependencyAsync(model); return RedirectToAction(nameof(Details), new { id = returnAssetId }); } [HttpPost] [ValidateAntiForgeryToken] public async Task DeleteDependency(int id, int returnAssetId) { await assets.DeleteDependencyAsync(id); return RedirectToAction(nameof(Details), new { id = returnAssetId }); } }