Files
Antifraude.Net/Antifraude.Net/ApiDenuncias/Controllers/TrackingController.cs
2026-05-06 13:48:23 +02:00

49 lines
1.7 KiB
C#

using GestionaDenuncias.Shared.Models;
using ApiDenuncias.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace ApiDenuncias.Controllers;
[ApiController]
[Authorize]
[Route("api/tracking")]
public sealed class TrackingController : ControllerBase
{
private readonly IInboxTrackingService _trackingService;
public TrackingController(IInboxTrackingService trackingService)
{
_trackingService = trackingService;
}
[HttpGet("user-state")]
public Task<InboxUserState> GetUserState(CancellationToken cancellationToken)
=> _trackingService.GetUserStateAsync(GetUsername(), cancellationToken);
[HttpPost("snapshot")]
public Task<IReadOnlyList<ReportDto>> RegisterSnapshot(
TrackingSnapshotRequest request,
CancellationToken cancellationToken)
=> _trackingService.RegisterSnapshotAsync(GetUsername(), request.Reports, cancellationToken);
[HttpPost("imported")]
public async Task<IActionResult> MarkImported(MarkReportImportedRequest request, CancellationToken cancellationToken)
{
await _trackingService.MarkReportImportedAsync(GetUsername(), request.Report, request.ComplaintId, cancellationToken);
return Ok(new { ok = true });
}
[HttpPost("import-permission")]
public async Task<IActionResult> EnsureImportPermission(
TrackingImportPermissionRequest request,
CancellationToken cancellationToken)
{
await _trackingService.EnsureReportCanBeImportedByUserAsync(GetUsername(), request.Report, cancellationToken);
return Ok(new { ok = true });
}
private string GetUsername()
=> User.Identity?.Name ?? throw new InvalidOperationException("No hay usuario autenticado.");
}