zizi 737e6d5f5a feat(wave4): community通知底座+biz轻量lead form 双模块建成(HJ-WAVE4-EXEC-001·代码就绪待工程门)
§0资源预占(serial·opus)+community(C1-C12)‖biz(B1-B9)三相Workflow编排,主控静态验证门已过(上游三挂点surgical+Boolean blocker已解+边界干净)。本机禁编译,工程门留mini。

community(5 P0·通知底座):
- 站内信(投递幂等/已读归属校验/未读数)+等级引擎(published_count原子自增UPDATE+里程碑uk幂等插reward)+CommunityNotifyApi@Primary本地实现
- 3上游同进程notify挂点(均事务提交后+try-catch吞异常仅error log):
  aigc生成完成(回查task终态SUCCEEDED&&versionId!=null,非result==TRUE)/project审核结果1·2+发布计数/trade收益首次入账
- R3系统身份写防护:CommunityNotifyApiImpl入口LoginUser(id=0)+finally clearContext,防定时任务线程updater NOT NULL 500

biz(6 P0·轻量lead form):
- 询单/报价/进度/验收四表+单线性五态状态机(canTransit仅相邻单跳)+demo可预览负路径降级(注入RuntimePackageApi,失败不透传500)
- 7 app端点(getLoginUserId归属隔离)+7 admin端点(@PreAuthorize biz:*);BizTemplateService返clicker/merge/idle/tycoon 4可玩模板
- 权限seed=独立sql/biz_menu.sql(不进V13保两副本字节一致)

§0地基: Flyway V12(community三表)/V13(biz四表)各两副本md5一致+错误码段1_107/1_110+community.yaml/biz.yaml契约+root pom两module+yudao-server pom两依赖

已知留债(诚实登记·待工程门/staging实测兜底):
- mini工程门(mvn编译/单测/Flyway migrate/@Primary装配/Swagger)未跑——'骨架编译过≠可验收'
- 系统身份写雷+DO↔BIT映射单测mock测不到,须staging两链路实测
- 上游既有单测(trade/aigc)未mock新@Resource会打被吞NPE日志(断言仍绿)
- P-INC-01尽力计数at-most-once(评审版已认非缺陷)/UNLIST第二路径不通知(非P0)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 11:28:01 +00:00

116 lines
4.9 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>game-module-project</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>game-module-project-server</artifactId>
<packaging>jar</packaging>
<name>${project.artifactId}</name>
<description>
project 模块业务实现:controller(app/admin) / service / dal(DO·Mapper) / convert。
被 yudao-server 聚合启动(随单体一起加载,无需独立 bootstrap)。
</description>
<dependencies>
<!-- Spring Cloud 基础环境 -->
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-env</artifactId>
</dependency>
<!-- 本模块对外契约层 -->
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>game-module-project-api</artifactId>
<version>${revision}</version>
</dependency>
<!-- 依赖 compliance 的 -api:发布前注入合规锁风门 Gate(project.publish → ComplianceGateApi.evaluate;跨模块只依赖对方 -api,禁依赖 -server,与 ad-server 依赖 project-api 同构) -->
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>game-module-compliance-api</artifactId>
<version>${revision}</version>
</dependency>
<!-- 依赖 runtime 的 -api:发布编排翻包 0→1(PublishOrchestrationService → RuntimePackageApi.publish,§3.2 C2;只依赖对方 -api 不依赖 -server,守门④无环) -->
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>game-module-runtime-api</artifactId>
<version>${revision}</version>
</dependency>
<!-- 依赖 feed 的 -api:发布编排写发布基线排序行(PublishOrchestrationService → FeedApi.upsertRank mode=PUBLISH_BASELINE,§3.2 C2;只依赖对方 -api 不依赖 -server,守门④无环) -->
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>game-module-feed-api</artifactId>
<version>${revision}</version>
</dependency>
<!-- 依赖 system 的 -api:创建项目/提交发布入口校验创作者白名单(PlayerApi#validateCreator,2026-06-10 鉴权件 §6.3,拍板4 可信边界) -->
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-module-system-api</artifactId>
<version>${revision}</version>
</dependency>
<!-- 依赖 community 的 -api:P-NTF-03 审核结果 + P-INC-01 发布计数通知(Wave4 挂点2;reviewProject 提交后调 + try-catch 吞异常,禁依赖 -server) -->
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>game-module-community-api</artifactId>
<version>${revision}</version>
</dependency>
<!-- 业务组件:数据权限(创作者只见自己数据)+ 多租户(DO 继承 TenantBaseDO) -->
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-biz-data-permission</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-biz-tenant</artifactId>
</dependency>
<!-- Web + 安全:@RestController / @PreAuthorize / 当前登录用户 -->
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-security</artifactId>
</dependency>
<!-- DB:MyBatis Plus(BaseMapperX / LambdaQueryWrapperX / BaseDO) -->
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-mybatis</artifactId>
</dependency>
<!-- 缓存 -->
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-redis</artifactId>
</dependency>
<!-- RPC 远程调用(跨模块互调,预留发布编排 compliance/runtime/feed) -->
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-rpc</artifactId>
</dependency>
<!-- 测试 -->
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
</build>
</project>