using CandidateReviewClientApp.Models; using CandidateReviewContracts.BindingModels; using CandidateReviewContracts.ViewModels; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using System.Diagnostics; namespace CandidateReviewClientApp.Controllers { public class CriterionController : Controller { private readonly ILogger _logger; public CriterionController(ILogger logger) { _logger = logger; } [HttpPost] public async Task AddCriterion(string name) { string returnUrl = HttpContext.Request.Headers["Referer"].ToString(); try { if (string.IsNullOrEmpty(name)) { throw new Exception("Название критерия не может быть пустым"); } await APIClient.PostRequestAsynchron("api/criterion/create", new CriterionBindingModel { Name = name }); return Redirect("/Criterion/ManageCriterions"); } catch (Exception ex) { return RedirectToAction("Error", new { errorMessage = $"{ex.Message}", returnUrl }); } } [HttpGet] public async Task ManageCriterions() { string returnUrl = HttpContext.Request.Headers["Referer"].ToString(); try { var criterions = await APIClient.GetRequestAsync>("api/criterion/list"); return View(criterions); } catch (Exception ex) { return RedirectToAction("Error", new { errorMessage = $"{ex.Message}", returnUrl }); } } public IActionResult Delete(int id) { string returnUrl = HttpContext.Request.Headers["Referer"].ToString(); try { APIClient.PostRequest($"api/criterion/delete", new CriterionBindingModel { Id = id }); return Redirect("~/Criterion/ManageCriterions"); } catch (Exception ex) { return RedirectToAction("Error", new { errorMessage = $"{ex.Message}", returnUrl }); } } [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error(string errorMessage, string returnUrl) { ViewBag.ErrorMessage = errorMessage ?? "Произошла непредвиденная ошибка."; ViewBag.ReturnUrl = returnUrl; return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } } }