api-server/src/modules/knowledge-items/knowledge-items.repository.ts

54 lines
1.5 KiB
TypeScript
Raw Normal View History

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;
}
}