import { Comment } from '../entities/comment.entity.js'; /** DI-токен, т.к. интерфейсы стираются при компиляции TS */ export const COMMENT_REPOSITORY = Symbol('COMMENT_REPOSITORY'); export interface ICommentRepository { /** Возвращает и мягко удалённые комментарии — решение принимает вызывающий */ findById(id: string): Promise; /** * Комментарии задачи от старых к новым, включая удалённые. * Курсорная пагинация: cursor — id последнего полученного комментария. */ findByIssue(params: { issueId: number; limit: number; cursor?: string; }): Promise<{ list: Comment[]; nextCursor: string | null }>; /** * Создание и обновление сохраняют и вложения (fileIds) — атомарно с комментарием. * FileNotFoundException, если файл удалили между проверкой и записью. */ create(comment: Comment): Promise; update(comment: Comment): Promise; /** Задачи неудалённых комментариев, к которым прикреплён файл */ findIssueIdsByAttachedFile(fileId: string): Promise; /** Подмножество fileIds, прикреплённых хотя бы к одному комментарию */ findReferencedFileIds(fileIds: string[]): Promise; }