protected override async Task <IEnumerable <UserProfile> > ExecuteAsync(QueryTemplateContext <GetUserProfileByUserIdQuery> context)
        {
            var queryParam = context.Parameter;


            var table = RethinkDB.R
                        .Table(nameof(UserProfile));

            var query = table
                        .Filter(x => x.GetField(nameof(UserProfile.OwnerId)).Eq(queryParam.UserId))
                        .Limit(1)
                        .Merge(profile => RethinkDB.R.HashMap(nameof(UserProfile.Owner), RethinkDB.R
                                                              .Table("ApplicationUser")
                                                              .Get(profile.GetField(nameof(UserProfile.OwnerId)))
                                                              .Pluck(nameof(User.FullName))));


            try
            {
                return((await query.RunCursorAsync <UserProfile>(context.Connection)).ToList());
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.ToString());
            }

            return(Enumerable.Empty <UserProfile>());
        }
Exemple #2
0
        protected override async Task <IEnumerable <UserProfileStats> > ExecuteAsync(QueryTemplateContext <GetUserProfileStatsQuery> context)
        {
            var queryParam = context.Parameter;

            var ideaTable        = RethinkDB.R.Table(nameof(Idea));
            var ideaCommentTable = RethinkDB.R.Table(nameof(IdeaComment));
            var ideaLikeTable    = RethinkDB.R.Table(nameof(IdeaLike));
            var usersTable       = RethinkDB.R.Table("ApplicationUser");

            var ideaLikesQuery = ideaLikeTable.Filter(x => x[nameof(IdeaLike.OwnerId)].Eq(queryParam.UserId) && x[nameof(IdeaLike.IsLike)].Eq(true)).Count();

            var ideaDisLikesQuery = ideaLikeTable.Filter(x => x[nameof(IdeaLike.OwnerId)].Eq(queryParam.UserId) && x[nameof(IdeaLike.IsLike)].Eq(false)).Count();

            var ideaCommentsQuery = ideaCommentTable.Filter(x => x[nameof(IdeaComment.OwnerId)].Eq(queryParam.UserId)).Count();

            var ideasQuery = ideaTable.Filter(x => x[nameof(Idea.OwnerId)].Eq(queryParam.UserId)).Filter(x => x.GetField(nameof(Idea.Status)).Eq(Status.Published.ToString())).Count();


            var stats = await usersTable.Get(queryParam.UserId).Pluck("id")
                        .Merge(user => RethinkDB.R.HashMap(nameof(UserProfileStats.Likes), ideaLikesQuery))
                        .Merge(RethinkDB.R.HashMap(nameof(UserProfileStats.DisLikes), ideaDisLikesQuery))
                        .Merge(RethinkDB.R.HashMap(nameof(UserProfileStats.Comments), ideaCommentsQuery))
                        .Merge(RethinkDB.R.HashMap(nameof(UserProfileStats.Ideas), ideasQuery))
                        .RunAtomAsync <UserProfileStats>(context.Connection);

            stats.UserId = queryParam.UserId;

            return(new[] { stats });
        }
        protected override async Task <IEnumerable <Idea> > ExecuteAsync(QueryTemplateContext <FilterIdeaQuery> context)
        {
            var queryParam = context.Parameter;

            var table = RethinkDB.R
                        .Table(nameof(Idea));


            var query = table.Filter(x => x.HasFields(nameof(Idea.Title)));

            if (!string.IsNullOrEmpty(queryParam.Keyword))
            {
                var keyword = $"(?i){queryParam.Keyword}";

                query = query.Filter(x => x[nameof(Idea.Title)].Match(keyword)
                                     .Or(x[nameof(Idea.Description)].Match(keyword)
                                         .Or(x[nameof(Idea.FundingRequirement)].Match(keyword))));
            }


            if (!string.IsNullOrEmpty(queryParam.Status))
            {
                query = query.Filter(x => x[nameof(Idea.Status)].Eq(queryParam.Status));
            }

            if (!string.IsNullOrEmpty(queryParam.OwnerId))
            {
                query = query.Filter(x => x[nameof(Idea.OwnerId)].Eq(queryParam.OwnerId));
            }

            var exlcudedProps  = new Collection <string>(queryParam.PropertiesToExclude);
            var optimizedQuery = query.Without(exlcudedProps);

            if (queryParam.Skip.HasValue)
            {
                optimizedQuery.Skip(queryParam.Skip);
            }

            if (queryParam.Take.HasValue)
            {
                optimizedQuery.Limit(queryParam.Take);
            }

            var finalQuery = optimizedQuery.Merge(idea => RethinkDB.R.HashMap(nameof(Idea.Owner), RethinkDB.R
                                                                              .Table("ApplicationUser")
                                                                              .Get(idea.GetField(nameof(Idea.OwnerId)))
                                                                              .Pluck(nameof(User.FullName))));

            var result = await finalQuery.RunCursorAsync <Idea>(context.Connection);

            return(result.ToList());
        }
