using Application.Abstractions.Data;
using Application.Abstractions.Messaging;
using Microsoft.EntityFrameworkCore;
namespace Application.Features.Api.Stocks.GetExchangeRates;
///
/// 환율 목록 — 지정일(미지정 시 최신 TradeDate)의 전 통화 환율을 통화코드 오름차순으로 반환 (수출입은행 AP01 수집, 익명).
///
internal sealed class Handler(IAppDbContext db) : IQueryHandler
{
public async Task Handle(Query request, CancellationToken ct)
{
var targetDate = request.Date;
if (targetDate is null)
{
targetDate = await db.ExchangeRate.AsNoTracking()
.OrderByDescending(c => c.TradeDate)
.Select(c => (DateOnly?)c.TradeDate)
.FirstOrDefaultAsync(ct);
}
if (targetDate is null)
{
return new Response
{
Total = 0,
TradeDate = null,
List = []
};
}
var list = await db.ExchangeRate.AsNoTracking()
.Where(c => c.TradeDate == targetDate.Value)
.OrderBy(c => c.CurrencyUnit)
.Select(c => new Response.Row
{
CurrencyUnit = c.CurrencyUnit,
CurrencyName = c.CurrencyName,
DealBasRate = c.DealBasRate,
Ttb = c.Ttb,
Tts = c.Tts
})
.ToListAsync(ct);
return new Response
{
Total = list.Count,
TradeDate = targetDate.Value,
List = list
};
}
}