222 lines
8.0 KiB
PL/PgSQL
222 lines
8.0 KiB
PL/PgSQL
--------------------------------------------------------------------------------------------------------------
|
||
-- function
|
||
CREATE
|
||
OR REPLACE FUNCTION update_updated_at_column()
|
||
RETURNS TRIGGER AS
|
||
$$
|
||
BEGIN
|
||
NEW.updated_at
|
||
:= NOW();
|
||
RETURN NEW;
|
||
END;
|
||
$$
|
||
language 'plpgsql';
|
||
--------------------------------------------------------------------------------------------------------------
|
||
CREATE TABLE sys_users
|
||
(
|
||
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||
account TEXT NOT NULL UNIQUE,
|
||
username TEXT NOT NULL,
|
||
password_hash TEXT NOT NULL,
|
||
avatar_id INTEGER,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMPTZ
|
||
);
|
||
|
||
CREATE INDEX idx_sys_users_account ON sys_users (account);
|
||
|
||
CREATE TRIGGER update_sys_users_updated_at
|
||
BEFORE UPDATE
|
||
ON sys_users
|
||
FOR EACH ROW
|
||
EXECUTE FUNCTION update_updated_at_column();
|
||
|
||
|
||
COMMENT ON COLUMN sys_users.id IS '主键ID';
|
||
COMMENT ON COLUMN sys_users.account IS '用户账号';
|
||
COMMENT ON COLUMN sys_users.username IS '用户名称';
|
||
COMMENT ON COLUMN sys_users.password_hash IS 'hash密码';
|
||
COMMENT ON COLUMN sys_users.avatar_id IS '头像文件id';
|
||
COMMENT ON COLUMN sys_users.created_at IS '创建时间';
|
||
COMMENT ON COLUMN sys_users.updated_at IS '更新时间';
|
||
--------------------------------------------------------------------------------------------------------------
|
||
CREATE TABLE sys_roles
|
||
(
|
||
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||
name TEXT NOT NULL,
|
||
code TEXT NOT NULL UNIQUE,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMPTZ
|
||
);
|
||
|
||
CREATE TRIGGER update_sys_roles_updated_at
|
||
BEFORE UPDATE
|
||
ON sys_roles
|
||
FOR EACH ROW
|
||
EXECUTE FUNCTION update_updated_at_column();
|
||
|
||
COMMENT ON COLUMN sys_roles.id IS '主键ID';
|
||
COMMENT ON COLUMN sys_roles.name IS '角色名称';
|
||
COMMENT ON COLUMN sys_roles.code IS '角色编码,唯一';
|
||
COMMENT ON COLUMN sys_roles.created_at IS '创建时间';
|
||
COMMENT ON COLUMN sys_roles.updated_at IS '更新时间';
|
||
--------------------------------------------------------------------------------------------------------------
|
||
CREATE TABLE sys_permissions
|
||
(
|
||
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||
code TEXT UNIQUE,
|
||
type SMALLINT NOT NULL,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMPTZ,
|
||
|
||
CONSTRAINT unique_type_code UNIQUE (type, code)
|
||
);
|
||
|
||
CREATE TRIGGER update_sys_permissions_updated_at
|
||
BEFORE UPDATE
|
||
ON sys_permissions
|
||
FOR EACH ROW
|
||
EXECUTE FUNCTION update_updated_at_column();
|
||
|
||
COMMENT ON COLUMN sys_permissions.id IS '主键ID';
|
||
COMMENT ON COLUMN sys_permissions.code IS '权限字符,唯一';
|
||
COMMENT ON COLUMN sys_permissions.code IS '权限类型,0: 菜单 1: api';
|
||
COMMENT ON COLUMN sys_permissions.created_at IS '创建时间';
|
||
COMMENT ON COLUMN sys_permissions.updated_at IS '更新时间';
|
||
--------------------------------------------------------------------------------------------------------------
|
||
CREATE TABLE sys_menus
|
||
(
|
||
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||
name TEXT NOT NULL,
|
||
path TEXT NOT NULL,
|
||
component TEXT,
|
||
type SMALLINT NOT NULL,
|
||
hidden BOOLEAN DEFAULT FALSE,
|
||
sort INTEGER DEFAULT 0,
|
||
status SMALLINT NOT NULL DEFAULT 1,
|
||
parent_id INTEGER,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMPTZ,
|
||
|
||
CHECK (type IN (0, 1, 2)),
|
||
CHECK (status IN (0, 1))
|
||
);
|
||
|
||
|
||
CREATE TRIGGER update_sys_menus_updated_at
|
||
BEFORE UPDATE
|
||
ON sys_menus
|
||
FOR EACH ROW
|
||
EXECUTE FUNCTION update_updated_at_column();
|
||
|
||
COMMENT ON COLUMN sys_menus.id IS '主键ID';
|
||
COMMENT ON COLUMN sys_menus.name IS '菜单名称';
|
||
COMMENT ON COLUMN sys_menus.path IS '菜单路径';
|
||
COMMENT ON COLUMN sys_menus.component IS '组件路径';
|
||
COMMENT ON COLUMN sys_menus.type IS '菜单类型 0: 目录 1: 菜单 2: button';
|
||
COMMENT ON COLUMN sys_menus.sort IS '菜单排序';
|
||
COMMENT ON COLUMN sys_menus.hidden IS '是否隐藏菜单';
|
||
COMMENT ON COLUMN sys_menus.status IS '菜单状态 1: 启用 0: 禁用';
|
||
COMMENT ON COLUMN sys_menus.parent_id IS '父级id';
|
||
COMMENT ON COLUMN sys_menus.created_at IS '创建时间';
|
||
COMMENT ON COLUMN sys_menus.updated_at IS '更新时间';
|
||
--------------------------------------------------------------------------------------------------------------
|
||
CREATE TABLE sys_apis
|
||
(
|
||
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||
group_name TEXT NOT NULL,
|
||
name TEXT NOT NULL,
|
||
method TEXT NOT NULL,
|
||
path TEXT NOT NULL,
|
||
sort INTEGER DEFAULT 0,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMPTZ,
|
||
|
||
UNIQUE (method, path)
|
||
);
|
||
|
||
CREATE TRIGGER update_sys_apis_updated_at
|
||
BEFORE UPDATE
|
||
ON sys_apis
|
||
FOR EACH ROW
|
||
EXECUTE FUNCTION update_updated_at_column();
|
||
|
||
COMMENT ON COLUMN sys_apis.id IS '主键ID';
|
||
COMMENT ON COLUMN sys_apis.group_name IS '分组名称';
|
||
COMMENT ON COLUMN sys_apis.name IS '接口名称';
|
||
COMMENT ON COLUMN sys_apis.method IS 'api方法';
|
||
COMMENT ON COLUMN sys_apis.path IS 'api路径';
|
||
COMMENT ON COLUMN sys_apis.sort IS '排序';
|
||
COMMENT ON COLUMN sys_apis.created_at IS '创建时间';
|
||
COMMENT ON COLUMN sys_apis.updated_at IS '更新时间';
|
||
--------------------------------------------------------------------------------------------------------------
|
||
CREATE TABLE files
|
||
(
|
||
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||
file_name TEXT NOT NULL,
|
||
file_path TEXT NOT NULL,
|
||
original_name TEXT NOT NULL,
|
||
folder_name TEXT NOT NULL,
|
||
mime_type TEXT NOT NULL,
|
||
file_size BIGINT NOT NULL,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMPTZ
|
||
);
|
||
|
||
CREATE TRIGGER update_files_updated_at
|
||
BEFORE UPDATE
|
||
ON files
|
||
FOR EACH ROW
|
||
EXECUTE FUNCTION update_updated_at_column();
|
||
|
||
COMMENT ON COLUMN files.id IS '主键ID';
|
||
COMMENT ON COLUMN files.file_name IS '文件名 xxx.jpg';
|
||
COMMENT ON COLUMN files.file_path IS '文件路径 带path /xxx/xxx.jpg';
|
||
COMMENT ON COLUMN files.original_name IS '原始文件名';
|
||
COMMENT ON COLUMN files.folder_name IS '文件夹名称';
|
||
COMMENT ON COLUMN files.mime_type IS 'mime_type';
|
||
COMMENT ON COLUMN files.file_size IS '文件大小';
|
||
COMMENT ON COLUMN files.created_at IS '上传时间';
|
||
COMMENT ON COLUMN files.updated_at IS '修改时间';
|
||
--------------------------------------------------------------------------------------------------------------
|
||
CREATE TABLE sys_user_role
|
||
(
|
||
user_id INTEGER NOT NULL,
|
||
role_id INTEGER NOT NULL,
|
||
PRIMARY KEY (user_id, role_id)
|
||
);
|
||
|
||
COMMENT ON COLUMN sys_user_role.user_id IS '用户ID';
|
||
COMMENT ON COLUMN sys_user_role.role_id IS '角色ID';
|
||
--------------------------------------------------------------------------------------------------------------
|
||
CREATE TABLE sys_role_permission
|
||
(
|
||
role_id INTEGER NOT NULL,
|
||
permission_id INTEGER NOT NULL,
|
||
PRIMARY KEY (role_id, permission_id)
|
||
);
|
||
|
||
COMMENT ON COLUMN sys_role_permission.role_id IS '角色id';
|
||
COMMENT ON COLUMN sys_role_permission.permission_id IS '权限id';
|
||
--------------------------------------------------------------------------------------------------------------
|
||
CREATE TABLE sys_menu_permission
|
||
(
|
||
menu_id INTEGER NOT NULL,
|
||
permission_id INTEGER NOT NULL,
|
||
PRIMARY KEY (menu_id, permission_id)
|
||
);
|
||
|
||
COMMENT ON COLUMN sys_menu_permission.menu_id IS '菜单id';
|
||
COMMENT ON COLUMN sys_menu_permission.permission_id IS '权限id';
|
||
--------------------------------------------------------------------------------------------------------------
|
||
CREATE TABLE sys_api_permission
|
||
(
|
||
api_id INTEGER NOT NULL,
|
||
permission_id INTEGER NOT NULL,
|
||
PRIMARY KEY (api_id, permission_id)
|
||
);
|
||
|
||
COMMENT ON COLUMN sys_api_permission.api_id IS 'api ID';
|
||
COMMENT ON COLUMN sys_api_permission.permission_id IS '权限id';
|
||
--------------------------------------------------------------------------------------------------------------
|