init
This commit is contained in:
4
init/pg/00_create_db.sql
Normal file
4
init/pg/00_create_db.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
-- K12Study PostgreSQL bootstrap
|
||||
-- The database itself is provided by POSTGRES_DB in docker-compose.
|
||||
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
||||
CREATE EXTENSION IF NOT EXISTS pg_trgm;
|
||||
4
init/pg/01_create_schema.sql
Normal file
4
init/pg/01_create_schema.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
CREATE SCHEMA IF NOT EXISTS sys;
|
||||
CREATE SCHEMA IF NOT EXISTS auth;
|
||||
CREATE SCHEMA IF NOT EXISTS upms;
|
||||
CREATE SCHEMA IF NOT EXISTS ai;
|
||||
7
init/pg/02_init_modules.sql
Normal file
7
init/pg/02_init_modules.sql
Normal file
@@ -0,0 +1,7 @@
|
||||
\i /docker-entrypoint-initdb.d/upms/10_create_upms_tables.sql
|
||||
\i /docker-entrypoint-initdb.d/auth/10_create_auth_tables.sql
|
||||
\i /docker-entrypoint-initdb.d/ai/10_create_ai_tables.sql
|
||||
\i /docker-entrypoint-initdb.d/sys/sys_area.sql
|
||||
\i /docker-entrypoint-initdb.d/upms/20_init_upms_seed.sql
|
||||
\i /docker-entrypoint-initdb.d/auth/20_init_auth_seed.sql
|
||||
\i /docker-entrypoint-initdb.d/ai/20_init_ai_seed.sql
|
||||
27
init/pg/ai/10_create_ai_tables.sql
Normal file
27
init/pg/ai/10_create_ai_tables.sql
Normal file
@@ -0,0 +1,27 @@
|
||||
CREATE TABLE IF NOT EXISTS ai.tb_ai_model_config (
|
||||
model_id VARCHAR(64) PRIMARY KEY,
|
||||
model_name VARCHAR(128) NOT NULL,
|
||||
provider VARCHAR(64) NOT NULL,
|
||||
endpoint VARCHAR(255),
|
||||
province_code VARCHAR(12),
|
||||
area_code VARCHAR(12),
|
||||
tenant_id VARCHAR(64),
|
||||
tenant_path VARCHAR(255),
|
||||
dept_id VARCHAR(64),
|
||||
dept_path VARCHAR(255),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ai.tb_ai_task_log (
|
||||
task_id VARCHAR(64) PRIMARY KEY,
|
||||
task_type VARCHAR(64) NOT NULL,
|
||||
task_status VARCHAR(32) NOT NULL,
|
||||
province_code VARCHAR(12),
|
||||
area_code VARCHAR(12),
|
||||
tenant_id VARCHAR(64),
|
||||
tenant_path VARCHAR(255),
|
||||
dept_id VARCHAR(64),
|
||||
dept_path VARCHAR(255),
|
||||
payload_json TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
6
init/pg/ai/20_init_ai_seed.sql
Normal file
6
init/pg/ai/20_init_ai_seed.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
INSERT INTO ai.tb_ai_model_config (
|
||||
model_id, model_name, provider, endpoint, province_code, area_code, tenant_id, tenant_path, dept_id, dept_path
|
||||
) VALUES (
|
||||
'MODEL-MOCK-001', 'mock-python-ai', 'local', 'http://localhost:9000', '330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/'
|
||||
)
|
||||
ON CONFLICT (model_id) DO NOTHING;
|
||||
33
init/pg/auth/10_create_auth_tables.sql
Normal file
33
init/pg/auth/10_create_auth_tables.sql
Normal file
@@ -0,0 +1,33 @@
|
||||
CREATE TABLE IF NOT EXISTS auth.tb_auth_refresh_token (
|
||||
token_id VARCHAR(64) PRIMARY KEY,
|
||||
user_id VARCHAR(64) NOT NULL,
|
||||
username VARCHAR(64) NOT NULL,
|
||||
province_code VARCHAR(12),
|
||||
area_code VARCHAR(12),
|
||||
tenant_id VARCHAR(64),
|
||||
tenant_path VARCHAR(255),
|
||||
dept_id VARCHAR(64),
|
||||
dept_path VARCHAR(255),
|
||||
refresh_token TEXT NOT NULL,
|
||||
expire_at TIMESTAMP NOT NULL,
|
||||
revoked BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS auth.tb_auth_login_audit (
|
||||
audit_id VARCHAR(64) PRIMARY KEY,
|
||||
user_id VARCHAR(64),
|
||||
username VARCHAR(64) NOT NULL,
|
||||
province_code VARCHAR(12),
|
||||
area_code VARCHAR(12),
|
||||
tenant_id VARCHAR(64),
|
||||
tenant_path VARCHAR(255),
|
||||
dept_id VARCHAR(64),
|
||||
dept_path VARCHAR(255),
|
||||
login_ip VARCHAR(64),
|
||||
login_status VARCHAR(32) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_auth_refresh_token_user ON auth.tb_auth_refresh_token(user_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_auth_login_audit_tenant ON auth.tb_auth_login_audit(tenant_id, created_at DESC);
|
||||
6
init/pg/auth/20_init_auth_seed.sql
Normal file
6
init/pg/auth/20_init_auth_seed.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
INSERT INTO auth.tb_auth_login_audit (
|
||||
audit_id, user_id, username, province_code, area_code, tenant_id, tenant_path, dept_id, dept_path, login_ip, login_status
|
||||
) VALUES (
|
||||
'audit-bootstrap-001', 'U10001', 'admin', '330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/', '127.0.0.1', 'BOOTSTRAP'
|
||||
)
|
||||
ON CONFLICT (audit_id) DO NOTHING;
|
||||
3638
init/pg/sys/sys_area.sql
Normal file
3638
init/pg/sys/sys_area.sql
Normal file
File diff suppressed because it is too large
Load Diff
91
init/pg/upms/10_create_upms_tables.sql
Normal file
91
init/pg/upms/10_create_upms_tables.sql
Normal file
@@ -0,0 +1,91 @@
|
||||
-- 学校租户表
|
||||
CREATE TABLE IF NOT EXISTS upms.tb_sys_tenant (
|
||||
tenant_id VARCHAR(64) PRIMARY KEY,
|
||||
parent_tenant_id VARCHAR(64),
|
||||
tenant_name VARCHAR(128) NOT NULL,
|
||||
tenant_type VARCHAR(32) NOT NULL,
|
||||
province_code VARCHAR(12) NOT NULL,
|
||||
area_code VARCHAR(12) NOT NULL,
|
||||
tenant_path VARCHAR(255) NOT NULL,
|
||||
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS upms.tb_sys_dept (
|
||||
dept_id VARCHAR(64) PRIMARY KEY,
|
||||
parent_dept_id VARCHAR(64),
|
||||
tenant_id VARCHAR(64) NOT NULL,
|
||||
dept_name VARCHAR(128) NOT NULL,
|
||||
dept_type VARCHAR(32) NOT NULL,
|
||||
province_code VARCHAR(12) NOT NULL,
|
||||
area_code VARCHAR(12) NOT NULL,
|
||||
tenant_path VARCHAR(255) NOT NULL,
|
||||
dept_path VARCHAR(255) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS upms.tb_sys_user (
|
||||
user_id VARCHAR(64) PRIMARY KEY,
|
||||
username VARCHAR(64) UNIQUE NOT NULL,
|
||||
display_name VARCHAR(128) NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
province_code VARCHAR(12) NOT NULL,
|
||||
area_code VARCHAR(12) NOT NULL,
|
||||
tenant_id VARCHAR(64) NOT NULL,
|
||||
tenant_path VARCHAR(255) NOT NULL,
|
||||
dept_id VARCHAR(64) NOT NULL,
|
||||
dept_path VARCHAR(255) NOT NULL,
|
||||
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS upms.tb_sys_role (
|
||||
role_id VARCHAR(64) PRIMARY KEY,
|
||||
role_code VARCHAR(64) UNIQUE NOT NULL,
|
||||
role_name VARCHAR(128) NOT NULL,
|
||||
province_code VARCHAR(12) NOT NULL,
|
||||
area_code VARCHAR(12) NOT NULL,
|
||||
tenant_id VARCHAR(64) NOT NULL,
|
||||
tenant_path VARCHAR(255) NOT NULL,
|
||||
dept_id VARCHAR(64),
|
||||
dept_path VARCHAR(255),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS upms.tb_sys_permission (
|
||||
permission_id VARCHAR(64) PRIMARY KEY,
|
||||
permission_code VARCHAR(128) UNIQUE NOT NULL,
|
||||
permission_name VARCHAR(128) NOT NULL,
|
||||
province_code VARCHAR(12) NOT NULL,
|
||||
area_code VARCHAR(12) NOT NULL,
|
||||
tenant_id VARCHAR(64) NOT NULL,
|
||||
tenant_path VARCHAR(255) NOT NULL,
|
||||
dept_id VARCHAR(64),
|
||||
dept_path VARCHAR(255),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS upms.tb_sys_menu_route (
|
||||
route_id VARCHAR(64) PRIMARY KEY,
|
||||
parent_route_id VARCHAR(64),
|
||||
route_path VARCHAR(255) NOT NULL,
|
||||
route_name VARCHAR(128) NOT NULL,
|
||||
component_key VARCHAR(128) NOT NULL,
|
||||
layout_type VARCHAR(32) NOT NULL,
|
||||
title VARCHAR(128) NOT NULL,
|
||||
icon VARCHAR(64),
|
||||
permission_code VARCHAR(128),
|
||||
hidden BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
province_code VARCHAR(12) NOT NULL,
|
||||
area_code VARCHAR(12) NOT NULL,
|
||||
tenant_id VARCHAR(64) NOT NULL,
|
||||
tenant_path VARCHAR(255) NOT NULL,
|
||||
dept_id VARCHAR(64),
|
||||
dept_path VARCHAR(255),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_sys_tenant_area ON upms.tb_sys_tenant(province_code, area_code);
|
||||
CREATE INDEX IF NOT EXISTS idx_dept_tenant ON upms.tb_sys_dept(tenant_id, dept_path);
|
||||
CREATE INDEX IF NOT EXISTS idx_user_tenant ON upms.tb_sys_user(tenant_id, dept_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_route_tenant ON upms.tb_sys_menu_route(tenant_id, route_path);
|
||||
43
init/pg/upms/20_init_upms_seed.sql
Normal file
43
init/pg/upms/20_init_upms_seed.sql
Normal file
@@ -0,0 +1,43 @@
|
||||
INSERT INTO upms.tb_sys_tenant (
|
||||
tenant_id, parent_tenant_id, tenant_name, tenant_type, province_code, area_code, tenant_path
|
||||
) VALUES
|
||||
('SCH-HQ', NULL, 'K12Study 总校', 'HEAD_SCHOOL', '330000', '330100', '/SCH-HQ/'),
|
||||
('SCH-ZJ-HZ-01', 'SCH-HQ', '杭州分校', 'CITY_SCHOOL', '330000', '330100', '/SCH-HQ/SCH-ZJ-HZ-01/')
|
||||
ON CONFLICT (tenant_id) DO NOTHING;
|
||||
|
||||
INSERT INTO upms.tb_sys_dept (
|
||||
dept_id, parent_dept_id, tenant_id, dept_name, dept_type, province_code, area_code, tenant_path, dept_path
|
||||
) VALUES
|
||||
('DEPT-HQ', NULL, 'SCH-HQ', '总校教学部', 'GRADE', '330000', '330100', '/SCH-HQ/', '/DEPT-HQ/'),
|
||||
('DEPT-HQ-MATH', 'DEPT-HQ', 'SCH-HQ', '数学学科组', 'SUBJECT', '330000', '330100', '/SCH-HQ/', '/DEPT-HQ/DEPT-HQ-MATH/'),
|
||||
('DEPT-HQ-ADMIN', 'DEPT-HQ', 'SCH-HQ', '总校运营组', 'ADMIN', '330000', '330100', '/SCH-HQ/', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
||||
ON CONFLICT (dept_id) DO NOTHING;
|
||||
|
||||
INSERT INTO upms.tb_sys_user (
|
||||
user_id, username, display_name, password_hash, province_code, area_code, tenant_id, tenant_path, dept_id, dept_path
|
||||
) VALUES
|
||||
('U10001', 'admin', 'K12Study 管理员', '$2a$10$bootstrap', '330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
||||
ON CONFLICT (user_id) DO NOTHING;
|
||||
|
||||
INSERT INTO upms.tb_sys_role (
|
||||
role_id, role_code, role_name, province_code, area_code, tenant_id, tenant_path, dept_id, dept_path
|
||||
) VALUES
|
||||
('ROLE-ORG-ADMIN', 'ORG_ADMIN', '机构管理员', '330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
||||
ON CONFLICT (role_id) DO NOTHING;
|
||||
|
||||
INSERT INTO upms.tb_sys_permission (
|
||||
permission_id, permission_code, permission_name, province_code, area_code, tenant_id, tenant_path, dept_id, dept_path
|
||||
) VALUES
|
||||
('PERM-DASHBOARD', 'dashboard:view', '查看控制台', '330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/'),
|
||||
('PERM-TENANT', 'tenant:view', '查看租户组织', '330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
||||
ON CONFLICT (permission_id) DO NOTHING;
|
||||
|
||||
INSERT INTO upms.tb_sys_menu_route (
|
||||
route_id, parent_route_id, route_path, route_name, component_key, layout_type, title, icon, permission_code,
|
||||
hidden, province_code, area_code, tenant_id, tenant_path, dept_id, dept_path
|
||||
) VALUES
|
||||
('ROUTE-DASHBOARD', NULL, '/', 'dashboard', 'dashboard', 'SIDEBAR', '控制台', 'layout-dashboard', 'dashboard:view', FALSE,
|
||||
'330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/'),
|
||||
('ROUTE-TENANT', NULL, '/tenant', 'tenant-management', 'tenant', 'SIDEBAR', '租户组织', 'building-2', 'tenant:view', FALSE,
|
||||
'330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
||||
ON CONFLICT (route_id) DO NOTHING;
|
||||
Reference in New Issue
Block a user