File size: 7,363 Bytes
af8cc55 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | -- ============================================================
-- 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;
|