public object Any(Love request) { Guid userId = UserSession.GetUserId(); LoveResponse response = new LoveResponse { Result = ErrorCode.OK, }; TableRepository tableRepository = new TableRepository(); UserQuestionEntry userQuestionEntry = tableRepository.Get<UserQuestionEntry>(Tables.UserQuestion, request.QuestionId, userId); // Création d'un nouveau vote if (userQuestionEntry == null) { DateTime dateTime = DateTime.UtcNow; userQuestionEntry = new UserQuestionEntry(request.QuestionId, userId) { Creation = dateTime, Modification = dateTime }; } else { userQuestionEntry.Modification = DateTime.UtcNow; } userQuestionEntry.Love = !userQuestionEntry.Love; // insert le vote tableRepository.InsertOrReplace(userQuestionEntry, Tables.UserQuestion); return response; }
public object Any(Vote request) { Guid userId = UserSession.GetUserId(); VoteResponse response = new VoteResponse { Result = ErrorCode.OK, }; TableRepository tableRepository = new TableRepository(); UserQuestionEntry userQuestionEntry = tableRepository.Get<UserQuestionEntry>(Tables.UserQuestion, request.QuestionId, userId); // Création d'un nouveau vote if (userQuestionEntry == null) { DateTime dateTime = DateTime.UtcNow; userQuestionEntry = new UserQuestionEntry(request.QuestionId, userId) { Creation = dateTime, Modification = dateTime }; } else { userQuestionEntry.Modification = DateTime.UtcNow; } Guid target = request.VoteTarget == VoteTarget.Question ? request.QuestionId : request.OwnerId; HashSet<string> votesUp = new HashSet<string>(userQuestionEntry.VotesUp?.Split('|') ?? new string[] { }); HashSet<string> votesDown = new HashSet<string>(userQuestionEntry.VotesDown?.Split('|') ?? new string[] { }); VoteKind oldValue = VoteKind.None; if (votesUp.Contains(target.ToString())) oldValue = VoteKind.Up; else if (votesDown.Contains(target.ToString())) oldValue = VoteKind.Down; response.VoteKind = request.VoteKind; votesUp.Remove(target.ToString()); votesDown.Remove(target.ToString()); if (response.VoteKind == oldValue) response.VoteKind = VoteKind.None; else { switch (response.VoteKind) { case VoteKind.Up: votesUp.Add(target.ToString()); break; case VoteKind.Down: votesDown.Add(target.ToString()); break; } } userQuestionEntry.VotesUp = votesUp.Join("|"); userQuestionEntry.VotesDown = votesDown.Join("|"); if (request.VoteTarget == VoteTarget.Answer) { AnswerEntry answerEntry = tableRepository.Get<AnswerEntry>(Tables.Answers, request.QuestionId, request.OwnerId); answerEntry.Votes -= (int)oldValue; answerEntry.Votes += (int)response.VoteKind; tableRepository.InsertOrMerge(answerEntry, Tables.Answers); response.VoteValue = answerEntry.Votes; // badges if (response.VoteKind == VoteKind.Up) { switch (answerEntry.Votes) { case 1: AllBadges.Approved.CreateIfNotExist(tableRepository, answerEntry.GetAnswerOwnerId()); break; case 10: AllBadges.NiceAnswer.CreateForQuestion(tableRepository, answerEntry.GetAnswerOwnerId(), request.QuestionId); break; case 25: AllBadges.GoodAnswer.CreateForQuestion(tableRepository, answerEntry.GetAnswerOwnerId(), request.QuestionId); break; case 100: AllBadges.GreatAnswer.CreateForQuestion(tableRepository, answerEntry.GetAnswerOwnerId(), request.QuestionId); break; } } } else { QuestionEntry questionEntry = tableRepository.Get<QuestionEntry>(Tables.Questions, request.OwnerId, request.QuestionId); questionEntry.Votes -= (int)oldValue; questionEntry.Votes += (int)response.VoteKind; tableRepository.InsertOrMerge(questionEntry, Tables.Questions); response.VoteValue = questionEntry.Votes; // badges if (response.VoteKind == VoteKind.Up) { switch (questionEntry.Votes) { case 1: AllBadges.Padawan.CreateIfNotExist(tableRepository, questionEntry.GetOwnerId()); break; case 10: AllBadges.NiceQuestion.CreateForQuestion(tableRepository, questionEntry.GetOwnerId(), request.QuestionId); break; case 25: AllBadges.GoodQuestion.CreateForQuestion(tableRepository, questionEntry.GetOwnerId(), request.QuestionId); break; case 100: AllBadges.GreatQuestion.CreateForQuestion(tableRepository, questionEntry.GetOwnerId(), request.QuestionId); break; } } } // insert le vote tableRepository.InsertOrReplace(userQuestionEntry, Tables.UserQuestion); // badges if (response.VoteKind == VoteKind.Up) AllBadges.Supporter.CreateIfNotExist(tableRepository, userId); else if (response.VoteKind == VoteKind.Down) AllBadges.Critic.CreateIfNotExist(tableRepository, userId); return response; }