zerocodebreengine / 002_seed_admin.sql
zombee11's picture
Upload 39 files
af8cc55 verified
Raw
History Blame Contribute Delete
7.36 kB
-- ============================================================
-- OPTIM AI BRE ENGINE - SEED: ADMIN TENANT + USER
-- Run AFTER 001_initial_schema.sql
-- Password: Admin@1234 (BCrypt hash below)
-- ============================================================
-- Step 1: Create the default SYSTEM tenant
INSERT INTO tenants (
id, tenant_code, tenant_name, display_name,
plan_type, max_rules, max_executions_per_day,
is_active, settings
) VALUES (
'a0000000-0000-0000-0000-000000000001',
'SYSTEM',
'OPTIM AI - System Tenant',
'System Admin',
'ENTERPRISE',
99999,
99999999,
TRUE,
'{"isSystem": true}'::jsonb
) ON CONFLICT (tenant_code) DO NOTHING;
-- Step 2: Create SUPER_ADMIN role for the system tenant
INSERT INTO roles (
id, tenant_id, role_code, role_name, description,
is_system_role, is_active
) VALUES (
'b0000000-0000-0000-0000-000000000001',
'a0000000-0000-0000-0000-000000000001',
'SUPER_ADMIN',
'Super Administrator',
'Full system access - all permissions',
TRUE, TRUE
) ON CONFLICT DO NOTHING;
-- Step 3: Grant ALL permissions to SUPER_ADMIN
INSERT INTO role_permissions (role_id, permission_id)
SELECT
'b0000000-0000-0000-0000-000000000001',
p.id
FROM permissions p
ON CONFLICT DO NOTHING;
-- Step 4: Create the admin user
-- Email: admin@optimai.in
-- Password: Admin@1234
-- BCrypt hash generated with work factor 12
INSERT INTO users (
id, tenant_id, email, username, password_hash,
full_name, designation, department,
is_active, is_email_verified
) VALUES (
'c0000000-0000-0000-0000-000000000001',
'a0000000-0000-0000-0000-000000000001',
'admin@optimai.in',
'admin',
'$2a$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/Lewjoc.MiG6L6bHQW',
'System Administrator',
'Platform Administrator',
'Technology',
TRUE,
TRUE
) ON CONFLICT (tenant_id, email) DO NOTHING;
-- Step 5: Assign SUPER_ADMIN role to admin user
INSERT INTO user_roles (user_id, role_id)
VALUES (
'c0000000-0000-0000-0000-000000000001',
'b0000000-0000-0000-0000-000000000001'
) ON CONFLICT DO NOTHING;
-- Step 6: Create a DEMO tenant for testing multi-tenancy
INSERT INTO tenants (
id, tenant_code, tenant_name, display_name,
plan_type, max_rules, max_executions_per_day, is_active, settings
) VALUES (
'a0000000-0000-0000-0000-000000000002',
'DEMO_BANK',
'Demo Bank Ltd',
'Demo Bank',
'ENTERPRISE', 500, 100000, TRUE,
'{"productTypes": ["VEHICLE_LOAN","TRACTOR_LOAN","MSME"]}'::jsonb
) ON CONFLICT (tenant_code) DO NOTHING;
-- Step 7: Create CREDIT_MANAGER role for Demo Bank
INSERT INTO roles (id, tenant_id, role_code, role_name, is_system_role, is_active)
VALUES (
'b0000000-0000-0000-0000-000000000002',
'a0000000-0000-0000-0000-000000000002',
'CREDIT_MANAGER', 'Credit Manager', FALSE, TRUE
) ON CONFLICT DO NOTHING;
-- Step 8: Grant rule permissions to CREDIT_MANAGER
INSERT INTO role_permissions (role_id, permission_id)
SELECT 'b0000000-0000-0000-0000-000000000002', p.id
FROM permissions p
WHERE p.permission_code IN (
'RULE.VIEW','RULE.CREATE','RULE.EDIT','RULE.CLONE',
'EXECUTION.VIEW','EXECUTION.EXECUTE','EXECUTION.SANDBOX',
'REPORT.VIEW','REPORT.EXPORT','AI.GENERATE','AI.ANALYSIS',
'AUDIT.VIEW'
) ON CONFLICT DO NOTHING;
-- Step 9: Create demo user for Demo Bank
-- Email: demo@demobank.in
-- Password: Demo@1234
INSERT INTO users (
id, tenant_id, email, username, password_hash,
full_name, designation, department, is_active, is_email_verified
) VALUES (
'c0000000-0000-0000-0000-000000000002',
'a0000000-0000-0000-0000-000000000002',
'demo@demobank.in',
'demo_credit',
'$2a$12$9k.GJjJDiZqSVhWNi3W4C.F.5XknZ3Nuo8hHE1t3L3XuoUgJAOxFW',
'Demo Credit Manager',
'Credit Manager',
'Credit Department',
TRUE, TRUE
) ON CONFLICT (tenant_id, email) DO NOTHING;
-- Step 10: Assign CREDIT_MANAGER role to demo user
INSERT INTO user_roles (user_id, role_id)
VALUES (
'c0000000-0000-0000-0000-000000000002',
'b0000000-0000-0000-0000-000000000002'
) ON CONFLICT DO NOTHING;
-- Step 11: Seed rule categories for Demo Bank
INSERT INTO rule_categories (id, tenant_id, category_code, category_name, icon, sort_order, is_active)
VALUES
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'ELIGIBILITY', 'Eligibility Rules', 'βœ…', 1, TRUE),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'BUREAU', 'Bureau Rules', 'πŸ“Š', 2, TRUE),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'INCOME', 'Income Rules', 'πŸ’°', 3, TRUE),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'VEHICLE', 'Vehicle Rules', 'πŸš—', 4, TRUE),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'FI', 'FI Rules', '🏠', 5, TRUE),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'FRAUD', 'Fraud Rules', '🚨', 6, TRUE),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'COMPLIANCE', 'Compliance Rules', 'πŸ“‹', 7, TRUE)
ON CONFLICT DO NOTHING;
-- Step 12: Seed loan stages for Demo Bank
INSERT INTO loan_stages (id, tenant_id, stage_code, stage_name, stage_order, is_active)
VALUES
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'LOGIN', 'Login Stage', 1, TRUE),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'DEDUPE', 'De-Dupe Check', 2, TRUE),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'BUREAU_PULL', 'Bureau Pull', 3, TRUE),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'CREDIT_EVAL', 'Credit Evaluation', 4, TRUE),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'FI', 'Field Investigation', 5, TRUE),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'VALUATION', 'Vehicle Valuation', 6, TRUE),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'FINAL_CREDIT', 'Final Credit Decision', 7, TRUE),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'SANCTION', 'Sanction', 8, TRUE)
ON CONFLICT DO NOTHING;
-- Step 13: Seed products for Demo Bank
INSERT INTO products (id, tenant_id, product_code, product_name, product_type, is_active, config)
VALUES
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'VL', 'Vehicle Loan', 'VEHICLE_LOAN', TRUE, '{}'::jsonb),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'TL', 'Tractor Loan', 'TRACTOR_LOAN', TRUE, '{}'::jsonb),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'AL', 'Auto Loan', 'AUTO_LOAN', TRUE, '{}'::jsonb),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'CVL', 'Commercial Vehicle Loan', 'CV_LOAN', TRUE, '{}'::jsonb),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'MSME', 'MSME Loan', 'MSME', TRUE, '{}'::jsonb),
(uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'PL', 'Personal Loan', 'PERSONAL_LOAN', TRUE, '{}'::jsonb)
ON CONFLICT DO NOTHING;
-- ============================================================
-- VERIFICATION QUERIES (run to confirm seed data)
-- ============================================================
-- SELECT * FROM tenants;
-- SELECT u.email, u.full_name, r.role_name FROM users u
-- JOIN user_roles ur ON ur.user_id = u.id
-- JOIN roles r ON r.id = ur.role_id;
-- SELECT COUNT(*) FROM permissions;