using Bookstore.Domain.Customers; namespace Bookstore.Domain.Addresses { public interface IAddressService { Task
GetAddressAsync(string sub, int id); Task> GetAddressesAsync(string sub); Task DeleteAddressAsync(DeleteAddressDto deleteAddressDto); Task CreateAddressAsync(CreateAddressDto createAddressDto); Task UpdateAddressAsync(UpdateAddressDto updateAddressDto); } public class AddressService : IAddressService { private readonly IAddressRepository addressRepository; private readonly ICustomerRepository customerRepository; public AddressService(IAddressRepository addressRepository, ICustomerRepository customerRepository) { this.addressRepository = addressRepository; this.customerRepository = customerRepository; } public async Task
GetAddressAsync(string sub, int id) { return await addressRepository.GetAsync(sub, id); } public async Task> GetAddressesAsync(string sub) { return await addressRepository.ListAsync(sub); } public async Task CreateAddressAsync(CreateAddressDto dto) { var customer = await customerRepository.GetAsync(dto.CustomerSub); var address = new Address(customer, dto.AddressLine1, dto.AddressLine2, dto.City, dto.State, dto.Country, dto.ZipCode); await addressRepository.AddAsync(address); await addressRepository.SaveChangesAsync(); } public async Task UpdateAddressAsync(UpdateAddressDto dto) { var address = await addressRepository.GetAsync(dto.CustomerSub, dto.AddressId); address.AddressLine1 = dto.AddressLine1; address.AddressLine2 = dto.AddressLine2; address.City = dto.City; address.State = dto.State; address.Country = dto.Country; address.ZipCode = dto.ZipCode; await addressRepository.SaveChangesAsync(); } public async Task DeleteAddressAsync(DeleteAddressDto dto) { await addressRepository.DeleteAsync(dto.CustomerSub, dto.AddressId); await addressRepository.SaveChangesAsync(); } } }