新增 AI 解析、評分結果

This commit is contained in:
2025-09-22 17:35:22 +08:00
parent 9d4c586ad3
commit 1d6b1b61b7
16 changed files with 1954 additions and 404 deletions

View File

@@ -129,6 +129,56 @@ export class CriteriaItemService {
return result;
}
static async getAllTemplates(): Promise<CriteriaTemplateWithItems[]> {
const sql = `
SELECT t.*,
JSON_ARRAYAGG(
JSON_OBJECT(
'id', i.id,
'name', i.name,
'description', i.description,
'weight', i.weight,
'maxScore', i.max_score,
'sort_order', i.sort_order
)
) as items
FROM criteria_templates t
LEFT JOIN criteria_items i ON t.id = i.template_id
GROUP BY t.id
ORDER BY t.created_at DESC
`;
const rows = await query(sql) as any[];
return rows.map(row => {
let items = [];
if (row.items) {
try {
// 檢查 items 是否已經是對象數組
if (Array.isArray(row.items)) {
items = row.items;
} else if (typeof row.items === 'string') {
items = JSON.parse(row.items);
} else {
console.log('items 類型:', typeof row.items, row.items);
items = [];
}
// 手動排序項目
items.sort((a, b) => (a.sort_order || 0) - (b.sort_order || 0));
} catch (error) {
console.error('解析 items JSON 失敗:', error);
console.error('原始 items 數據:', row.items);
items = [];
}
}
return {
...row,
items
};
});
}
static async findByTemplateId(templateId: number): Promise<CriteriaItem[]> {
const sql = 'SELECT * FROM criteria_items WHERE template_id = ? ORDER BY sort_order';
const rows = await query(sql, [templateId]) as any[];