Merge branch 'all-trends-pagination' into 'main'

feat: pagination with Link headers in trendingStatusesController

Closes #236

See merge request soapbox-pub/ditto!560
This commit is contained in:
Alex Gleason 2024-10-19 16:38:16 +00:00
commit 67b17778d3

View file

@ -3,10 +3,12 @@ import { z } from 'zod';
import { AppController } from '@/app.ts';
import { Conf } from '@/config.ts';
import { paginationSchema } from '@/schemas/pagination.ts';
import { hydrateEvents } from '@/storages/hydrate.ts';
import { Storages } from '@/storages.ts';
import { generateDateRange, Time } from '@/utils/time.ts';
import { unfurlCardCached } from '@/utils/unfurl.ts';
import { paginated } from '@/utils/api.ts';
import { renderStatus } from '@/views/mastodon/statuses.ts';
let trendingHashtagsCache = getTrendingHashtags().catch((e) => {
@ -110,20 +112,16 @@ async function getTrendingLinks() {
}));
}
const trendingStatusesQuerySchema = z.object({
limit: z.coerce.number().catch(20).transform((value) => Math.min(Math.max(value, 0), 40)),
offset: z.number().nonnegative().catch(0),
});
const trendingStatusesController: AppController = async (c) => {
const store = await Storages.db();
const { limit, offset } = trendingStatusesQuerySchema.parse(c.req.query());
const { limit, offset, until } = paginationSchema.parse(c.req.query());
const [label] = await store.query([{
kinds: [1985],
'#L': ['pub.ditto.trends'],
'#l': ['#e'],
authors: [Conf.pubkey],
until,
limit: 1,
}]);
@ -148,7 +146,7 @@ const trendingStatusesController: AppController = async (c) => {
events.map((event) => renderStatus(event, {})),
);
return c.json(statuses.filter(Boolean));
return paginated(c, results, statuses);
};
interface TrendingTag {