Files
wish-pool/app/api/admin/wishes/route.ts
2025-10-07 12:34:49 +08:00

75 lines
2.3 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
export async function GET(request: NextRequest) {
try {
console.log('🔍 後台管理 - 獲取所有困擾案例數據...')
// 獲取所有困擾案例(包含私密的)
const wishes = await prisma.$queryRaw`
SELECT id, title, current_pain, expected_solution, expected_effect,
is_public, email, images, user_session, status, category, priority,
created_at, updated_at
FROM wishes
WHERE status = 'active'
ORDER BY id DESC
LIMIT 1000
`
// 獲取點讚數
const wishIds = (wishes as any[]).map(w => w.id)
const likeCountMap = {}
if (wishIds.length > 0) {
const likes = await prisma.wishLike.findMany({
where: {
wishId: { in: wishIds }
},
select: {
wishId: true
}
})
// 計算點讚數
likes.forEach(like => {
likeCountMap[Number(like.wishId)] = (likeCountMap[Number(like.wishId)] || 0) + 1
})
}
// 轉換數據格式
const formattedWishes = (wishes as any[]).map((wish) => ({
id: Number(wish.id),
title: wish.title,
current_pain: wish.current_pain,
expected_solution: wish.expected_solution,
expected_effect: wish.expected_effect,
is_public: Boolean(wish.is_public),
email: wish.email,
images: wish.images,
user_session: wish.user_session,
status: wish.status,
category: wish.category,
priority: Number(wish.priority),
like_count: likeCountMap[Number(wish.id)] || 0,
created_at: wish.created_at ? new Date(wish.created_at).toISOString() : new Date().toISOString(),
updated_at: wish.updated_at ? new Date(wish.updated_at).toISOString() : new Date().toISOString()
}))
console.log(`✅ 成功獲取 ${formattedWishes.length} 筆困擾案例數據`)
return NextResponse.json({
success: true,
data: formattedWishes
})
} catch (error) {
console.error('後台管理 API Error:', error)
return NextResponse.json(
{ success: false, error: 'Failed to fetch admin data' },
{ status: 500 }
)
}
}