public async Task <ActionResult <FighterExperienceDto> > GetExperience(Guid id, [FromServices] IFighterExperienceCalculator fighterExperienceCalculator) { var userId = User.Claims.GetUserId(); if (userId == null) { return(Forbid()); } var fighterExperience = await Context.FighterExperiences.FirstOrDefaultAsync(o => o.FighterId == id); if (fighterExperience == null) { return(Ok(new FighterExperienceDto() { Level = 1, CurrentExp = 0, LevelExp = fighterExperienceCalculator.GetNeededExperience(1), })); } var level = fighterExperienceCalculator.GetLevel(fighterExperience); return(Ok(new FighterExperienceDto() { Level = level.Level, CurrentExp = level.Experience, LevelExp = level.RequiredExperience, })); }
public async Task Process(Match match, IEnumerable <FighterContribution> contributions) { foreach (var contribution in contributions) { var fighter = await databaseContext.Fighters .AsTracking() .FirstOrDefaultAsync(o => o.Id == contribution.FighterId); if (fighter == null) { continue; } var fighterExperience = await databaseContext.FighterExperiences .AsTracking() .FirstOrDefaultAsync(o => o.FighterId == contribution.FighterId); if (fighterExperience == null) { fighterExperience = new FighterExperience() { FighterId = contribution.FighterId, }; databaseContext.FighterExperiences.Add(fighterExperience); } var levelBefore = fighterExperienceCalculator.GetLevel(fighterExperience); await fighterExperienceCalculator.AddExperienceAsync(fighterExperience, contribution, 0); var levelAfter = fighterExperienceCalculator.GetLevel(fighterExperience); for (int i = levelBefore.Level; i < levelAfter.Level; i++) { databaseContext.AddRange(fighterLevelUpHandler.Up(fighter)); } } await databaseContext.SaveChangesAsync(); }