Files
chinese-family-tree-2/app/api/user/activity-logs/route.ts
T
freedakgmail 3d075c6076 0.0.8.5
2025-11-24 14:02:34 +08:00

67 lines
1.7 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server"
import { getServerSession } from "next-auth"
import { authOptions } from "@/lib/auth"
import { prisma } from "@/lib/prisma"
// 获取当前用户的所有相关活动日志(拥有的或参与的家族树)
export async function GET(req: NextRequest) {
try {
const session = await getServerSession(authOptions)
if (!session?.user?.id) {
return NextResponse.json({ error: "未授权" }, { status: 401 })
}
const { searchParams } = new URL(req.url)
const limit = parseInt(searchParams.get('limit') || '50')
// 1. 查找用户拥有或协作的所有家族树 ID
const ownedTrees = await prisma.familyTree.findMany({
where: { ownerId: session.user.id },
select: { id: true }
})
const collaboratedTrees = await prisma.treeCollaborator.findMany({
where: { userId: session.user.id },
select: { treeId: true }
})
const treeIds = [
...ownedTrees.map(t => t.id),
...collaboratedTrees.map(c => c.treeId)
]
// 2. 查询这些家族树的日志
const logs = await prisma.activityLog.findMany({
where: {
treeId: { in: treeIds }
},
orderBy: { timestamp: 'desc' },
take: limit,
include: {
user: {
select: {
id: true,
name: true,
email: true
}
},
tree: {
select: {
id: true,
name: true
}
}
}
})
return NextResponse.json({ logs })
} catch (error) {
console.error("获取用户活动日志失败:", error)
return NextResponse.json(
{ error: "获取用户活动日志失败" },
{ status: 500 }
)
}
}