From cf4c78586f8c74dc4c38d74b457ea97f5c703c30 Mon Sep 17 00:00:00 2001 From: admin Date: Fri, 7 Aug 2026 04:12:44 +0000 Subject: [PATCH] Modified by www.SourceFiles.app --- .../20260719000000_expand_student_intake.sql | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 supabase/migrations/20260719000000_expand_student_intake.sql diff --git a/supabase/migrations/20260719000000_expand_student_intake.sql b/supabase/migrations/20260719000000_expand_student_intake.sql new file mode 100644 index 0000000..35509be --- /dev/null +++ b/supabase/migrations/20260719000000_expand_student_intake.sql @@ -0,0 +1,89 @@ +-- 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;