public async Task UpdateGuardianMatchEfficiency(IEnumerable <GuardianMatchResult> guardianMatchResults)
        {
            var efficiencyUpdates = new List <GuardianEfficiency>();

            foreach (var result in guardianMatchResults)
            {
                var currentEfficiencies = GetGuardianEfficiencies(result.GuardianId);
                var newEfficiency       = (currentEfficiencies.Sum() + result.Efficiency) / (currentEfficiencies.Count() + 1);

                var newGuardianEff = new GuardianEfficiency()
                {
                    Id                 = $"eff_{Guid.NewGuid():N}",
                    GuardianId         = result.GuardianId,
                    MatchId            = result.MatchId,
                    NewEfficiency      = newEfficiency,
                    PreviousEfficiency = currentEfficiencies.Any() ? currentEfficiencies.Average() : 0
                };

                efficiencyUpdates.Add(newGuardianEff);
            }

            await _databaseContext.AddRangeAsync(efficiencyUpdates);

            await _databaseContext.SaveChangesAsync();
        }
Пример #2
0
        public async Task <string> CreateGuardian(Guardian guardian)
        {
            var guardianId = await _guardianRepository.CreateGuardian(guardian);

            var guardianElo = new GuardianElo()
            {
                GuardianId  = guardianId,
                Id          = $"{ModelIDPrefixes.GuardianElo}_{Guid.NewGuid():N}",
                PreviousElo = 0,
                NewElo      = 1200,
            };

            var guardianEff = new GuardianEfficiency()
            {
                GuardianId         = guardianId,
                Id                 = $"{ModelIDPrefixes.GuardianEfficiency}_{Guid.NewGuid():N}",
                PreviousEfficiency = 0.0,
                NewEfficiency      = 0.0,
            };

            await _guardianEloRepository.UpdateGuardianElo(guardianElo);

            await _guardianEfficiencyRepository.UpdateGuardianEfficiency(guardianEff);

            return(guardianId);
        }
Пример #3
0
        public async Task CreateGuardian_MakesCorrectCalls()
        {
            // Arrange
            var guardianEfficiency = new GuardianEfficiency();
            var guardianElo        = new GuardianElo();
            await _efficiencyRepository.UpdateGuardianEfficiency(Arg.Do <GuardianEfficiency>(eff => guardianEfficiency = eff));

            await _eloRepository.UpdateGuardianElo(Arg.Do <GuardianElo>(elo => guardianElo = elo));

            // Act
            await _guardianService.CreateGuardian(_testGuardian);

            // Assert
            await _guardianRepository.Received(1).CreateGuardian(_testGuardian);

            guardianEfficiency.GuardianId.Should().Be(_testGuardian.Id);
            guardianEfficiency.Id.Should().NotBeNullOrEmpty();
            guardianEfficiency.NewEfficiency.Should().Be(0.0);
            guardianEfficiency.PreviousEfficiency.Should().Be(0.0);

            guardianElo.GuardianId.Should().Be(_testGuardian.Id);
            guardianElo.Id.Should().NotBeNullOrEmpty();
            guardianElo.NewElo.Should().Be(1200);
            guardianElo.PreviousElo.Should().Be(0);
        }
 public async Task UpdateGuardianEfficiency(GuardianEfficiency guardianEfficiency)
 {
     _databaseContext.Add(guardianEfficiency);
     await _databaseContext.SaveChangesAsync();
 }