public async Task DeleteAsync(string assetPairId) { Instrument instrument = await GetByAssetPairIdAsync(assetPairId); if (instrument.Mode == InstrumentMode.Active) { throw new InvalidOperationException("Can not remove active instrument"); } IReadOnlyCollection <RemainingVolume> remainingVolumes = await _remainingVolumeService.GetAllAsync(); RemainingVolume remainingVolume = remainingVolumes.SingleOrDefault(o => o.AssetPairId == instrument.AssetPairId); if (remainingVolume != null && remainingVolume.Volume != 0) { throw new InvalidOperationException("Can not remove instrument while remaining volume exist"); } await _instrumentRepository.DeleteAsync(assetPairId); await _crossInstrumentRepository.DeleteAsync(assetPairId); await _remainingVolumeService.DeleteAsync(assetPairId); _cache.Remove(assetPairId); _log.InfoWithDetails("Instrument was deleted", instrument); }