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';
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<keyof PageHistory> = [
'id',
'pageId',
'title',
'slug',
'icon',
'coverPhoto',
'version',
'lastUpdatedById',
'workspaceId',
'createdAt',
'updatedAt',
];
async findById(pageHistoryId: string): Promise<PageHistory> {
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<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('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',
};
}

View File

@ -16,7 +16,7 @@ import { executeWithPagination } from '@docmost/db/pagination/pagination';
export class UserRepo {
constructor(@InjectKysely() private readonly db: KyselyDB) {}
private baseFields: Array<keyof Users> = [
public baseFields: Array<keyof Users> = [
'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}%`,
),
);
}