Пример #1
0
            public async Task <IEnumerable <PaymentDto> > GetAsync(PaymentsQuery query, CancellationToken token)
            {
                StudyRoomSession studyRoomSessionAlias = null;
                StudyRoom        studyRoomAlias        = null;

                Core.Entities.Tutor tutorAlias         = null;
                StudyRoomUser       studyRoomUserAlias = null;
                User studentAlias   = null;
                User tutorUserAlias = null;

                PaymentDto resultDto = null;

                var res = _session.QueryOver(() => studyRoomSessionAlias)
                          .JoinAlias(x => x.StudyRoom, () => studyRoomAlias)
                          .JoinEntityAlias(() => tutorAlias, () => studyRoomAlias.Tutor.Id == tutorAlias.Id)
                          .JoinEntityAlias(() => studyRoomUserAlias,
                                           () => studyRoomAlias.Id == studyRoomUserAlias.Room.Id &&
                                           tutorAlias.Id != studyRoomUserAlias.User.Id)
                          .JoinEntityAlias(() => studentAlias, () => studyRoomUserAlias.User.Id == studentAlias.Id)
                          .JoinEntityAlias(() => tutorUserAlias, () => tutorUserAlias.Id == tutorAlias.User.Id)
                          .Where(w => w.Receipt == null)
                          .Where(w => w.Duration.Value > TimeSpan.FromMinutes(10));

                if (!string.IsNullOrEmpty(query.Country))
                {
                    res = res.Where(w => studentAlias.Country == query.Country || tutorUserAlias.Country == query.Country);
                }

                return(await res.SelectList(sl =>
                                            sl.Select(s => s.Id).WithAlias(() => resultDto.StudyRoomSessionId)
                                            .Select(s => s.Price).WithAlias(() => resultDto.Price)
                                            .Select(Projections.Conditional(
                                                        Restrictions.IsNull(Projections.Property(() => tutorAlias.SellerKey)),
                                                        Projections.Constant(false),
                                                        Projections.Constant(true)
                                                        )).WithAlias(() => resultDto.IsSellerKeyExists)
                                            .Select(Projections.Conditional(
                                                        Restrictions.Eq(Projections.Property(() => studentAlias.PaymentExists), PaymentStatus.None),
                                                        Projections.Constant(false),
                                                        Projections.Constant(true)
                                                        )).WithAlias(() => resultDto.IsPaymentKeyExists)
                                            .Select(s => tutorAlias.Id).WithAlias(() => resultDto.TutorId)
                                            .Select(s => tutorUserAlias.Name).WithAlias(() => resultDto.TutorName)
                                            .Select(s => studentAlias.Id).WithAlias(() => resultDto.UserId)
                                            .Select(s => studentAlias.Name).WithAlias(() => resultDto.UserName)
                                            .Select(s => s.Created).WithAlias(() => resultDto.Created)
                                            .Select(s => s.Duration.Value).WithAlias(() => resultDto.Duration).WithAlias(() => resultDto.Duration)
                                            .Select(s => s.RealDuration.Value).WithAlias(() => resultDto.RealDuration).WithAlias(() => resultDto.RealDuration)
                                            //.Select(Projections.SqlFunction("COALESCE", NHibernateUtil.TimeSpan
                                            //               , Projections.Property<StudyRoomSession>(s => s.RealDuration.Value)
                                            //               , Projections.Property<StudyRoomSession>(s => s.Duration.Value))
                                            //).WithAlias(() => resultDto.Duration)
                                            .Select(Projections.Conditional(
                                                        Restrictions.IsNull(Projections.Property <StudyRoomSession>(s => s.RealDuration)),
                                                        Projections.Constant(false),
                                                        Projections.Constant(true)
                                                        )).WithAlias(() => resultDto.IsRealDurationExitsts)
                                            ).TransformUsing(Transformers.AliasToBean <PaymentDto>())
                       .ListAsync <PaymentDto>());
            }
