/// <summary> /// อัพเดทหรือเพิ่มข้อมูล like discussion /// </summary> /// <param name="item">ข้อมูล like discussion ที่จะดำเนินการ</param> public void UpsertLikeDiscussion(LikeDiscussion data) { var update = Builders <LikeDiscussion> .Update .Set(it => it.ClassRoomId, data.ClassRoomId) .Set(it => it.CommentId, data.CommentId) .Set(it => it.DiscussionId, data.DiscussionId) .Set(it => it.LessonId, data.LessonId) .Set(it => it.LikedByUserProfileId, data.LikedByUserProfileId) .Set(it => it.LastNotifyRequest, data.LastNotifyRequest) .Set(it => it.LastNotifyComplete, data.LastNotifyComplete) .Set(it => it.CreatedDate, data.CreatedDate) .Set(it => it.DeletedDate, data.DeletedDate); var updateOption = new UpdateOptions { IsUpsert = true }; MongoAccess.MongoUtil.Instance.GetCollection <LikeDiscussion>(TableName) .UpdateOne(it => it.id == data.id, update, updateOption); }
public void Like(LikeDiscussionRequest body) { var areArgumentsValid = body != null && !string.IsNullOrEmpty(body.ClassRoomId) && !string.IsNullOrEmpty(body.CommentId) && !string.IsNullOrEmpty(body.DiscussionId) && !string.IsNullOrEmpty(body.UserProfileId) && !string.IsNullOrEmpty(body.LessonId); if (!areArgumentsValid) { return; } var canAccessToTheClassRoom = _userprofileRepo.CheckAccessPermissionToSelectedClassRoom(body.UserProfileId, body.ClassRoomId); if (!canAccessToTheClassRoom) { return; } var now = _dateTime.GetCurrentTime(); var canAccessToTheClassLesson = _classCalendarRepo.CheckAccessPermissionToSelectedClassLesson(body.ClassRoomId, body.LessonId, now); if (!canAccessToTheClassLesson) { return; } var selectedComment = _commentRepo.GetCommentById(body.CommentId); if (selectedComment == null) { return; } var selectedDiscussion = selectedComment.Discussions.FirstOrDefault(it => it.id.Equals(body.DiscussionId, StringComparison.CurrentCultureIgnoreCase)); if (selectedDiscussion == null) { return; } var likeDiscussions = _likeDiscussionRepo.GetLikeDiscussionByDiscusionId(body.DiscussionId) .Where(it => !it.DeletedDate.HasValue) .ToList(); var likedDiscussionsByThisUser = likeDiscussions .Where(it => it.LikedByUserProfileId.Equals(body.UserProfileId, StringComparison.CurrentCultureIgnoreCase)); var isUnlike = likedDiscussionsByThisUser.Any(); if (isUnlike) { foreach (var item in likedDiscussionsByThisUser) { item.DeletedDate = now; _likeDiscussionRepo.UpsertLikeDiscussion(item); } } else { var isCommentOwner = selectedComment.CreatedByUserProfileId.Equals(body.UserProfileId, StringComparison.CurrentCultureIgnoreCase); if (!isCommentOwner) { var canLikeThisComment = _userprofileRepo.CheckAccessPermissionToUserProfile(selectedComment.CreatedByUserProfileId); if (!canLikeThisComment) { return; } } var selectedUserActivity = _userActivityRepo.GetUserActivityByUserProfileIdAndClassRoomId(body.UserProfileId, body.ClassRoomId); if (selectedUserActivity == null) { return; } var selectedLessonActivity = selectedUserActivity.LessonActivities.FirstOrDefault(it => it.LessonId.Equals(body.LessonId)); if (selectedLessonActivity == null) { return; } selectedLessonActivity.ParticipationAmount++; _userActivityRepo.UpsertUserActivity(selectedUserActivity); var newLike = new LikeDiscussion { id = Guid.NewGuid().ToString(), ClassRoomId = body.ClassRoomId, LessonId = body.LessonId, CommentId = body.CommentId, DiscussionId = body.DiscussionId, LikedByUserProfileId = body.UserProfileId, CreatedDate = now }; likeDiscussions.Add(newLike); _likeDiscussionRepo.UpsertLikeDiscussion(newLike); } selectedDiscussion.TotalLikes = likeDiscussions.Where(it => !it.DeletedDate.HasValue).Count(); _commentRepo.UpsertComment(selectedComment); _notificationCtrl.SendNotification(); }