using System; using System.Linq; using System.Web.Mvc; using LeafWeb.Core.Entities; using LeafWeb.Core.Utility; using LeafWeb.Web.Attributes; using LeafWeb.Web.ViewModels.Results; using LeafWeb.Web.ViewModels.ResultsAdmin; namespace LeafWeb.Web.Controllers { public class ResultsAdminController : ControllerBase { public ActionResult Index() { var viewModel = DataService.GetLeafInputs() .OrderByDescending(f => f.Id) .ToList() .Select(leafInput => new ResultStatusViewModel(leafInput)); return View(viewModel); } public ActionResult Details(int id) { var leafInput = DataService.GetLeafInput(id); var viewModel = new LeafInputViewModel(leafInput); return View(viewModel); } public ActionResult DownloadOutputToUser(int id) { return GetOutputZip(id, LeafOutputFileType.ToUser); } public ActionResult DownloadOutputNotToUser(int id) { return GetOutputZip(id, LeafOutputFileType.NotToUser); } public ActionResult DownloadOutputCleanedInput(int id) { return GetOutputZip(id, LeafOutputFileType.CleanedInput); } private ActionResult GetOutputZip(int id, LeafOutputFileType type) { var leafInput = DataService.GetLeafInput(id); if (leafInput == null) return View("DownloadNotFound"); var zip = leafInput.GetOutputFileZip(type); var filename = $"{leafInput.Identifier.FilterValidFilename()}_{type}.zip"; return new FileContentResult(zip, "application/zip") { FileDownloadName = filename }; } public ActionResult Delete(int id) { var leafInput = DataService.GetLeafInput(id); var viewModel = new LeafInputViewModel(leafInput); return View(viewModel); } [HttpPost, ActionName("Delete")] [ActionLog] public ActionResult DeleteConfirmed(int id) { // TODO: don't allow currently running LeafInput to be deleted var leafInput = DataService.GetLeafInput(id); DataService.DeleteLeafInput(leafInput); SetStatusMessage($"LeafInput '{leafInput.Identifier}' deleted"); return RedirectToAction("Index"); } } }