CourseWork_KPO/CandidateReviewClientApp/Controllers/AssessmentController.cs

71 lines
2.7 KiB
C#
Raw Normal View History

using CandidateReviewClientApp.Models;
using CandidateReviewContracts.BindingModels;
using CandidateReviewContracts.SearchModels;
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 async Task<IActionResult> 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 и одинаковой длины.");
}
var userId = APIClient.User?.Id;
var assessmentData = new Dictionary<int, (ICriterionModel, int)>();
var assessmentModel = new AssessmentBindingModel
{
ResumeId = resumeId,
UserId = userId,
Comment = comment,
AssessmentCriterions = criterion.Select((t, i) => new KeyValuePair<int, (ICriterionModel, int)>
(t, (new CriterionViewModel { Id = t }, value[i]))).ToDictionary(kv => kv.Key, kv => kv.Value)
};
int assessmentId = await APIClient.PostRequestAsync("api/assessment/create", assessmentModel);
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 });
}
}
}