Пример #2
0
            public async Task <TutorActionsDto> GetAsync(TutorActionsQuery query, CancellationToken token)
            {
                var calendarFuture = _session.Query <GoogleTokens>()
                                     .Where(w => w.Id == query.UserId.ToString())
                                     .Take(1)
                                     .ToFutureValue();

                var hoursFuture = _session.Query <TutorHours>()
                                  .Where(w => w.Tutor.Id == query.UserId)
                                  .Take(1)
                                  .ToFutureValue();

                StudyRoom     studyRoomAlias     = null;
                StudyRoomUser studyRoomUserAlias = null;
                User          userAlias          = null;

                Core.Entities.Tutor tutorAlias      = null;
                AdminTutor          adminTutorAlias = null;



                var bookedSessionFuture = _session.QueryOver(() => studyRoomAlias)
                                          .JoinAlias(f => f.Users, () => studyRoomUserAlias)
                                          .JoinEntityAlias(() => userAlias, () => userAlias.Id == studyRoomUserAlias.User.Id)
                                          .JoinEntityAlias(() => tutorAlias, () => studyRoomAlias.Tutor.Id == tutorAlias.Id)
                                          .JoinEntityAlias(() => adminTutorAlias, () => tutorAlias.Id == adminTutorAlias.Tutor.Id)
                                          //.WhereRestrictionOn(() => studyRoomAlias.Tutor.Id).IsIn(adminList)
                                          .Where(w => userAlias.Id == query.UserId)
                                          .Where(w => adminTutorAlias.Id != null)
                                          .Select(s => s.Id)
                                          .Take(1)
                                          .FutureValue <Guid?>();

                var calendarShared = await calendarFuture.GetValueAsync(token) != null;

                var haveHours = await hoursFuture.GetValueAsync(token) != null;

                var bookedSession = await bookedSessionFuture.GetValueAsync(token) != null;

                var res = new TutorActionsDto()
                {
                    CalendarShared = calendarShared,
                    HaveHours      = haveHours,
                    BookedSession  = bookedSession
                };

                return(res);
            }
Пример #3
0
            public async Task <IEnumerable <UserStudyRoomDto> > GetAsync(UserStudyRoomQuery query, CancellationToken token)
            {
                StudyRoom studyRoomAlias = null;
                //StudyRoomSession studyRoomSessionAlias = null;
                StudyRoomUser studyRoomUserAlias = null;
                User          userAlias          = null;

                UserStudyRoomDto resultAlias = null;


                //_session.Query<StudyRoomUser>()
                //    .Fetch(f=>f.Room)
                //    .ThenFetch(f=>f.Users)
                var detachedQuery = QueryOver.Of <StudyRoomUser>()
                                    .Where(w => w.User.Id == query.UserId)
                                    .Select(s => s.Room.Id);

                return(await _session.QueryOver(() => studyRoomAlias)
                       .JoinAlias(x => x.Users, () => studyRoomUserAlias)
                       .JoinEntityAlias(() => userAlias,
                                        () => userAlias.Id == studyRoomUserAlias.User.Id && userAlias.Id != query.UserId)
                       .WithSubquery.WhereProperty(x => x.Id).In(detachedQuery)
                       .SelectList(sl =>
                                   sl.Select(s => userAlias.Name).WithAlias(() => resultAlias.Name)
                                   .Select(s => userAlias.ImageName).WithAlias(() => resultAlias.Image)
                                   .Select(s => userAlias.Online).WithAlias(() => resultAlias.Online)
                                   .Select(s => userAlias.Id).WithAlias(() => resultAlias.UserId)
                                   .Select(s => s.Id).WithAlias(() => resultAlias.Id)
                                   .Select(s => s.DateTime.CreationTime).WithAlias(() => resultAlias.DateTime)
                                   .Select(s => s.Identifier).WithAlias(() => resultAlias.ConversationId)
                                   .Select(Projections.SqlFunction("coalesce", NHibernateUtil.DateTime,
                                                                   Projections.Property(() => studyRoomAlias.DateTime.UpdateTime),
                                                                   Projections.Property(() => studyRoomAlias.DateTime.CreationTime)))
                                   .WithAlias(() => resultAlias.LastSession)
                                   )
                       .OrderBy(Projections.SqlFunction("COALESCE", NHibernateUtil.Object,
                                                        Projections.Property(() => studyRoomAlias.DateTime.UpdateTime),
                                                        Projections.Property(() => studyRoomAlias.DateTime.CreationTime))).Desc
                       //TODO on nhibernate 5.3 need to fix.
                       .TransformUsing(Transformers.AliasToBean <UserStudyRoomDto>())
                       .ListAsync <UserStudyRoomDto>(token));/*.OrderByDescending(o => o.LastActive > o.DateTime ? o.LastActive : o.DateTime)*/
            }
Пример #4
0
 public StudyRoomOnlineChangeEvent(StudyRoomUser studyUser)
 {
     StudyUser = studyUser;
 }