public async Task AwardPoints(DiscordUser discordUser, int points = 1) { // Get user var knownUser = await _userService.GetOrCreateKnownUserForDiscordUser(discordUser); // Get current score (if present) var userScore = await _selfcareDb.UserScores.Where(us => us.KnownUser.Id == knownUser.Id) .FirstOrDefaultAsync(); // If user does not have a score, then create it if (userScore == null) { userScore = new UserScore { KnownUser = knownUser, Category = HydrationCategory, Score = 0 }; _selfcareDb.UserScores.Add(userScore); } // give points userScore.Score += points; // Save changes await _selfcareDb.SaveChangesAsync(); }
public async Task <KnownUser> GetOrCreateKnownUserForDiscordUser(DiscordUser discordUser) { // Get user (if present) var knownUser = await _selfcareDb.KnownUsers.Where(kn => kn.DiscordId == discordUser.Id) .FirstOrDefaultAsync(); // Record user if not present if (knownUser == null) { // Create db user from discord user knownUser = new KnownUser { DiscordId = discordUser.Id, Username = discordUser.Username, Discriminator = discordUser.Discriminator }; // Add to database _selfcareDb.KnownUsers.Add(knownUser); await _selfcareDb.SaveChangesAsync(); } return(knownUser); }