57 lines
1.6 KiB
C#
57 lines
1.6 KiB
C#
using Customers.Api.Domain;
|
|
using Customers.Api.Mapping;
|
|
using Customers.Api.Repositories;
|
|
using FluentValidation;
|
|
using FluentValidation.Results;
|
|
|
|
namespace Customers.Api.Services;
|
|
|
|
public class CustomerService : ICustomerService
|
|
{
|
|
private readonly ICustomerRepository _customerRepository;
|
|
|
|
public CustomerService(ICustomerRepository customerRepository)
|
|
{
|
|
_customerRepository = customerRepository;
|
|
}
|
|
|
|
public async Task<bool> CreateAsync(Customer customer)
|
|
{
|
|
var existingUser = await _customerRepository.GetAsync(customer.Id.Value);
|
|
if (existingUser is not null)
|
|
{
|
|
var message = $"A user with id {customer.Id} already exists";
|
|
throw new ValidationException(message, new []
|
|
{
|
|
new ValidationFailure(nameof(Customer), message)
|
|
});
|
|
}
|
|
|
|
var customerDto = customer.ToCustomerDto();
|
|
return await _customerRepository.CreateAsync(customerDto);
|
|
}
|
|
|
|
public async Task<Customer?> GetAsync(Guid id)
|
|
{
|
|
var customerDto = await _customerRepository.GetAsync(id);
|
|
return customerDto?.ToCustomer();
|
|
}
|
|
|
|
public async Task<IEnumerable<Customer>> GetAllAsync()
|
|
{
|
|
var customerDtos = await _customerRepository.GetAllAsync();
|
|
return customerDtos.Select(x => x.ToCustomer());
|
|
}
|
|
|
|
public async Task<bool> UpdateAsync(Customer customer)
|
|
{
|
|
var customerDto = customer.ToCustomerDto();
|
|
return await _customerRepository.UpdateAsync(customerDto);
|
|
}
|
|
|
|
public async Task<bool> DeleteAsync(Guid id)
|
|
{
|
|
return await _customerRepository.DeleteAsync(id);
|
|
}
|
|
}
|