using Microsoft.AspNetCore.Mvc; using PlotLine.Services; namespace PlotLine.Controllers; public sealed class DynamicsController(IDynamicsService dynamics) : Controller { public async Task Story(int projectId) { var model = await dynamics.GetStoryDynamicsAsync(projectId); return model is null ? NotFound() : View(model); } public async Task Character(int id) { var model = await dynamics.GetCharacterArcAsync(id); return model is null ? NotFound() : View(model); } public async Task Relationship(int id) { var model = await dynamics.GetRelationshipEvolutionAsync(id); return model is null ? NotFound() : View(model); } public async Task Knowledge(int id) { var model = await dynamics.GetKnowledgeTimelineAsync(id); return model is null ? NotFound() : View(model); } [HttpPost] [ValidateAntiForgeryToken] public async Task RunChecks(int projectId, int? bookId, int? sceneId) { await dynamics.RunContinuityChecksAsync(projectId, bookId, sceneId); return RedirectToAction(nameof(Story), new { projectId }); } }