using Distribution.Infra.UoW; namespace Distribution.Features.Region; public class RegionService(IRegionRepository repo, IUnitOfWork uow) { public async Task> GetAllAsync() => (await repo.GetAllAsync()) .Where(r => r.IsActive) .Select(r => new RegionResponse(r.Id, r.Name, r.IsActive, r.CreatedAt)) .ToList(); public async Task GetByIdAsync(Guid id) { var region = await repo.GetByIdAsync(id); if (region is null || !region.IsActive) return null; return new RegionResponse(region.Id, region.Name, region.IsActive, region.CreatedAt); } public async Task CreateAsync(CreateRegionRequest request, CancellationToken ct = default) { var region = new Models.Region { Name = request.Name }; await uow.BeginAsync(ct); try { await repo.AddAsync(region); await uow.CommitAsync(ct); } catch { await uow.RollbackAsync(ct); throw; } return new RegionResponse(region.Id, region.Name, region.IsActive, region.CreatedAt); } public async Task UpdateAsync(Guid id, UpdateRegionRequest request, CancellationToken ct = default) { var region = await repo.GetByIdAsync(id); if (region is null || !region.IsActive) return null; region.Name = request.Name; await uow.BeginAsync(ct); try { repo.Update(region); await uow.CommitAsync(ct); } catch { await uow.RollbackAsync(ct); throw; } return new RegionResponse(region.Id, region.Name, region.IsActive, region.CreatedAt); } public async Task DeleteAsync(Guid id, CancellationToken ct = default) { var region = await repo.GetByIdAsync(id); if (region is null || !region.IsActive) return false; await uow.BeginAsync(ct); try { repo.Remove(region); await uow.CommitAsync(ct); } catch { await uow.RollbackAsync(ct); throw; } return true; } }