From 4f59569b7c249bb4549d0b03542aa7bccf461967 Mon Sep 17 00:00:00 2001 From: wangdl Date: Thu, 28 May 2026 10:48:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20KB=20=E5=88=97=E8=A1=A8=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=20coverUrl=EF=BC=88coverKey=20=E2=86=92=20=E9=A2=84?= =?UTF-8?q?=E7=AD=BE=E5=90=8D=E4=B8=8B=E8=BD=BDURL=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- .../knowledge-base/knowledge-base.service.ts | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/modules/knowledge-base/knowledge-base.service.ts b/src/modules/knowledge-base/knowledge-base.service.ts index 2150a71..ad65878 100644 --- a/src/modules/knowledge-base/knowledge-base.service.ts +++ b/src/modules/knowledge-base/knowledge-base.service.ts @@ -2,6 +2,7 @@ import { Injectable, BadRequestException, NotFoundException, ForbiddenException, import { KnowledgeBaseRepository } from './knowledge-base.repository'; import { PrismaService } from '../../infrastructure/database/prisma.service'; import { ContentSafetyService } from '../content-safety/content-safety.service'; +import { StorageService } from '../../infrastructure/storage/storage.service'; import { MAX_KNOWLEDGE_BASE_COUNT } from './constants/knowledge-base.constants'; @Injectable() @@ -9,6 +10,7 @@ export class KnowledgeBaseService { constructor( private readonly repository: KnowledgeBaseRepository, private readonly prisma: PrismaService, + private readonly storage: StorageService, @Optional() private readonly safety?: ContentSafetyService, ) {} @@ -21,11 +23,25 @@ export class KnowledgeBaseService { const check = await this.safety?.check(dto.title, { userId, contentType: 'kb-title' }); if (check && !check.safe) throw new ForbiddenException('知识库名称包含违规内容'); } - return this.repository.create(userId, dto); + return this.enrichWithCoverUrl(await this.repository.create(userId, dto)); } async findAll(userId: string, pagination: { page?: number; limit?: number }) { - return this.repository.findAllByUserId(userId, pagination); + const kbs = await this.repository.findAllByUserId(userId, pagination); + return Promise.all(kbs.map(kb => this.enrichWithCoverUrl(kb))); + } + + private async enrichWithCoverUrl(kb: any) { + if (kb.coverKey) { + try { + kb.coverUrl = await this.storage.getDownloadUrl(kb.coverKey, 86400); + } catch { + kb.coverUrl = null; + } + } else { + kb.coverUrl = null; + } + return kb; } async findOne(userId: string, id: string) {