using CandidateReviewClientApp.Models; using CandidateReviewContracts.BindingModels; using CandidateReviewContracts.SearchModels; using CandidateReviewContracts.ViewModels; using CandidateReviewDataModels.Models; using Microsoft.AspNetCore.Mvc; using System.Diagnostics; using System.Reflection; using System.Security.Cryptography.Xml; namespace CandidateReviewClientApp.Controllers { public class AssessmentController : Controller { private readonly ILogger _logger; public AssessmentController(ILogger logger) { _logger = logger; } [HttpPost] public async Task AddAssessmentCriterion(int resumeId, int[] criterion, int[] value, string comment) { string returnUrl = HttpContext.Request.Headers.Referer.ToString(); try { if (APIClient.User == null) { throw new Exception("Необходима авторизация"); } if (criterion == null || value == null || criterion.Length != value.Length) { throw new ArgumentException("Массивы критериев и оценок должны быть не null и одинаковой длины."); } Dictionary assCriterions = new(); var userId = APIClient.User?.Id; var assessmentModel = new AssessmentBindingModel { ResumeId = resumeId, UserId = userId, Comment = comment, AssessmentCriterions = assCriterions }; int assessmentId = await APIClient.PostRequestAsync("api/assessment/create", assessmentModel); for (int i = 0; i < criterion.Length; i++) { var crit = APIClient.GetRequest($"api/criterion/details?id={criterion[i]}"); assCriterions.Add(assessmentId, (new CriterionModel { Id = crit.Id, Name = crit.Name }, value[i])); } assessmentModel.AssessmentCriterions = assCriterions; assessmentModel.Id = assessmentId; APIClient.PostRequest("api/assessment/update", assessmentModel); var user = APIClient.GetRequest($"api/user/profile?id={APIClient.User?.Id}"); APIClient.User?.Assessments.Add(new AssessmentViewModel { ResumeId = assessmentModel.ResumeId, UserId = assessmentModel.UserId, Comment = assessmentModel.Comment, AssessmentCriterions = assessmentModel.AssessmentCriterions }); var resume = APIClient.GetRequest($"api/resume/details?id={resumeId}"); if (resume != null) { resume?.Assessments.Add(new AssessmentViewModel { ResumeId = assessmentModel.ResumeId, UserId = assessmentModel.UserId, Comment = assessmentModel.Comment, AssessmentCriterions = assessmentModel.AssessmentCriterions }); } else { throw new Exception("Пользователь не найден"); } return Redirect($"~/Resume/ResumeDetails/{resumeId}"); } catch (Exception ex) { return RedirectToAction("Error", new { errorMessage = $"{ex.Message}", returnUrl }); } } public IActionResult Delete(int id, int resumeId) { string returnUrl = HttpContext.Request.Headers["Referer"].ToString(); try { APIClient.PostRequest($"api/assessment/delete", new AssessmentBindingModel { Id = id }); 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 }); } } }