// POST api/values public void Post([FromBody] string value) { OutOfRangeEntities db = new OutOfRangeEntities(); db.Tags.Add(new Tag() { Description = value, Name = value, }); db.SaveChanges(); }
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(); }
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))); }