Files
ai-showcase-platform/app/api/admin/apps/available/route.ts

79 lines
2.6 KiB
TypeScript

// =====================================================
// 獲取可用應用列表 API
// =====================================================
import { NextRequest, NextResponse } from 'next/server';
import { db } from '@/lib/database';
export async function GET(request: NextRequest) {
try {
const { searchParams } = new URL(request.url);
const teamId = searchParams.get('teamId');
// 獲取所有活躍的應用,編輯團隊時顯示所有應用(包括已綁定的)
// 與 users 表 JOIN 獲取創建者姓名
let sql = `
SELECT a.id, a.name, a.description, a.category, a.type, a.icon, a.icon_color, a.app_url,
a.creator_id, a.team_id, a.created_at as submissionDate,
u.name as creator_name
FROM apps a
LEFT JOIN users u ON a.creator_id = u.id
WHERE a.is_active = 1
ORDER BY a.created_at DESC
`;
const params: any[] = [];
const apps = await db.query(sql, params);
// 如果沒有結果,嘗試不同的查詢條件
if (apps.length === 0) {
// 嘗試 is_active = TRUE
const sqlTrue = sql.replace('WHERE a.is_active = 1', 'WHERE a.is_active = TRUE');
const appsTrue = await db.query(sqlTrue, params);
// 嘗試 is_active = '1'
const sqlString = sql.replace('WHERE a.is_active = 1', 'WHERE a.is_active = "1"');
const appsString = await db.query(sqlString, params);
// 嘗試沒有 is_active 條件
const sqlNoFilter = sql.replace('WHERE a.is_active = 1', 'WHERE 1=1');
const appsNoFilter = await db.query(sqlNoFilter, params);
// 使用有結果的查詢
if (appsTrue.length > 0) {
return NextResponse.json({
success: true,
message: '可用應用列表獲取成功',
data: appsTrue
});
} else if (appsString.length > 0) {
return NextResponse.json({
success: true,
message: '可用應用列表獲取成功',
data: appsString
});
} else if (appsNoFilter.length > 0) {
return NextResponse.json({
success: true,
message: '可用應用列表獲取成功',
data: appsNoFilter
});
}
}
return NextResponse.json({
success: true,
message: '可用應用列表獲取成功',
data: apps
});
} catch (error) {
console.error('❌ 獲取可用應用列表失敗:', error);
return NextResponse.json({
success: false,
message: '獲取可用應用列表失敗',
error: error instanceof Error ? error.message : '未知錯誤'
}, { status: 500 });
}
}