diff --git a/AsbCloudInfrastructure/Services/WellService.cs b/AsbCloudInfrastructure/Services/WellService.cs index 01f9cb32..d55bd2a5 100644 --- a/AsbCloudInfrastructure/Services/WellService.cs +++ b/AsbCloudInfrastructure/Services/WellService.cs @@ -128,7 +128,7 @@ namespace AsbCloudInfrastructure.Services public override async Task InsertAsync(WellDto dto, CancellationToken token) { - if (await IsExistingTelemetryAsync(dto.IdTelemetry, token)) + if (IsTelemetryAssignedToDifferentWell(dto)) throw new ArgumentInvalidException("Телеметрия уже была привязана к другой скважине.", nameof(dto)); if (dto.IdWellType is < 1 or > 2) @@ -160,10 +160,10 @@ namespace AsbCloudInfrastructure.Services throw new NotImplementedException(); } - public override async Task UpdateAsync(WellDto dto, + public override async Task UpdateAsync(WellDto dto, CancellationToken token) { - if (await IsExistingTelemetryAsync(dto.IdTelemetry, token)) + if (IsTelemetryAssignedToDifferentWell(dto)) throw new ArgumentInvalidException("Телеметрия уже была привязана к другой скважине.", nameof(dto)); if (dto.IdWellType is < 1 or > 2) @@ -341,13 +341,18 @@ namespace AsbCloudInfrastructure.Services throw new Exception($"Can't find timezone for well {wellDto.Caption} id: {wellDto.Id}"); } - private Task IsExistingTelemetryAsync(int? idTelemetry, CancellationToken cancellationToken) + private bool IsTelemetryAssignedToDifferentWell(WellDto wellDto) { - if (!idTelemetry.HasValue) - return Task.FromResult(false); + if (!wellDto.IdTelemetry.HasValue) + return false; + + var existingWellWithAssignedTelemetry = GetCache() + .FirstOrDefault(x => x.IdTelemetry == wellDto.IdTelemetry); + + if (existingWellWithAssignedTelemetry is null) + return false; - return dbSet.AnyAsync(x => x.IdTelemetry == - idTelemetry.Value, cancellationToken); + return existingWellWithAssignedTelemetry.Id != wellDto.Id; } private static AsbCloudDb.Model.IMapPoint GetCoordinates(Well well)