public UserKarma GetUserKarma(long userId) { var con = new SqlConnection(Config.ConnectionString); var cmd = new SqlCommand { CommandText = $"get_user_karma {userId}", Connection = con }; con.Open(); try { using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { var amount = reader["total_karma"].ToInt(); var monthAmount = reader["month_karma"].ToInt(); var karma = new UserKarma(amount) { MonthKarma = monthAmount }; return(karma); } } return(null); } finally { con.Close(); } }
public async Task <IWriterResult> CreateKarma(string userId, CreateKarmaModel model) { using (var context = DataContextFactory.CreateContext()) { try { var user = await context.Users.FirstOrDefaultAsync(u => u.Id == userId).ConfigureAwait(false); if (user == null) { return(new WriterResult(false)); } var karma = new UserKarma { UserId = model.UserId, KarmaType = model.Type, SenderId = userId, Discriminator = model.Discriminator }; context.UserKarma.Add(karma); await AuditKarma(context, user).ConfigureAwait(false); await context.SaveChangesAsync().ConfigureAwait(false); return(new WriterResult(true)); } catch (DbUpdateException) { return(new WriterResult(false)); } } }
public async Task <ActionResult> SubmitChatKarma(string chatHandle, int chatMessageId) { using (var context = new ApplicationDbContext()) { var senderId = User.Identity.GetUserId(); var sender = await context.Users.FirstOrDefaultAsync(x => x.Id == senderId).ConfigureAwait(false); if (sender == null) { return(Json(new { Success = false, Message = Resources.Layout.karmaErrorUnauthorizedMessage })); } var user = await context.Users.FirstOrDefaultAsync(x => x.ChatHandle == chatHandle || x.UserName == chatHandle).ConfigureAwait(false); if (user == null) { return(Json(new { Success = false, Message = Resources.Layout.karmaErrorUserNotFoundMessage })); } if (!await context.ChatMessages.AnyAsync(x => x.Id == chatMessageId && x.UserId == user.Id).ConfigureAwait(false)) { return(Json(new { Success = false, Message = Resources.Layout.karmaChatErrorMessageNotFoundMessage })); } var maxTimestamp = DateTime.UtcNow.AddHours(-24); if (await context.UserKarma.CountAsync(x => x.SenderId == sender.Id && x.KarmaType == UserKarmaType.Chat && x.Timestamp > maxTimestamp).ConfigureAwait(false) >= 20) { return(Json(new { Success = false, Message = Resources.Layout.karmaChatErrorLimitMessage })); } var karma = new UserKarma { KarmaType = UserKarmaType.Chat, UserId = user.Id, SenderId = sender.Id, Discriminator = chatMessageId.ToString() }; if (!await SaveKarmaChanges(context, user, karma)) { return(Json(new { Success = false, Message = string.Format(Resources.Layout.karmaChatErrorAlreadySentMessage, chatHandle) })); } await SendKarmaNotification(context, user, string.Format(Resources.Layout.karmaChatNotificationMessage, sender.ChatHandle)); await ChatHub.InvalidateUserCache(user.Id); return(Json(new { Success = true, Message = string.Format(Resources.Layout.karmaChatIsSentMessage, chatHandle), User = user.UserName, Count = user.KarmaTotal })); } }
public async Task <ActionResult> SubmitTipKarma(string chatHandle, int chatMessageId) { using (var context = new ApplicationDbContext()) { var senderId = User.Identity.GetUserId(); var sender = await context.Users.FirstOrDefaultAsync(x => x.Id == senderId).ConfigureAwait(false); if (sender == null) { return(Json(new { Success = false, Message = Resources.Layout.karmaErrorUnauthorizedMessage })); } var user = await context.Users.FirstOrDefaultAsync(x => x.ChatHandle == chatHandle || x.UserName == chatHandle).ConfigureAwait(false); if (user == null) { return(Json(new { Success = false, Message = Resources.Layout.karmaErrorUserNotFoundMessage })); } var chatBotId = Constant.SYSTEM_USER_CHATBOT.ToString(); var tip = await context.ChatMessages.FirstOrDefaultAsync(x => x.Id == chatMessageId && x.UserId == chatBotId).ConfigureAwait(false); if (tip == null || tip.Message.Split(':')[1] != chatHandle) { return(Json(new { Success = false, Message = Resources.Layout.karmaTipErrorNotFoundMessage })); } var karma = new UserKarma { KarmaType = UserKarmaType.Tip, UserId = user.Id, SenderId = sender.Id, Discriminator = chatMessageId.ToString() }; if (!await SaveKarmaChanges(context, user, karma)) { return(Json(new { Success = false, Message = string.Format(Resources.Layout.karmaTipErrorAlreadySentMessage, chatHandle) })); } await SendKarmaNotification(context, user, string.Format(Resources.Layout.karmaTipNotificationMessage, sender.ChatHandle)); await ChatHub.InvalidateUserCache(user.Id); return(Json(new { Success = true, Message = string.Format(Resources.Layout.karmaTipIsSentMessage, chatHandle), User = user.UserName, Count = user.KarmaTotal })); } }
public async Task <ActionResult> SubmitForumKarma(string username, int postId) { using (var context = new ApplicationDbContext()) { var senderId = User.Identity.GetUserId(); var sender = await context.Users.FirstOrDefaultAsync(x => x.Id == senderId); if (sender == null) { return(Json(new { Success = false, Message = Resources.Layout.karmaErrorUnauthorizedMessage })); } var user = await context.Users.FirstOrDefaultAsync(x => x.UserName == username); if (user == null) { return(Json(new { Success = false, Message = Resources.Layout.karmaErrorUserNotFoundMessage })); } if (!await context.ForumPosts.AnyAsync(x => x.Id == postId && x.UserId == user.Id)) { return(Json(new { Success = false, Message = Resources.Layout.karmaForumMessageNotFoundMessage })); } var karma = new UserKarma { KarmaType = UserKarmaType.Forum, UserId = user.Id, SenderId = sender.Id, Discriminator = postId.ToString() }; if (!await SaveKarmaChanges(context, user, karma)) { return(Json(new { Success = false, Message = string.Format(Resources.Layout.karmaForumErrorAlreadySentMessage, username) })); } await SendKarmaNotification(context, user, string.Format(Resources.Layout.karmaForumNotificationMessage, sender.UserName)); return(Json(new { Success = true, Message = string.Format(Resources.Layout.karmaForumIsSentMessage, username), User = user.UserName, Count = user.KarmaTotal })); } }
private async Task <bool> SaveKarmaChanges(ApplicationDbContext context, ApplicationUser user, UserKarma karma) { try { context.UserKarma.Add(karma); user.KarmaTotal += 1; await context.SaveChangesAsync().ConfigureAwait(false); return(true); } catch (DbUpdateException) { return(false); } }