Files
info-share-spot/supabase/migrations/20260719000000_expand_student_intake.sql
T
2026-08-07 04:12:44 +00:00

90 lines
4.4 KiB
SQL

-- Expand student intake to match Bayside Academy's paper forms:
-- Student Information Form + Authorized Persons Pick-Up Form.
-- ── Extra columns on students ────────────────────────────────────────────────
ALTER TABLE public.students
ADD COLUMN IF NOT EXISTS gender TEXT,
ADD COLUMN IF NOT EXISTS grade_level TEXT,
ADD COLUMN IF NOT EXISTS preferred_start_date DATE,
-- health (allergies TEXT already exists)
ADD COLUMN IF NOT EXISTS chronic_conditions TEXT,
ADD COLUMN IF NOT EXISTS primary_physician TEXT,
ADD COLUMN IF NOT EXISTS physician_phone TEXT,
-- academic
ADD COLUMN IF NOT EXISTS home_ed_eval_due DATE,
ADD COLUMN IF NOT EXISTS previous_schools TEXT,
ADD COLUMN IF NOT EXISTS special_needs TEXT,
ADD COLUMN IF NOT EXISTS portfolio_keeper TEXT, -- 'parent' | 'bayside'
ADD COLUMN IF NOT EXISTS disciplinary_history TEXT,
ADD COLUMN IF NOT EXISTS custody_agreement TEXT, -- explanation; blank = none
-- independent dismissal
ADD COLUMN IF NOT EXISTS dismissal_methods TEXT[] NOT NULL DEFAULT '{}',
ADD COLUMN IF NOT EXISTS dismissal_other TEXT,
ADD COLUMN IF NOT EXISTS backup_transport_plan TEXT,
-- additional
ADD COLUMN IF NOT EXISTS interests TEXT,
ADD COLUMN IF NOT EXISTS other_info TEXT,
-- agreement
ADD COLUMN IF NOT EXISTS agreement_signed_by TEXT,
ADD COLUMN IF NOT EXISTS agreement_signed_date DATE;
-- ── Primary / secondary guardians ────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS public.student_guardians (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
student_id UUID NOT NULL REFERENCES public.students(id) ON DELETE CASCADE,
is_primary BOOLEAN NOT NULL DEFAULT TRUE,
full_name TEXT NOT NULL,
relationship TEXT,
phone TEXT,
address TEXT,
city TEXT,
state TEXT,
zip TEXT,
email TEXT,
employer TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_student_guardians_student ON public.student_guardians(student_id);
ALTER TABLE public.student_guardians ENABLE ROW LEVEL SECURITY;
CREATE POLICY "guardians read" ON public.student_guardians FOR SELECT TO authenticated
USING (
public.current_user_has_role('admin')
OR public.is_parent_of(student_id)
OR public.teaches_student(student_id)
);
CREATE POLICY "guardians write parent or admin" ON public.student_guardians FOR ALL TO authenticated
USING (public.current_user_has_role('admin') OR public.is_parent_of(student_id))
WITH CHECK (public.current_user_has_role('admin') OR public.is_parent_of(student_id));
-- ── Curriculum platform logins (repeatable) ──────────────────────────────────
CREATE TABLE IF NOT EXISTS public.student_curriculum_logins (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
student_id UUID NOT NULL REFERENCES public.students(id) ON DELETE CASCADE,
website TEXT,
student_login TEXT,
student_password TEXT,
parent_account TEXT,
parent_password TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_curriculum_logins_student ON public.student_curriculum_logins(student_id);
ALTER TABLE public.student_curriculum_logins ENABLE ROW LEVEL SECURITY;
CREATE POLICY "curriculum read" ON public.student_curriculum_logins FOR SELECT TO authenticated
USING (
public.current_user_has_role('admin')
OR public.is_parent_of(student_id)
OR public.teaches_student(student_id)
);
CREATE POLICY "curriculum write parent or admin" ON public.student_curriculum_logins FOR ALL TO authenticated
USING (public.current_user_has_role('admin') OR public.is_parent_of(student_id))
WITH CHECK (public.current_user_has_role('admin') OR public.is_parent_of(student_id));
-- ── Authorized pickups: also hold emergency contacts + notes ─────────────────
ALTER TABLE public.authorized_pickups
ADD COLUMN IF NOT EXISTS alt_phone TEXT,
ADD COLUMN IF NOT EXISTS notes TEXT,
ADD COLUMN IF NOT EXISTS kind TEXT NOT NULL DEFAULT 'pickup', -- 'pickup' | 'emergency'
ADD COLUMN IF NOT EXISTS sort_order INTEGER NOT NULL DEFAULT 0;