public async Task <Responses.Indicator> AddIndicator(AddIndicator request) { // Get indicator var indicator = await _mainDbContext.Indicators .Include(x => x.Dependencies) .FirstOrDefaultAsync(x => x.IndicatorId == request.IndicatorId); // Throw ConflictException if it exists if (indicator != null) { throw new ConflictException(IndicatorMessage.IndicatorWithSameIdAlreadyExists); } // Check uniqueness indicator = await _mainDbContext.Indicators .Include(x => x.Dependencies) .FirstOrDefaultAsync(IndicatorExpression.IndicatorUnique(request.Name)); // Throw ConflictException if it exists if (indicator != null) { throw new ConflictException(IndicatorMessage.IndicatorWithSameNameAlreadyExists); } // Get dependencies var dependencies = await GetDependencies(request.Dependencies); // Build dependency level var dependencyLevel = IndicatorBuilder.BuildDependencyLevel(dependencies); // Build new indicator dependencies var indicatorDependencies = IndicatorDependencyBuilder.BuildIndicatorDependencies(request.IndicatorId, dependencies); // Create indicator = new Indicator( request.IndicatorId, request.IndicatorType, request.UserId, request.Name, request.Description, request.Formula, indicatorDependencies, dependencyLevel, DateTime.Now); // Add _mainDbContext.Indicators.Add(indicator); // Save await _mainDbContext.SaveChangesAsync(); // Log into Splunk _logger.LogSplunkInformation(request); // Response var response = _mapper.Map <Responses.Indicator>(indicator); // Return return(response); }
public void Test_BuildDependencyLevel_Price() { // Arrange var indicatorId = "master.PRICE"; var allIndicatorDependencies = FakeIndicatorDependency.GetFakeIndicatorDependencies(); // Act var dependencyLevel = IndicatorBuilder.BuildDependencyLevel(indicatorId, allIndicatorDependencies); // Assert Assert.AreEqual(0, dependencyLevel); }
public void Test_PriceChange24Hrs() { // Arrange var indicatorId = "price-change-24hrs"; var allIndicatorDependencies = FakeIndicatorDependencies.GetFakeIndicatorDependencies(); // Act var dependencyLevel = IndicatorBuilder.BuildDependencyLevel(indicatorId, allIndicatorDependencies); // Assert Assert.AreEqual(1, dependencyLevel); }
public void Test_Hype() { // Arrange var indicatorId = "hype"; var allIndicatorDependencies = FakeIndicatorDependencies.GetFakeIndicatorDependencies(); // Act var dependencyLevel = IndicatorBuilder.BuildDependencyLevel(indicatorId, allIndicatorDependencies); // Assert Assert.AreEqual(2, dependencyLevel); }
public async Task <Responses.Indicator> AddIndicator(AddIndicator request) { // Get user var user = await _mainDbContext.Users.FindAsync(request.UserId); // User not found if (user == null) { throw new NotFoundException(UserMessage.UserNotFound); } // Get indicator var indicator = await _mainDbContext.Indicators .Include(x => x.Dependencies) .FirstOrDefaultAsync(IndicatorExpression.Unique(request.UserId, request.Abbreviation)); // Throw ConflictException if it exists if (indicator != null) { throw new ConflictException(new Conflict <AddIndicatorConflictReason>(AddIndicatorConflictReason.INDICATOR_ALREADY_EXISTS, IndicatorMessage.IndicatorWithSameIdAlreadyExists)); } // Get dependencies var dependencies = await GetIndicators(request.Dependencies); // Build dependency level var dependencyLevel = IndicatorBuilder.BuildDependencyLevel(dependencies); // Build indicator dependencies var indicatorDependencies = IndicatorDependencyBuilder.BuildIndicatorDependencies(request.IndicatorId, dependencies); // Create indicator = new Indicator( request.UserId, request.Abbreviation, request.Name, request.Description, request.Formula, indicatorDependencies, dependencyLevel, DateTime.UtcNow.StripSeconds()); // Add _mainDbContext.Indicators.Add(indicator); // Save await _mainDbContext.SaveChangesAsync(); // Get indicator indicator = await _mainDbContext.Indicators .Include(x => x.Dependencies) .ThenInclude(x => x.Dependency) .FirstOrDefaultAsync(x => x.IndicatorId == indicator.IndicatorId); // Response var response = _mapper.Map <Responses.Indicator>(indicator); // Log _logger.LogInformation("{@Event}, {@UserId}, {@Request}, {@Response}", "IndicatorAdded", request.UserId, request, response); // Return return(response); }