37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server"
|
|
import { prisma } from "@/lib/db"
|
|
|
|
export async function GET(request: NextRequest) {
|
|
const childId = request.nextUrl.searchParams.get("childId")
|
|
if (!childId) {
|
|
return NextResponse.json({ error: "childId required" }, { status: 400 })
|
|
}
|
|
const milestones = await prisma.milestone.findMany({
|
|
where: { childId },
|
|
orderBy: { reachedAt: "desc" },
|
|
})
|
|
return NextResponse.json(milestones)
|
|
}
|
|
|
|
export async function POST(request: Request) {
|
|
try {
|
|
const { childId, skillCode } = await request.json()
|
|
if (!childId || !skillCode) {
|
|
return NextResponse.json({ error: "childId and skillCode required" }, { status: 400 })
|
|
}
|
|
const existing = await prisma.milestone.findUnique({
|
|
where: { childId_skillCode: { childId, skillCode } },
|
|
})
|
|
if (existing) {
|
|
return NextResponse.json(existing)
|
|
}
|
|
const milestone = await prisma.milestone.create({
|
|
data: { childId, skillCode },
|
|
})
|
|
return NextResponse.json(milestone, { status: 201 })
|
|
} catch (error) {
|
|
console.error("Milestone error:", error)
|
|
return NextResponse.json({ error: "Internal error" }, { status: 500 })
|
|
}
|
|
}
|