using Application.Abstractions.Messaging; using Application.Abstractions.Data; using Application.Abstractions.Cache; using SharedKernel.Results; using Microsoft.EntityFrameworkCore; namespace Application.Features.Admin.Popup.Update; public sealed class Handler(IAppDbContext db, ICacheService cache) : ICommandHandler { public async Task Handle(Command request, CancellationToken ct) { if (request.StartAt > request.EndAt) { return Result.Failure(Error.Problem("Popup.InvalidDateRange", "팝업의 종료일은 시작일보다 이전일 수 없습니다.")); } var popup = await db.Popup.FirstOrDefaultAsync(x => x.ID == request.ID, ct); if (popup is null) { return Result.Failure(Error.NotFound("Popup.NotFound", "팝업을 찾을 수 없습니다.")); } popup.Update( request.PositionID, request.Subject, request.Content, request.Link, request.StartAt, request.EndAt, request.Order, request.IsActive ); await db.SaveChangesAsync(ct); await cache.RemoveByPrefixAsync("popup:", ct); return Result.Success(); } }