Ejemplo n.º 1
0
        public async Task <OperationResult <Guid> > Handle(CreateCustomerCommand2 command,
                                                           CancellationToken cancellationToken)
        {
            var errorMessages = new List <string>();

            if (string.IsNullOrEmpty(command.Customer.Title))
            {
                errorMessages.Add($"{nameof(command.Customer.Title)} is empty");
            }
            if (string.IsNullOrEmpty(command.Customer.FirstName))
            {
                errorMessages.Add($"{nameof(command.Customer.FirstName)} is empty");
            }
            if (string.IsNullOrEmpty(command.Customer.LastName))
            {
                errorMessages.Add($"{nameof(command.Customer.LastName)} is empty");
            }

            if (errorMessages.Any())
            {
                return(OperationResult <Guid> .ValidationFailure(errorMessages));
            }

            await _customerRepository.Insert(command.Customer);

            return(OperationResult <Guid> .Success(command.Customer.CustomerId));
        }
        public async Task <IActionResult> Post([FromBody] CreateCustomerRequest request)
        {
            var validator = new CreateCustomerValidator();
            var result    = validator.Validate(request);

            if (!result.IsValid)
            {
                return(BadRequest(result.Errors));
            }

            var address = Address2.Create(request.Address.HouseNoOrName,
                                          request.Address.Street,
                                          request.Address.City,
                                          request.Address.County,
                                          request.Address.PostCode
                                          );

            var customer = Customer2.Create(request.CustomerId,
                                            request.FirstName,
                                            request.LastName,
                                            request.MiddleName,
                                            request.Title,
                                            address,
                                            request.DateOfBirth,
                                            request.CountryOfBirth,
                                            request.IdDocumentType,
                                            request.IdDocumentNumber,
                                            request.VatNumber,
                                            request.VatCountry);

            // wrap customer domain model
            var createCustomerCommand = new CreateCustomerCommand2(customer);

            // command handler returns response that wraps domain model
            var response = await _mediator.Send(createCustomerCommand);

            if (response.Status == OperationStatus.ValidationFailure)
            {
                return(BadRequest(response.ErrorMessages));
            }

            if (response.Status == OperationStatus.Conflict)
            {
                return(Conflict(response));
            }

            return(Ok(response.Value));
        }