新增 AI 解析、評分結果
This commit is contained in:
@@ -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[];
|
||||
|
Reference in New Issue
Block a user