Exemple #4
0
        protected override async Task <IEnumerable <IdeaComment> > ExecuteAsync(QueryTemplateContext <GetCommentByIdQuery> context)
        {
            var queryParam = context.Parameter;

            var table = RethinkDB.R
                        .Table(nameof(IdeaComment));

            var query = table.Get(queryParam.CommentId)
                        .Merge(idea => RethinkDB.R.HashMap(nameof(Idea.Owner), RethinkDB.R
                                                           .Table("ApplicationUser")
                                                           .Get(idea.GetField(nameof(IdeaComment.OwnerId)))
                                                           .Pluck(nameof(User.FullName))));

            return(new[] { await query.RunAtomAsync <IdeaComment>(context.Connection) });
        }
        protected override async Task <IEnumerable <TeamMember> > ExecuteAsync(QueryTemplateContext <GetTeamMemberByUserIdQuery> context)
        {
            var queryParam = context.Parameter;

            var table = RethinkDB.R
                        .Table(nameof(Team));

            var query = table
                        .Filter(x => x[nameof(Team.IdeaId)].Eq(queryParam.IdeaId))
                        .ConcatMap(x => x.GetField(nameof(Team.Members)))
                        .Filter(y => y[nameof(TeamMember.MemberUserId)].Eq(queryParam.UserId));

            var finalQuery = query.Merge(m => RethinkDB.R.HashMap(nameof(TeamMember.Member),
                                                                  RethinkDB.R.Table("ApplicationUser")
                                                                  .Get(m.GetField(nameof(TeamMember.MemberUserId))).Pluck(nameof(User.FullName))));

            return((await finalQuery.RunCursorAsync <TeamMember>(context.Connection)).ToList());
        }
        protected override async Task <IEnumerable <IdeaComment> > ExecuteAsync(QueryTemplateContext <GetIdeaCommentsByIdeaIdQuery> context)
        {
            var queryParam = context.Parameter;

            var table = RethinkDB.R
                        .Table(nameof(IdeaComment));

            var query = table
                        .OrderBy()
                        .OptArg("index", RethinkDB.R.Desc(nameof(IdeaComment.CreatedOn)))
                        .Filter(comment => comment.GetField(nameof(IdeaComment.IdeaId)).Eq(queryParam.IdeaId));

            var finalQuery = query.Merge(idea => RethinkDB.R.HashMap(nameof(Idea.Owner), RethinkDB.R
                                                                     .Table("ApplicationUser")
                                                                     .Get(idea.GetField(nameof(IdeaComment.OwnerId)))
                                                                     .Pluck(nameof(User.FullName))));

            return((await finalQuery.RunCursorAsync <IdeaComment>(context.Connection)).ToList());
        }
        protected override async Task <IEnumerable <IdeaLike> > ExecuteAsync(QueryTemplateContext <GetIdeaLikeByUserIdQuery> context)
        {
            var queryParam = context.Parameter;


            var table = RethinkDB.R
                        .Table(nameof(IdeaLike));


            var query = table
                        .Filter(x => x.GetField(nameof(IdeaLike.OwnerId)).Eq(queryParam.OwnerId).And(x.GetField(nameof(IdeaLike.IdeaId)).Eq(queryParam.IdeaId)))
                        .Limit(1)
                        .Merge(idea => RethinkDB.R.HashMap(nameof(IdeaLike.Owner), RethinkDB.R
                                                           .Table("ApplicationUser")
                                                           .Get(idea.GetField(nameof(IdeaLike.OwnerId)))
                                                           .Pluck(nameof(User.FullName))));

            return(new[] {
                (await query.RunCursorAsync <IdeaLike>(context.Connection)).FirstOrDefault()
            });
        }
        protected override async Task <IEnumerable <Idea> > ExecuteAsync(QueryTemplateContext <GetIdeaByIdQuery> context)
        {
            var queryParam = context.Parameter;


            var table = RethinkDB.R
                        .Table(nameof(Idea));

            //var filter =  RethinkDB.R.Js($@"(function(idea){{
            //      return idea.title.indexOf('{queryParam.Keyword}') >-1 ||idea.description.indexOf('{queryParam.Keyword}') > -1;
            //  }})");


            var query = table
                        .Get(queryParam.IdeaId)
                        .Merge(idea => RethinkDB.R.HashMap(nameof(Idea.Owner), RethinkDB.R
                                                           .Table("ApplicationUser")
                                                           .Get(idea.GetField(nameof(Idea.OwnerId)))
                                                           .Pluck(nameof(User.FullName))));

            return(new[] { await query.RunAtomAsync <Idea>(context.Connection) });
        }
        protected override async Task <IEnumerable <Team> > ExecuteAsync(QueryTemplateContext <GetTeamByIdeaIdQuery> context)
        {
            var queryParam = context.Parameter;

            var teamTable = RethinkDB.R.Table(nameof(Team));
            var userTable = RethinkDB.R.Table("ApplicationUser");

            var filterTeams = teamTable.Filter(x => x[nameof(Team.IdeaId)].Eq(queryParam.IdeaId));

            var query = filterTeams.Map(team =>
            {
                var teamMembers = team
                                  .GetField(nameof(Team.Members))
                                  .Map(member => {
                    return(member.Merge(RethinkDB.R.HashMap(nameof(TeamMember.Member),
                                                            userTable.Get(member.GetField(nameof(TeamMember.MemberUserId))).Pluck(nameof(User.FullName)))));
                });

                return(team.Merge(RethinkDB.R.HashMap(nameof(Team.Members), teamMembers)));
            });

            return((await query.RunCursorAsync <Team>(context.Connection)).ToList());
        }
