@oj-module/cli 0.2.66 → 0.2.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/.oj-version +1 -0
- package/bin/oj +4 -0
- package/devkit/README.md +15 -7
- package/devkit/SKILL.md +38 -4
- package/devkit/framework-dev.md +10 -4
- package/devkit/manual.md +146 -24
- package/devkit/menu-rules.md +19 -4
- package/devkit/module-dev-and-cdn-playground.md +4 -0
- package/devkit/publish-walkthrough.md +132 -37
- package/devkit/wecom-internal-app.md +8 -3
- package/devkit/wecom-multi-corp-links.md +163 -0
- package/package.json +2 -2
- package/shell-dist/assets/{index.i0kqbxp050.js → index.6alqyx6ae0.js} +21 -1
- package/shell-dist/assets/{runtime.1xfsxcajj0.js → runtime.1xzahckt10.js} +4863 -4847
- package/shell-dist/index.html +4 -4
- package/shell-dist/versions.json +3 -3
- package/src/__tests__/cli.test.ts +31 -0
- package/src/__tests__/new-scaffold.test.ts +13 -0
- package/src/__tests__/publish-keygen.test.ts +157 -0
- package/src/__tests__/templates-migration-schema-parity.test.ts +540 -0
- package/src/__tests__/templates-schema-columns.test.ts +15 -2
- package/src/__tests__/templates-tenant-scope.test.ts +6 -2
- package/src/build/module-def.ts +1 -0
- package/src/builtin.ts +3 -2
- package/src/bundle.ts +8 -3
- package/src/cli.ts +21 -5
- package/src/dev.ts +15 -10
- package/src/init.ts +47 -41
- package/src/install.ts +11 -4
- package/src/keygen.ts +54 -0
- package/src/lifecycle/__tests__/bundle.test.ts +21 -3
- package/src/lifecycle/__tests__/fixtures/fixture-valid/api/src/demo-solution/manifest.yaml +1 -1
- package/src/lifecycle/__tests__/fixtures/fixture-valid/api/src/demo-solution/migrations/0001__init.sql +2 -2
- package/src/lifecycle/__tests__/fixtures/fixture-valid/api/src/demo-solution/schema.yaml +5 -2
- package/src/lifecycle/__tests__/fixtures/fixture-valid/manifest.yaml +1 -1
- package/src/lifecycle/__tests__/manifest-contract.test.ts +75 -3
- package/src/lifecycle/__tests__/smoke.test.ts +2 -2
- package/src/manifest-contract.ts +91 -8
- package/src/market/bootstrap.ts +26 -2
- package/src/market/command.ts +1 -0
- package/src/market/publish.ts +8 -1
- package/src/market/walkthrough.ts +24 -8
- package/src/new.ts +2 -0
- package/src/scaffold-guard.ts +227 -0
- package/src/site.ts +2 -0
- package/src/usage.ts +13 -9
- package/src/vendor.ts +5 -1
- package/templates/config.yaml +4 -2
- package/templates/init.include.yaml +10 -3
- package/templates/openapi.json +460 -1
- package/templates/src/README.md +37 -0
- package/templates/src/app/api/_platform/_lifecycle/compensate.ts +136 -0
- package/templates/src/app/api/_platform/_lifecycle/installer.ts +78 -25
- package/templates/src/app/api/_platform/_lifecycle/lock.ts +23 -0
- package/templates/src/app/api/_platform/_lifecycle/steps/deploy-web.ts +28 -0
- package/templates/src/app/api/_platform/_lifecycle/steps/preflight.ts +46 -0
- package/templates/src/app/api/_platform/_lifecycle/steps/reload.ts +100 -36
- package/templates/src/app/api/_platform/_lifecycle/steps/smoke.ts +7 -15
- package/templates/src/app/api/_platform/_lifecycle/text-edit.ts +71 -19
- package/templates/src/app/api/_platform/_lifecycle/types.ts +26 -2
- package/templates/src/app/api/_platform/_lifecycle/uninstall.ts +93 -14
- package/templates/src/app/api/_platform/_shared/service/domain/settings.ts +8 -4
- package/templates/src/app/api/_platform/_shared/service/domain/solution-perms.ts +25 -10
- package/templates/src/app/api/_platform/manifest.yaml +1 -0
- package/templates/src/app/api/_platform/market/api.ts +235 -10
- package/templates/src/app/api/_platform/migrations/0001__baseline.mysql.sql +178 -0
- package/templates/src/app/api/_platform/migrations/0001__baseline.pg.sql +173 -0
- package/templates/src/app/api/_platform/migrations/0001__baseline.sql +188 -0
- package/templates/src/app/api/_platform/migrations/0002__market_release.mysql.sql +17 -0
- package/templates/src/app/api/_platform/migrations/0002__market_release.pg.sql +16 -0
- package/templates/src/app/api/_platform/migrations/0002__market_release.sql +33 -0
- package/templates/src/app/api/_platform/schema.yaml +18 -0
- package/templates/src/app/api/_platform/seed.mysql.sql +10 -0
- package/templates/src/app/api/_platform/seed.pg.sql +10 -0
- package/templates/src/app/api/auth/_shared/wecom/client.ts +24 -4
- package/templates/src/app/api/home/migrations/0001__create_home_tables.mysql.sql +14 -0
- package/templates/src/app/api/home/migrations/0001__create_home_tables.pg.sql +14 -0
- package/templates/src/app/api/home/migrations/0002__tenant.pg.sql +4 -0
- package/templates/src/app/api/home/seed.mysql.sql +71 -0
- package/templates/src/app/api/home/seed.pg.sql +71 -0
- package/templates/src/app/api/notification/_shared/notify.ts +6 -6
- package/templates/src/app/api/notification/migrations/0001__create_notifications.mysql.sql +11 -0
- package/templates/src/app/api/notification/migrations/0001__create_notifications.pg.sql +11 -0
- package/templates/src/app/api/notification/migrations/0002__notifications_user.mysql.sql +8 -0
- package/templates/src/app/api/notification/migrations/0003__notifications_broadcast.mysql.sql +21 -0
- package/templates/src/app/api/notification/migrations/0003__notifications_broadcast.pg.sql +22 -0
- package/templates/src/app/api/notification/migrations/0004__notifications_broadcast_hidden.mysql.sql +10 -0
- package/templates/src/app/api/notification/migrations/0004__notifications_broadcast_hidden.pg.sql +11 -0
- package/templates/src/app/api/notification/migrations/0005__tenant.pg.sql +6 -0
- package/templates/src/app/api/notification/seed.mysql.sql +8 -0
- package/templates/src/app/api/notification/seed.pg.sql +11 -0
- package/templates/src/app/api/publish/_shared/identity.ts +69 -0
- package/templates/src/app/api/publish/api.ts +349 -0
- package/templates/src/app/api/publish/manifest.yaml +8 -0
- package/templates/src/app/api/publish/migrations/0001__publish_credential.mysql.sql +23 -0
- package/templates/src/app/api/publish/migrations/0001__publish_credential.pg.sql +23 -0
- package/templates/src/app/api/publish/migrations/0001__publish_credential.sql +39 -0
- package/templates/src/app/api/publish/schema.yaml +33 -0
- package/templates/src/app/api/system/login-methods/api.ts +2 -1
- package/templates/src/app/web/_platform/__client/api.schemas.ts +15 -0
- package/templates/src/app/web/_platform/__client/index.ts +25 -1
- package/templates/src/app/web/entry.ts +9 -5
- package/templates/src/app/web/home/routes.ts +5 -0
- package/templates/src/app/web/login/locales/en-US.json +7 -1
- package/templates/src/app/web/login/locales/zh-CN.json +7 -1
- package/templates/src/app/web/login/pages/login.tsx +79 -86
- package/templates/src/app/web/login/routes.ts +54 -1
- package/templates/src/app/web/personal-center/locales/en-US.json +1 -0
- package/templates/src/app/web/personal-center/locales/zh-CN.json +1 -0
- package/templates/src/app/web/personal-center/pages/my-profile/index.tsx +5 -0
- package/templates/src/app/web/system/__client/api.schemas.ts +2 -1
- package/templates/src/app/web/system/locales/en-US.json +1 -8
- package/templates/src/app/web/system/locales/zh-CN.json +1 -8
- package/templates/src/app/web/system/pages/settings/index.tsx +17 -4
- package/templates/src/app/web/system/routes.ts +0 -6
- package/templates/src/oj-market/web/__tests__/CardGrid.test.tsx +33 -0
- package/templates/src/oj-market/web/__tests__/DetailDrawer.test.tsx +69 -0
- package/templates/src/oj-market/web/__tests__/marketClient.fake.ts +7 -1
- package/templates/src/oj-market/web/api/client.ts +3 -0
- package/templates/src/oj-market/web/api/defaultClient.ts +5 -0
- package/templates/src/oj-market/web/components/CardItem.tsx +44 -1
- package/templates/src/oj-market/web/components/DetailDrawer.tsx +17 -1
- package/templates/src/oj-market/web/entry.ts +31 -2
- package/templates/src/oj-market/web/locales/en-US.json +5 -1
- package/templates/src/oj-market/web/locales/zh-CN.json +5 -1
- package/templates/src/oj-market/web/publish/__client/api.schemas.ts +61 -0
- package/templates/src/oj-market/web/publish/__client/index.ts +164 -0
- package/templates/src/oj-market/web/publish/locales/en-US.json +80 -0
- package/templates/src/oj-market/web/publish/locales/zh-CN.json +80 -0
- package/templates/src/oj-market/web/publish/pages/history.tsx +112 -0
- package/templates/src/oj-market/web/publish/pages/index.tsx +196 -0
- package/templates/src/oj-market/web/publish/pages/model.ts +52 -0
- package/templates/src/oj-market/web/publish/pages/token-modal.tsx +82 -0
- package/templates/src/oj-market/web/publish/routes.ts +41 -0
- package/templates/src/oj-market/web/types.ts +30 -0
- package/templates/tests/lifecycle/compensate.spec.ts +207 -0
- package/templates/tests/lifecycle/deploy-smoke.spec.ts +38 -14
- package/templates/tests/lifecycle/installer.spec.ts +28 -9
- package/templates/tests/lifecycle/market-api.spec.ts +164 -12
- package/templates/tests/lifecycle/preflight.spec.ts +68 -0
- package/templates/tests/lifecycle/register.spec.ts +22 -0
- package/templates/tests/lifecycle/role-title-translate.spec.ts +4 -34
- package/templates/tests/lifecycle/text-edit.spec.ts +45 -27
- package/templates/tests/lifecycle/uninstall.spec.ts +36 -0
- package/templates/tests/publish-credential.spec.ts +354 -0
- package/templates/tests/publish-identity.spec.ts +44 -0
- package/templates/tests/rbac-solution-perms.spec.ts +48 -3
- package/templates/tests/wecom-client-timeout.spec.ts +33 -3
- package/templates/tests/wecom-landing.spec.ts +63 -1
- package/templates/tsconfig.paths.json +1 -0
- package/templates/web.config.ts +8 -4
- package/vendor/host-versions.json +3 -3
- package/templates/seed.mysql.sql +0 -6
- package/templates/seed.pg.sql +0 -6
- package/templates/src/app/api/_platform/migrations/0001__create_users.mysql.sql +0 -9
- package/templates/src/app/api/_platform/migrations/0001__create_users.pg.sql +0 -9
- package/templates/src/app/api/_platform/migrations/0001__create_users.sql +0 -7
- package/templates/src/app/api/_platform/migrations/0002__add_users_avatar_base64.mysql.sql +0 -3
- package/templates/src/app/api/_platform/migrations/0002__add_users_avatar_base64.sql +0 -2
- package/templates/src/app/api/_platform/migrations/0003__users_source_display_name.mysql.sql +0 -5
- package/templates/src/app/api/_platform/migrations/0003__users_source_display_name.sql +0 -5
- package/templates/src/app/api/_platform/migrations/0004__sys_rbac.mysql.sql +0 -70
- package/templates/src/app/api/_platform/migrations/0004__sys_rbac.pg.sql +0 -67
- package/templates/src/app/api/_platform/migrations/0004__sys_rbac.sql +0 -67
- package/templates/src/app/api/_platform/migrations/0005__users_must_change.mysql.sql +0 -3
- package/templates/src/app/api/_platform/migrations/0005__users_must_change.sql +0 -2
- package/templates/src/app/api/_platform/migrations/0006__users_is_forbidden.mysql.sql +0 -3
- package/templates/src/app/api/_platform/migrations/0006__users_is_forbidden.sql +0 -3
- package/templates/src/app/api/_platform/migrations/0007__users_email.sql +0 -3
- package/templates/src/app/api/_platform/migrations/0008__sys_refresh_token.mysql.sql +0 -10
- package/templates/src/app/api/_platform/migrations/0008__sys_refresh_token.pg.sql +0 -10
- package/templates/src/app/api/_platform/migrations/0008__sys_refresh_token.sql +0 -11
- package/templates/src/app/api/_platform/migrations/0009__sys_throttle.mysql.sql +0 -12
- package/templates/src/app/api/_platform/migrations/0009__sys_throttle.pg.sql +0 -12
- package/templates/src/app/api/_platform/migrations/0009__sys_throttle.sql +0 -13
- package/templates/src/app/api/_platform/migrations/0010__sys_solution_route.mysql.sql +0 -17
- package/templates/src/app/api/_platform/migrations/0010__sys_solution_route.pg.sql +0 -16
- package/templates/src/app/api/_platform/migrations/0010__sys_solution_route.sql +0 -18
- package/templates/src/app/api/_platform/migrations/0011__sys_setting_group_label.mysql.sql +0 -2
- package/templates/src/app/api/_platform/migrations/0011__sys_setting_group_label.sql +0 -4
- package/templates/src/app/api/_platform/migrations/0012__market_history.mysql.sql +0 -13
- package/templates/src/app/api/_platform/migrations/0012__market_history.pg.sql +0 -12
- package/templates/src/app/api/_platform/migrations/0012__market_history.sql +0 -14
- package/templates/src/app/api/_platform/migrations/0013__users_profile.sql +0 -4
- package/templates/src/app/api/_platform/migrations/0014__reg_source_seq.mysql.sql +0 -9
- package/templates/src/app/api/_platform/migrations/0014__reg_source_seq.pg.sql +0 -7
- package/templates/src/app/api/_platform/migrations/0014__reg_source_seq.sql +0 -8
- package/templates/src/app/api/_platform/migrations/0015__tenant.mysql.sql +0 -12
- package/templates/src/app/api/_platform/migrations/0015__tenant.pg.sql +0 -11
- package/templates/src/app/api/_platform/migrations/0015__tenant.sql +0 -44
- package/templates/src/app/api/_platform/migrations/0016__org.mysql.sql +0 -41
- package/templates/src/app/api/_platform/migrations/0016__org.pg.sql +0 -40
- package/templates/src/app/api/_platform/migrations/0016__org.sql +0 -62
- package/templates/src/app/api/_platform/migrations/0017__users_employee_no.mysql.sql +0 -7
- package/templates/src/app/api/_platform/migrations/0017__users_employee_no.pg.sql +0 -4
- package/templates/src/app/api/_platform/migrations/0017__users_employee_no.sql +0 -8
- package/templates/src/app/api/_platform/migrations/0018__sys_role_title_key.mysql.sql +0 -3
- package/templates/src/app/api/_platform/migrations/0018__sys_role_title_key.pg.sql +0 -3
- package/templates/src/app/api/_platform/migrations/0018__sys_role_title_key.sql +0 -8
- package/templates/src/app/web/system/pages/login-methods/index.tsx +0 -30
package/templates/seed.mysql.sql
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
-- 系统设置默认值(PRD §4.3;注释内禁英文分号)
|
|
2
|
-
INSERT IGNORE INTO sys_setting (key, module, `group`, type, value, default_value, label_key, secret, update_time) VALUES ('framework.site_title', 'framework', 'general', 'string', 'React Antd Admin', 'React Antd Admin', 'system:setting.site_title', 0, 0);
|
|
3
|
-
-- 系统设置默认值(PRD §4.3;注释内禁英文分号;framework.market_cdn_url 缺省 /cdn = 本站点自供,免 setup)
|
|
4
|
-
INSERT IGNORE INTO sys_setting (key, module, `group`, type, value, default_value, label_key, secret, update_time) VALUES ('framework.market_cdn_url', 'framework', 'security', 'string', '/cdn', '/cdn', 'system:setting.market_cdn_url', 0, 0);
|
|
5
|
-
INSERT IGNORE INTO sys_setting (key, module, `group`, type, value, default_value, label_key, secret, update_time) VALUES ('ldap.enabled', 'ldap', 'login', 'bool', '0', '0', 'system:setting.ldap_enabled', 0, 0);
|
|
6
|
-
INSERT IGNORE INTO sys_setting (key, module, `group`, type, value, default_value, label_key, secret, update_time) VALUES ('sso.enabled', 'sso', 'login', 'bool', '0', '0', 'system:setting.sso_enabled', 0, 0);
|
package/templates/seed.pg.sql
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
-- 系统设置默认值(PRD §4.3;注释内禁英文分号)
|
|
2
|
-
INSERT INTO sys_setting (key, module, "group", type, value, default_value, label_key, secret, update_time) VALUES ('framework.site_title', 'framework', 'general', 'string', 'React Antd Admin', 'React Antd Admin', 'system:setting.site_title', 0, 0) ON CONFLICT DO NOTHING;
|
|
3
|
-
-- 系统设置默认值(PRD §4.3;注释内禁英文分号;framework.market_cdn_url 缺省 /cdn = 本站点自供,免 setup)
|
|
4
|
-
INSERT INTO sys_setting (key, module, "group", type, value, default_value, label_key, secret, update_time) VALUES ('framework.market_cdn_url', 'framework', 'security', 'string', '/cdn', '/cdn', 'system:setting.market_cdn_url', 0, 0) ON CONFLICT DO NOTHING;
|
|
5
|
-
INSERT INTO sys_setting (key, module, "group", type, value, default_value, label_key, secret, update_time) VALUES ('ldap.enabled', 'ldap', 'login', 'bool', '0', '0', 'system:setting.ldap_enabled', 0, 0) ON CONFLICT DO NOTHING;
|
|
6
|
-
INSERT INTO sys_setting (key, module, "group", type, value, default_value, label_key, secret, update_time) VALUES ('sso.enabled', 'sso', 'login', 'bool', '0', '0', 'system:setting.sso_enabled', 0, 0) ON CONFLICT DO NOTHING;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
-- users 表 mysql 方言覆盖(方言覆盖文件必胜,通用文件兜底,oj-bin docs/migration.md §3.1;约定同 oj-wiki 先例)。
|
|
2
|
-
-- 差异:AUTOINCREMENT → BIGINT AUTO_INCREMENT;username TEXT 改 VARCHAR(255)(mysql TEXT 不能带 UNIQUE);
|
|
3
|
-
-- roles TEXT 默认值写表达式 DEFAULT ('[]')(mysql ≥8.0.13 对 TEXT/BLOB 只允许表达式默认值)。
|
|
4
|
-
CREATE TABLE IF NOT EXISTS users (
|
|
5
|
-
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
6
|
-
username VARCHAR(255) NOT NULL UNIQUE,
|
|
7
|
-
password_hash TEXT NOT NULL,
|
|
8
|
-
roles TEXT NOT NULL DEFAULT ('[]')
|
|
9
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
-- users 表 pg 方言覆盖(方言覆盖文件必胜,oj-bin docs/migration.md §3.1;约定同 oj-wiki 先例)。
|
|
2
|
-
-- 差异:AUTOINCREMENT → BIGSERIAL(GENERATED ALWAYS 系显式插值受限,SERIAL 系允许 seed 显式 id);
|
|
3
|
-
-- username TEXT UNIQUE 在 pg 合法,保留 TEXT。
|
|
4
|
-
CREATE TABLE IF NOT EXISTS users (
|
|
5
|
-
id BIGSERIAL PRIMARY KEY,
|
|
6
|
-
username TEXT NOT NULL UNIQUE,
|
|
7
|
-
password_hash TEXT NOT NULL,
|
|
8
|
-
roles TEXT NOT NULL DEFAULT '[]'
|
|
9
|
-
);
|
package/templates/src/app/api/_platform/migrations/0003__users_source_display_name.mysql.sql
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
-- users 扩展列 mysql 方言覆盖(oj-wiki 0005/0006 先例同型)。
|
|
2
|
-
-- 差异:TEXT 默认值写表达式 DEFAULT ('local');DROP COLUMN mysql 8 原生支持,与基线同语法。
|
|
3
|
-
ALTER TABLE users ADD COLUMN source TEXT NOT NULL DEFAULT ('local');
|
|
4
|
-
ALTER TABLE users ADD COLUMN display_name TEXT;
|
|
5
|
-
ALTER TABLE users DROP COLUMN roles;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
-- RBAC 地基:users 扩展列 + 移除 roles JSON 列(D10:sys_user_role 表为唯一权威源)
|
|
2
|
-
-- sqlite 方言(ALTER TABLE DROP COLUMN 需 sqlite ≥ 3.35,Node 22 内建满足)
|
|
3
|
-
ALTER TABLE users ADD COLUMN source TEXT NOT NULL DEFAULT 'local';
|
|
4
|
-
ALTER TABLE users ADD COLUMN display_name TEXT;
|
|
5
|
-
ALTER TABLE users DROP COLUMN roles;
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
-- 框架 RBAC 六表 mysql 方言覆盖(sqlite 版见 0004__sys_rbac.sql;oj-wiki 先例同型)。
|
|
2
|
-
-- 差异:保留字反引号(mysql 默认 sql_mode 下双引号是字符串字面量);
|
|
3
|
-
-- AUTO_INCREMENT 替 AUTOINCREMENT,id 取 BIGINT(与 users 同宽度口径);
|
|
4
|
-
-- 主键/默认值 TEXT → VARCHAR(255) / 表达式默认值(mysql TEXT 不能作主键、不能直接带默认值)。
|
|
5
|
-
CREATE TABLE IF NOT EXISTS sys_setting (
|
|
6
|
-
`key` VARCHAR(255) PRIMARY KEY,
|
|
7
|
-
module TEXT NOT NULL,
|
|
8
|
-
`group` TEXT NOT NULL,
|
|
9
|
-
type TEXT NOT NULL DEFAULT ('string'),
|
|
10
|
-
value TEXT,
|
|
11
|
-
default_value TEXT,
|
|
12
|
-
label_key TEXT,
|
|
13
|
-
options TEXT,
|
|
14
|
-
secret BIGINT NOT NULL DEFAULT 0,
|
|
15
|
-
update_time BIGINT NOT NULL DEFAULT 0
|
|
16
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
17
|
-
|
|
18
|
-
CREATE TABLE IF NOT EXISTS sys_oplog (
|
|
19
|
-
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
20
|
-
create_time BIGINT NOT NULL,
|
|
21
|
-
user_id BIGINT NOT NULL DEFAULT 0,
|
|
22
|
-
username TEXT NOT NULL DEFAULT ('system'),
|
|
23
|
-
action TEXT NOT NULL,
|
|
24
|
-
module TEXT NOT NULL DEFAULT ('framework'),
|
|
25
|
-
version TEXT,
|
|
26
|
-
target TEXT,
|
|
27
|
-
detail TEXT,
|
|
28
|
-
level BIGINT NOT NULL DEFAULT 6
|
|
29
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
30
|
-
-- mysql 无 CREATE INDEX IF NOT EXISTS;迁移账本保证一次应用(oj-bin docs/migration.md 语义)
|
|
31
|
-
CREATE INDEX idx_sys_oplog_time ON sys_oplog (create_time, id);
|
|
32
|
-
|
|
33
|
-
CREATE TABLE IF NOT EXISTS sys_solution_route (
|
|
34
|
-
name VARCHAR(255) NOT NULL,
|
|
35
|
-
version VARCHAR(255) NOT NULL,
|
|
36
|
-
category TEXT NOT NULL,
|
|
37
|
-
path VARCHAR(255) NOT NULL,
|
|
38
|
-
`order` BIGINT NOT NULL DEFAULT 0,
|
|
39
|
-
title_key TEXT,
|
|
40
|
-
enabled BIGINT NOT NULL DEFAULT 1,
|
|
41
|
-
PRIMARY KEY (name, version, path)
|
|
42
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
43
|
-
|
|
44
|
-
CREATE TABLE IF NOT EXISTS sys_role (
|
|
45
|
-
name VARCHAR(255) PRIMARY KEY,
|
|
46
|
-
module TEXT NOT NULL,
|
|
47
|
-
title TEXT,
|
|
48
|
-
description TEXT,
|
|
49
|
-
builtin BIGINT NOT NULL DEFAULT 0,
|
|
50
|
-
deprecated BIGINT NOT NULL DEFAULT 0
|
|
51
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
52
|
-
|
|
53
|
-
CREATE TABLE IF NOT EXISTS sys_permission (
|
|
54
|
-
code VARCHAR(255) PRIMARY KEY,
|
|
55
|
-
module TEXT NOT NULL,
|
|
56
|
-
title_key TEXT,
|
|
57
|
-
deprecated BIGINT NOT NULL DEFAULT 0
|
|
58
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
59
|
-
|
|
60
|
-
CREATE TABLE IF NOT EXISTS sys_role_permission (
|
|
61
|
-
role_name VARCHAR(255) NOT NULL,
|
|
62
|
-
permission_code VARCHAR(255) NOT NULL,
|
|
63
|
-
PRIMARY KEY (role_name, permission_code)
|
|
64
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
65
|
-
|
|
66
|
-
CREATE TABLE IF NOT EXISTS sys_user_role (
|
|
67
|
-
user_id BIGINT NOT NULL,
|
|
68
|
-
role_name VARCHAR(255) NOT NULL,
|
|
69
|
-
PRIMARY KEY (user_id, role_name)
|
|
70
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
-- 框架 RBAC 六表 pg 方言覆盖(sqlite 版见 0004__sys_rbac.sql;oj-wiki 先例同型)。
|
|
2
|
-
-- 差异:双引号保留字与 TEXT 主键 pg 原生支持(与 sqlite 同语法);id 取 BIGSERIAL(同 0001.pg 先例)。
|
|
3
|
-
CREATE TABLE IF NOT EXISTS sys_setting (
|
|
4
|
-
key TEXT PRIMARY KEY,
|
|
5
|
-
module TEXT NOT NULL,
|
|
6
|
-
"group" TEXT NOT NULL,
|
|
7
|
-
type TEXT NOT NULL DEFAULT 'string',
|
|
8
|
-
value TEXT,
|
|
9
|
-
default_value TEXT,
|
|
10
|
-
label_key TEXT,
|
|
11
|
-
options TEXT,
|
|
12
|
-
secret INTEGER NOT NULL DEFAULT 0,
|
|
13
|
-
update_time INTEGER NOT NULL DEFAULT 0
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
CREATE TABLE IF NOT EXISTS sys_oplog (
|
|
17
|
-
id BIGSERIAL PRIMARY KEY,
|
|
18
|
-
create_time INTEGER NOT NULL,
|
|
19
|
-
user_id INTEGER NOT NULL DEFAULT 0,
|
|
20
|
-
username TEXT NOT NULL DEFAULT 'system',
|
|
21
|
-
action TEXT NOT NULL,
|
|
22
|
-
module TEXT NOT NULL DEFAULT 'framework',
|
|
23
|
-
version TEXT,
|
|
24
|
-
target TEXT,
|
|
25
|
-
detail TEXT,
|
|
26
|
-
level INTEGER NOT NULL DEFAULT 6
|
|
27
|
-
);
|
|
28
|
-
CREATE INDEX IF NOT EXISTS idx_sys_oplog_time ON sys_oplog (create_time, id);
|
|
29
|
-
|
|
30
|
-
CREATE TABLE IF NOT EXISTS sys_solution_route (
|
|
31
|
-
name TEXT NOT NULL,
|
|
32
|
-
version TEXT NOT NULL,
|
|
33
|
-
category TEXT NOT NULL,
|
|
34
|
-
path TEXT NOT NULL,
|
|
35
|
-
"order" INTEGER NOT NULL DEFAULT 0,
|
|
36
|
-
title_key TEXT,
|
|
37
|
-
enabled INTEGER NOT NULL DEFAULT 1,
|
|
38
|
-
PRIMARY KEY (name, version, path)
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
CREATE TABLE IF NOT EXISTS sys_role (
|
|
42
|
-
name TEXT PRIMARY KEY,
|
|
43
|
-
module TEXT NOT NULL,
|
|
44
|
-
title TEXT,
|
|
45
|
-
description TEXT,
|
|
46
|
-
builtin INTEGER NOT NULL DEFAULT 0,
|
|
47
|
-
deprecated INTEGER NOT NULL DEFAULT 0
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
CREATE TABLE IF NOT EXISTS sys_permission (
|
|
51
|
-
code TEXT PRIMARY KEY,
|
|
52
|
-
module TEXT NOT NULL,
|
|
53
|
-
title_key TEXT,
|
|
54
|
-
deprecated INTEGER NOT NULL DEFAULT 0
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
CREATE TABLE IF NOT EXISTS sys_role_permission (
|
|
58
|
-
role_name TEXT NOT NULL,
|
|
59
|
-
permission_code TEXT NOT NULL,
|
|
60
|
-
PRIMARY KEY (role_name, permission_code)
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
CREATE TABLE IF NOT EXISTS sys_user_role (
|
|
64
|
-
user_id INTEGER NOT NULL,
|
|
65
|
-
role_name TEXT NOT NULL,
|
|
66
|
-
PRIMARY KEY (user_id, role_name)
|
|
67
|
-
);
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
-- 框架 RBAC 六表(设计文档 §5.9.2;判权权威源 + 升级稳定性 deprecated 的地基)
|
|
2
|
-
-- sqlite 方言;mysql/pg 方言变体在阶段 A 冒烟时补齐
|
|
3
|
-
CREATE TABLE IF NOT EXISTS sys_setting (
|
|
4
|
-
key TEXT PRIMARY KEY,
|
|
5
|
-
module TEXT NOT NULL,
|
|
6
|
-
"group" TEXT NOT NULL,
|
|
7
|
-
type TEXT NOT NULL DEFAULT 'string',
|
|
8
|
-
value TEXT,
|
|
9
|
-
default_value TEXT,
|
|
10
|
-
label_key TEXT,
|
|
11
|
-
options TEXT,
|
|
12
|
-
secret INTEGER NOT NULL DEFAULT 0,
|
|
13
|
-
update_time INTEGER NOT NULL DEFAULT 0
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
CREATE TABLE IF NOT EXISTS sys_oplog (
|
|
17
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
18
|
-
create_time INTEGER NOT NULL,
|
|
19
|
-
user_id INTEGER NOT NULL DEFAULT 0,
|
|
20
|
-
username TEXT NOT NULL DEFAULT 'system',
|
|
21
|
-
action TEXT NOT NULL,
|
|
22
|
-
module TEXT NOT NULL DEFAULT 'framework',
|
|
23
|
-
version TEXT,
|
|
24
|
-
target TEXT,
|
|
25
|
-
detail TEXT,
|
|
26
|
-
level INTEGER NOT NULL DEFAULT 6
|
|
27
|
-
);
|
|
28
|
-
CREATE INDEX IF NOT EXISTS idx_sys_oplog_time ON sys_oplog (create_time, id);
|
|
29
|
-
|
|
30
|
-
CREATE TABLE IF NOT EXISTS sys_solution_route (
|
|
31
|
-
name TEXT NOT NULL,
|
|
32
|
-
version TEXT NOT NULL,
|
|
33
|
-
category TEXT NOT NULL,
|
|
34
|
-
path TEXT NOT NULL,
|
|
35
|
-
"order" INTEGER NOT NULL DEFAULT 0,
|
|
36
|
-
title_key TEXT,
|
|
37
|
-
enabled INTEGER NOT NULL DEFAULT 1,
|
|
38
|
-
PRIMARY KEY (name, version, path)
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
CREATE TABLE IF NOT EXISTS sys_role (
|
|
42
|
-
name TEXT PRIMARY KEY,
|
|
43
|
-
module TEXT NOT NULL,
|
|
44
|
-
title TEXT,
|
|
45
|
-
description TEXT,
|
|
46
|
-
builtin INTEGER NOT NULL DEFAULT 0,
|
|
47
|
-
deprecated INTEGER NOT NULL DEFAULT 0
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
CREATE TABLE IF NOT EXISTS sys_permission (
|
|
51
|
-
code TEXT PRIMARY KEY,
|
|
52
|
-
module TEXT NOT NULL,
|
|
53
|
-
title_key TEXT,
|
|
54
|
-
deprecated INTEGER NOT NULL DEFAULT 0
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
CREATE TABLE IF NOT EXISTS sys_role_permission (
|
|
58
|
-
role_name TEXT NOT NULL,
|
|
59
|
-
permission_code TEXT NOT NULL,
|
|
60
|
-
PRIMARY KEY (role_name, permission_code)
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
CREATE TABLE IF NOT EXISTS sys_user_role (
|
|
64
|
-
user_id INTEGER NOT NULL,
|
|
65
|
-
role_name TEXT NOT NULL,
|
|
66
|
-
PRIMARY KEY (user_id, role_name)
|
|
67
|
-
);
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
-- refresh token 存储 mysql 方言覆盖(sqlite 版见 0008__sys_refresh_token.sql;oj-wiki 先例同型)。
|
|
2
|
-
-- 差异:整型列取 BIGINT;CREATE INDEX 无 IF NOT EXISTS(迁移账本一次应用语义兜底)。
|
|
3
|
-
CREATE TABLE IF NOT EXISTS sys_refresh_token (
|
|
4
|
-
token_hash VARCHAR(255) PRIMARY KEY,
|
|
5
|
-
user_id BIGINT NOT NULL,
|
|
6
|
-
expires_at BIGINT NOT NULL,
|
|
7
|
-
revoked BIGINT NOT NULL DEFAULT 0,
|
|
8
|
-
created_at BIGINT NOT NULL
|
|
9
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
10
|
-
CREATE INDEX idx_sys_refresh_token_user ON sys_refresh_token (user_id);
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
-- refresh token 存储 pg 方言覆盖(sqlite 版见 0008__sys_refresh_token.sql;oj-wiki 先例同型)。
|
|
2
|
-
-- 差异:无(TEXT 主键与 CREATE INDEX IF NOT EXISTS pg 原生支持,与 sqlite 同语法)。
|
|
3
|
-
CREATE TABLE IF NOT EXISTS sys_refresh_token (
|
|
4
|
-
token_hash TEXT PRIMARY KEY,
|
|
5
|
-
user_id INTEGER NOT NULL,
|
|
6
|
-
expires_at INTEGER NOT NULL,
|
|
7
|
-
revoked INTEGER NOT NULL DEFAULT 0,
|
|
8
|
-
created_at INTEGER NOT NULL
|
|
9
|
-
);
|
|
10
|
-
CREATE INDEX IF NOT EXISTS idx_sys_refresh_token_user ON sys_refresh_token (user_id);
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
-- refresh token 存储(设计 §3.1:不透明随机串,DB 存 SHA-256 哈希——A1 六表未含,B1 实现期补)。
|
|
2
|
-
-- 轮换作旧(revoked 标记);reuse 检测 = 已吊销串二次出现 → 按 user_id 全族吊销 + 审计;
|
|
3
|
-
-- is_forbidden=1 或重置口令 → 级联删该用户全部记录(§3.1 吊销联动)。
|
|
4
|
-
CREATE TABLE IF NOT EXISTS sys_refresh_token (
|
|
5
|
-
token_hash TEXT PRIMARY KEY,
|
|
6
|
-
user_id INTEGER NOT NULL,
|
|
7
|
-
expires_at INTEGER NOT NULL,
|
|
8
|
-
revoked INTEGER NOT NULL DEFAULT 0,
|
|
9
|
-
created_at INTEGER NOT NULL
|
|
10
|
-
);
|
|
11
|
-
CREATE INDEX IF NOT EXISTS idx_sys_refresh_token_user ON sys_refresh_token (user_id);
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
-- 限速/登录节流状态落库 mysql 方言覆盖(sqlite 版见 0009__sys_throttle.sql;oj-wiki 先例同型)。
|
|
2
|
-
-- 差异:整型列取 BIGINT;rate_key 避开 MySQL 保留字 key。
|
|
3
|
-
CREATE TABLE IF NOT EXISTS sys_rate_window (
|
|
4
|
-
rate_key VARCHAR(255) PRIMARY KEY,
|
|
5
|
-
window_start BIGINT NOT NULL,
|
|
6
|
-
count BIGINT NOT NULL
|
|
7
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
8
|
-
CREATE TABLE IF NOT EXISTS sys_login_throttle (
|
|
9
|
-
pair_key VARCHAR(255) PRIMARY KEY,
|
|
10
|
-
fail_count BIGINT NOT NULL,
|
|
11
|
-
blocked_until BIGINT NOT NULL DEFAULT 0
|
|
12
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
-- 限速/登录节流状态落库 pg 方言覆盖(sqlite 版见 0009__sys_throttle.sql;oj-wiki 先例同型)。
|
|
2
|
-
-- 差异:无(TEXT 主键三方言同语法)。
|
|
3
|
-
CREATE TABLE IF NOT EXISTS sys_rate_window (
|
|
4
|
-
rate_key TEXT PRIMARY KEY,
|
|
5
|
-
window_start INTEGER NOT NULL,
|
|
6
|
-
count INTEGER NOT NULL
|
|
7
|
-
);
|
|
8
|
-
CREATE TABLE IF NOT EXISTS sys_login_throttle (
|
|
9
|
-
pair_key TEXT PRIMARY KEY,
|
|
10
|
-
fail_count INTEGER NOT NULL,
|
|
11
|
-
blocked_until INTEGER NOT NULL DEFAULT 0
|
|
12
|
-
);
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
-- 限速/登录节流状态落库(反常识修正:oj 运行时每请求重建模块实例,进程内 Map 不跨请求存活——
|
|
2
|
-
-- B5 连败阈值与接口滑动窗口在真实运行时恒失效;状态持久化后重启保留、多实例天然同源,
|
|
3
|
-
-- 原先「多实例换 Redis」的已知上限就此消除)。
|
|
4
|
-
CREATE TABLE IF NOT EXISTS sys_rate_window (
|
|
5
|
-
rate_key TEXT PRIMARY KEY,
|
|
6
|
-
window_start INTEGER NOT NULL,
|
|
7
|
-
count INTEGER NOT NULL
|
|
8
|
-
);
|
|
9
|
-
CREATE TABLE IF NOT EXISTS sys_login_throttle (
|
|
10
|
-
pair_key TEXT PRIMARY KEY,
|
|
11
|
-
fail_count INTEGER NOT NULL,
|
|
12
|
-
blocked_until INTEGER NOT NULL DEFAULT 0
|
|
13
|
-
);
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
-- 方案注册路由表重构 mysql 方言覆盖(sqlite 版见 0010__sys_solution_route.sql)。
|
|
2
|
-
-- 差异:保留字反引号;整型列取 BIGINT;主键 TEXT → VARCHAR(255);
|
|
3
|
-
-- ALTER ADD COLUMN / CREATE INDEX 无 IF NOT EXISTS(迁移账本一次应用语义兜底,同 0008)。
|
|
4
|
-
ALTER TABLE sys_setting ADD COLUMN deprecated BIGINT NOT NULL DEFAULT 0;
|
|
5
|
-
|
|
6
|
-
DROP TABLE IF EXISTS sys_solution_route;
|
|
7
|
-
CREATE TABLE sys_solution_route (
|
|
8
|
-
path VARCHAR(255) PRIMARY KEY,
|
|
9
|
-
module TEXT NOT NULL,
|
|
10
|
-
category TEXT NOT NULL,
|
|
11
|
-
`order` BIGINT NOT NULL DEFAULT 0,
|
|
12
|
-
title_key TEXT,
|
|
13
|
-
required_permission TEXT,
|
|
14
|
-
deprecated BIGINT NOT NULL DEFAULT 0,
|
|
15
|
-
enabled BIGINT NOT NULL DEFAULT 1
|
|
16
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
17
|
-
CREATE INDEX idx_sys_solution_route_module ON sys_solution_route (module);
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
-- 方案注册路由表重构 pg 方言覆盖(sqlite 版见 0010__sys_solution_route.sql)。
|
|
2
|
-
-- 差异:无(ADD COLUMN / DROP TABLE / 双引号保留字 / CREATE INDEX IF NOT EXISTS pg 原生支持)。
|
|
3
|
-
ALTER TABLE sys_setting ADD COLUMN deprecated INTEGER NOT NULL DEFAULT 0;
|
|
4
|
-
|
|
5
|
-
DROP TABLE IF EXISTS sys_solution_route;
|
|
6
|
-
CREATE TABLE sys_solution_route (
|
|
7
|
-
path TEXT PRIMARY KEY,
|
|
8
|
-
module TEXT NOT NULL,
|
|
9
|
-
category TEXT NOT NULL,
|
|
10
|
-
"order" INTEGER NOT NULL DEFAULT 0,
|
|
11
|
-
title_key TEXT,
|
|
12
|
-
required_permission TEXT,
|
|
13
|
-
deprecated INTEGER NOT NULL DEFAULT 0,
|
|
14
|
-
enabled INTEGER NOT NULL DEFAULT 1
|
|
15
|
-
);
|
|
16
|
-
CREATE INDEX IF NOT EXISTS idx_sys_solution_route_module ON sys_solution_route (module);
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
-- 方案注册路由表重构(P1-8,D10 注册唯一出口的落点):0004 版以 (name, version, path) 为主键、
|
|
2
|
-
-- 无 module/required_permission/deprecated 列,与「站点级路由注册(path 唯一 + 声明消失标
|
|
3
|
-
-- deprecated,镜像 AC2-3/4)」的语义不兼容;旧表从未被运行时读写(仅存在性断言),DROP 重建零数据损失。
|
|
4
|
-
-- 同时为 sys_setting 补 deprecated 列:设置定义行声明消失同样保留标 deprecated(P1-8 register 语义)。
|
|
5
|
-
ALTER TABLE sys_setting ADD COLUMN deprecated INTEGER NOT NULL DEFAULT 0;
|
|
6
|
-
|
|
7
|
-
DROP TABLE IF EXISTS sys_solution_route;
|
|
8
|
-
CREATE TABLE sys_solution_route (
|
|
9
|
-
path TEXT PRIMARY KEY,
|
|
10
|
-
module TEXT NOT NULL,
|
|
11
|
-
category TEXT NOT NULL,
|
|
12
|
-
"order" INTEGER NOT NULL DEFAULT 0,
|
|
13
|
-
title_key TEXT,
|
|
14
|
-
required_permission TEXT,
|
|
15
|
-
deprecated INTEGER NOT NULL DEFAULT 0,
|
|
16
|
-
enabled INTEGER NOT NULL DEFAULT 1
|
|
17
|
-
);
|
|
18
|
-
CREATE INDEX IF NOT EXISTS idx_sys_solution_route_module ON sys_solution_route (module);
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
-- market_history mysql 方言覆盖(方言覆盖必胜,通用兜底;oj-bin docs/migration.md §3.1)。
|
|
2
|
-
-- 差异:AUTOINCREMENT → BIGINT AUTO_INCREMENT;TEXT 列按业务长度收窄为 VARCHAR;
|
|
3
|
-
-- created_at 用 BIGINT(秒级 epoch)。
|
|
4
|
-
CREATE TABLE IF NOT EXISTS market_history (
|
|
5
|
-
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
6
|
-
solution VARCHAR(255) NOT NULL,
|
|
7
|
-
version VARCHAR(255) NOT NULL,
|
|
8
|
-
action VARCHAR(64) NOT NULL,
|
|
9
|
-
status VARCHAR(64) NOT NULL,
|
|
10
|
-
operator VARCHAR(255),
|
|
11
|
-
message TEXT,
|
|
12
|
-
created_at BIGINT NOT NULL
|
|
13
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
-- market_history pg 方言覆盖(方言覆盖必胜,通用兜底;oj-bin docs/migration.md §3.1)。
|
|
2
|
-
-- 差异:AUTOINCREMENT → BIGSERIAL;TEXT 在 pg 合法,保留 TEXT。
|
|
3
|
-
CREATE TABLE IF NOT EXISTS market_history (
|
|
4
|
-
id BIGSERIAL PRIMARY KEY,
|
|
5
|
-
solution TEXT NOT NULL,
|
|
6
|
-
version TEXT NOT NULL,
|
|
7
|
-
action TEXT NOT NULL,
|
|
8
|
-
status TEXT NOT NULL,
|
|
9
|
-
operator TEXT,
|
|
10
|
-
message TEXT,
|
|
11
|
-
created_at BIGINT NOT NULL
|
|
12
|
-
);
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
-- market_history 表上收 _platform(P4 裁决:市场操作历史为平台级审计面,归属平台核心,
|
|
2
|
-
-- 不再由 oj-market 方案包自带迁移创建)。install/enable/disable/uninstall/upgrade/rollback
|
|
3
|
-
-- 六类动作留痕;前端历史抽屉与版本历史对比只读消费。
|
|
4
|
-
-- 结构只进 migrations(S006);与 schema.yaml 列集一致。
|
|
5
|
-
CREATE TABLE IF NOT EXISTS market_history (
|
|
6
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
7
|
-
solution TEXT NOT NULL,
|
|
8
|
-
version TEXT NOT NULL,
|
|
9
|
-
action TEXT NOT NULL,
|
|
10
|
-
status TEXT NOT NULL,
|
|
11
|
-
operator TEXT,
|
|
12
|
-
message TEXT,
|
|
13
|
-
created_at INTEGER NOT NULL
|
|
14
|
-
);
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
-- reg_source_seq mysql 方言覆盖(方言覆盖必胜,通用兜底;oj-bin docs/migration.md §3.1)。
|
|
2
|
-
-- 差异:INTEGER → BIGINT;TEXT 主键须给长度(前缀键无法承载长 URL),按 1024 收窄;
|
|
3
|
-
-- updated_at 用 BIGINT(秒级 epoch)。
|
|
4
|
-
CREATE TABLE IF NOT EXISTS reg_source_seq (
|
|
5
|
-
source_url VARCHAR(1024) NOT NULL,
|
|
6
|
-
max_seq BIGINT NOT NULL,
|
|
7
|
-
updated_at BIGINT NOT NULL,
|
|
8
|
-
PRIMARY KEY (source_url)
|
|
9
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
-- reg_source_seq pg 方言覆盖(方言覆盖必胜,通用兜底;oj-bin docs/migration.md §3.1)。
|
|
2
|
-
-- 差异:INTEGER → BIGINT(seq 单调长期累加);TEXT 在 pg 合法,保留 TEXT。
|
|
3
|
-
CREATE TABLE IF NOT EXISTS reg_source_seq (
|
|
4
|
-
source_url TEXT NOT NULL PRIMARY KEY,
|
|
5
|
-
max_seq BIGINT NOT NULL,
|
|
6
|
-
updated_at BIGINT NOT NULL
|
|
7
|
-
);
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
-- reg_source_seq(REG-CS2 索引新鲜度):站点按源记住「见过的最大 seq」,回退即拒(防回放/降级)。
|
|
2
|
-
-- 受害者是站点,记录点就在站点(D1);CLI/API 同一判定,不另设状态文件。
|
|
3
|
-
-- 结构只进 migrations(S006);与 schema.yaml 列集一致。
|
|
4
|
-
CREATE TABLE IF NOT EXISTS reg_source_seq (
|
|
5
|
-
source_url TEXT NOT NULL PRIMARY KEY,
|
|
6
|
-
max_seq INTEGER NOT NULL,
|
|
7
|
-
updated_at INTEGER NOT NULL
|
|
8
|
-
);
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
-- 0015__tenant(mysql 方言):多租户地基(企微代开发 v3 Phase 0)
|
|
2
|
-
-- 表定性同 0015__tenant.sql 头注释(A 组 11 张租户化 / B 组 10 张共享)。
|
|
3
|
-
-- 差异:TEXT 列不能带字面默认值也不能直接做唯一键 → 租户列用 VARCHAR(255)(与 users.username
|
|
4
|
-
-- 的既有 mysql 写法一致,schema.yaml 仍声明 text,reconcile 按 text↔varchar 同源处理)。
|
|
5
|
-
ALTER TABLE users ADD COLUMN tenant_id VARCHAR(255) NOT NULL DEFAULT 'default';
|
|
6
|
-
ALTER TABLE users ADD COLUMN corp_id VARCHAR(255) NULL;
|
|
7
|
-
ALTER TABLE users DROP INDEX username;
|
|
8
|
-
ALTER TABLE users ADD UNIQUE KEY uk_users_tenant_username (tenant_id, username);
|
|
9
|
-
|
|
10
|
-
ALTER TABLE sys_oplog ADD COLUMN tenant_id VARCHAR(255) NOT NULL DEFAULT 'default';
|
|
11
|
-
ALTER TABLE sys_user_role ADD COLUMN tenant_id VARCHAR(255) NOT NULL DEFAULT 'default';
|
|
12
|
-
ALTER TABLE sys_refresh_token ADD COLUMN tenant_id VARCHAR(255) NOT NULL DEFAULT 'default';
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
-- 0015__tenant(postgres 方言):多租户地基(企微代开发 v3 Phase 0)
|
|
2
|
-
-- 表定性同 0015__tenant.sql 头注释(A 组 11 张租户化 / B 组 10 张共享)。
|
|
3
|
-
-- pg 可直接丢弃列级 UNIQUE 约束后再建复合唯一键,不需要重建表。
|
|
4
|
-
ALTER TABLE users ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default';
|
|
5
|
-
ALTER TABLE users ADD COLUMN corp_id TEXT;
|
|
6
|
-
ALTER TABLE users DROP CONSTRAINT users_username_key;
|
|
7
|
-
ALTER TABLE users ADD CONSTRAINT users_tenant_username_key UNIQUE (tenant_id, username);
|
|
8
|
-
|
|
9
|
-
ALTER TABLE sys_oplog ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default';
|
|
10
|
-
ALTER TABLE sys_user_role ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default';
|
|
11
|
-
ALTER TABLE sys_refresh_token ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default';
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
-- 0015__tenant(sqlite 方言):多租户地基(企微代开发 v3 Phase 0)
|
|
2
|
-
-- 21 张表定性(判据:该表是否可能在无租户上下文时被访问)——
|
|
3
|
-
-- A 组 租户化 11:users / sys_oplog / sys_user_role / sys_refresh_token
|
|
4
|
-
-- / notifications / notifications_broadcast
|
|
5
|
-
-- / notifications_broadcast_read / notifications_broadcast_hidden
|
|
6
|
-
-- / home_pie / home_line / todos
|
|
7
|
-
-- B 组 共享 10:_oj_migrations / sys_setting / sys_solution_route / sys_role / sys_permission
|
|
8
|
-
-- / sys_role_permission / sys_rate_window / sys_login_throttle
|
|
9
|
-
-- / market_history / reg_source_seq
|
|
10
|
-
-- B 组须 schema.yaml `tenant: false` + config `tenant.shared_allow` 双声明才豁免守卫。
|
|
11
|
-
-- 存量数据一律落 'default' 租户,**不做**自动归户(升级后由管理端显式分配)。
|
|
12
|
-
--
|
|
13
|
-
-- users:唯一性从「username 全局唯一」收敛为「(tenant_id, username) 同租户唯一」。
|
|
14
|
-
-- sqlite 无法 ALTER 掉内联 UNIQUE 约束(sqlite_autoindex 不可 DROP)→ 重建表,其余表只加列。
|
|
15
|
-
CREATE TABLE users__tenant_new (
|
|
16
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
17
|
-
tenant_id TEXT NOT NULL DEFAULT 'default',
|
|
18
|
-
corp_id TEXT,
|
|
19
|
-
username TEXT NOT NULL,
|
|
20
|
-
password_hash TEXT NOT NULL,
|
|
21
|
-
avatar_base64 TEXT NOT NULL DEFAULT '',
|
|
22
|
-
source TEXT NOT NULL DEFAULT 'local',
|
|
23
|
-
display_name TEXT,
|
|
24
|
-
must_change INTEGER NOT NULL DEFAULT 0,
|
|
25
|
-
is_forbidden INTEGER NOT NULL DEFAULT 0,
|
|
26
|
-
email TEXT,
|
|
27
|
-
phone_number TEXT,
|
|
28
|
-
description TEXT,
|
|
29
|
-
UNIQUE (tenant_id, username)
|
|
30
|
-
);
|
|
31
|
-
INSERT INTO users__tenant_new (
|
|
32
|
-
id, tenant_id, username, password_hash, avatar_base64, source, display_name,
|
|
33
|
-
must_change, is_forbidden, email, phone_number, description
|
|
34
|
-
)
|
|
35
|
-
SELECT id, 'default', username, password_hash, avatar_base64, source, display_name,
|
|
36
|
-
must_change, is_forbidden, email, phone_number, description
|
|
37
|
-
FROM users;
|
|
38
|
-
DROP TABLE users;
|
|
39
|
-
ALTER TABLE users__tenant_new RENAME TO users;
|
|
40
|
-
|
|
41
|
-
ALTER TABLE sys_oplog ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default';
|
|
42
|
-
-- user_id 是全局自增 users.id(跨租户不重复),故主键 (user_id, role_name) 无需扩容
|
|
43
|
-
ALTER TABLE sys_user_role ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default';
|
|
44
|
-
ALTER TABLE sys_refresh_token ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default';
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
-- 0016__org(mysql 方言):组织架构领域。表定性与列语义同 0016__org.sql 头注释。
|
|
2
|
-
-- 差异(沿用 0001__create_users.mysql.sql / 0015__tenant.mysql.sql 的既有惯例):
|
|
3
|
-
-- · TEXT 不能带字面默认值、不能直接做唯一键 → 键列按业务长度收窄为 VARCHAR;
|
|
4
|
-
-- · AUTOINCREMENT → BIGINT AUTO_INCREMENT;秒级 epoch 的 INTEGER → BIGINT;
|
|
5
|
-
-- · 索引写在 CREATE TABLE 内(MySQL 无 CREATE INDEX IF NOT EXISTS);
|
|
6
|
-
-- · 复合唯一键 (tenant_id, origin, origin_id) = (255+32+128) × 4B = 1660B < InnoDB 3072B 上限。
|
|
7
|
-
CREATE TABLE IF NOT EXISTS sys_department (
|
|
8
|
-
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
9
|
-
tenant_id VARCHAR(255) NOT NULL,
|
|
10
|
-
origin VARCHAR(32) NOT NULL DEFAULT 'local',
|
|
11
|
-
origin_id VARCHAR(128) NOT NULL,
|
|
12
|
-
parent_id BIGINT NULL,
|
|
13
|
-
name VARCHAR(255),
|
|
14
|
-
name_en VARCHAR(255),
|
|
15
|
-
order_no INTEGER NOT NULL DEFAULT 0,
|
|
16
|
-
sync_visible INTEGER NOT NULL DEFAULT 1,
|
|
17
|
-
deleted INTEGER NOT NULL DEFAULT 0,
|
|
18
|
-
seen_job_id BIGINT,
|
|
19
|
-
update_time BIGINT NOT NULL,
|
|
20
|
-
UNIQUE KEY uk_sys_department_origin (tenant_id, origin, origin_id),
|
|
21
|
-
KEY idx_sys_department_parent (tenant_id, parent_id, deleted, order_no)
|
|
22
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
23
|
-
|
|
24
|
-
CREATE TABLE IF NOT EXISTS sys_dept_member (
|
|
25
|
-
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
26
|
-
tenant_id VARCHAR(255) NOT NULL,
|
|
27
|
-
user_id BIGINT NOT NULL,
|
|
28
|
-
dept_id BIGINT NOT NULL,
|
|
29
|
-
order_no INTEGER NOT NULL DEFAULT 0,
|
|
30
|
-
is_leader INTEGER NOT NULL DEFAULT 0,
|
|
31
|
-
is_main INTEGER NOT NULL DEFAULT 0,
|
|
32
|
-
update_time BIGINT NOT NULL,
|
|
33
|
-
UNIQUE KEY uk_sys_dept_member (tenant_id, user_id, dept_id),
|
|
34
|
-
KEY idx_sys_dept_member_dept (tenant_id, dept_id, order_no),
|
|
35
|
-
KEY idx_sys_dept_member_user (tenant_id, user_id, is_main)
|
|
36
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
37
|
-
|
|
38
|
-
ALTER TABLE users ADD COLUMN activated INTEGER NOT NULL DEFAULT 0;
|
|
39
|
-
ALTER TABLE users ADD COLUMN position VARCHAR(255) NULL;
|
|
40
|
-
ALTER TABLE users ADD COLUMN external_status INTEGER NULL;
|
|
41
|
-
UPDATE users SET activated = 1;
|