using Application.Abstractions.Data; using Application.Abstractions.Messaging; using Microsoft.EntityFrameworkCore; using SharedKernel.Results; namespace Application.Features.Api.MyPage.Address.Delete; public sealed class Handler(IAppDbContext db) : ICommandHandler { public async Task Handle(Command request, CancellationToken ct) { var address = await db.MemberAddress .FirstOrDefaultAsync(a => a.ID == request.ID && a.MemberID == request.MemberID, ct); if (address is null) { return Result.Failure(Error.NotFound("Address.NotFound", "주소를 찾을 수 없습니다.")); } var wasDefault = address.IsDefault; db.MemberAddress.Remove(address); await db.SaveChangesAsync(ct); // 기본 주소를 삭제한 경우 — 남아 있는 주소 중 첫 번째를 기본으로 설정 if (wasDefault) { var nextDefault = await db.MemberAddress .Where(a => a.MemberID == request.MemberID) .OrderBy(a => a.ID) .FirstOrDefaultAsync(ct); if (nextDefault is not null) { nextDefault.SetAsDefault(); await db.SaveChangesAsync(ct); } } return Result.Success(); } }