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)); }
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); }
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); }
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))); }
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); }
private async Task <Response> AddGasStationAsync(GasStationDto dto) => await GasStationFactory.CreateAsync(dto);