예제 #1
0
 public async Task SendSessionOnGoingNotificationToUser(string userId, TutoringSessionOnGoingDto sessionNotification)
 {
     await _hubContext.Clients
     .User(userId)
     .SendAsync("tutoring-session-on-going", sessionNotification);
 }
예제 #2
0
        public async Task RecheckUpcomingTutoringSessions()
        {
            var currentTime = _timeService.GetCurrentTime();
            var sessions    = await _tutoringSessionsRepository.GetFiltered(ts => ts.Status == TutoringSessionStatusEnum.Upcoming);

            foreach (var session in sessions)
            {
                var timeDifference = session.SessionDate - currentTime;

                if (timeDifference.TotalMinutes < -30)
                {
                    session.Status           = TutoringSessionStatusEnum.Finished;
                    session.StatusChangeDate = currentTime;
                    await _tutoringSessionsRepository.Update(session);

                    var studentNotification = new TutoringSessionFinishedNotificationDto {
                        SessionId = session.Id, ParticipantId = session.TutorId, TutorName = session.Tutor.FirstName + " " + session.Tutor.LastName, OpenNotificationDialog = true
                    };
                    var tutorNotification = new TutoringSessionFinishedNotificationDto {
                        ParticipantId = session.StudentId
                    };
                    await _hubsService.SendSessionFinishedNotificationToUser(session.StudentId, studentNotification);

                    await _hubsService.SendSessionFinishedNotificationToUser(session.TutorId, tutorNotification);

                    if (session.IsSubscribed)
                    {
                        var newSession = new TutoringSession
                        {
                            CreationDate = currentTime,
                            IsSubscribed = true,
                            ModuleId     = session.ModuleId,
                            SessionDate  = session.SessionDate.AddDays(7),
                            Status       = TutoringSessionStatusEnum.Upcoming,
                            StudentId    = session.StudentId,
                            TutorId      = session.TutorId
                        };

                        await _tutoringSessionsRepository.Create(newSession);
                    }
                }
                else if (timeDifference.TotalMinutes < 15 && !session.IsReminderSent)
                {
                    await _emailService.SendTutoringSessionReminder(session.Tutor.Email);

                    await _emailService.SendTutoringSessionReminder(session.Student.Email);

                    session.IsReminderSent = true;
                    await _tutoringSessionsRepository.Update(session);
                }
                else if (timeDifference.TotalMinutes < 0)
                {
                    var studentNotification = new TutoringSessionOnGoingDto
                    {
                        ModuleId      = session.ModuleId,
                        ParticipantId = session.TutorId,
                        IsStudent     = true
                    };
                    await _hubsService.SendSessionOnGoingNotificationToUser(session.StudentId, studentNotification);

                    var tutorNotification = new TutoringSessionOnGoingDto
                    {
                        ModuleId      = session.ModuleId,
                        ParticipantId = session.StudentId
                    };
                    await _hubsService.SendSessionOnGoingNotificationToUser(session.TutorId, tutorNotification);
                }
            }
        }