mirror of
https://github.com/docmost/docmost.git
synced 2026-05-15 21:24:09 +08:00
e209aaa272
* Work on mentions * fix: properly parse page slug * fix editor suggestion bugs * mentions must start with whitespace * add icon to page mention render * feat: backlinks - WIP * UI - WIP * permissions check * use FTS for page suggestion * cleanup * WIP * page title fallback * feat: handle internal link paste * link styling * WIP * Switch back to LIKE operator for search suggestion * WIP * scope to workspaceId * still create link for pages not found * select necessary columns * cleanups
73 lines
1.7 KiB
TypeScript
73 lines
1.7 KiB
TypeScript
import {
|
|
Backlink,
|
|
InsertableBacklink,
|
|
UpdatableBacklink,
|
|
} from '@docmost/db/types/entity.types';
|
|
import { KyselyDB, KyselyTransaction } from '@docmost/db/types/kysely.types';
|
|
import { dbOrTx } from '@docmost/db/utils';
|
|
import { Injectable } from '@nestjs/common';
|
|
import { InjectKysely } from 'nestjs-kysely';
|
|
|
|
@Injectable()
|
|
export class BacklinkRepo {
|
|
constructor(@InjectKysely() private readonly db: KyselyDB) {}
|
|
|
|
async findById(
|
|
backlinkId: string,
|
|
workspaceId: string,
|
|
trx?: KyselyTransaction,
|
|
): Promise<Backlink> {
|
|
const db = dbOrTx(this.db, trx);
|
|
|
|
return db
|
|
.selectFrom('backlinks')
|
|
.select([
|
|
'id',
|
|
'sourcePageId',
|
|
'targetPageId',
|
|
'workspaceId',
|
|
'createdAt',
|
|
'updatedAt',
|
|
])
|
|
.where('id', '=', backlinkId)
|
|
.where('workspaceId', '=', workspaceId)
|
|
.executeTakeFirst();
|
|
}
|
|
|
|
async insertBacklink(
|
|
insertableBacklink: InsertableBacklink,
|
|
trx?: KyselyTransaction,
|
|
) {
|
|
const db = dbOrTx(this.db, trx);
|
|
return db
|
|
.insertInto('backlinks')
|
|
.values(insertableBacklink)
|
|
.onConflict((oc) =>
|
|
oc.columns(['sourcePageId', 'targetPageId']).doNothing(),
|
|
)
|
|
.returningAll()
|
|
.executeTakeFirst();
|
|
}
|
|
|
|
async updateBacklink(
|
|
updatableBacklink: UpdatableBacklink,
|
|
backlinkId: string,
|
|
trx?: KyselyTransaction,
|
|
) {
|
|
const db = dbOrTx(this.db, trx);
|
|
return db
|
|
.updateTable('userTokens')
|
|
.set(updatableBacklink)
|
|
.where('id', '=', backlinkId)
|
|
.execute();
|
|
}
|
|
|
|
async deleteBacklink(
|
|
backlinkId: string,
|
|
trx?: KyselyTransaction,
|
|
): Promise<void> {
|
|
const db = dbOrTx(this.db, trx);
|
|
await db.deleteFrom('backlinks').where('id', '=', backlinkId).execute();
|
|
}
|
|
}
|