panatgithub_AnkiHeadingSync/src/application/ports/AnkiGateway.ts
Dusk b77d4b6332 chore(qa-group): remove managed model remnants
中文: 删除托管 QA Group 12 死代码,统一保留用户自选笔记模板与字段映射路径。

English: Removes dead managed QA Group 12 code and keeps user-selected note templates and field mappings as the active path.
2026-04-27 22:03:52 +08:00

77 lines
No EOL
2.3 KiB
TypeScript

import type { MediaAsset } from "@/domain/card/entities/RenderedFields";
import type { NoteModelDetails } from "@/application/dto/NoteModelDetails";
export interface AddAnkiNoteInput {
deckName: string;
modelName: string;
fields: Record<string, string>;
tags: string[];
}
export interface UpdateAnkiNoteInput {
noteId: number;
deckName?: string;
fields: Record<string, string>;
}
export interface UpdateAnkiNoteModelInput {
noteId: number;
modelName: string;
fields: Record<string, string>;
}
export interface SyncAnkiNoteTagsInput {
noteId: number;
addTags: string[];
removeTags: string[];
}
export interface AnkiNoteSummary {
noteId: number;
modelName: string;
cardIds: number[];
deckNames?: string[];
tags?: string[];
}
export interface ChangeDeckInput {
deckName: string;
cardIds: number[];
}
export interface DeckStat {
deckName: string;
noteCount?: number;
}
export interface AnkiNoteDetails extends AnkiNoteSummary {
fields: Record<string, string>;
}
export interface AnkiGateway {
ensureDeckExists(deckName: string): Promise<void>;
ensureDecks(deckNames: string[]): Promise<void>;
listNoteModels(): Promise<string[]>;
listDeckNames(): Promise<string[]>;
getModelDetails(modelName: string): Promise<NoteModelDetails>;
getDeckStats(deckNames: string[]): Promise<DeckStat[]>;
getNoteSummaries(noteIds: number[]): Promise<AnkiNoteSummary[]>;
addNote(input: AddAnkiNoteInput): Promise<number>;
addNotes(inputs: AddAnkiNoteInput[]): Promise<number[]>;
deleteNotes(noteIds: number[]): Promise<void>;
updateNote(input: UpdateAnkiNoteInput): Promise<void>;
updateNoteModel(input: UpdateAnkiNoteModelInput): Promise<void>;
updateNotes(inputs: UpdateAnkiNoteInput[]): Promise<void>;
syncNoteTags(inputs: SyncAnkiNoteTagsInput[]): Promise<void>;
changeDecks(inputs: ChangeDeckInput[]): Promise<void>;
deleteDecks(deckNames: string[]): Promise<void>;
storeMedia(asset: MediaAsset): Promise<void>;
storeMediaFiles(assets: MediaAsset[]): Promise<void>;
}
export interface AnkiGroupGateway extends AnkiGateway {
getModelFieldNames(modelName: string): Promise<string[]>;
getModelFieldNamesByModelNames(modelNames: string[]): Promise<Record<string, string[]>>;
findNoteIds(query: string): Promise<number[]>;
getNoteDetails(noteIds: number[]): Promise<AnkiNoteDetails[]>;
}