From 54df45cc8a0bbf59bdea6f392706688d62aa198f Mon Sep 17 00:00:00 2001 From: Mannu Date: Sun, 10 May 2026 05:33:57 +0530 Subject: [PATCH] Add children and families API --- src/app/api/children/route.ts | 51 +++++++++++++++++++++++++++++++++++ src/app/api/families/route.ts | 42 +++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 src/app/api/children/route.ts create mode 100644 src/app/api/families/route.ts diff --git a/src/app/api/children/route.ts b/src/app/api/children/route.ts new file mode 100644 index 0000000..47b97e6 --- /dev/null +++ b/src/app/api/children/route.ts @@ -0,0 +1,51 @@ +import { NextResponse } from "next/server"; +import { sql } from "@/db"; + +interface ChildEntry { + familyId: string; + name: string; + birthDate: string; + sex: "male" | "female" | "other"; +} + +export async function POST(request: Request) { + try { + const body: ChildEntry = await request.json(); + const { familyId, name, birthDate, sex } = body; + + if (!familyId || !name || !birthDate || !sex) { + return NextResponse.json({ error: "Missing required fields" }, { status: 400 }); + } + + const [child] = await sql.unsafe( + `INSERT INTO children (family_id, name, birth_date, sex, stage) VALUES ($1, $2, $3, $4, 'newborn') RETURNING *`, + [familyId, name, birthDate, sex] + ); + + return NextResponse.json({ success: true, child }); + } catch (error) { + console.error(error); + return NextResponse.json({ error: String(error) }, { status: 500 }); + } +} + +export async function GET(request: Request) { + const { searchParams } = new URL(request.url); + const familyId = searchParams.get("familyId"); + + if (!familyId) { + return NextResponse.json({ error: "familyId required" }, { status: 400 }); + } + + try { + const children = await sql.unsafe( + `SELECT * FROM children WHERE family_id = $1 ORDER BY created_at DESC`, + [familyId] + ); + + return NextResponse.json({ children }); + } catch (error) { + console.error(error); + return NextResponse.json({ error: String(error) }, { status: 500 }); + } +} \ No newline at end of file diff --git a/src/app/api/families/route.ts b/src/app/api/families/route.ts new file mode 100644 index 0000000..cbcc84c --- /dev/null +++ b/src/app/api/families/route.ts @@ -0,0 +1,42 @@ +import { NextResponse } from "next/server"; +import { sql } from "@/db"; + +export async function POST(request: Request) { + try { + const body = await request.json(); + const { name } = body; + + const [family] = await sql.unsafe( + `INSERT INTO families (name) VALUES ($1) RETURNING *`, + [name || "My Family"] + ); + + return NextResponse.json({ success: true, family }); + } catch (error) { + console.error(error); + return NextResponse.json({ error: String(error) }, { status: 500 }); + } +} + +export async function GET(request: Request) { + const { searchParams } = new URL(request.url); + const userId = searchParams.get("userId"); + + if (!userId) { + return NextResponse.json({ error: "userId required" }, { status: 400 }); + } + + try { + const families = await sql.unsafe( + `SELECT f.* FROM families f + JOIN family_members fm ON f.id = fm.family_id + WHERE fm.user_id = $1`, + [userId] + ); + + return NextResponse.json({ families }); + } catch (error) { + console.error(error); + return NextResponse.json({ error: String(error) }, { status: 500 }); + } +} \ No newline at end of file