public async Task <ActionResult> GetCustomerById(int customerId) { LogStart(); try { var errorInfo = new ErrorInfo(); // Customer Id errorInfo = IdentifierValidator.Validate(customerId); if (errorInfo.ErrorCode != ErrorTypes.OK) { throw new BadInputException(errorInfo); } var customerModel = await _customerRepository.GetCustomerByIdentifierAsync(customerId); // Customer errorInfo = CustomerObjectValidator.Validate(customerModel, customerId); if (errorInfo.ErrorCode != ErrorTypes.OK) { throw new NotFoundException(errorInfo); } // Map var result = _mapper.Map <CustomerDto>(customerModel); return(Ok(result)); } catch (Exception ex) { LogError(ex); throw ex; } }
public async Task <IActionResult> DeleteCustomer([FromRoute] int id) { var errorInfo = new ErrorInfo(); // Find customer to delete var customerToDelete = await _customerRepository.GetCustomerByIdentifierAsync(id); // Customer errorInfo = CustomerObjectValidator.Validate(customerToDelete, id); if (errorInfo.ErrorCode != ErrorTypes.OK) { throw new BadInputException(errorInfo); } // Delete the Customer By Id var deletedId = await _customerRepository.DeleteCustomerByIdentifierAsync(id); return(Ok(new { customerId = deletedId })); }
public async Task <IActionResult> UpdateCustomer(int id, UpdateCustomerRequest request) { var errorInfo = new ErrorInfo(); // Verify customer identifier from route and request body errorInfo = IdentifierValidator.Validate(id, request.CustomerIdentifier); if (errorInfo.ErrorCode != ErrorTypes.OK) { throw new BadInputException(errorInfo); } // Find customer to update var currentCustomer = await _customerRepository.GetCustomerByIdentifierAsync(id); // Customer errorInfo = CustomerObjectValidator.Validate(currentCustomer, id); if (errorInfo.ErrorCode != ErrorTypes.OK) { throw new BadInputException(errorInfo); } bool isModified = false; // Fullname if (request.FullName != null && currentCustomer.FullName != request.FullName) { errorInfo = FullNameValidator.Validate(request.FullName, out string fullName); if (errorInfo.ErrorCode != ErrorTypes.OK) { throw new BadInputException(errorInfo); } isModified = true; currentCustomer.FullName = fullName; } // Date of Birth if (request.DateOfBirth != null && currentCustomer.DateOfBirth.ToString() != request.DateOfBirth) { errorInfo = DateTimeValidator.Validate(request.DateOfBirth, out DateTime? validDate); if (errorInfo.ErrorCode != ErrorTypes.OK) { throw new BadInputException(errorInfo); } isModified = true; currentCustomer.DateOfBirth = validDate; currentCustomer.Age = CalculateAge.Calculate(request.DateOfBirth); } // Validate ICollection Address if (request?.Address != null) { foreach (var item in request.Address) { errorInfo = AddressValidator.Validate(item); if (errorInfo.ErrorCode != ErrorTypes.OK) { throw new BadInputException(errorInfo); } } isModified = true; currentCustomer.Address = _mapper.Map <List <AddressModel> >(request.Address); } if (isModified) { // TODO: To implement the updated and created date in Model // newCustomer.UpdatedDate = DateTime.UtcNow; await _customerRepository.UpdateCustomerAsync(currentCustomer); } // Map Journal Model to Journal Dto var resultDto = _mapper.Map <CustomerDto>(currentCustomer); return(Ok(resultDto)); }