80 lines
3.1 KiB
C#
80 lines
3.1 KiB
C#
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 });
|
||
}
|
||
}
|
||
}
|