51 lines
1.6 KiB
C#
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 });
|
|
}
|
|
}
|