using CandidateReviewClientApp.Models; using CandidateReviewContracts.BindingModels; using CandidateReviewContracts.ViewModels; using CandidateReviewDataModels.Models; using Microsoft.AspNetCore.Mvc; using System.Diagnostics; namespace CandidateReviewClientApp.Controllers { public class AssessmentController : Controller { private readonly ILogger<AssessmentController> _logger; public AssessmentController(ILogger<AssessmentController> logger) { _logger = logger; } [HttpPost] public IActionResult AddAssessment(int resumeId, string comment, Dictionary<int, int> criteriaValues) { string returnUrl = HttpContext.Request.Headers["Referer"].ToString(); try { var userId = APIClient.User?.Id; var allCriterions = APIClient.GetRequest<List<CriterionViewModel>>("api/criterion/list"); if (allCriterions == null || !allCriterions.Any()) { throw new Exception("Критерии не найдены"); } criteriaValues = criteriaValues.Where(kvp => kvp.Key != 0).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); var assessmentCriterions = criteriaValues .ToDictionary( kvp => kvp.Key, kvp => { var criterionViewModel = allCriterions.FirstOrDefault(c => c.Id == kvp.Key); if (criterionViewModel == null) { throw new InvalidOperationException($"Критерий с ID {kvp.Key} не найден."); } var criterionModel = new CriterionViewModel { Id = criterionViewModel.Id, Name = criterionViewModel.Name }; return ((ICriterionModel)criterionModel, kvp.Value); } ); APIClient.PostRequest("api/assessment/create", new AssessmentBindingModel { ResumeId = resumeId, UserId = userId, Comment = comment, AssessmentCriterions = assessmentCriterions }); return Redirect($"~/Resume/ResumeDetails/{resumeId}"); } 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 }); } } }