diff --git a/backend/libs/Solicitors.Data/SolicitorsRepository.cs b/backend/libs/Solicitors.Data/SolicitorsRepository.cs index 3fd6ab1..d20aa65 100644 --- a/backend/libs/Solicitors.Data/SolicitorsRepository.cs +++ b/backend/libs/Solicitors.Data/SolicitorsRepository.cs @@ -66,9 +66,9 @@ internal class SolicitorsRepository(IRepoSetupService setup) cancellationToken: cancellationToken); if (matchingSolicitor is null) - await AddNewSolicitor(solicitor, cancellationToken); + await AddNewSolicitorAsync(solicitor, cancellationToken); else - UpdateExistingSolicitor(solicitor, matchingSolicitor); + await UpdateExistingSolicitorAsync(solicitor, matchingSolicitor, cancellationToken); try { @@ -94,7 +94,7 @@ internal class SolicitorsRepository(IRepoSetupService setup) return SaveChangesAsync(cancellationToken); } - private async Task AddNewSolicitor( + private async Task AddNewSolicitorAsync( SolicitorData solicitor, CancellationToken cancellationToken) { @@ -192,19 +192,22 @@ internal class SolicitorsRepository(IRepoSetupService setup) location.LocationRatings.Add(newLocRating); } - private void UpdateExistingSolicitor( + private Task UpdateExistingSolicitorAsync( SolicitorData solicitor, - Solicitor matchingSolicitor) + Solicitor matchingSolicitor, + CancellationToken cancellationToken) { UpdateSolicitorRootData(matchingSolicitor, solicitor); - UpdateExistingCities(solicitor, matchingSolicitor); + var citiesUpdate = UpdateExistingCitiesAsync(solicitor, matchingSolicitor, cancellationToken); UpdateExistingRatings(solicitor, matchingSolicitor); UpdateExistingLocations(solicitor, matchingSolicitor); + return citiesUpdate; } - private void UpdateExistingCities( + private async Task UpdateExistingCitiesAsync( SolicitorData solicitor, - Solicitor matchingSolicitor) + Solicitor matchingSolicitor, + CancellationToken cancellationToken) { var lostCities = matchingSolicitor.Cities .Where(city => solicitor.Cities.All(cityName => cityName != city.Name)) @@ -220,6 +223,8 @@ internal class SolicitorsRepository(IRepoSetupService setup) var matchingCity = matchingSolicitor.Cities .FirstOrDefault(city => cityName == city.Name); + matchingCity ??= await GetCityByNameAsync(cityName, cancellationToken); + if (matchingCity is null) AddNewCityToSolicitor(cityName, matchingSolicitor); else