import { IssueAttachment } from '../entities/issue-attachment.entity.js'; /** DI-токен, т.к. интерфейсы стираются при компиляции TS */ export const ISSUE_ATTACHMENT_REPOSITORY = Symbol('ISSUE_ATTACHMENT_REPOSITORY'); export interface IIssueAttachmentRepository { /** Вложения задачи от старых к новым */ findByIssue(issueId: number): Promise; /** Задачи, к которым прикреплён файл */ findIssueIdsByFile(fileId: string): Promise; /** Подмножество fileIds, прикреплённых хотя бы к одной задаче */ findReferencedFileIds(fileIds: string[]): Promise; /** * Идемпотентно: повторное прикрепление возвращает существующее вложение. * Бросает IssueNotFoundException / FileNotFoundException, если задачу * или файл удалили между проверкой и вставкой. */ create(attachment: IssueAttachment): Promise; /** false — такого вложения не было */ delete(issueId: number, fileId: string): Promise; }