./knowledge-base/frontend/src/types/index.ts
// 時代区分マスタ
export interface EraMaster {
id: string;
label: string;
}
// 番組マスタ
export interface ProgramMaster {
id: string;
name: string;
created_at?: string;
}
// メンテナンス用資料サマリ
export interface DocumentSummary {
document_id: string;
title: string;
programs: string[];
document_genre?: string;
era_labels?: string[];
overall_status?: string;
total_pages?: number;
analyzed_count?: number;
thumbnail_url?: string;
created_at?: string;
}
export interface BookCountItem {
name: string;
filter_value: string;
count: number;
}
export interface BookCountsResponse {
total_books: number;
era_counts: BookCountItem[];
program_counts: BookCountItem[];
unset_filter_value: string;
}
// 文献(書籍)レコード — DynamoDB booksTable のスキーマ
export interface BookRecord {
document_id: string;
title: string;
era_labels: string[]; // 9ラベルから選択
document_genre: string;
programs: string[];
thumbnail_s3_key?: string;
thumbnail_url?: string; // Presigned URL(レスポンス時のみ)
total_pages: number;
analyzed_count: number;
toc_s3_path?: string;
toc_extracted: boolean;
overall_status:
| "pending"
| "splitting"
| "analyzing"
| "analyzed"
| "completed"
| "failed"
| "partial_completed";
created_at: string;
updated_at: string;
}
// 文献登録時のメタデータ
export interface BookMetadata {
title: string;
era_labels: string[];
document_genre: string;
programs?: string[];
}
// ページメタデータ(ページ固有の情報のみ)
export interface PageMetadata {
tags: string[];
}
// 検索結果アイテム
export interface SearchResultItem {
page_id: string;
document_id: string;
page_number: number;
title: string;
era: string; // 表示用(ラベルをJOINした文字列)
era_labels: string[]; // 時代ラベル配列
tags: string[];
programs: string[];
image_url: string;
thumbnail_url: string;
score: number;
// AI解析結果
document_genre?: string;
chapter_context?: string; // 章コンテキスト(目次から生成)
summary_policy?: string;
ai_era_labels?: string[]; // AI判定した時代ラベル配列
ocr_supplemental_info?: string[];
extracted_text?: string;
entities?: Array<{ type: string; value: string }>;
topics?: string[];
detected_objects?: string[];
pdf_total_pages?: number;
}
// 検索レスポンス
export interface SearchResponse {
total: number;
page: number;
page_size: number;
results: SearchResultItem[];
}
// 検索リクエスト
export interface SearchRequest {
query: string;
filters?: {
era?: string | string[]; // ラベル一致(単一または複数OR条件)
title?: string; // タイトル専用検索
tags?: string[];
programs?: string[];
document_id?: string;
document_genre?: string; // 資料ジャンルフィルタ(新規追加)
};
page?: number;
page_size?: number;
}
// アップロードリクエスト
export interface UploadRequest {
document_id: string;
page_number: number;
metadata: PageMetadata;
book_metadata?: BookMetadata; // page_number=1 のみ必須
image_data?: string; // Base64
image_url?: string;
}
// アップロードレスポンス
export interface UploadResponse {
page_id: string;
document_id: string;
page_number: number;
status: string;
s3_uri: string;
message: string;
}
// 処理ステータス
export interface ProcessingStatus {
page_id: string;
document_id: string;
page_number: number;
status:
| "pending"
| "analyzing"
| "analyzed"
| "embedding"
| "completed"
| "failed";
created_at: string;
updated_at: string;
error_message?: string;
}
// 一括アップロードアイテム
export interface BulkUploadItem {
document_id: string;
page_number: number;
metadata?: Partial<PageMetadata>;
image_data?: string;
image_url?: string;
}
// 一括アップロードリクエスト
export interface BulkUploadRequest {
book_metadata: BookMetadata;
items: BulkUploadItem[];
metadata?: Partial<PageMetadata>; // 共通ページメタデータ
}
// 一括アップロードレスポンス
export interface BulkUploadResponse {
total: number;
success_count: number;
failure_count: number;
results: Array<{
success: boolean;
page_id?: string;
error?: string;
}>;
}
// PDFアップロードURLリクエスト
export interface PdfUploadUrlRequest {
document_id: string;
filename: string;
book_metadata: BookMetadata;
}
// PDFアップロードURLレスポンス
export interface PdfUploadUrlResponse {
document_id: string;
upload_url: string; // S3 Presigned PUT URL
s3_key: string;
status: string;
message: string;
}
// ページメタ情報更新リクエスト(要件①: 1ページ編集)
export interface UpdatePageMetadataRequest {
title?: string;
document_genre?: string;
tags?: string[];
programs?: string[];
era_labels?: string[];
}
// 書籍メタ情報一括更新リクエスト
export interface UpdateDocumentMetadataRequest {
title?: string;
document_genre?: string;
programs?: string[];
era_labels?: string[];
}
// 書籍AI再解析オプション
export interface ReanalyzeDocumentRequest {
/** true のとき AI が時代を再判定する(既定 false = 現在の時代設定を保持)*/
reanalyze_era?: boolean;
}