Files
myAi/api/Controllers/RagController.cs
T
claude 2dce2ab0ff
Build and Push Docker Images / build (push) Successful in 42s
Changes
2026-05-04 15:56:15 +03:00

62 lines
1.8 KiB
C#

using Api.Models.Rag;
using Api.Services.Rag;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.RateLimiting;
namespace Api.Controllers;
[ApiController]
[Route("api/rag")]
[EnableRateLimiting("rag")]
public sealed class RagController : ControllerBase
{
private readonly ICvRagService _cvRagService;
private readonly ILogger<RagController> _logger;
public RagController(ICvRagService cvRagService, ILogger<RagController> logger)
{
_cvRagService = cvRagService;
_logger = logger;
}
[HttpPost("cv")]
[RequestSizeLimit(8 * 1024 * 1024)]
public async Task<IActionResult> UploadCv([FromForm(Name = "cv")] IFormFile? cv, [FromForm] bool gdprConsent, CancellationToken ct)
{
try
{
if (cv is null) return BadRequest(new { error = "Missing CV PDF." });
var result = await _cvRagService.IngestCvAsync(cv, gdprConsent, ct);
return Ok(result);
}
catch (InvalidOperationException ex)
{
return BadRequest(new { error = ex.Message });
}
catch (Exception ex)
{
_logger.LogError(ex, "CV ingestion failed");
return StatusCode(500, new { error = "CV ingestion failed." });
}
}
[HttpPost("match-job")]
public async Task<IActionResult> MatchJob([FromBody] JobMatchRequest request, CancellationToken ct)
{
try
{
var result = await _cvRagService.MatchJobAsync(request, ct);
return Ok(result);
}
catch (InvalidOperationException ex)
{
return BadRequest(new { error = ex.Message });
}
catch (Exception ex)
{
_logger.LogError(ex, "Job matching failed");
return StatusCode(500, new { error = "Job matching failed." });
}
}
}