Example #1
0
        public PostNewDiscussionRespond Post(PostNewDiscussionRequest body)
        {
            var areArgumentsValid = body != null &&
                                    !string.IsNullOrEmpty(body.ClassRoomId) &&
                                    !string.IsNullOrEmpty(body.CommentId) &&
                                    !string.IsNullOrEmpty(body.Description) &&
                                    !string.IsNullOrEmpty(body.LessonId) &&
                                    !string.IsNullOrEmpty(body.UserProfileId);

            if (!areArgumentsValid)
            {
                return(null);
            }

            UserProfile userprofile;
            var         canAccessToTheClassRoom = _userprofileRepo.CheckAccessPermissionToSelectedClassRoom(body.UserProfileId, body.ClassRoomId, out userprofile);

            if (!canAccessToTheClassRoom)
            {
                return(null);
            }

            var now       = _dateTime.GetCurrentTime();
            var isTeacher = userprofile.Subscriptions.Any(it => !it.DeletedDate.HasValue && it.ClassRoomId == body.ClassRoomId && it.Role == UserProfile.AccountRole.Teacher);
            var canAccessToTheClassLesson = _classCalendarRepo.CheckAccessPermissionToSelectedClassLesson(body.ClassRoomId, body.LessonId, now, isTeacher);

            if (!canAccessToTheClassLesson)
            {
                return(null);
            }

            var selectedComment = _commentRepo.GetCommentById(body.CommentId);
            var isCommentValid  = selectedComment != null &&
                                  selectedComment.LessonId.Equals(body.LessonId, StringComparison.CurrentCultureIgnoreCase) &&
                                  selectedComment.id.Equals(body.CommentId, StringComparison.CurrentCultureIgnoreCase) &&
                                  !selectedComment.DeletedDate.HasValue;

            if (!isCommentValid)
            {
                return(null);
            }

            var selectedUserActivity = _userActivityRepo.GetUserActivityByUserProfileIdAndClassRoomId(body.UserProfileId, body.ClassRoomId);
            var isUserActivityValid  = selectedUserActivity != null && !selectedUserActivity.DeletedDate.HasValue;

            if (!isUserActivityValid)
            {
                return(null);
            }

            var selectedLesson = selectedUserActivity.LessonActivities.FirstOrDefault(it => it.LessonId == body.LessonId);

            if (selectedLesson == null)
            {
                return(null);
            }

            if (!isTeacher)
            {
                var isCommentOwner = selectedComment.CreatedByUserProfileId.Equals(body.UserProfileId, StringComparison.CurrentCultureIgnoreCase);
                if (!isCommentOwner)
                {
                    var canPostNewDiscussion = _userprofileRepo.CheckAccessPermissionToUserProfile(selectedComment.CreatedByUserProfileId);
                    if (!canPostNewDiscussion)
                    {
                        return(null);
                    }
                }
            }

            var id            = Guid.NewGuid().ToString();
            var discussions   = selectedComment.Discussions.ToList();
            var newDiscussion = new Comment.Discussion
            {
                id = id,
                CreatedByUserProfileId = body.UserProfileId,
                CreatorDisplayName     = userprofile.Name,
                CreatorImageUrl        = userprofile.ImageProfileUrl,
                Description            = body.Description,
                CreatedDate            = now,
            };

            discussions.Add(newDiscussion);
            selectedComment.Discussions = discussions;
            _commentRepo.UpsertComment(selectedComment);

            selectedLesson.ParticipationAmount++;
            _userActivityRepo.UpsertUserActivity(selectedUserActivity);
            _notificationCtrl.SendNotification();
            return(new PostNewDiscussionRespond {
                ActualCommentId = id
            });
        }
        public PostNewCommentRespond Post(PostNewCommentRequest body)
        {
            var areArgumentsValid = body != null &&
                                    !string.IsNullOrEmpty(body.ClassRoomId) &&
                                    !string.IsNullOrEmpty(body.Description) &&
                                    !string.IsNullOrEmpty(body.LessonId) &&
                                    !string.IsNullOrEmpty(body.UserProfileId);

            if (!areArgumentsValid)
            {
                return(null);
            }

            UserProfile userprofile;
            var         canAccessToTheClassRoom = _userprofileRepo.CheckAccessPermissionToSelectedClassRoom(body.UserProfileId, body.ClassRoomId, out userprofile);

            if (!canAccessToTheClassRoom)
            {
                return(null);
            }

            var now = _dateTime.GetCurrentTime();
            var canAccessToTheClassLesson = _classCalendarRepo.CheckAccessPermissionToSelectedClassLesson(body.ClassRoomId, body.LessonId, now);

            if (!canAccessToTheClassLesson)
            {
                return(null);
            }

            var selectedUserActivity = _userActivityRepo.GetUserActivityByUserProfileIdAndClassRoomId(body.UserProfileId, body.ClassRoomId);

            if (selectedUserActivity == null)
            {
                return(null);
            }

            var selectedLesson = selectedUserActivity.LessonActivities.FirstOrDefault(it => it.LessonId == body.LessonId);

            if (selectedLesson == null)
            {
                return(null);
            }

            var id         = Guid.NewGuid().ToString();
            var newComment = new Comment
            {
                id                     = id,
                ClassRoomId            = body.ClassRoomId,
                CreatedByUserProfileId = body.UserProfileId,
                Description            = body.Description,
                LessonId               = body.LessonId,
                CreatedDate            = now,
                CreatorDisplayName     = userprofile.Name,
                CreatorImageUrl        = userprofile.ImageProfileUrl,
                Discussions            = Enumerable.Empty <Comment.Discussion>(),
            };

            _commentRepo.UpsertComment(newComment);

            selectedLesson.CreatedCommentAmount++;
            _userActivityRepo.UpsertUserActivity(selectedUserActivity);
            _notificationCtrl.SendNotification();
            return(new PostNewCommentRespond {
                ActualCommentId = id
            });
        }
        public void Post(LikeLessonRequest body)
        {
            var isArgumentValid = body != null &&
                                  !string.IsNullOrEmpty(body.ClassRoomId) &&
                                  !string.IsNullOrEmpty(body.LessonId) &&
                                  !string.IsNullOrEmpty(body.UserProfileId);

            if (!isArgumentValid)
            {
                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 selectedClassRoom    = _classRoomRepo.GetClassRoomById(body.ClassRoomId);
            var isLikeConditionValid = selectedClassRoom != null && selectedClassRoom.Lessons.Any(it => it.id == body.LessonId);

            if (!isLikeConditionValid)
            {
                return;
            }

            var likeLessons = _likeLessonRepo.GetLikeLessonsByLessonId(body.LessonId)
                              .Where(it => !it.DeletedDate.HasValue)
                              .ToList();

            if (likeLessons == null)
            {
                return;
            }

            var likedLessonsByThisUser = likeLessons
                                         .Where(it => it.LikedByUserProfileId.Equals(body.UserProfileId, StringComparison.CurrentCultureIgnoreCase));

            var isUnlike = likedLessonsByThisUser.Any();

            if (isUnlike)
            {
                foreach (var item in likedLessonsByThisUser)
                {
                    item.DeletedDate = now;
                    _likeLessonRepo.UpsertLikeLesson(item);
                }
            }
            else
            {
                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 LikeLesson
                {
                    id                   = Guid.NewGuid().ToString(),
                    ClassRoomId          = body.ClassRoomId,
                    LessonId             = body.LessonId,
                    LikedByUserProfileId = body.UserProfileId,
                    CreatedDate          = now
                };
                likeLessons.Add(newLike);
                _likeLessonRepo.UpsertLikeLesson(newLike);
            }

            var selectedLesson = selectedClassRoom.Lessons.First(it => it.id == body.LessonId);

            selectedLesson.TotalLikes = likeLessons.Where(it => !it.DeletedDate.HasValue).Count();
            _classRoomRepo.UpsertClassRoom(selectedClassRoom);
            _notificationCtrl.SendNotification();
        }