public async Task Should_creat_a_new_customer()
        {
            var request = new CreateCustomerRequest2A
            {
                FirstName = "firstName",
                LastName  = "lastName",
                Title     = "title",
                Addresses = new List <AddressRequestAns3>
                {
                    new AddressRequestAns3
                    {
                        City           = "city",
                        County         = "county",
                        CurrentAddress = true,
                        HouseNoOrName  = "4",
                        PostCode       = "E4",
                        Street         = "Liverpool Street"
                    }
                },
                DateOfBirth      = new DateTime(2000, 1, 1),
                IdDocumentType   = "Passport",
                IdDocumentNumber = "1010101"
            };
            var response = await _client.PostAsync($"/api/customers3a",
                                                   CreateJsonContent(request));

            var content = await response.Content.ReadAsStringAsync();

            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
        public async Task <IActionResult> Post([FromBody] CreateCustomerRequest2A createCustomerRequest)
        {
            // convert request DTO to domain model
            var customer = new Customer2A(createCustomerRequest.FirstName,
                                          createCustomerRequest.LastName,
                                          createCustomerRequest.Title,
                                          createCustomerRequest.DateOfBirth,
                                          createCustomerRequest.IdDocumentType,
                                          createCustomerRequest.IdDocumentNumber,
                                          createCustomerRequest.Addresses.Select(a => new Address2A(a.HouseNoOrName,
                                                                                                    a.Street,
                                                                                                    a.City,
                                                                                                    a.County,
                                                                                                    a.PostCode,
                                                                                                    a.CurrentAddress
                                                                                                    )));

            // command just wrap domain model
            var createCustomerCommand = new CreateCustomerCommand2A(customer);

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

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

            var customerApiResponse = new CreateCustomerApiResponse2A(response.Value.CustomerId);

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

            return(Ok(customerApiResponse));
        }