init: 项目初始提交 - NeoZQYY Monorepo 完整代码
This commit is contained in:
0
db/zqyy_app/migrations/.gitkeep
Normal file
0
db/zqyy_app/migrations/.gitkeep
Normal file
0
db/zqyy_app/schemas/.gitkeep
Normal file
0
db/zqyy_app/schemas/.gitkeep
Normal file
102
db/zqyy_app/schemas/init.sql
Normal file
102
db/zqyy_app/schemas/init.sql
Normal file
@@ -0,0 +1,102 @@
|
||||
-- =============================================================================
|
||||
-- zqyy_app 数据库 Schema DDL
|
||||
-- 业务应用数据库:用户管理、RBAC 权限、任务管理、审批流程
|
||||
-- 所有业务表包含 site_id 字段以支持多门店隔离(Requirements 13.1)
|
||||
-- =============================================================================
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- users 表:用户账户(微信 OpenID、手机号、昵称)
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
wx_openid TEXT UNIQUE,
|
||||
mobile TEXT,
|
||||
nickname TEXT,
|
||||
status INT DEFAULT 1, -- 1=启用, 0=禁用
|
||||
site_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_users_site_id ON users (site_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_users_mobile ON users (mobile);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- roles 表:角色定义
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS roles (
|
||||
id SERIAL PRIMARY KEY,
|
||||
name TEXT UNIQUE NOT NULL,
|
||||
description TEXT,
|
||||
site_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_roles_site_id ON roles (site_id);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- permissions 表:权限定义(全局,不需要 site_id)
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS permissions (
|
||||
id SERIAL PRIMARY KEY,
|
||||
resource TEXT NOT NULL, -- 资源标识,如 'order', 'member'
|
||||
action TEXT NOT NULL, -- 操作标识,如 'read', 'write', 'delete'
|
||||
description TEXT,
|
||||
UNIQUE (resource, action)
|
||||
);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- user_roles 关联表:用户-角色多对多
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS user_roles (
|
||||
user_id BIGINT REFERENCES users(id) ON DELETE CASCADE,
|
||||
role_id INT REFERENCES roles(id) ON DELETE CASCADE,
|
||||
site_id BIGINT NOT NULL,
|
||||
PRIMARY KEY (user_id, role_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_user_roles_site_id ON user_roles (site_id);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- role_permissions 关联表:角色-权限多对多
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS role_permissions (
|
||||
role_id INT REFERENCES roles(id) ON DELETE CASCADE,
|
||||
permission_id INT REFERENCES permissions(id) ON DELETE CASCADE,
|
||||
PRIMARY KEY (role_id, permission_id)
|
||||
);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- tasks 表:任务管理(含审批流)
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS tasks (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
title TEXT NOT NULL,
|
||||
description TEXT,
|
||||
status TEXT DEFAULT 'pending', -- pending / approved / rejected / completed
|
||||
assignee_id BIGINT REFERENCES users(id),
|
||||
creator_id BIGINT REFERENCES users(id),
|
||||
site_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_tasks_site_id ON tasks (site_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks (status);
|
||||
CREATE INDEX IF NOT EXISTS idx_tasks_assignee_id ON tasks (assignee_id);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- approvals 表:审批记录
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS approvals (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
task_id BIGINT REFERENCES tasks(id) ON DELETE CASCADE,
|
||||
approver_id BIGINT REFERENCES users(id),
|
||||
status TEXT DEFAULT 'pending', -- pending / approved / rejected
|
||||
comment TEXT,
|
||||
site_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_approvals_site_id ON approvals (site_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_approvals_task_id ON approvals (task_id);
|
||||
25
db/zqyy_app/scripts/create_test_db.sql
Normal file
25
db/zqyy_app/scripts/create_test_db.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
-- =============================================================================
|
||||
-- 创建测试数据库 test_zqyy_app
|
||||
-- 结构与生产 zqyy_app 完全一致(用户/权限/任务/审批)
|
||||
-- 用途:开发和测试环境,避免影响生产数据
|
||||
-- =============================================================================
|
||||
|
||||
-- 1. 创建数据库(需要以超级用户或有 CREATEDB 权限的角色执行)
|
||||
-- 如果数据库已存在,先手动 DROP 或跳过此步
|
||||
CREATE DATABASE test_zqyy_app
|
||||
WITH ENCODING = 'UTF8'
|
||||
LC_COLLATE = 'zh_CN.UTF-8'
|
||||
LC_CTYPE = 'zh_CN.UTF-8'
|
||||
TEMPLATE = template0;
|
||||
|
||||
-- 2. 连接到 test_zqyy_app 后,执行初始化脚本
|
||||
-- 包含所有表定义(users/roles/permissions/user_roles/role_permissions/tasks/approvals)
|
||||
--
|
||||
-- 在 psql 中执行:
|
||||
-- \c test_zqyy_app
|
||||
-- \i ../schemas/init.sql
|
||||
|
||||
-- 注意事项:
|
||||
-- - 生产 schema 变更后,需同步在测试库执行相同的迁移脚本(Requirements 9.4)
|
||||
-- - 迁移脚本位于 ../migrations/ 目录,按日期前缀顺序执行
|
||||
-- - 所有业务表包含 site_id 字段,测试时注意设置正确的 site_id 值
|
||||
0
db/zqyy_app/seeds/.gitkeep
Normal file
0
db/zqyy_app/seeds/.gitkeep
Normal file
Reference in New Issue
Block a user