fix pagination issue where user is not part of any space

This commit is contained in:
Philipinho
2025-04-07 19:09:02 +01:00
parent 06270ff747
commit 3559358d14
3 changed files with 15 additions and 6 deletions

View File

@ -18,6 +18,7 @@ export async function executeWithPagination<O, DB, TB extends keyof DB>(
perPage: number;
page: number;
experimental_deferredJoinPrimaryKey?: StringReference<DB, TB>;
hasEmptyIds?: boolean; // in cases where we pass empty whereIn ids
},
): Promise<PaginationResult<O>> {
if (opts.page < 1) {
@ -33,21 +34,20 @@ export async function executeWithPagination<O, DB, TB extends keyof DB>(
.select((eb) => eb.ref(deferredJoinPrimaryKey).as('primaryKey'))
.execute()
// @ts-expect-error TODO: Fix the type here later
.then((rows) => rows.map((row) => row.primaryKey));
qb = qb
.where((eb) =>
primaryKeys.length > 0
?
eb(deferredJoinPrimaryKey, 'in', primaryKeys as any)
? eb(deferredJoinPrimaryKey, 'in', primaryKeys as any)
: eb(sql`1`, '=', 0),
)
.clearOffset()
.clearLimit();
}
const rows = await qb.execute();
const rows = opts.hasEmptyIds ? [] : await qb.execute();
const hasNextPage = rows.length > 0 ? rows.length > opts.perPage : false;
const hasPrevPage = rows.length > 0 ? opts.page > 1 : false;

View File

@ -107,7 +107,11 @@ export class PageRepo {
return dbOrTx(this.db, trx)
.updateTable('pages')
.set({ ...updatePageData, updatedAt: new Date() })
.where(pageIds.some(pageId => !isValidUUID(pageId)) ? "slugId" : "id", "in", pageIds)
.where(
pageIds.some((pageId) => !isValidUUID(pageId)) ? 'slugId' : 'id',
'in',
pageIds,
)
.executeTakeFirst();
}
@ -161,9 +165,11 @@ export class PageRepo {
.where('spaceId', 'in', userSpaceIds)
.orderBy('updatedAt', 'desc');
const hasEmptyIds = userSpaceIds.length === 0;
const result = executeWithPagination(query, {
page: pagination.page,
perPage: pagination.limit,
hasEmptyIds,
});
return result;

View File

@ -221,7 +221,7 @@ export class SpaceMemberRepo {
let query = this.db
.selectFrom('spaces')
.selectAll('spaces')
.selectAll()
.select((eb) => [this.spaceRepo.withMemberCount(eb)])
//.where('workspaceId', '=', workspaceId)
.where('id', 'in', userSpaceIds)
@ -237,9 +237,12 @@ export class SpaceMemberRepo {
);
}
const hasEmptyIds = userSpaceIds.length === 0;
const result = executeWithPagination(query, {
page: pagination.page,
perPage: pagination.limit,
hasEmptyIds,
});
return result;