From 30ac75beda4c796ef769bd37a4a2a0cb9a9c8bc2 Mon Sep 17 00:00:00 2001 From: Mannu Date: Sun, 10 May 2026 04:36:17 +0530 Subject: [PATCH] fix: add setup route to create tables --- src/app/api/setup/route.ts | 102 +++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/app/api/setup/route.ts diff --git a/src/app/api/setup/route.ts b/src/app/api/setup/route.ts new file mode 100644 index 0000000..a5a2a11 --- /dev/null +++ b/src/app/api/setup/route.ts @@ -0,0 +1,102 @@ +import { NextResponse } from "next/server"; +import { db } from "@/db"; +import { sql } from "drizzle-orm/postgres"; + +export async function GET() { + try { + // Create types + await db.execute(sql`CREATE TYPE IF NOT EXISTS child_sex AS ENUM('male', 'female', 'other')`); + await db.execute(sql`CREATE TYPE IF NOT EXISTS child_stage AS ENUM('newborn', 'infant', 'solids_start', 'toddler_early', 'toddler_late', 'preschool')`); + await db.execute(sql`CREATE TYPE IF NOT EXISTS member_role AS ENUM('admin', 'caregiver', 'viewer')`); + + // Create tables + await db.execute(sql` + CREATE TABLE IF NOT EXISTS users ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + name text, + email text NOT NULL UNIQUE, + email_verified timestamp, + image text, + created_at timestamp DEFAULT now() NOT NULL, + updated_at timestamp DEFAULT now() NOT NULL + ) + `); + + await db.execute(sql` + CREATE TABLE IF NOT EXISTS accounts ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + user_id uuid NOT NULL, + type text NOT NULL, + provider text NOT NULL, + provider_account_id text NOT NULL, + refresh_token text, + access_token text, + expires_at timestamp, + token_type text, + scope text, + id_token text, + session_state text + ) + `); + + await db.execute(sql` + CREATE TABLE IF NOT EXISTS sessions ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + session_token text NOT NULL UNIQUE, + user_id uuid NOT NULL, + expires timestamp NOT NULL + ) + `); + + await db.execute(sql` + CREATE TABLE IF NOT EXISTS verification_tokens ( + identifier text NOT NULL, + token text NOT NULL, + expires timestamp NOT NULL, + PRIMARY KEY (identifier, token) + ) + `); + + await db.execute(sql` + CREATE TABLE IF NOT EXISTS families ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + name text DEFAULT 'The Gupta Family' NOT NULL, + pediatrician_phone text, + created_at timestamp DEFAULT now() NOT NULL, + updated_at timestamp DEFAULT now() NOT NULL + ) + `); + + await db.execute(sql` + CREATE TABLE IF NOT EXISTS family_members ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + family_id uuid NOT NULL, + user_id uuid NOT NULL, + role member_role DEFAULT 'caregiver' NOT NULL, + display_name text NOT NULL, + created_at timestamp DEFAULT now() NOT NULL, + UNIQUE(family_id, user_id) + ) + `); + + await db.execute(sql` + CREATE TABLE IF NOT EXISTS children ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + family_id uuid NOT NULL, + name text NOT NULL, + birth_date timestamp NOT NULL, + sex child_sex NOT NULL, + current_stage child_stage, + stage_overrides jsonb DEFAULT '{}', + profile_photo_url text, + created_at timestamp DEFAULT now() NOT NULL, + updated_at timestamp DEFAULT now() NOT NULL + ) + `); + + return NextResponse.json({ success: true, message: "Tables created" }); + } catch (error) { + console.error(error); + return NextResponse.json({ error: String(error) }, { status: 500 }); + } +} \ No newline at end of file