80 lines
3.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.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 });
}
}
}