| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- using Application.Abstractions.Data;
- using Application.Abstractions.Messaging;
- using Microsoft.EntityFrameworkCore;
- namespace Application.Features.Api.Stocks.GetExchangeRates;
- /// <summary>
- /// 환율 목록 — 지정일(미지정 시 최신 TradeDate)의 전 통화 환율을 통화코드 오름차순으로 반환 (수출입은행 AP01 수집, 익명).
- /// </summary>
- internal sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Response>
- {
- public async Task<Response> 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
- };
- }
- }
|