From 250bab78b7cf396cc67f3356fc83161d8189d2f5 Mon Sep 17 00:00:00 2001 From: YaoJunchang Date: Mon, 8 Jun 2026 14:14:57 +0800 Subject: [PATCH 1/8] feat(share): support bookmark_uid in share exists/update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit /b/[id] 公开快照页复用 sr_bookmark_share:share/exists 与 share/update 接受 bookmark_uid(按 uuid 解析 owner+bookmark_id),update 经 uid 建分享时 写空 share_code(share_code 后续弃用)。 Co-Authored-By: Claude Opus 4.8 --- src/domain/share.ts | 51 ++++++++++++++++++++++------- src/handler/http/shareController.ts | 6 ++-- 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/src/domain/share.ts b/src/domain/share.ts index 77b09ce..ec5f2cb 100644 --- a/src/domain/share.ts +++ b/src/domain/share.ts @@ -16,7 +16,9 @@ export interface updateBookmarkShareReq { show_comment_line: boolean show_userinfo: boolean allow_action: boolean - bookmark_id: number + bookmark_id?: number + // 公开快照页 /b/[id]:用 bookmark_uid(= user_bookmark uuid)定位书签 + bookmark_uid?: string } export interface getBookmarkByShareResp { @@ -51,13 +53,25 @@ export interface getBookmarkByShareResp { export class ShareService { constructor(@inject(BookmarkRepo) private bookmarkRepo: BookmarkRepo) {} - public async checkBookmarkShareExists(ctx: ContextManager, bmId: number): Promise { - const userId = ctx.getUserId() - - bmId = ctx.hashIds.decodeId(bmId) - if (bmId < 1) throw ErrorParam() + public async checkBookmarkShareExists(ctx: ContextManager, params: { bmId?: number; bmUId?: string }): Promise { + // 解析书签 + 其 owner: + // - bookmark_uid(公开快照页):按 uuid 查 sr_user_bookmark(不按调用者过滤),取 owner user_id + bookmark_id, + // 这样非 owner 访客也能查到 owner 是否开启了分享(划线评论可见)。 + // - bookmark_id(旧流程):按调用者 userId。 + let bmId: number + let ownerUserId: number + if (params.bmUId) { + const ub = await this.bookmarkRepo.getUserBookmarkByUuid(params.bmUId) + if (!ub) throw ErrorParam() + bmId = ub.bookmark_id + ownerUserId = ub.user_id + } else { + bmId = ctx.hashIds.decodeId(params.bmId ?? 0) + if (bmId < 1) throw ErrorParam() + ownerUserId = ctx.getUserId() + } - const res = await this.bookmarkRepo.getBookmarkShareByBookmarkId(bmId, userId) + const res = await this.bookmarkRepo.getBookmarkShareByBookmarkId(bmId, ownerUserId) const isEnable = res && res.is_enable return { allow_action: isEnable ? res.allow_comment : false, @@ -78,8 +92,17 @@ export class ShareService { public async updateBookmarkShare(ctx: ContextManager, req: updateBookmarkShareReq): Promise { const userId = ctx.getUserId() - const bmId = ctx.hashIds.decodeId(req.bookmark_id) - if (bmId < 1 || !bmId) throw ErrorParam() + // 定位 bmId:优先 bookmark_uid(公开快照页,owner-only 解析),否则 bookmark_id(旧流程) + let bmId: number + const viaUid = !!req.bookmark_uid + if (req.bookmark_uid) { + const ub = await this.bookmarkRepo.getUserBookmarkByUId(req.bookmark_uid, userId) + if (!ub) throw BookmarkNotFoundError() + bmId = ub.bookmark_id + } else { + bmId = ctx.hashIds.decodeId(req.bookmark_id ?? 0) + if (bmId < 1 || !bmId) throw ErrorParam() + } const bookmark = await this.bookmarkRepo.getUserBookmark(bmId, userId) if (!bookmark) throw BookmarkNotFoundError() @@ -98,9 +121,13 @@ export class ShareService { } const createShare = async () => { for (let i = 0; i < 3; i++) { - const timeCode = ctx.hashIds.generateTimeCode() - const hash = (await hashMD5(`${bmId}-${userId}-${Date.now()}`)).slice(0, 7) - const code = `${timeCode}${hash}` + // 快照页改版后 share_code 不再使用:bookmark_uid 路径建空 share_code;旧 bookmark_id 路径保留生成逻辑 + let code = '' + if (!viaUid) { + const timeCode = ctx.hashIds.generateTimeCode() + const hash = (await hashMD5(`${bmId}-${userId}-${Date.now()}`)).slice(0, 7) + code = `${timeCode}${hash}` + } const shareRes = await this.bookmarkRepo.createBookmarkShare(code, userId, bmId, req.show_comment_line, req.show_userinfo, req.allow_action) if (!shareRes) throw ServerError() res = shareRes diff --git a/src/handler/http/shareController.ts b/src/handler/http/shareController.ts index ee8bdb1..12fdfe7 100644 --- a/src/handler/http/shareController.ts +++ b/src/handler/http/shareController.ts @@ -66,10 +66,10 @@ export class ShareController { */ @Get('/exists') public async existsShare(ctx: ContextManager, request: Request) { - const req = await RequestUtils.query<{ bookmark_id: number }>(request) - if (!req) return Failed(ErrorParam()) + const req = await RequestUtils.query<{ bookmark_id?: number; bookmark_uid?: string }>(request) + if (!req || (!req.bookmark_id && !req.bookmark_uid)) return Failed(ErrorParam()) - const res = await this.shareService.checkBookmarkShareExists(ctx, req.bookmark_id) + const res = await this.shareService.checkBookmarkShareExists(ctx, { bmId: req.bookmark_id, bmUId: req.bookmark_uid }) return Successed(res) } From 982a98340c18a55dec8230c635e25f44ccde8175 Mon Sep 17 00:00:00 2001 From: YaoJunchang Date: Mon, 8 Jun 2026 14:15:45 +0800 Subject: [PATCH 2/8] feat(mark): public bookmark_uid mark_list read gated by share MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 BookmarkOrchestrator.getBookmarkMarkListByUid:非 owner 按 bookmark_uid 解析 owner+书签,校验分享开启且 allow_comment && allow_line 才返回划线,否则空。 BookmarkService.getBookmarkShareByBookmarkId 透传。 Co-Authored-By: Claude Opus 4.8 --- src/domain/bookmark.ts | 4 ++++ src/domain/orchestrator/bookmark.ts | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/domain/bookmark.ts b/src/domain/bookmark.ts index e5b25b1..a387175 100644 --- a/src/domain/bookmark.ts +++ b/src/domain/bookmark.ts @@ -789,6 +789,10 @@ export class BookmarkService { return await this.bookmarkRepo.getUserBookmarkByUuidWithDetail(uuid) } + public async getBookmarkShareByBookmarkId(bmId: number, userId: number) { + return await this.bookmarkRepo.getBookmarkShareByBookmarkId(bmId, userId) + } + public async getUserBookmarkWithDetail(userId: number, bmId: number) { return (await this.bookmarkRepo.getUserBookmarkWithDetail(bmId, userId)) ?? null } diff --git a/src/domain/orchestrator/bookmark.ts b/src/domain/orchestrator/bookmark.ts index 78fe8ef..3aad7f0 100644 --- a/src/domain/orchestrator/bookmark.ts +++ b/src/domain/orchestrator/bookmark.ts @@ -23,6 +23,23 @@ export class BookmarkOrchestrator { return marksResult } + /** + * 公开快照页 /b/[id] 非 owner 访客按 bookmark_uid 读取划线: + * 按 uuid 解析 owner + 书签,校验该书签分享已开启且 allow_comment && allow_line 同时为 true, + * 满足才返回划线,否则返回空数据。 + */ + public async getBookmarkMarkListByUid(ctx: ContextManager, bmUId: string) { + const empty = { mark_list: [], user_list: [] } + const ub = await this.bookmarkService.getUserBookmarkByUuidWithDetail(bmUId) + if (!ub) return empty + + const share = await this.bookmarkService.getBookmarkShareByBookmarkId(ub.bookmark_id, ub.user_id) + const allowed = !share || (!!share && share.is_enable && share.allow_comment && share.allow_line) + if (!allowed) return empty + + return await this.markService.getBookmarkMarkList(ctx, { id: ub.id, isShowMarks: true }) + } + public async getBookmarkBriefInfo(ctx: ContextManager, bmId: number) { const res = await this.bookmarkService.getUserBookmarkWithDetail(ctx.getUserId(), bmId) if (!res || !res.bookmark) throw BookmarkNotFoundError() From 98831c0554ba2a1424065ca6386985cc5c575c60 Mon Sep 17 00:00:00 2001 From: YaoJunchang Date: Mon, 8 Jun 2026 14:16:09 +0800 Subject: [PATCH 3/8] feat(aigc): support bookmark_uid in summaries/chat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit getBookmarkTitleContent 改对象入参并支持 bmUId;/v1/aigc/summaries 与 /v1/aigc/chat 接受 bookmark_uid(含 summaries 缓存命中判断)。 Co-Authored-By: Claude Opus 4.8 --- src/domain/bookmark.ts | 14 ++++++-------- src/handler/http/aigcController.ts | 25 +++++++++++++++++++++---- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/domain/bookmark.ts b/src/domain/bookmark.ts index a387175..54715ce 100644 --- a/src/domain/bookmark.ts +++ b/src/domain/bookmark.ts @@ -912,19 +912,17 @@ export class BookmarkService { public async getBookmarkTitleContent( ctx: ContextManager, - bmId?: number, - shareCode?: string, - cbId?: number, - title?: string, - content?: string + params: { bmId?: number; shareCode?: string; cbId?: number; title?: string; content?: string; bmUId?: string } ): Promise<{ title: string; content: string; bmId: number }> { - if (!bmId && !shareCode && !cbId && !title && !content) throw ErrorParam() + const { bmId, shareCode, cbId, title, content, bmUId } = params - if (!bmId && !shareCode && !cbId && title && content) { + const emptyId = !bmId && !shareCode && !cbId && !bmUId + if (emptyId && !title && !content) throw ErrorParam() + if (emptyId && title && content) { return { title, content, bmId: 0 } } - const bookmarkId = await this.getBookmarkId(ctx, { bmId, shareCode, cbId }) + const bookmarkId = await this.getBookmarkId(ctx, { bmId, shareCode, cbId, bmUId }) if (!bookmarkId || bookmarkId < 1) throw ErrorParam() const bookmark = await this.getBookmarkById(bookmarkId) diff --git a/src/handler/http/aigcController.ts b/src/handler/http/aigcController.ts index 1333948..e7afc8e 100644 --- a/src/handler/http/aigcController.ts +++ b/src/handler/http/aigcController.ts @@ -12,6 +12,7 @@ import { convertToGeminiContent } from '../../utils/conversation' type SummaryRequest = { bm_id?: number + bookmark_uid?: string share_code?: string cb_id?: number collection_code: string @@ -21,6 +22,7 @@ type SummaryRequest = { type CompletionsRequest = { bm_id?: number + bookmark_uid?: string share_code?: string cb_id?: number collection_code?: string @@ -52,11 +54,12 @@ export class AigcController { ctx.set('country', request.cf?.country || '') ctx.set('continent', request.cf?.continent || '') - if (!req.force && req.bm_id) { + if (!req.force && (req.bm_id || req.bookmark_uid)) { const summary = await this.bookmarkService.getUserBookmarkSummary(ctx, { bmId: req.bm_id, shareCode: req.share_code, - cbId: req.cb_id + cbId: req.cb_id, + bmUId: req.bookmark_uid }) if (summary) { @@ -66,7 +69,14 @@ export class AigcController { } } - const { title, content, bmId } = await this.bookmarkService.getBookmarkTitleContent(ctx, req.bm_id, req.share_code, req.cb_id, 'no title', req.raw_content) + const { title, content, bmId } = await this.bookmarkService.getBookmarkTitleContent(ctx, { + bmId: req.bm_id, + shareCode: req.share_code, + cbId: req.cb_id, + title: 'no title', + content: req.raw_content, + bmUId: req.bookmark_uid + }) ctx.execution.waitUntil( aiSvc.bookmarkSummary(ctx, content, writable, async result => { bmId > 0 && (await this.bookmarkService.saveSummary(ctx, bmId, result.provider, result.response, result.model)) @@ -85,7 +95,14 @@ export class AigcController { const [user, { title, content, bmId }] = await Promise.all([ this.userService.getUserInfo(ctx), - this.bookmarkService.getBookmarkTitleContent(ctx, req.bm_id, req.share_code, req.cb_id, req.title, req.raw_content) + this.bookmarkService.getBookmarkTitleContent(ctx, { + bmId: req.bm_id, + shareCode: req.share_code, + cbId: req.cb_id, + title: req.title, + content: req.raw_content, + bmUId: req.bookmark_uid + }) ]) // 设置上下文 From ed70c6bad277a7923feaf632795c88ced2e766a2 Mon Sep 17 00:00:00 2001 From: YaoJunchang Date: Mon, 8 Jun 2026 14:23:56 +0800 Subject: [PATCH 4/8] refactor: remove outdated comments related to bookmark_uid in bookmark and share services --- src/domain/orchestrator/bookmark.ts | 5 ----- src/domain/share.ts | 7 ------- 2 files changed, 12 deletions(-) diff --git a/src/domain/orchestrator/bookmark.ts b/src/domain/orchestrator/bookmark.ts index 3aad7f0..2ad67f5 100644 --- a/src/domain/orchestrator/bookmark.ts +++ b/src/domain/orchestrator/bookmark.ts @@ -23,11 +23,6 @@ export class BookmarkOrchestrator { return marksResult } - /** - * 公开快照页 /b/[id] 非 owner 访客按 bookmark_uid 读取划线: - * 按 uuid 解析 owner + 书签,校验该书签分享已开启且 allow_comment && allow_line 同时为 true, - * 满足才返回划线,否则返回空数据。 - */ public async getBookmarkMarkListByUid(ctx: ContextManager, bmUId: string) { const empty = { mark_list: [], user_list: [] } const ub = await this.bookmarkService.getUserBookmarkByUuidWithDetail(bmUId) diff --git a/src/domain/share.ts b/src/domain/share.ts index ec5f2cb..118b629 100644 --- a/src/domain/share.ts +++ b/src/domain/share.ts @@ -17,7 +17,6 @@ export interface updateBookmarkShareReq { show_userinfo: boolean allow_action: boolean bookmark_id?: number - // 公开快照页 /b/[id]:用 bookmark_uid(= user_bookmark uuid)定位书签 bookmark_uid?: string } @@ -54,10 +53,6 @@ export class ShareService { constructor(@inject(BookmarkRepo) private bookmarkRepo: BookmarkRepo) {} public async checkBookmarkShareExists(ctx: ContextManager, params: { bmId?: number; bmUId?: string }): Promise { - // 解析书签 + 其 owner: - // - bookmark_uid(公开快照页):按 uuid 查 sr_user_bookmark(不按调用者过滤),取 owner user_id + bookmark_id, - // 这样非 owner 访客也能查到 owner 是否开启了分享(划线评论可见)。 - // - bookmark_id(旧流程):按调用者 userId。 let bmId: number let ownerUserId: number if (params.bmUId) { @@ -92,7 +87,6 @@ export class ShareService { public async updateBookmarkShare(ctx: ContextManager, req: updateBookmarkShareReq): Promise { const userId = ctx.getUserId() - // 定位 bmId:优先 bookmark_uid(公开快照页,owner-only 解析),否则 bookmark_id(旧流程) let bmId: number const viaUid = !!req.bookmark_uid if (req.bookmark_uid) { @@ -121,7 +115,6 @@ export class ShareService { } const createShare = async () => { for (let i = 0; i < 3; i++) { - // 快照页改版后 share_code 不再使用:bookmark_uid 路径建空 share_code;旧 bookmark_id 路径保留生成逻辑 let code = '' if (!viaUid) { const timeCode = ctx.hashIds.generateTimeCode() From a2a8201867cd9a53b7a802d649fdf23b7ccb9739 Mon Sep 17 00:00:00 2001 From: YaoJunchang Date: Mon, 8 Jun 2026 14:32:26 +0800 Subject: [PATCH 5/8] feat(bookmark): add share permission check for bookmark retrieval by UID --- src/domain/orchestrator/bookmark.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/domain/orchestrator/bookmark.ts b/src/domain/orchestrator/bookmark.ts index 2ad67f5..7699202 100644 --- a/src/domain/orchestrator/bookmark.ts +++ b/src/domain/orchestrator/bookmark.ts @@ -28,9 +28,11 @@ export class BookmarkOrchestrator { const ub = await this.bookmarkService.getUserBookmarkByUuidWithDetail(bmUId) if (!ub) return empty - const share = await this.bookmarkService.getBookmarkShareByBookmarkId(ub.bookmark_id, ub.user_id) - const allowed = !share || (!!share && share.is_enable && share.allow_comment && share.allow_line) - if (!allowed) return empty + if (ub.user_id !== ctx.getUserId()) { + const share = await this.bookmarkService.getBookmarkShareByBookmarkId(ub.bookmark_id, ub.user_id) + const allowed = !share || (share.is_enable && share.allow_comment && share.allow_line) + if (!allowed) return empty + } return await this.markService.getBookmarkMarkList(ctx, { id: ub.id, isShowMarks: true }) } From a14eb0c32b3881446036aee48b0ebac881f16957 Mon Sep 17 00:00:00 2001 From: YaoJunchang Date: Mon, 8 Jun 2026 15:02:30 +0800 Subject: [PATCH 6/8] fix(share): throw errors instead of returning to prevent undefined responses --- prisma/hyperdrive.prisma | 5 ++--- src/domain/share.ts | 3 ++- src/infra/repository/dbBookmark.ts | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/prisma/hyperdrive.prisma b/prisma/hyperdrive.prisma index 6d4fbb1..833421f 100644 --- a/prisma/hyperdrive.prisma +++ b/prisma/hyperdrive.prisma @@ -250,8 +250,7 @@ model sr_platform_bind { } model sr_bookmark_share { - id Int @id @default(autoincrement()) - uuid String @unique @default(dbgenerated("gen_random_uuid()")) + id Int @id @default(autoincrement()) share_code String @default("") user_id Int @default(0) @@ -264,8 +263,8 @@ model sr_bookmark_share { is_enable Boolean @default(true) created_at DateTime @default(now()) - @@unique([share_code]) @@unique([bookmark_id, user_id]) + @@index([share_code]) } model sr_bookmark_import { diff --git a/src/domain/share.ts b/src/domain/share.ts index 118b629..d7e25dd 100644 --- a/src/domain/share.ts +++ b/src/domain/share.ts @@ -110,7 +110,8 @@ export class ShareService { res = await this.bookmarkRepo.updateBookmarkShare(bmId, userId, req.show_comment_line, req.show_userinfo, req.allow_action) } catch (err) { console.log(`update bookmark share failed: ${err}`) - return BookmarkNotFoundError() + // 必须抛出:之前 return 的错误对象会被丢弃,导致 res 为 undefined,下方取 res.allow_comment 抛 500 + throw BookmarkNotFoundError() } } const createShare = async () => { diff --git a/src/infra/repository/dbBookmark.ts b/src/infra/repository/dbBookmark.ts index d6ab81d..70eb382 100644 --- a/src/infra/repository/dbBookmark.ts +++ b/src/infra/repository/dbBookmark.ts @@ -401,7 +401,8 @@ export class BookmarkRepo { }) } catch (err) { console.log(`create bookmark share failed: ${err}`) - return CreateBookmarkShareUniqueFail() + // 失败要抛出,让上层走错误响应;之前 return 错误对象会被 createShare 当成 share 行,导致返回畸形 200 + throw CreateBookmarkShareUniqueFail() } } From 0d8e2520d0b53a87c652ed8523bfb0871e356ce4 Mon Sep 17 00:00:00 2001 From: YaoJunchang Date: Mon, 8 Jun 2026 15:09:50 +0800 Subject: [PATCH 7/8] feat(migration): drop uuid column and update indexes in sr_bookmark_share table --- .../migration.sql | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 prisma/migrations/20260608030507_bookmark_share_index_sharecode/migration.sql diff --git a/prisma/migrations/20260608030507_bookmark_share_index_sharecode/migration.sql b/prisma/migrations/20260608030507_bookmark_share_index_sharecode/migration.sql new file mode 100644 index 0000000..d6ce088 --- /dev/null +++ b/prisma/migrations/20260608030507_bookmark_share_index_sharecode/migration.sql @@ -0,0 +1,17 @@ +/* + Warnings: + + - You are about to drop the column `uuid` on the `sr_bookmark_share` table. All the data in the column will be lost. + +*/ +-- DropIndex +DROP INDEX "sr_bookmark_share_share_code_key"; + +-- DropIndex +DROP INDEX "sr_bookmark_share_uuid_key"; + +-- AlterTable +ALTER TABLE "sr_bookmark_share" DROP COLUMN "uuid"; + +-- CreateIndex +CREATE INDEX "sr_bookmark_share_share_code_idx" ON "sr_bookmark_share"("share_code"); From 97a089d4650e13ab17459b4429c3ea8c6d2f7dd1 Mon Sep 17 00:00:00 2001 From: YaoJunchang Date: Mon, 8 Jun 2026 15:46:03 +0800 Subject: [PATCH 8/8] feat(share): add support for retrieving bookmark share marks by UID --- src/domain/orchestrator/bookmark.ts | 14 -------------- src/domain/orchestrator/share.ts | 14 ++++++++++++++ src/handler/http/shareController.ts | 8 +++++--- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/domain/orchestrator/bookmark.ts b/src/domain/orchestrator/bookmark.ts index 7699202..78fe8ef 100644 --- a/src/domain/orchestrator/bookmark.ts +++ b/src/domain/orchestrator/bookmark.ts @@ -23,20 +23,6 @@ export class BookmarkOrchestrator { return marksResult } - public async getBookmarkMarkListByUid(ctx: ContextManager, bmUId: string) { - const empty = { mark_list: [], user_list: [] } - const ub = await this.bookmarkService.getUserBookmarkByUuidWithDetail(bmUId) - if (!ub) return empty - - if (ub.user_id !== ctx.getUserId()) { - const share = await this.bookmarkService.getBookmarkShareByBookmarkId(ub.bookmark_id, ub.user_id) - const allowed = !share || (share.is_enable && share.allow_comment && share.allow_line) - if (!allowed) return empty - } - - return await this.markService.getBookmarkMarkList(ctx, { id: ub.id, isShowMarks: true }) - } - public async getBookmarkBriefInfo(ctx: ContextManager, bmId: number) { const res = await this.bookmarkService.getUserBookmarkWithDetail(ctx.getUserId(), bmId) if (!res || !res.bookmark) throw BookmarkNotFoundError() diff --git a/src/domain/orchestrator/share.ts b/src/domain/orchestrator/share.ts index 289317b..817cc6f 100644 --- a/src/domain/orchestrator/share.ts +++ b/src/domain/orchestrator/share.ts @@ -113,4 +113,18 @@ export class ShareOrchestrator { if (!userBm) return { mark_list: [], user_list: [] } return await this.markService.getBookmarkMarkList(ctx, { id: userBm.id, isShowMarks: share.show_comment && share.show_line }) } + + public async getBookmarkShareMarkListByUid(ctx: ContextManager, bmUId: string): Promise { + const empty = { mark_list: [], user_list: [] } + const ub = await this.bookmarkService.getUserBookmarkByUuidWithDetail(bmUId) + if (!ub) return empty + + if (ub.user_id !== ctx.getUserId()) { + const share = await this.bookmarkService.getBookmarkShareByBookmarkId(ub.bookmark_id, ub.user_id) + const allowed = !share || (share.is_enable && share.allow_comment && share.allow_line) + if (!allowed) return empty + } + + return await this.markService.getBookmarkMarkList(ctx, { id: ub.id, isShowMarks: true }) + } } diff --git a/src/handler/http/shareController.ts b/src/handler/http/shareController.ts index 12fdfe7..2afcf01 100644 --- a/src/handler/http/shareController.ts +++ b/src/handler/http/shareController.ts @@ -78,10 +78,12 @@ export class ShareController { */ @Get('/mark_list') public async getMarkList(ctx: ContextManager, request: Request) { - const req = await RequestUtils.query<{ share_code: string }>(request) - if (!req) return Failed(ErrorParam()) + const req = await RequestUtils.query<{ share_code?: string; bookmark_uid?: string }>(request) + if (!req || (!req.share_code && !req.bookmark_uid)) return Failed(ErrorParam()) - const markList = await this.shareOrchestrator.getBookmarkShareMarkList(ctx, req.share_code) + const markList = req.bookmark_uid + ? await this.shareOrchestrator.getBookmarkShareMarkListByUid(ctx, req.bookmark_uid) + : await this.shareOrchestrator.getBookmarkShareMarkList(ctx, req.share_code!) return Successed(markList) } }