Exemple #10
0
        protected override async Task <IEnumerable <Idea> > ExecuteAsync(QueryTemplateContext <GetTopIdeaQuery> context)
        {
            var queryParam = context.Parameter;

            var table = RethinkDB.R
                        .Table(nameof(Idea));

            var query = table
                        .OrderBy()
                        .OptArg("index", RethinkDB.R.Desc(nameof(Idea.Comments)))
                        .Limit(queryParam.Count)
                        .Filter(x => x.GetField(nameof(Idea.Status)).Eq(Status.Published.ToString()))
                        .Filter(x => x.HasFields(nameof(Idea.Title)));

            var finalQuery = query.Merge(idea => RethinkDB.R.HashMap(nameof(Idea.Owner), RethinkDB.R
                                                                     .Table("ApplicationUser")
                                                                     .Get(idea.GetField(nameof(Idea.OwnerId)))
                                                                     .Pluck(nameof(User.FullName))));

            var result = await finalQuery.RunCursorAsync <Idea>(context.Connection);

            return(result.ToList());
        }
 protected abstract Task <IEnumerable <TEntity> > ExecuteAsync(QueryTemplateContext <TQueryParam> context);
        protected override async Task <IEnumerable <IdeaCollaborationStats> > ExecuteAsync(QueryTemplateContext <GetIdeaCollaborationStatsQuery> context)
        {
            var queryParam = context.Parameter;

            var ideaTable        = RethinkDB.R.Table(nameof(Idea));
            var ideaCommentTable = RethinkDB.R.Table(nameof(IdeaComment));
            var ideaLikeTable    = RethinkDB.R.Table(nameof(IdeaLike));

            var ideaLikesQuery = ideaLikeTable.Filter(x => x[nameof(IdeaLike.IdeaId)].Eq(queryParam.IdeaId) && x[nameof(IdeaLike.IsLike)].Eq(true)).Count();

            var ideaDisLikesQuery = ideaLikeTable.Filter(x => x[nameof(IdeaLike.IdeaId)].Eq(queryParam.IdeaId) && x[nameof(IdeaLike.IsLike)].Eq(false)).Count();

            var ideaCommentsQuery = ideaCommentTable.Filter(x => x[nameof(IdeaLike.IdeaId)].Eq(queryParam.IdeaId)).Count();


            var getStatsTask = ideaTable.Get(queryParam.IdeaId)
                               .Pluck(nameof(IdeaLike.IdeaId))
                               .Merge(idea => RethinkDB.R.HashMap(nameof(IdeaCollaborationStats.Likes), ideaLikesQuery))
                               .Merge(idea => RethinkDB.R.HashMap(nameof(IdeaCollaborationStats.DisLikes), ideaDisLikesQuery))
                               .Merge(idea => RethinkDB.R.HashMap(nameof(IdeaCollaborationStats.Comments), ideaCommentsQuery))
                               .RunAtomAsync <IdeaCollaborationStats>(context.Connection);

            return(new[] { await getStatsTask });
        }