Example #1
0
        public async Task <NewsItemExtended[]> GetLatestAsync(int skip, int take, bool includeUnpublished)
        {
            var conn = await _dbService.GetConnectionAsync();

            var result = new List <NewsItemExtended>();

            if (includeUnpublished)
            {
                var subResult = await R
                                .Table(TableNames.NewsItems)
                                .Filter(r => r[nameof(NewsItem.Published)] == null)
                                .OrderBy(R.Desc(nameof(NewsItem.Created)))
                                // Join with users to get user name
                                .EqJoin(nameof(NewsItem.AuthorId), R.Table(TableNames.Users))
                                .Map(r => r["left"].Merge(new { AuthorName = r["right"][nameof(User.Name)] }))
                                .RunAtomAsync <NewsItemExtended[]>(conn);

                result.AddRange(subResult);
            }
            {
                var subResult = await R
                                .Table(TableNames.NewsItems)
                                .Filter(r => r[nameof(NewsItem.Published)] != null)
                                .OrderBy(R.Desc(nameof(NewsItem.Published)))
                                .Skip(skip)
                                .Limit(take)
                                // Join with users to get user name
                                .EqJoin(nameof(NewsItem.AuthorId), R.Table(TableNames.Users))
                                .Map(r => r["left"].Merge(new { AuthorName = r["right"][nameof(User.Name)] }))
                                .RunAtomAsync <NewsItemExtended[]>(conn);

                result.AddRange(subResult);
            }
            return(result.ToArray());
        }
Example #2
0
        /// <summary>
        /// Gets a FileInfo for a given filename and revision. Considers only 'completed' uploads.
        /// </summary>
        /// <param name="revision">-1: The most recent revision. -2: The second most recent revision. -3: The third most recent revision. 0: The original stored file. 1: The first revision. 2: The second revision. etc...</param>
        /// <param name="bucket"><see cref="Bucket"/></param>
        /// <param name="cancelToken"><see cref="CancellationToken"/></param>
        /// <param name="filename">The filename</param>
        public static async Task <FileInfo> GetFileInfoByNameAsync(this Bucket bucket, string filename, int revision = -1,
                                                                   CancellationToken cancelToken = default)
        {
            filename = filename.SafePath();

            var index = new { index = bucket.fileIndex };

            var between = bucket.fileTable
                          .Between(R.Array(Status.Completed, filename, R.Minval()), R.Array(Status.Completed, filename, R.Maxval()))[index];

            var sort = revision >= 0 ? R.Asc(bucket.fileIndex) : R.Desc(bucket.fileIndex) as ReqlExpr;

            revision = revision >= 0 ? revision : (revision * -1) - 1;

            var selection = await between.OrderBy()[new { index = sort }]
                            .Skip(revision).Limit(1) // so the driver doesn't throw an error when a file isn't found.
                            .RunResultAsync <List <FileInfo> >(bucket.conn, cancelToken)
                            .ConfigureAwait(false);

            var fileinfo = selection.FirstOrDefault();

            if (fileinfo == null)
            {
                throw new FileNotFoundException(filename, revision);
            }

            return(fileinfo);
        }
Example #3
0
        public dynamic Load(int limit)
        {
            var conn = _rethinkDbFactory.CreateConnection();
            var logs = R.Db(_rethinkDbFactory.GetOptions().Database)
                       .Table("Logs")
                       .OrderBy()[new { index = R.Desc(nameof(LogEntry.Timestamp)) }]
                       .Limit(limit)
                       .RunCursor <LogEntry>(conn);

            var result = logs.ToList();

            logs.Close();

            return(result);
        }
Example #4
0
 public async Task <JArray> History(int limit)
 {
     return(await R.Db("test").Table("chat")
            .OrderBy(R.Desc("timestamp"))
            .Limit(limit)
            .OrderBy("timestamp")
            .RunResultAsync <JArray>(conn));
 }
        public JArray History(int limit)
        {
            var output = R.Db("test").Table("chat")
                         .OrderBy(R.Desc("timestamp"))
                         .Limit(limit)
                         .OrderBy("timestamp")
                         .RunResult <JArray>(conn);

            return(output);
        }
Example #6
0
        public async Task Reminders(CommandContext ctx, string filter = null)
        {
            // get reminders
            RethinkDb.Driver.Ast.Filter query = null;
            if (filter != "all")
            {
                query = R.Table("reminders").Filter(x => x["user_id"].Eq(ctx.User.Id.ToString()).And(x["guild_id"].Eq(ctx.Guild.Id.ToString())));
            }
            else
            {
                query = R.Table("reminders").Filter(x => x["user_id"].Eq(ctx.User.Id.ToString()));
            }

            var reminders = await query
                            .OrderBy(R.Desc("remind_at"))
                            .Limit(5)
                            .RunAtomAsync <List <Reminder> >(Program.Connection);

            if (reminders.Count == 0)
            {
                await ctx.RespondAsync($"You don't have any reminders{(filter != "all" ? " in this guild" : "")}.");

                return;
            }

            var hints = new string[] {
                "Use d!cancel to cancel any future reminder",
                "Use d!reminders all to see all your reminders across servers"
            };

            var hint = filter == "all" ? hints[0] : hints[new Random().Next(0, hints.Length)];

            var embed = new DiscordEmbedBuilder()
                        .WithTitle("Closest 5 reminders " + (filter == "all" ? "(all)" : "(guild)"))
                        .WithFooter(hint);

            reminders.ForEach(x => embed.AddField(x.Message, x.At.Humanize(false)));

            await ctx.RespondAsync(embed : embed.Build());
        }
        public override NexusExtDBBaseService OrderBy(string body)
        {
            OrderBy();

            string[] order    = body.Split(' ');
            bool     useIndex = order[0].StartsWith("index:");
            string   column   = useIndex ? order[0].Substring(6) : order[0];
            string   dir      = order.Count() > 1 ? order[1].ToLower() : "asc";

            switch (dir)
            {
            case "asc": {
                query = useIndex ? query.OrderBy().OptArg("index", r.Asc(column)) : query.OrderBy(r.Asc(column));
                break;
            }

            case "desc": {
                query = useIndex ? query.OrderBy().OptArg("index", r.Desc(column)) :  query.OrderBy(r.Desc(column));
                break;
            }
            }

            return(this);
        }