Example #1
0
        // POST api/values
        public void Post([FromBody] string value)
        {
            OutOfRangeEntities db = new OutOfRangeEntities();

            db.Tags.Add(new Tag()
            {
                Description = value,
                Name        = value,
            });
            db.SaveChanges();
        }
Example #2
0
        public IHttpActionResult PostComment(Comment comment)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            comment.ID     = Guid.NewGuid();
            comment.Added  = DateTime.Now;
            comment.UserID = User.Identity.GetUserId();

            db.Comments.Add(comment);

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateException)
            {
                if (CommentExists(comment.ID))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }
            db      = new OutOfRangeEntities();
            comment = db.Comments.Find(comment.ID);

            Guid categoryId = Guid.Empty;

            if (comment.Answer != null)
            {
                categoryId = comment.Answer.Question.CategoryID;
            }
            else if (comment.Question != null)
            {
                categoryId = comment.Question.CategoryID;
            }

            PointsUtils.AddCreditsAndXP(comment.UserID, categoryId, 4, 7);

            return(CreatedAtRoute("DefaultApi", new { id = comment.ID }, CommentDTO.FromEntity(comment)));
        }
        /// <summary>
        /// Set user credits and xp on category; also adjusts user level on the given category if necessary.
        /// Give negative values if you need to subtract points
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="categoryId"></param>
        /// <param name="credits"></param>
        /// <param name="xp"></param>
        public static void AddCreditsAndXP(string userId, Guid categoryId, int credits, int xp)
        {
            OutOfRangeEntities db   = new OutOfRangeEntities();
            AspNetUser         user = db.AspNetUsers.Single(x => x.Id == userId);

            user.Credits += credits;
            UserLevel userLevel;

            List <UserLevel> list = db.UserLevels.Where(x => x.UserID == userId).Where(x => x.CategoryID == categoryId).ToList();

            if (list.Count == 0)
            {
                userLevel             = new UserLevel();
                userLevel.UserID      = userId;
                userLevel.CategoryID  = categoryId;
                userLevel.XP          = 0;
                userLevel.Obtained    = DateTime.Now;
                userLevel.UserLevelID = Guid.NewGuid();
                user.UserLevels.Add(userLevel);
                db.SaveChanges();
            }
            else
            {
                userLevel = list.ElementAt(0);
            }

            userLevel.XP += xp;

            db.Entry(userLevel).State = EntityState.Modified;
            db.Entry(user).State      = EntityState.Modified;

            int prevLevel    = userLevel.Level;
            int currentLevel = (int)Math.Floor(Math.Sqrt((double)userLevel.XP) / 5);

            if (prevLevel != currentLevel)
            {
                //do something here? notify user? have fun
                userLevel.Level    = currentLevel;
                userLevel.Obtained = DateTime.Now;
            }
            db.SaveChanges();
        }
