using Application.Abstractions.Data; using Application.Abstractions.Messaging; using Microsoft.EntityFrameworkCore; using SharedKernel.Results; namespace Application.Features.Admin.Store.Coupon.Update; public sealed class Handler(IAppDbContext db) : ICommandHandler { public async Task Handle(Command request, CancellationToken ct) { var coupon = await db.Coupon.FirstOrDefaultAsync(c => c.ID == request.ID, ct); if (coupon is null) { return Result.Failure(Error.NotFound("Coupon.NotFound", "쿠폰을 찾을 수 없습니다.")); } if (request.LowStockThreshold < 0) { return Result.Failure(Error.Problem("Coupon.InvalidThreshold", "재고 부족 임계치는 0 이상이어야 합니다.")); } coupon.Update(request.Name, request.ExpiresAt, request.LowStockThreshold); await db.SaveChangesAsync(ct); return Result.Success(); } }