1
0
voyager-api/ScrapperAPI/Controllers/ExtractionModelsController.cs

47 lines
1.4 KiB
C#

using System.ComponentModel.DataAnnotations;
using System.Text.Json;
using Microsoft.AspNetCore.Mvc;
using ScrapperAPI.Dtos;
using ScrapperAPI.Interfaces;
namespace ScrapperAPI.Controllers;
public sealed record CreateExtractionModelRequest(
[Required] string Name,
[Required] JsonDocument Definition,
int Version = 1,
string? Description = null);
[ApiController]
[Route("extraction-models")]
public sealed class ExtractionModelsController : ControllerBase
{
private readonly IExtractionModelRepository _models;
public ExtractionModelsController(IExtractionModelRepository models) => _models = models;
[HttpPost]
public async Task<IActionResult> Create([FromBody] CreateExtractionModelRequest req, CancellationToken ct)
{
var id = await _models.CreateAsync(new CreateExtractionModelDto(
Name: req.Name,
Version: req.Version <= 0 ? 1 : req.Version,
Description: req.Description,
Definition: req.Definition
), ct);
return Created($"/extraction-models/{id}", new { id });
}
[HttpGet]
public async Task<IActionResult> List(CancellationToken ct)
=> Ok(await _models.GetAllAsync(ct));
[HttpGet("{id:long}")]
public async Task<IActionResult> GetById(long id, CancellationToken ct)
{
var row = await _models.GetByIdAsync(id, ct);
return row is null ? NotFound() : Ok(row);
}
}