From cab5e67055a29d6dc9434896d7b8e967a2d7cbf0 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Thu, 4 Apr 2024 21:25:20 +0100 Subject: [PATCH] fixes --- .../kysely/repos/page/page-history.repo.ts | 49 +++++++++++-------- .../kysely/repos/space/space-member.repo.ts | 36 +++++++------- .../server/src/kysely/repos/user/user.repo.ts | 8 ++- 3 files changed, 52 insertions(+), 41 deletions(-) diff --git a/apps/server/src/kysely/repos/page/page-history.repo.ts b/apps/server/src/kysely/repos/page/page-history.repo.ts index d62242ab..2df3b797 100644 --- a/apps/server/src/kysely/repos/page/page-history.repo.ts +++ b/apps/server/src/kysely/repos/page/page-history.repo.ts @@ -9,15 +9,32 @@ import { } from '@docmost/db/types/entity.types'; import { PaginationOptions } from '@docmost/db/pagination/pagination-options'; import { executeWithPagination } from '@docmost/db/pagination/pagination'; +import { jsonObjectFrom } from 'kysely/helpers/postgres'; +import { ExpressionBuilder } from 'kysely'; +import { DB } from '@docmost/db/types/db'; @Injectable() export class PageHistoryRepo { constructor(@InjectKysely() private readonly db: KyselyDB) {} + private baseFields: Array = [ + 'id', + 'pageId', + 'title', + 'slug', + 'icon', + 'coverPhoto', + 'version', + 'lastUpdatedById', + 'workspaceId', + 'createdAt', + 'updatedAt', + ]; + async findById(pageHistoryId: string): Promise { return await this.db .selectFrom('pageHistory') - .selectAll() + .select((eb) => [...this.baseFields, this.withLastUpdatedBy(eb)]) .where('id', '=', pageHistoryId) .executeTakeFirst(); } @@ -48,26 +65,9 @@ export class PageHistoryRepo { } async findPageHistoryByPageId(pageId: string, pagination: PaginationOptions) { - // todo: fix user relationship const query = this.db - .selectFrom('pageHistory as history') - .innerJoin('users as user', 'user.id', 'history.lastUpdatedById') - .select([ - 'history.id', - 'history.pageId', - 'history.title', - 'history.slug', - 'history.icon', - 'history.coverPhoto', - 'history.version', - 'history.lastUpdatedById', - 'history.workspaceId', - 'history.createdAt', - 'history.updatedAt', - 'user.id', - 'user.name', - 'user.avatarUrl', - ]) + .selectFrom('pageHistory') + .select((eb) => [...this.baseFields, this.withLastUpdatedBy(eb)]) .where('pageId', '=', pageId) .orderBy('createdAt', 'desc'); @@ -78,4 +78,13 @@ export class PageHistoryRepo { return result; } + + withLastUpdatedBy(eb: ExpressionBuilder) { + return jsonObjectFrom( + eb + .selectFrom('users') + .select(['users.id', 'users.name', 'users.avatarUrl']) + .whereRef('users.id', '=', 'pageHistory.lastUpdatedById'), + ).as('withLastUpdatedBy'); + } } diff --git a/apps/server/src/kysely/repos/space/space-member.repo.ts b/apps/server/src/kysely/repos/space/space-member.repo.ts index f22df047..b64ff55d 100644 --- a/apps/server/src/kysely/repos/space/space-member.repo.ts +++ b/apps/server/src/kysely/repos/space/space-member.repo.ts @@ -36,16 +36,13 @@ export class SpaceMemberRepo { .leftJoin('users', 'users.id', 'spaceMembers.userId') .leftJoin('groups', 'groups.id', 'spaceMembers.groupId') .select([ - 'groups.id as group_id', - 'groups.name as group_name', - 'groups.isDefault as group_isDefault', - 'groups.id as groups_id', - 'groups.id as groups_id', - 'groups.id as groups_id', - 'users.id as user_id', - 'users.name as user_name', - 'users.avatarUrl as user_avatarUrl', - 'users.email as user_email', + 'groups.id as groupId', + 'groups.name as groupName', + 'groups.isDefault as groupIsDefault', + 'users.id as userId', + 'users.name as userName', + 'users.avatarUrl as userAvatarUrl', + 'users.email as userEmail', 'spaceMembers.role', ]) .where('spaceId', '=', spaceId) @@ -59,19 +56,20 @@ export class SpaceMemberRepo { let memberInfo: MemberInfo; const members = result.items.map((member) => { - if (member.user_id) { + if (member.userId) { memberInfo = { - id: member.user_id, - name: member.user_name, - email: member.user_email, - avatarUrl: member.user_avatarUrl, + id: member.userId, + name: member.userName, + email: member.userEmail, + avatarUrl: member.userAvatarUrl, type: 'user', }; - } else if (member.group_id) { + } else if (member.groupId) { + // todo: get group member count memberInfo = { - id: member.group_id, - name: member.group_name, - isDefault: member.group_isDefault, + id: member.groupId, + name: member.groupName, + isDefault: member.groupIsDefault, type: 'group', }; } diff --git a/apps/server/src/kysely/repos/user/user.repo.ts b/apps/server/src/kysely/repos/user/user.repo.ts index c2b5b25f..36825000 100644 --- a/apps/server/src/kysely/repos/user/user.repo.ts +++ b/apps/server/src/kysely/repos/user/user.repo.ts @@ -16,7 +16,7 @@ import { executeWithPagination } from '@docmost/db/pagination/pagination'; export class UserRepo { constructor(@InjectKysely() private readonly db: KyselyDB) {} - private baseFields: Array = [ + public baseFields: Array = [ 'id', 'email', 'name', @@ -129,7 +129,11 @@ export class UserRepo { if (pagination.query) { query = query.where((eb) => - eb('users.name', 'ilike', `%${pagination.query}%`), + eb('users.name', 'ilike', `%${pagination.query}%`).or( + 'users.email', + 'ilike', + `%${pagination.query}%`, + ), ); }