为活体 e2e 起全栈 muse-server,实测拆两墙、定位第三墙: - 墙1(已修, commit 1f89007):member-server repackage classifier → mvn package 全项目 BUILD SUCCESS。 - 墙2(已解):本仓原无 postgres 基座 dump。新增 muse-cloud/sql/dev/yudao-base-schema-postgres.sql (system/infra/member 测试 schema 忠实翻 PostgreSQL,49 表)+ yudao-base-seed-postgres.sql (system_tenant id=1 等最小启动种子);实测灌库 0 失败,app Flyway(baseline-on-migrate)成功补 Muse V1-V21、Tomcat 起、Spring 初始化。 - 墙3(定位,开 chip):muse-server 卡 bean 装配——5 个 biz.system CommonApi 是 @FeignClient (yudao-cloud RPC),单进程单体下未注册本地 bean。即项目从未以单体真正启动过(基线"未实跑"根因), 需阶段7「cloud→monolith RPC 桥接」(真实接 system 本地 impl,非 permissive stub=假绿)。 knowledge §六 记全栈启动配方 + 三墙状态;进度总账加时间线。MVP #1 纵切仍以 4 个真实 PG IT 为正确性证据。 未推送(等用户)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
90 lines
5.5 KiB
SQL
90 lines
5.5 KiB
SQL
-- =============================================================================
|
||
-- Muse 全栈 app 最小启动种子(PostgreSQL)
|
||
-- 适用:muse-server,spring profile = local,infra,muse.security.mock-enable=true
|
||
-- 目标库:已含【yudao 基座表 system_*/infra_*】+【Muse Flyway V1-V21】的 PG 库
|
||
-- 目标:让 app 启动成功 + 放行/服务 /app-api/muse/**
|
||
--
|
||
-- 关键结论(基于只读代码核查,非猜测):
|
||
-- 1) 每个 app-api 请求都会先走 TokenAuthenticationFilter:
|
||
-- checkAccessToken(token) -> system_oauth2_access_token / system_oauth2_refresh_token
|
||
-- (查不到再回退到 mock 登录)。这两张表必须【存在】(yudao 基座表,已假定存在),
|
||
-- 但【无需任何种子行】——mock token 命中不了它们正是预期路径。
|
||
-- 2) muse.tenant.enable=true 时,TenantSecurityWebFilter 对非 ignore 的 app-api 请求
|
||
-- 调用 validTenant(tenantId),校验 system_tenant:存在 + status 启用 + 未过期。
|
||
-- => 这是本种子【唯一强制】的一行:system_tenant(id=1)。
|
||
-- 3) validTenant 不连表查 system_tenant_package / system_users / system_role,
|
||
-- 故这些表对“app 启动 + /app-api/muse/** 放行”不是必需;下文按“可选”给出,
|
||
-- 仅为后续 admin-api 登录 / 跨租户场景方便。
|
||
--
|
||
-- 列布局对齐真实 PG yudao 基座(BaseDO):deleted 为 boolean,tenant_id 为 bigint,
|
||
-- 审计列 creator/create_time/updater/update_time 均有默认值。id 显式给定(INPUT 模式)。
|
||
-- 全部 INSERT 幂等:ON CONFLICT (id) DO NOTHING,可重复执行。
|
||
-- =============================================================================
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- [必需] 默认租户 system_tenant(id=1)
|
||
-- status=0 启用(CommonStatusEnum.ENABLE=0;DISABLE=1)
|
||
-- expire_time 设到 2099 远未来,避免 DateUtils.isExpired 触发 TENANT_EXPIRE
|
||
-- package_id=1:仅为列非空占位(yudao 无外键约束,不要求 package 行真实存在)
|
||
-- -----------------------------------------------------------------------------
|
||
INSERT INTO system_tenant
|
||
(id, name, contact_user_id, contact_name, contact_mobile, status, websites,
|
||
package_id, expire_time, account_count,
|
||
creator, create_time, updater, update_time, deleted)
|
||
VALUES
|
||
(1, '芋道源码', 1, 'Muse', '15601691300', 0, '',
|
||
1, TIMESTAMP '2099-12-31 23:59:59', 1000,
|
||
'1', CURRENT_TIMESTAMP, '1', CURRENT_TIMESTAMP, FALSE)
|
||
ON CONFLICT (id) DO NOTHING;
|
||
|
||
-- =============================================================================
|
||
-- 以下均为【可选】:/app-api/muse/** 的 mock 路径不需要它们。
|
||
-- 仅当你还想跑 admin-api 登录、或希望 getTenantIdList/套餐相关逻辑数据完整时再放开。
|
||
-- =============================================================================
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- [可选] 租户套餐 system_tenant_package(id=1):status=0 启用
|
||
-- menu_ids 用 '[]' 占位(DO 内是 Set<Long>,JSON 数组字符串)
|
||
-- -----------------------------------------------------------------------------
|
||
INSERT INTO system_tenant_package
|
||
(id, name, status, remark, menu_ids,
|
||
creator, create_time, updater, update_time, deleted)
|
||
VALUES
|
||
(1, '系统租户套餐', 0, '最小启动占位', '[]',
|
||
'1', CURRENT_TIMESTAMP, '1', CURRENT_TIMESTAMP, FALSE)
|
||
ON CONFLICT (id) DO NOTHING;
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- [可选] 管理员 system_users(id=1):status=0 启用,tenant_id=1
|
||
-- password 为 admin 的 BCrypt 值(yudao 默认 admin/admin123,密文随版本可能不同;
|
||
-- 如需精确登录请以本环境实际加密结果为准)。app-api/muse/** 不读此表。
|
||
-- -----------------------------------------------------------------------------
|
||
INSERT INTO system_users
|
||
(id, username, password, nickname, remark, dept_id, post_ids,
|
||
email, mobile, sex, avatar, status, login_ip, login_date,
|
||
creator, create_time, updater, update_time, deleted, tenant_id)
|
||
VALUES
|
||
(1, 'admin',
|
||
'$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KFkOJ/.',
|
||
'芋道源码', '管理员', NULL, NULL,
|
||
'aoteman@126.com', '15612345678', 1, '', 0, '', NULL,
|
||
'1', CURRENT_TIMESTAMP, '1', CURRENT_TIMESTAMP, FALSE, 1)
|
||
ON CONFLICT (id) DO NOTHING;
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- [可选] 超级管理员角色 system_role(id=1):type=1 内置,data_scope=1 全部,status=0 启用
|
||
-- -----------------------------------------------------------------------------
|
||
INSERT INTO system_role
|
||
(id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark,
|
||
creator, create_time, updater, update_time, deleted, tenant_id)
|
||
VALUES
|
||
(1, '超级管理员', 'super_admin', 1, 1, '', 0, 1, '内置角色',
|
||
'1', CURRENT_TIMESTAMP, '1', CURRENT_TIMESTAMP, FALSE, 1)
|
||
ON CONFLICT (id) DO NOTHING;
|
||
|
||
-- =============================================================================
|
||
-- 说明:本种子不创建任何表。若启动报 “relation does not exist”,说明目标库缺少
|
||
-- 对应 yudao 基座表(最常见:system_oauth2_access_token / system_oauth2_refresh_token /
|
||
-- infra_* 系列),需要先用 yudao 基座 PG 建表脚本补齐,再执行本种子。
|
||
-- =============================================================================
|