From 85665a5eabd60f9bc98dafd71f48c2659cd7f503 Mon Sep 17 00:00:00 2001 From: ectasy663 Date: Thu, 24 Sep 2026 12:06:37 +0530 Subject: [PATCH] fix: correct migration SQL with student_class column and full demo user upserts (Aarav/Neha/Rohan/Amit) --- migrations/001_full_schema_sync.sql | 93 ++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 3 deletions(-) diff --git a/migrations/001_full_schema_sync.sql b/migrations/001_full_schema_sync.sql index 8c51a8f..eb06a55 100644 --- a/migrations/001_full_schema_sync.sql +++ b/migrations/001_full_schema_sync.sql @@ -1,5 +1,5 @@ -- ============================================================================= --- Pragativeer Full Schema Sync Migration +-- Pragativeer Full Schema Sync + Demo User Seed Migration -- File: migrations/001_full_schema_sync.sql -- -- HOW TO RUN: @@ -8,10 +8,11 @@ -- -- This script is 100% idempotent (safe to run multiple times). -- Uses IF NOT EXISTS everywhere so already-applied changes are silently skipped. +-- Uses ON CONFLICT DO UPDATE to correctly fix any demo user data mismatches. -- ============================================================================= -- ── ENUM TYPES ───────────────────────────────────────────────────────────────── --- Note: All enum values in DB are UPPERCASE (e.g. FREE, PRO, AI_COACH, JEE_MAIN) +-- All enum values in DB are UPPERCASE (e.g. FREE, PRO, AI_COACH, JEE_MAIN) DO $$ BEGIN CREATE TYPE classenum AS ENUM ('ELEVENTH', 'TWELFTH', 'DROPPER'); @@ -54,7 +55,7 @@ CREATE TABLE IF NOT EXISTS "user" ( phone TEXT UNIQUE, password_hash TEXT NOT NULL, name TEXT NOT NULL, - class classenum NOT NULL, + student_class classenum NOT NULL, target_exam examenum NOT NULL, medium mediumenum NOT NULL, school TEXT, @@ -292,3 +293,89 @@ ALTER TABLE systemsettings INSERT INTO systemsettings (id, maintenance_mode, allow_new_registrations, enable_free_trial, trial_duration_days, trial_tier, updated_at) VALUES ('global', FALSE, TRUE, TRUE, 15, 'AI_COACH', now()) ON CONFLICT (id) DO NOTHING; + + +-- ============================================================================= +-- DEMO USER SEED / FIX +-- These 4 rows are the canonical demo accounts used by the frontend switcher. +-- ON CONFLICT DO UPDATE ensures the server is always in sync with the correct +-- name, tier, target_exam, and streak — regardless of what was in the DB before. +-- password_hash below is bcrypt of "PragatiVeer@Demo2026" (12 rounds). +-- ============================================================================= + +INSERT INTO "user" ( + id, email, phone, password_hash, name, + student_class, target_exam, medium, + school, city, state, + tier, trial_end, subscription_end, + streak_count, longest_streak, + created_at, last_active +) +VALUES + -- Demo 1: Aarav — AI Coach, JEE (id: 11111111...) + ( + '11111111-1111-1111-1111-111111111111', + 'aarav.demo@pragativeer.com', + '9911111111', + '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMoJ8zYTvNiG0HGkY0P6YOHRV6', + 'Aarav', + 'TWELFTH', 'JEE_MAIN', 'ENGLISH', + 'DPS RK Puram', 'New Delhi', 'Delhi', + 'AI_COACH', NULL, NULL, + 7, 7, + now(), now() + ), + -- Demo 2: Neha — AI Coach, NEET (id: 22222222...) + ( + '22222222-2222-2222-2222-222222222222', + 'neha.demo@pragativeer.com', + '9922222222', + '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMoJ8zYTvNiG0HGkY0P6YOHRV6', + 'Neha', + 'TWELFTH', 'NEET', 'ENGLISH', + 'St. Stephens', 'Mumbai', 'Maharashtra', + 'AI_COACH', NULL, NULL, + 15, 21, + now(), now() + ), + -- Demo 3: Rohan — AI Coach, JEE+NEET (id: 33333333...) + ( + '33333333-3333-3333-3333-333333333333', + 'rohan.demo@pragativeer.com', + '9933333333', + '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMoJ8zYTvNiG0HGkY0P6YOHRV6', + 'Rohan', + 'DROPPER', 'JEE_NEET', 'ENGLISH', + 'Allen Kota', 'Kota', 'Rajasthan', + 'AI_COACH', NULL, NULL, + 1, 1, + now(), now() + ), + -- Demo 4: Amit — Free Plan, JEE (id: 44444444...) + -- Trial ends 15 days from now so the trial banner shows correctly + ( + '44444444-4444-4444-4444-444444444444', + 'amit.demo@pragativeer.com', + '9944444444', + '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMoJ8zYTvNiG0HGkY0P6YOHRV6', + 'Amit', + 'ELEVENTH', 'JEE_MAIN', 'ENGLISH', + 'Resonance', 'Patna', 'Bihar', + 'FREE', now() + INTERVAL '15 days', NULL, + 1, 1, + now(), now() + ) +ON CONFLICT (id) DO UPDATE SET + name = EXCLUDED.name, + email = EXCLUDED.email, + tier = EXCLUDED.tier, + target_exam = EXCLUDED.target_exam, + student_class = EXCLUDED.student_class, + medium = EXCLUDED.medium, + school = EXCLUDED.school, + city = EXCLUDED.city, + state = EXCLUDED.state, + trial_end = EXCLUDED.trial_end, + streak_count = EXCLUDED.streak_count, + longest_streak = EXCLUDED.longest_streak, + last_active = now();