public async Task <Stream> Handle(GetUserLevelImageQuery request, CancellationToken cancellationToken) { var users = await _context.XPUsers.OrderByDescending(x => x.XP) .Select(u => u.UserId) .ToListAsync(cancellationToken); var user = await _context.XPUsers.OrderByDescending(x => x.XP) .FirstOrDefaultAsync(x => x.UserId == request.UserId, cancellationToken) ?? new User(); var placement = users.FindIndex(u => u == request.UserId) + 1; var currentXp = user.XP - _xpCalculator.TotalXpRequired(user.Lvl - 1); var required = _xpCalculator.TotalXpRequired(user.Lvl); var progress = currentXp / _xpCalculator.XpRequired(user.Lvl); var image = await _mediator.Send(new GetXPImageStreamQuery { DisplayName = request.UserDisplayName, Placement = placement, Level = user.Lvl, Xp = user.XP, Discriminator = request.MemberDiscriminator, AvatarUrl = request.AvatarUrl, Progress = progress, Required = required }, cancellationToken); return(image); }
public async Task Handle(DomainEventNotification <XpAddedToUserEvent> notification, CancellationToken cancellationToken) { var user = await _context.XPUsers.FirstOrDefaultAsync(u => u.UserId == notification.DomainEvent.MessageDetails.UserId, cancellationToken); var oldLevel = user.Lvl; while (user.XP > _calculator.TotalXpRequired(user.Lvl)) { user.Lvl++; } if (oldLevel < user.Lvl) { await _context.SaveChangesAsync(cancellationToken); await _provider.Publish(new UserLevelUpEvent { MessageDetails = notification.DomainEvent.MessageDetails, OldLvl = oldLevel, NewLvl = user.Lvl }); } }