using Asentrafin.Api.Contracts.Plaid; using Asentrafin.Api.Services.Plaid; using Microsoft.AspNetCore.Mvc; namespace Asentrafin.Api.Controllers; [ApiController] [Route("api/plaid")] public class PlaidIngestionController(IPlaidIngestionService ingestionService) : ControllerBase { [HttpPost("items")] public async Task> CreateItem( CreatePlaidItemRequest request, CancellationToken cancellationToken) { var itemId = await ingestionService.CreateItemAsync(request, cancellationToken); return CreatedAtAction(nameof(CreateItem), new { itemId }, new { itemId }); } [HttpPost("items/{itemId:guid}/ingest/accounts")] public async Task> IngestAccounts( Guid itemId, CancellationToken cancellationToken) { return Ok(await ingestionService.IngestAccountsAsync(itemId, cancellationToken)); } [HttpPost("items/{itemId:guid}/ingest/transactions")] public async Task> IngestTransactions( Guid itemId, CancellationToken cancellationToken) { return Ok(await ingestionService.IngestTransactionsAsync(itemId, cancellationToken)); } [HttpPost("items/{itemId:guid}/ingest/investments")] public async Task> IngestInvestments( Guid itemId, InvestmentIngestionRequest request, CancellationToken cancellationToken) { return Ok(await ingestionService.IngestInvestmentsAsync( itemId, request.StartDate, request.EndDate, cancellationToken)); } [HttpPost("items/{itemId:guid}/ingest/all")] public async Task> IngestAll( Guid itemId, InvestmentIngestionRequest request, CancellationToken cancellationToken) { return Ok(await ingestionService.IngestAllAsync( itemId, request.StartDate, request.EndDate, cancellationToken)); } }