private async Task <Response <Address> > CreateAddressAsync(GasStationDto dto)
        {
            var response = Response <Address> .Create();

            var addressResponse = Address.Create(dto.Address.Cep, dto.Address.StreetAddress, dto.Address.City, dto.Address.UF, dto.Address.Complement);

            if (addressResponse.HasError)
            {
                return(addressResponse);
            }

            var address = $"{addressResponse.Data.Value.StreetAddress}"
                          + $"+{(!string.IsNullOrEmpty(addressResponse.Data.Value.Complement) ? $"{addressResponse.Data.Value.Complement}," : string.Empty)}"
                          + $"+{addressResponse.Data.Value.City}"
                          + $"+{addressResponse.Data.Value.UF}"
                          + $"CEP: {addressResponse.Data.Value.Cep}";

            var geocodingResponse = await GeolocationExternalService.GetGeolocationAsync(address);

            if (geocodingResponse.HasError)
            {
                return(response.WithMessages(geocodingResponse.Messages));
            }

            var setCordinatesResponse = addressResponse.Data.Value.SetLocation(geocodingResponse.Data.Value.Longitude, geocodingResponse.Data.Value.Latitude);

            if (setCordinatesResponse.HasError)
            {
                return(response.WithMessages(setCordinatesResponse.Messages));
            }

            return(response.SetValue(addressResponse));
        }
Beispiel #2
0
        private async Task <Response> UpdateGasStationAsync(GasStation gasStation, GasStationDto dto)
        {
            var response = Response.Create();

            var newAddressResponse = Address.Create(dto.Address.Cep, dto.Address.StreetAddress, dto.Address.City, dto.Address.UF, dto.Address.Complement);

            if (newAddressResponse.HasError)
            {
                return(response.WithMessages(newAddressResponse.Messages));
            }

            if (!newAddressResponse.Equals(gasStation.Address))
            {
                var updateAddresResponse = await UpdateAddressAsync(newAddressResponse);

                if (updateAddresResponse.HasError)
                {
                    return(updateAddresResponse);
                }
            }

            var updateGasStationResponse = gasStation.Update(dto, newAddressResponse);

            if (updateGasStationResponse.HasError)
            {
                return(updateGasStationResponse);
            }

            if (!(await GasStationRepository.UpdadeAsync(gasStation)).IsAcknowledged)
            {
                return(response.WithCriticalError($"Failed to save gas station {gasStation.ExternalId}"));
            }

            return(response);
        }
        public async Task <Response> CreateAsync(GasStationDto dto)
        {
            var response = Response.Create();

            var addressResponse = await CreateAddressAsync(dto);

            if (addressResponse.HasError)
            {
                return(response.WithMessages(addressResponse.Messages));
            }

            var gasStationResponse = GasStation.Create(dto, addressResponse);

            if (gasStationResponse.HasError)
            {
                return(response.WithMessages(gasStationResponse.Messages));
            }

            var addGasStationResponse = await GasStationRepository.AddAsync(gasStationResponse);

            if (addGasStationResponse.HasError)
            {
                return(response.WithMessages(addGasStationResponse.Messages));
            }

            return(response);
        }
Beispiel #4
0
        static Response IsValidForGasStation(GasStationDto dto, Address address)
        {
            var response = Response.Create();

            if (string.IsNullOrEmpty(dto.ExternalId))
            {
                response.WithBusinessError(nameof(dto.ExternalId), $"O campo {nameof(dto.ExternalId)} é obrigatório. Rever o credenciado {dto.ExternalId}");
            }

            if (string.IsNullOrEmpty(dto.Name))
            {
                response.WithBusinessError(nameof(dto.Name), $"O campo {nameof(dto.Name)} é obrigatório. Rever o credenciado {dto.ExternalId}");
            }

            if (string.IsNullOrEmpty(dto.PhoneNumber))
            {
                response.WithBusinessError(nameof(dto.PhoneNumber), $"O campo {nameof(dto.PhoneNumber)} é obrigatório. Rever o credenciado {dto.ExternalId}");
            }

            if (address is null)
            {
                response.WithBusinessError(nameof(address), $"Endereço inválido.. Rever o credenciado {dto.ExternalId}");
            }

            return(response);
        }
Beispiel #5
0
        public static Response <GasStation> Create(GasStationDto dto, Address address)
        {
            var response = Response <GasStation> .Create();

            var dataIsValidResponse = IsValidForGasStation(dto, address);

            if (dataIsValidResponse.HasError)
            {
                return(response.WithMessages(dataIsValidResponse.Messages));
            }

            return(response.SetValue(new GasStation(dto.ExternalId, dto.Name, dto.PhoneNumber, dto.SiteUrl, address)));
        }
Beispiel #6
0
        public Response Update(GasStationDto dto, Address address)
        {
            var response = Response.Create();

            var dataIsValidResponse = IsValidForGasStation(dto, address);

            if (dataIsValidResponse.HasError)
            {
                return(response.WithMessages(dataIsValidResponse.Messages));
            }

            Name        = dto.Name;
            Address     = address;
            PhoneNumber = dto.PhoneNumber;
            SiteUrl     = dto.SiteUrl;

            return(response);
        }
Beispiel #7
0
 private async Task <Response> AddGasStationAsync(GasStationDto dto)
 => await GasStationFactory.CreateAsync(dto);