| 12345678910111213141516171819202122232425262728293031323334353637 |
- using Application.Abstractions.Data;
- using Application.Abstractions.Messaging;
- using Microsoft.EntityFrameworkCore;
- using SharedKernel.Results;
- namespace Application.Features.Admin.Stocks.MarketHolidays.Add;
- /// <summary>
- /// 휴장일 등록. 거래일을 휴장일로 잘못 등록하면 수집 배치가 그 날짜를 건너뛰어 데이터가 영구 결손되므로
- /// 주말(불필요)·중복만 막고 나머지 검증은 운영자 판단에 맡긴다 (연 1회 KRX 휴장일 공시 기준 등록).
- /// </summary>
- internal sealed class Handler(IAppDbContext db) : ICommandHandler<Command, Result>
- {
- public async Task<Result> Handle(Command request, CancellationToken ct)
- {
- if (string.IsNullOrWhiteSpace(request.Name))
- {
- return Result.Failure(Error.Problem("MarketHoliday.NameRequired", "휴장일 명칭을 입력하세요."));
- }
- if (request.Date.DayOfWeek is DayOfWeek.Saturday or DayOfWeek.Sunday)
- {
- return Result.Failure(Error.Problem("MarketHoliday.Weekend", "주말(토·일)은 수집 배치가 자동 제외하므로 등록할 필요가 없습니다."));
- }
- if (await db.MarketHoliday.AsNoTracking().AnyAsync(c => c.Date == request.Date, ct))
- {
- return Result.Failure(Error.Conflict("MarketHoliday.Duplicate", $"{request.Date:yyyy-MM-dd} 은(는) 이미 등록된 휴장일입니다."));
- }
- db.MarketHoliday.Add(Domain.Entities.Stocks.MarketHoliday.Create(request.Date, request.Name));
- await db.SaveChangesAsync(ct);
- return Result.Success();
- }
- }
|