public async Task <Responses.Watcher> AddWatcher(AddWatcher request) { // Get user var user = await _userRepository.GetSingle(request.UserId); // Throw NotFound if the currency does not exist if (user == null) { throw new NotFoundException(UserMessage.UserNotFound); } // Get indicator var indicator = await _indicatorRepository.GetSingle(request.IndicatorId); // Throw NotFound if the currency does not exist if (indicator == null) { throw new NotFoundException(IndicatorMessage.IndicatorNotFound); } // Check if it exists var watcher = await _watcherRepository.GetSingle(WatcherExpression.Watcher(request.UserId, request.CurrencyId, request.IndicatorId)); // Throw ConflictException if it exists if (watcher != null) { throw new ConflictException(WatcherMessage.WatcherAlreadyExists); } // Get default watcher var defaultWatcher = await _watcherRepository.GetSingle(WatcherExpression.DefaultWatcher(request.CurrencyId, request.IndicatorId)); // Add watcher = new Watcher( request.UserId, request.CurrencyId, request.IndicatorId, request.IndicatorType, defaultWatcher?.Value, request.Buy, request.Sell, defaultWatcher?.AverageBuy, defaultWatcher?.AverageSell, request.Enabled, DateTime.Now); _watcherRepository.Add(watcher); // Save await _dbContext.SaveChangesAsync(); // Log into Splunk _logger.LogSplunkInformation(request); // Response var response = _mapper.Map <Responses.Watcher>(watcher); // Return return(response); }