Fix channels list pagination (#6679)
This commit is contained in:
		
							parent
							
								
									42d1c67d56
								
							
						
					
					
						commit
						d7df26d92b
					
				
					 3 changed files with 49 additions and 7 deletions
				
			
		|  | @ -44,7 +44,7 @@ export default Vue.extend({ | |||
| 			tab: 'featured', | ||||
| 			featuredPagination: { | ||||
| 				endpoint: 'channels/featured', | ||||
| 				limit: 5, | ||||
| 				noPaging: true, | ||||
| 			}, | ||||
| 			followingPagination: { | ||||
| 				endpoint: 'channels/followed', | ||||
|  |  | |||
|  | @ -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))); | ||||
| }); | ||||
|  |  | |||
|  | @ -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))); | ||||
| }); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue