public async Task <Result> Handle(CompleteImportJob request, CancellationToken cancellationToken) { return(await _importJobsRepository.GetImportJobStatus(request.JobId) .Ensure(job => job.Status == JobStatus.Finished, "Cannot complete job. Job should have finished status.") .Bind(_ => _importedPollingStationsRepository.GetNumberOfImportedAddresses(request.JobId)) .Ensure(count => count > 0, "There are no polling stations to import.") .Bind(_ => _importedPollingStationsRepository.GetNumberOfUnresolvedAddresses(request.JobId)) .Ensure(numberOfUnresolvedAddresses => numberOfUnresolvedAddresses == 0, "Cannot complete job with unresolved addresses.") .Tap(() => SwapPollingStations()) .Tap(() => UpdateAddressBank()) .Tap(() => _importJobsRepository.UpdateJobStatus(request.JobId, JobStatus.Imported)) .Tap(() => _pollingStationSearchService.BustCache())); }