using Microsoft.AspNetCore.Mvc; using PlotLine.Services; using PlotLine.ViewModels; using System.Text; namespace PlotLine.Controllers; public sealed class ImportsController(IImportService imports) : Controller { public IActionResult Index() => View(new ImportIndexViewModel { JsonText = ImportIndexViewModel.SampleJson }); public IActionResult Sample() => File(Encoding.UTF8.GetBytes(ImportIndexViewModel.SampleJson), "application/json", "plotline-import-sample.json"); [HttpPost] [ValidateAntiForgeryToken] public async Task Preview(ImportIndexViewModel model) { model = await imports.PreviewAsync(model); return View("Index", model); } [HttpPost] [ValidateAntiForgeryToken] public async Task Import(ImportIndexViewModel model) { var result = await imports.ImportAsync(model); if (result.Succeeded && (result.ProjectID.HasValue || result.IsDryRun)) { return View("Result", result); } model.Preview ??= (await imports.PreviewAsync(model)).Preview; model.StatusMessage = result.Message; model.TechnicalDetail = result.TechnicalDetail; return View("Index", model); } [HttpPost] [ValidateAntiForgeryToken] public async Task ValidationReport(ImportIndexViewModel model) { var report = await imports.BuildValidationReportAsync(model); return File(Encoding.UTF8.GetBytes(report), "text/plain", "plotline-import-validation-report.txt"); } }