Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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));
                }
            }
        }
Esempio n. 3
0
        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
                }));
            }
        }
Esempio n. 4
0
        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
                }));
            }
        }
Esempio n. 5
0
        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
                }));
            }
        }
Esempio n. 6
0
        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);
            }
        }