This commit is contained in:
Philipinho
2024-04-04 21:25:20 +01:00
parent 409850b22a
commit cab5e67055
3 changed files with 52 additions and 41 deletions

View File

@ -9,15 +9,32 @@ import {
} from '@docmost/db/types/entity.types'; } from '@docmost/db/types/entity.types';
import { PaginationOptions } from '@docmost/db/pagination/pagination-options'; import { PaginationOptions } from '@docmost/db/pagination/pagination-options';
import { executeWithPagination } from '@docmost/db/pagination/pagination'; 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() @Injectable()
export class PageHistoryRepo { export class PageHistoryRepo {
constructor(@InjectKysely() private readonly db: KyselyDB) {} constructor(@InjectKysely() private readonly db: KyselyDB) {}
private baseFields: Array<keyof PageHistory> = [
'id',
'pageId',
'title',
'slug',
'icon',
'coverPhoto',
'version',
'lastUpdatedById',
'workspaceId',
'createdAt',
'updatedAt',
];
async findById(pageHistoryId: string): Promise<PageHistory> { async findById(pageHistoryId: string): Promise<PageHistory> {
return await this.db return await this.db
.selectFrom('pageHistory') .selectFrom('pageHistory')
.selectAll() .select((eb) => [...this.baseFields, this.withLastUpdatedBy(eb)])
.where('id', '=', pageHistoryId) .where('id', '=', pageHistoryId)
.executeTakeFirst(); .executeTakeFirst();
} }
@ -48,26 +65,9 @@ export class PageHistoryRepo {
} }
async findPageHistoryByPageId(pageId: string, pagination: PaginationOptions) { async findPageHistoryByPageId(pageId: string, pagination: PaginationOptions) {
// todo: fix user relationship
const query = this.db const query = this.db
.selectFrom('pageHistory as history') .selectFrom('pageHistory')
.innerJoin('users as user', 'user.id', 'history.lastUpdatedById') .select((eb) => [...this.baseFields, this.withLastUpdatedBy(eb)])
.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',
])
.where('pageId', '=', pageId) .where('pageId', '=', pageId)
.orderBy('createdAt', 'desc'); .orderBy('createdAt', 'desc');
@ -78,4 +78,13 @@ export class PageHistoryRepo {
return result; return result;
} }
withLastUpdatedBy(eb: ExpressionBuilder<DB, 'pageHistory'>) {
return jsonObjectFrom(
eb
.selectFrom('users')
.select(['users.id', 'users.name', 'users.avatarUrl'])
.whereRef('users.id', '=', 'pageHistory.lastUpdatedById'),
).as('withLastUpdatedBy');
}
} }

View File

@ -36,16 +36,13 @@ export class SpaceMemberRepo {
.leftJoin('users', 'users.id', 'spaceMembers.userId') .leftJoin('users', 'users.id', 'spaceMembers.userId')
.leftJoin('groups', 'groups.id', 'spaceMembers.groupId') .leftJoin('groups', 'groups.id', 'spaceMembers.groupId')
.select([ .select([
'groups.id as group_id', 'groups.id as groupId',
'groups.name as group_name', 'groups.name as groupName',
'groups.isDefault as group_isDefault', 'groups.isDefault as groupIsDefault',
'groups.id as groups_id', 'users.id as userId',
'groups.id as groups_id', 'users.name as userName',
'groups.id as groups_id', 'users.avatarUrl as userAvatarUrl',
'users.id as user_id', 'users.email as userEmail',
'users.name as user_name',
'users.avatarUrl as user_avatarUrl',
'users.email as user_email',
'spaceMembers.role', 'spaceMembers.role',
]) ])
.where('spaceId', '=', spaceId) .where('spaceId', '=', spaceId)
@ -59,19 +56,20 @@ export class SpaceMemberRepo {
let memberInfo: MemberInfo; let memberInfo: MemberInfo;
const members = result.items.map((member) => { const members = result.items.map((member) => {
if (member.user_id) { if (member.userId) {
memberInfo = { memberInfo = {
id: member.user_id, id: member.userId,
name: member.user_name, name: member.userName,
email: member.user_email, email: member.userEmail,
avatarUrl: member.user_avatarUrl, avatarUrl: member.userAvatarUrl,
type: 'user', type: 'user',
}; };
} else if (member.group_id) { } else if (member.groupId) {
// todo: get group member count
memberInfo = { memberInfo = {
id: member.group_id, id: member.groupId,
name: member.group_name, name: member.groupName,
isDefault: member.group_isDefault, isDefault: member.groupIsDefault,
type: 'group', type: 'group',
}; };
} }

View File

@ -16,7 +16,7 @@ import { executeWithPagination } from '@docmost/db/pagination/pagination';
export class UserRepo { export class UserRepo {
constructor(@InjectKysely() private readonly db: KyselyDB) {} constructor(@InjectKysely() private readonly db: KyselyDB) {}
private baseFields: Array<keyof Users> = [ public baseFields: Array<keyof Users> = [
'id', 'id',
'email', 'email',
'name', 'name',
@ -129,7 +129,11 @@ export class UserRepo {
if (pagination.query) { if (pagination.query) {
query = query.where((eb) => query = query.where((eb) =>
eb('users.name', 'ilike', `%${pagination.query}%`), eb('users.name', 'ilike', `%${pagination.query}%`).or(
'users.email',
'ilike',
`%${pagination.query}%`,
),
); );
} }