54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
|
|
import { Injectable } from '@nestjs/common';
|
||
|
|
import { generateShortId } from '../../common/utils/id.util';
|
||
|
|
import { KnowledgeItemType } from './types/knowledge-item.types';
|
||
|
|
|
||
|
|
export interface KnowledgeItem {
|
||
|
|
id: string;
|
||
|
|
userId: string;
|
||
|
|
knowledgeBaseId: string;
|
||
|
|
parentId: string | null;
|
||
|
|
itemType: KnowledgeItemType;
|
||
|
|
title: string;
|
||
|
|
content: string;
|
||
|
|
orderIndex: number;
|
||
|
|
createdAt: Date;
|
||
|
|
updatedAt: Date;
|
||
|
|
}
|
||
|
|
|
||
|
|
@Injectable()
|
||
|
|
export class KnowledgeItemsRepository {
|
||
|
|
private items: Map<string, KnowledgeItem> = new Map();
|
||
|
|
|
||
|
|
async create(userId: string, knowledgeBaseId: string, dto: any): Promise<KnowledgeItem> {
|
||
|
|
const item: KnowledgeItem = {
|
||
|
|
id: generateShortId(),
|
||
|
|
userId,
|
||
|
|
knowledgeBaseId,
|
||
|
|
parentId: dto.parentId || null,
|
||
|
|
itemType: dto.itemType || 'lesson',
|
||
|
|
title: dto.title || '',
|
||
|
|
content: dto.content || '',
|
||
|
|
orderIndex: dto.orderIndex || 0,
|
||
|
|
createdAt: new Date(),
|
||
|
|
updatedAt: new Date(),
|
||
|
|
};
|
||
|
|
this.items.set(item.id, item);
|
||
|
|
return item;
|
||
|
|
}
|
||
|
|
|
||
|
|
async findById(id: string): Promise<KnowledgeItem | undefined> {
|
||
|
|
return this.items.get(id);
|
||
|
|
}
|
||
|
|
|
||
|
|
async findByKnowledgeBaseId(knowledgeBaseId: string): Promise<KnowledgeItem[]> {
|
||
|
|
return Array.from(this.items.values()).filter((i) => i.knowledgeBaseId === knowledgeBaseId);
|
||
|
|
}
|
||
|
|
|
||
|
|
async update(id: string, dto: any): Promise<KnowledgeItem | undefined> {
|
||
|
|
const item = this.items.get(id);
|
||
|
|
if (!item) return undefined;
|
||
|
|
Object.assign(item, { ...dto, updatedAt: new Date() });
|
||
|
|
return item;
|
||
|
|
}
|
||
|
|
}
|