Ejemplo n.º 1
0
        public async Task <IActionResult> Submit([FromForm] MessageRequestViewModel messageRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            PublicProfile profile = null;

            if (!messageRequest.IsAnonymous && _signInManager.IsSignedIn(User))
            {
                profile = await _userManager.GetPublicProfileByUserAsync(User);
            }
            var model = new Message
            {
                Author      = profile,
                Content     = messageRequest.Content,
                PublishDate = DateTime.Now
            };

            if (profile != null)
            {
                var baseValue      = ReviewSubmitExperienceReward;
                var recentMessages = await GetRecentMessagesCountAsync(profile) * SubsequentReviewModifier;

                baseValue = Math.Max(baseValue - recentMessages, 0);
                if (baseValue > 0)
                {
                    var realXpGained = profile.AddExperience(baseValue);
                    if (realXpGained > 0)
                    {
                        ViewBag.HasExperience    = true;
                        ViewBag.GainedExperience = baseValue;
                    }
                }
            }
            await _context.WebsiteReviews.AddAsync(model);

            await _context.SaveChangesAsync();

            _cache.Remove(Cache.LastReviews); // refresh the cache
            ViewBag.IsRecent = true;
            return(PartialView("_ReviewPartial", model));
        }
Ejemplo n.º 2
0
        private static void ProcessExperience(int diff, PublicProfile author, bool isFromDownVote = false)
        {
            if (diff == 0)
            {
                return;
            }
            var sign       = Math.Clamp(diff, -1, 1);
            var downvoteXp = diff * UpvoteExperienceBonus / 4;
            var xp         = UpvoteExperienceBonus * sign;

            if (isFromDownVote && diff <= 1)
            {
                xp = downvoteXp;
            }
            if (diff > 1 || diff < -1) // big vote (upvote -> downvote)
            {
                xp += (downvoteXp / diff) * sign;
            }
            author.AddExperience(xp);
        }