diff --git a/src/client/pages/channels.vue b/src/client/pages/channels.vue index 85804141f16da11d2442a89056aabc5576a0ccae..34a79e70eb32f22f05a8f97188f2e17cb3dfbc77 100644 --- a/src/client/pages/channels.vue +++ b/src/client/pages/channels.vue @@ -44,7 +44,7 @@ export default Vue.extend({ tab: 'featured', featuredPagination: { endpoint: 'channels/featured', - limit: 5, + noPaging: true, }, followingPagination: { endpoint: 'channels/followed', diff --git a/src/server/api/endpoints/channels/followed.ts b/src/server/api/endpoints/channels/followed.ts index 05c2ec6a750bb73da96eadd8a7144a118d606398..bd37d420f6d7ced76f5aef89ff2578a44ae62665 100644 --- a/src/server/api/endpoints/channels/followed.ts +++ b/src/server/api/endpoints/channels/followed.ts @@ -1,5 +1,8 @@ +import $ from 'cafy'; +import { ID } from '../../../../misc/cafy-id'; import define from '../../define'; import { Channels, ChannelFollowings } from '../../../../models'; +import { makePaginationQuery } from '../../common/make-pagination-query'; export const meta = { tags: ['channels', 'account'], @@ -8,6 +11,21 @@ export const meta = { kind: 'read:channels', + params: { + sinceId: { + validator: $.optional.type(ID), + }, + + untilId: { + validator: $.optional.type(ID), + }, + + limit: { + validator: $.optional.num.range(1, 100), + default: 5 + }, + }, + res: { type: 'array' as const, optional: false as const, nullable: false as const, @@ -20,9 +38,12 @@ export const meta = { }; export default define(meta, async (ps, me) => { - const followings = await ChannelFollowings.find({ - followerId: me.id, - }); + const query = makePaginationQuery(ChannelFollowings.createQueryBuilder(), ps.sinceId, ps.untilId) + .andWhere({ followerId: me.id }); + + const followings = await query + .take(ps.limit!) + .getMany(); return await Promise.all(followings.map(x => Channels.pack(x.followeeId, me))); }); diff --git a/src/server/api/endpoints/channels/owned.ts b/src/server/api/endpoints/channels/owned.ts index 9e563c0ac5d5e3d3079a95996e12ade641bdb182..1a7e04640d0665a9c2a226511a8bff307e819fbb 100644 --- a/src/server/api/endpoints/channels/owned.ts +++ b/src/server/api/endpoints/channels/owned.ts @@ -1,5 +1,8 @@ +import $ from 'cafy'; +import { ID } from '../../../../misc/cafy-id'; import define from '../../define'; import { Channels } from '../../../../models'; +import { makePaginationQuery } from '../../common/make-pagination-query'; export const meta = { tags: ['channels', 'account'], @@ -8,6 +11,21 @@ export const meta = { kind: 'read:channels', + params: { + sinceId: { + validator: $.optional.type(ID), + }, + + untilId: { + validator: $.optional.type(ID), + }, + + limit: { + validator: $.optional.num.range(1, 100), + default: 5 + }, + }, + res: { type: 'array' as const, optional: false as const, nullable: false as const, @@ -20,9 +38,12 @@ export const meta = { }; export default define(meta, async (ps, me) => { - const channels = await Channels.find({ - userId: me.id, - }); + const query = makePaginationQuery(Channels.createQueryBuilder(), ps.sinceId, ps.untilId) + .andWhere({ userId: me.id }); + + const channels = await query + .take(ps.limit!) + .getMany(); return await Promise.all(channels.map(x => Channels.pack(x, me))); });