Files
ai-scoring-application/lib/models/index.ts

146 lines
3.1 KiB
TypeScript

// 資料庫模型定義
export interface User {
id: number;
email: string;
username: string;
password_hash: string;
full_name?: string;
avatar_url?: string;
role: 'admin' | 'user';
is_active: boolean;
email_verified_at?: Date;
last_login_at?: Date;
created_at: Date;
updated_at: Date;
}
export interface CriteriaTemplate {
id: number;
user_id: number;
name: string;
description?: string;
is_default: boolean;
is_public: boolean;
total_weight: number;
created_at: Date;
updated_at: Date;
}
export interface CriteriaItem {
id: number;
template_id: number;
name: string;
description?: string;
weight: number;
max_score: number;
sort_order: number;
created_at: Date;
updated_at: Date;
}
export interface Project {
id: number;
user_id: number;
template_id: number;
title: string;
description?: string;
status: 'draft' | 'uploading' | 'analyzing' | 'completed' | 'failed';
analysis_started_at?: Date;
analysis_completed_at?: Date;
created_at: Date;
updated_at: Date;
}
export interface ProjectFile {
id: number;
project_id: number;
original_name: string;
file_name: string;
file_path: string;
file_size: number;
file_type: string;
mime_type: string;
upload_status: 'uploading' | 'completed' | 'failed';
upload_progress: number;
created_at: Date;
updated_at: Date;
}
export interface ProjectWebsite {
id: number;
project_id: number;
url: string;
title?: string;
description?: string;
status: 'pending' | 'analyzing' | 'completed' | 'failed';
created_at: Date;
updated_at: Date;
}
export interface Evaluation {
id: number;
project_id: number;
overall_score?: number;
max_possible_score: number;
grade?: string;
performance_status?: string;
recommended_stars?: number;
excellent_items?: number;
improvement_items?: number;
analysis_duration?: number;
ai_model_version?: string;
status: 'pending' | 'analyzing' | 'completed' | 'failed';
error_message?: string;
created_at: Date;
updated_at: Date;
}
export interface EvaluationScore {
id: number;
evaluation_id: number;
criteria_item_id: number;
score: number;
max_score: number;
weight: number;
weighted_score: number;
percentage: number;
created_at: Date;
}
export interface EvaluationFeedback {
id: number;
evaluation_id: number;
criteria_item_id?: number;
feedback_type: 'overall' | 'criteria' | 'strength' | 'improvement';
content: string;
sort_order: number;
created_at: Date;
}
export interface SystemSetting {
id: number;
setting_key: string;
setting_value?: string;
description?: string;
created_at: Date;
updated_at: Date;
}
// 查詢結果類型
export interface ProjectWithDetails extends Project {
template: CriteriaTemplate;
files: ProjectFile[];
websites: ProjectWebsite[];
evaluation?: Evaluation;
}
export interface EvaluationWithDetails extends Evaluation {
project: Project;
scores: (EvaluationScore & { criteria_item: CriteriaItem })[];
feedback: EvaluationFeedback[];
}
export interface CriteriaTemplateWithItems extends CriteriaTemplate {
items: CriteriaItem[];
}