Example #4
0
        public IHttpActionResult PostAnswer(Answer answer)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            answer.ID     = Guid.NewGuid();
            answer.Added  = DateTime.Now;
            answer.UserID = User.Identity.GetUserId();

            db.Answers.Add(answer);

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateException)
            {
                if (AnswerExists(answer.ID))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }

            db     = new OutOfRangeEntities();
            answer = db.Answers.Find(answer.ID);

            Category category = db.Categories.Single(x => x.ID == answer.Question.CategoryID);

            PointsUtils.AddCreditsAndXP(answer.UserID, category.ID, 10, 15);

            return(CreatedAtRoute("DefaultApi", new { id = answer.ID }, AnswerDTO.FromEntity(answer)));
        }
        public static void giveBadge(string userId, Guid categoryId, String identifierName, int rarity, Guid itemId)
        {
            OutOfRangeEntities db   = new OutOfRangeEntities();
            AspNetUser         user = db.AspNetUsers.Single(x => x.Id == userId);
            Badge badge             = db.Badges.Where(x => (x.IdentifierName == identifierName && x.Rarity == rarity)).FirstOrDefault();

            if (user != null && badge != null)
            {
                UserLevel userLevel = user.UserLevels.Where(x => x.CategoryID == categoryId).FirstOrDefault();
                if (userLevel != null)
                {
                    userLevel.UserBadges.Add(new UserBadge()
                    {
                        Badge    = badge,
                        Obtained = DateTime.Now,
                        ItemID   = itemId
                    });
                    user.Credits        += badge.Reward;
                    db.Entry(user).State = EntityState.Modified;
                    db.SaveChanges();
                }
            }
        }
        public IHttpActionResult GetQuestion(Guid id)
        {
            Question question = db.Questions.Find(id);

            if (question == null)
            {
                return(NotFound());
            }

            string userId = "";

            if (User.Identity.IsAuthenticated)
            {
                userId = User.Identity.GetUserId();
                var view = question.QuestionViews.Where(x => x.UserID == userId).ToList();
                if (view.Count == 0)
                {
                    question.QuestionViews.Add(new QuestionView()
                    {
                        UserID    = userId,
                        Added     = DateTime.Now,
                        LastVisit = DateTime.Now,
                    });
                    db.Entry(question).State = EntityState.Modified;
                }
                else
                {
                    view.First().LastVisit = DateTime.Now;
                    db.Entry(view.First()).State = EntityState.Modified;
                }
            }

            db.SaveChanges();
            db       = new OutOfRangeEntities();
            question = db.Questions.Find(id);
            QuestionDTO jsonQuestion = new QuestionDTO(question);

            if (User.Identity.IsAuthenticated)
            {
                var qScore = question.ScoreItems.Where(x => x.UserID == userId).ToList();
                if (qScore.Count > 0)
                {
                    var score = qScore.First().Score;
                    jsonQuestion.ScoreGiven = decimal.ToInt32(score);
                }
                foreach (var comment in jsonQuestion.Comments)
                {
                    var comm      = db.Comments.Find(comment.ID);
                    var qComScore = comm.ScoreItems.Where(x => x.UserID == userId).ToList();
                    if (qComScore.Count > 0)
                    {
                        var score = qComScore.First().Score;
                        comment.ScoreGiven = decimal.ToInt32(score);
                    }
                }
                foreach (var answer in jsonQuestion.Answers)
                {
                    var answ       = db.Answers.Find(answer.ID);
                    var qAnswScore = answ.ScoreItems.Where(x => x.UserID == userId).ToList();
                    if (qAnswScore.Count > 0)
                    {
                        var score = qAnswScore.First().Score;
                        answer.ScoreGiven = decimal.ToInt32(score);
                    }
                    foreach (var comment in answer.Comments)
                    {
                        var comm      = db.Comments.Find(comment.ID);
                        var qComScore = comm.ScoreItems.Where(x => x.UserID == userId).ToList();
                        if (qComScore.Count > 0)
                        {
                            var score = qComScore.First().Score;
                            comment.ScoreGiven = decimal.ToInt32(score);
                        }
                    }
                }
            }
            int viewsNumber = question.QuestionViews.Count();

            if (viewsNumber == 100)
            {
                PointsUtils.giveBadge(question.AspNetUser.Id, question.CategoryID, "views", 0, question.ID);
            }
            else if (viewsNumber == 300)
            {
                PointsUtils.giveBadge(question.AspNetUser.Id, question.CategoryID, "views", 1, question.ID);
            }
            else if (viewsNumber == 500)
            {
                PointsUtils.giveBadge(question.AspNetUser.Id, question.CategoryID, "views", 2, question.ID);
            }
            else if (viewsNumber == 1000)
            {
                PointsUtils.giveBadge(question.AspNetUser.Id, question.CategoryID, "views", 3, question.ID);
            }

            return(Ok(jsonQuestion));
        }
        public IHttpActionResult PostQuestion(Question question)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            string     userId = User.Identity.GetUserId();
            AspNetUser user   = db.AspNetUsers.Single(x => x.Id == userId);

            if (question.Bounty > user.Credits && question.Bounty > 0)
            {
                return(BadRequest("Cannot add a bounty with more points than you have"));
            }
            user.Credits        -= question.Bounty;
            db.Entry(user).State = EntityState.Modified;
            List <Tag> removingTags = new List <Tag>();
            List <Tag> addingTags   = new List <Tag>();

            foreach (var tag in question.Tags)
            {
                var currentTag = db.Tags.SingleOrDefault(x => x.Name.ToLower() == tag.Name.ToLower());
                if (currentTag == null)
                {
                    tag.ID = Guid.NewGuid();

                    //Tag newTag = new Tag()
                    //{
                    //    Name = tag.Name.ToLower(),
                    //    Description = tag.Description,
                    //    ID = Guid.NewGuid()
                    //};
                    //db.Tags.Add(newTag);
                }
                else
                {
                    removingTags.Add(tag);
                    addingTags.Add(currentTag);
                }
            }

            foreach (var removingTag in removingTags)
            {
                question.Tags.Remove(removingTag);
            }

            foreach (var addingTag in addingTags)
            {
                question.Tags.Add(addingTag);
            }



            question.ID = Guid.NewGuid();

            //guid hardcodat al unui user
            if (User.Identity.IsAuthenticated)
            {
                question.UserID = userId;
            }
            else
            {
                question.UserID = "9e03ab56-d1c8-460a-ad48-fa7c6e69bf18";
            }

            question.Added    = DateTime.Now;
            question.Modified = DateTime.Now;
            //Category ca sa mearga (bine ca nu's puse FK inca)
            db.Questions.Add(question);

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateException e)
            {
                if (QuestionExists(question.ID))
                {
                    return(Conflict());
                }
                else
                {
                    throw e;
                }
            }
            PointsUtils.AddCreditsAndXP(userId, question.CategoryID, 10, 15);

            int questionsNumber = user.Questions.Where(x => x.CategoryID == question.CategoryID).Count();
            int badgeRarity     = PointsUtils.getQuestionBadgeRarity(questionsNumber);

            if (badgeRarity != -1)
            {
                PointsUtils.giveBadge(userId, question.CategoryID, "question", badgeRarity, question.ID);
            }

            db       = new OutOfRangeEntities();
            question = db.Questions.Find(question.ID);
            return(CreatedAtRoute("DefaultApi", new { id = question.ID }, QuestionDTO.FromEntity(question)));
        }