asentrafin/backend/Controllers/PlaidIngestionController.cs

62 lines
2.0 KiB
C#

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<ActionResult<object>> 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<ActionResult<IngestionSummary>> IngestAccounts(
Guid itemId,
CancellationToken cancellationToken)
{
return Ok(await ingestionService.IngestAccountsAsync(itemId, cancellationToken));
}
[HttpPost("items/{itemId:guid}/ingest/transactions")]
public async Task<ActionResult<IngestionSummary>> IngestTransactions(
Guid itemId,
CancellationToken cancellationToken)
{
return Ok(await ingestionService.IngestTransactionsAsync(itemId, cancellationToken));
}
[HttpPost("items/{itemId:guid}/ingest/investments")]
public async Task<ActionResult<IngestionSummary>> 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<ActionResult<IngestionSummary>> IngestAll(
Guid itemId,
InvestmentIngestionRequest request,
CancellationToken cancellationToken)
{
return Ok(await ingestionService.IngestAllAsync(
itemId,
request.StartDate,
request.EndDate,
cancellationToken));
}
}