PlotDirector/PlotLine/Controllers/TimelineController.cs
Nick Beckley 0496c4d242 Phase 1L
2026-06-01 09:23:44 +01:00

51 lines
1.6 KiB
C#

using Microsoft.AspNetCore.Mvc;
using PlotLine.Models;
using PlotLine.Services;
using PlotLine.ViewModels;
namespace PlotLine.Controllers;
public sealed class TimelineController(ITimelineService timeline) : Controller
{
public async Task<IActionResult> Index([FromQuery] TimelineFilterViewModel filter)
{
if (filter.ProjectID == 0)
{
return BadRequest("ProjectID is required.");
}
var model = await timeline.GetAsync(filter);
return model is null ? NotFound() : View(model);
}
[HttpPost]
public async Task<IActionResult> SavePreset(TimelinePresetSaveViewModel model)
{
await timeline.SavePresetAsync(model);
return RedirectToAction(nameof(Index), new { projectId = model.ProjectID, bookId = model.BookID });
}
public async Task<IActionResult> LoadPreset(int id)
{
var preset = await timeline.GetPresetAsync(id);
if (preset is null)
{
return NotFound();
}
var filter = System.Text.Json.JsonSerializer.Deserialize<TimelineFilterViewModel>(preset.FilterJson) ?? new TimelineFilterViewModel();
filter.ProjectID = preset.ProjectID;
filter.BookID = preset.BookID;
filter.FocusType = preset.FocusType;
filter.FocusID = preset.FocusID;
return RedirectToAction(nameof(Index), filter);
}
[HttpPost]
public async Task<IActionResult> DeletePreset(int id, int projectId, int? bookId)
{
await timeline.ArchivePresetAsync(id);
return RedirectToAction(nameof(Index), new { projectId, bookId });
}
}