新增評分項目設定、資料庫整合
This commit is contained in:
141
lib/models/index.ts
Normal file
141
lib/models/index.ts
Normal file
@@ -0,0 +1,141 @@
|
||||
// 資料庫模型定義
|
||||
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;
|
||||
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[];
|
||||
}
|
Reference in New Issue
Block a user