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<AssessmentController> _logger; public AssessmentController(ILogger<AssessmentController> logger) { _logger = logger; } [HttpPost] public async Task<IActionResult> AddAssessmentCriterion(int resumeId, int[] criterion, int[] newValue, string comment) { string returnUrl = HttpContext.Request.Headers.Referer.ToString(); try { if (APIClient.User == null) { throw new Exception("Необходима авторизация"); } if (criterion == null || newValue == null || criterion.Length != newValue.Length) { throw new ArgumentException("Критерии или оценки заполнены некорректно."); } var userId = APIClient.User?.Id; var assessmentModel = new AssessmentBindingModel { ResumeId = resumeId, UserId = userId, Comment = comment }; int assessmentId = await APIClient.PostRequestAsync("api/assessment/create", assessmentModel); List<Tuple<int, int>> criterionsValues = new(); for (int i = 0; i < criterion.Length; i++) { criterionsValues.Add(Tuple.Create(criterion[i], newValue[i])); } foreach (var item in criterionsValues) { var assessmentCriterion = new AssessmentCriterionModel { AssessmentId = assessmentId, CriterionId = item.Item1, Value = item.Item2 }; APIClient.PostRequest("api/assessment/createCriterion", assessmentCriterion); } var user = APIClient.GetRequest<UserViewModel>($"api/user/profile?id={APIClient.User?.Id}"); APIClient.User?.Assessments.Add(new AssessmentViewModel { ResumeId = assessmentModel.ResumeId, UserId = assessmentModel.UserId, Comment = assessmentModel.Comment }); var resume = APIClient.GetRequest<ResumeViewModel>($"api/resume/details?id={resumeId}"); if (resume != null) { resume?.Assessments.Add(new AssessmentViewModel { ResumeId = assessmentModel.ResumeId, UserId = assessmentModel.UserId, Comment = assessmentModel.Comment }); } else { throw new Exception("Пользователь не найден"); } APIClient.PostRequest($"api/resume/update", new ResumeBindingModel { Id = resume.Id, Description = resume.Description, Education = resume.Education, Experience = resume.Experience, Skills = resume.Skills, Status = CandidateReviewDataModels.Enums.ResumeStatusEnum.Оценено, Title = resume.Title, UserId = resume.UserId, VacancyId = resume.VacancyId }); 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 }); } } }