131 lines
5.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 });
}
}
}