using Microsoft.AspNetCore.Mvc; using Csob.Services; namespace Csob.Controllers; /// /// AISP – account information. All endpoints require the ČSOB credential headers /// (eIDAS certificate, access token, API key, TPP name). See the Swagger description for details. /// [ApiController] [Route("accounts")] [Produces("application/json")] [Tags("AISP – Accounts")] public sealed class AccountsController : ControllerBase { private readonly AccountsService _service; public AccountsController(AccountsService service) => _service = service; /// List the PSU's payment accounts (paged). [HttpGet] public async Task List( [FromQuery] int? page, [FromQuery] int? size, [FromQuery] string? sort, [FromQuery] string? order, CancellationToken ct) => Ok(await _service.ListAsync(page, size, sort, order, ct)); /// Get the balance(s) of an account. [HttpGet("{id}/balance")] public async Task Balance(string id, [FromQuery] string? currency, CancellationToken ct) => Ok(await _service.BalanceAsync(id, currency, ct)); /// List booked transactions of an account (paged, optional date range). [HttpGet("{id}/transactions")] public async Task Transactions( string id, [FromQuery] int? page, [FromQuery] int? size, [FromQuery] string? sort, [FromQuery] string? order, [FromQuery] string? dateFrom, [FromQuery] string? dateTo, CancellationToken ct) => Ok(await _service.TransactionsAsync(id, new TransactionQuery { Page = page, Size = size, Sort = sort, Order = order, DateFrom = dateFrom, DateTo = dateTo, }, ct)); /// List awaiting (pending) transactions of an account. [HttpGet("{id}/transactions/awaiting")] public async Task Awaiting(string id, [FromQuery] int? page, [FromQuery] int? size, CancellationToken ct) => Ok(await _service.AwaitingTransactionsAsync(id, page, size, ct)); /// List the account's existing standing orders. [HttpGet("{id}/standing-orders")] public async Task StandingOrders(string id, [FromQuery] int? page, [FromQuery] int? size, CancellationToken ct) => Ok(await _service.StandingOrdersAsync(id, page, size, ct)); /// Get a standing-order detail for the account. [HttpGet("{id}/standing-orders/{standingOrderId}")] public async Task StandingOrderDetail(string id, string standingOrderId, CancellationToken ct) => Ok(await _service.StandingOrderDetailAsync(id, standingOrderId, ct)); /// List the account's direct-debit mandates. [HttpGet("{id}/direct-debits")] public async Task DirectDebits(string id, [FromQuery] int? page, [FromQuery] int? size, CancellationToken ct) => Ok(await _service.DirectDebitsAsync(id, page, size, ct)); }