完善 server-rs DDD 重构计划与骨架

This commit is contained in:
Codex
2026-04-29 11:51:30 +08:00
parent 39200ea9cc
commit aa2e9b36d7
98 changed files with 1261 additions and 11 deletions

View File

@@ -0,0 +1,4 @@
//! AI 应用编排过渡落位。
//!
//! 这里仅返回纯应用结果或领域事件;真实 LLM 调用继续留在 `platform-llm`
//! 与 `api-server` 编排层。

View File

@@ -0,0 +1,4 @@
//! AI 写入命令过渡落位。
//!
//! 只描述创建任务、推进阶段、追加文本片段和挂接结果引用等用例输入,
//! 不承载外部模型请求或持久化细节。

View File

@@ -0,0 +1,4 @@
//! AI 领域模型过渡落位。
//!
//! 当前历史实现仍在 `lib.rs`。后续迁移 `AiTask`、阶段、流式片段和结果引用时,
//! 只能放入纯领域类型与状态迁移,不能引入 LLM、HTTP 或 SpacetimeDB adapter。

View File

@@ -0,0 +1,3 @@
//! AI 领域错误过渡落位。
//!
//! 错误必须可被 HTTP adapter 和 SpacetimeDB adapter 显式映射,不能直接绑定状态码。

View File

@@ -0,0 +1,3 @@
//! AI 领域事件过渡落位。
//!
//! 用于表达任务开始、阶段完成、任务失败和结果引用挂接等跨上下文事实。

View File

@@ -1,3 +1,9 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
use std::{
collections::HashMap,
error::Error,

View File

@@ -0,0 +1,8 @@
//! 资产应用编排落位。
//!
//! 这里只组合纯校验与应用结果;对象探测、签名和持久化由 adapter 层完成。
pub use crate::asset_object_core::{
AssetEntityBindingProcedureResult, AssetHistoryListResult, AssetObjectProcedureResult,
ConfirmAssetObjectResult, build_asset_entity_binding_input, build_asset_object_upsert_input,
};

View File

@@ -0,0 +1,7 @@
//! 资产写入命令落位。
//!
//! 用于表达确认资产对象、绑定实体槽位和查询资产历史的输入,不直接访问 OSS。
pub use crate::asset_object_core::{
AssetEntityBindingInput, AssetHistoryListInput, AssetObjectUpsertInput, ConfirmAssetObjectInput,
};

View File

@@ -0,0 +1,15 @@
//! 资产领域模型落位。
//!
//! 当前先通过本文件承接对外领域 API 分层导出,旧实现仍留在
//! `asset_object_core.rs` 内部文件中,后续再逐段搬入本文件或 `domain/` 子目录。
//! 本层只允许保留资产对象、实体绑定、访问策略、版本和业务归属等纯规则。
pub use crate::asset_object_core::{
ASSET_BINDING_ID_PREFIX, ASSET_OBJECT_ID_PREFIX, AssetEntityBindingRecord,
AssetEntityBindingSnapshot, AssetHistoryEntryRecord, AssetHistoryEntrySnapshot,
AssetObjectAccessPolicy, AssetObjectRecord, AssetObjectUpsertSnapshot,
INITIAL_ASSET_OBJECT_VERSION, build_asset_entity_binding_record,
build_asset_history_entry_record, build_asset_object_record, generate_asset_binding_id,
generate_asset_object_id, normalize_optional_value, validate_asset_entity_binding_fields,
validate_asset_object_fields,
};

View File

@@ -0,0 +1,5 @@
//! 资产领域错误落位。
//!
//! 字段错误和业务错误在这里收口HTTP 状态码与 SpacetimeDB 字符串错误由 adapter 映射。
pub use crate::asset_object_core::AssetObjectFieldError;

View File

@@ -0,0 +1,4 @@
//! 资产领域事件过渡落位。
//!
//! 用于表达资产已确认、绑定已变更和资产历史投影待刷新等事实。
//! 当前阶段暂不新增事件类型,避免在 SpacetimeDB 表未补 event table 前扩散未消费 API。

View File

@@ -1,20 +1,31 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
mod asset_object_core;
#[cfg(feature = "server-service")]
mod asset_object_service;
pub use asset_object_core::{
ASSET_BINDING_ID_PREFIX, ASSET_OBJECT_ID_PREFIX, AssetEntityBindingInput,
AssetEntityBindingProcedureResult, AssetEntityBindingRecord, AssetEntityBindingSnapshot,
AssetHistoryEntryRecord, AssetHistoryEntrySnapshot, AssetHistoryListInput,
AssetHistoryListResult, AssetObjectAccessPolicy, AssetObjectFieldError,
AssetObjectProcedureResult, AssetObjectRecord, AssetObjectUpsertInput,
AssetObjectUpsertSnapshot, ConfirmAssetObjectInput, ConfirmAssetObjectResult,
INITIAL_ASSET_OBJECT_VERSION, build_asset_entity_binding_input,
build_asset_entity_binding_record, build_asset_history_entry_record, build_asset_object_record,
build_asset_object_upsert_input, generate_asset_binding_id, generate_asset_object_id,
normalize_optional_value, validate_asset_entity_binding_fields, validate_asset_object_fields,
pub use application::{
AssetEntityBindingProcedureResult, AssetHistoryListResult, AssetObjectProcedureResult,
ConfirmAssetObjectResult, build_asset_entity_binding_input, build_asset_object_upsert_input,
};
#[cfg(feature = "server-service")]
pub use asset_object_service::{
AssetObjectService, ConfirmAssetObjectError, InMemoryAssetObjectStore,
};
pub use commands::{
AssetEntityBindingInput, AssetHistoryListInput, AssetObjectUpsertInput, ConfirmAssetObjectInput,
};
pub use domain::{
ASSET_BINDING_ID_PREFIX, ASSET_OBJECT_ID_PREFIX, AssetEntityBindingRecord,
AssetEntityBindingSnapshot, AssetHistoryEntryRecord, AssetHistoryEntrySnapshot,
AssetObjectAccessPolicy, AssetObjectRecord, AssetObjectUpsertSnapshot,
INITIAL_ASSET_OBJECT_VERSION, build_asset_entity_binding_record,
build_asset_history_entry_record, build_asset_object_record, generate_asset_binding_id,
generate_asset_object_id, normalize_optional_value, validate_asset_entity_binding_fields,
validate_asset_object_fields,
};
pub use errors::AssetObjectFieldError;

View File

@@ -0,0 +1,3 @@
//! 认证应用编排过渡落位。
//!
//! 这里只返回纯应用结果与领域事件;短信 provider、JWT 签发和持久化由外层 adapter 完成。

View File

@@ -0,0 +1,3 @@
//! 认证写入命令过渡落位。
//!
//! 用于表达密码入口、手机号验证码、微信登录、刷新会话签发和吊销等用例输入。

View File

@@ -0,0 +1,4 @@
//! 认证领域模型过渡落位。
//!
//! 后续迁移账号、刷新会话、验证码和微信绑定聚合时,只保留认证规则;
//! 文件持久化、真实短信发送、cookie 写入和 HTTP 上下文都不属于领域核心。

View File

@@ -0,0 +1,3 @@
//! 认证领域错误过渡落位。
//!
//! 领域错误保持可测试、可映射,不能直接依赖 Axum、cookie 或平台 provider 错误模型。

View File

@@ -0,0 +1,3 @@
//! 认证领域事件过渡落位。
//!
//! 用于表达用户创建、会话签发/吊销、手机号验证通过和微信身份绑定等事实。

View File

@@ -1,3 +1,9 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
use std::{
collections::HashMap,
error::Error,

View File

@@ -0,0 +1,3 @@
//! 大鱼吃小鱼应用编排过渡落位。
//!
//! 这里只组合领域规则并返回结果或事件,不直接调用外部图片、视频或存储服务。

View File

@@ -0,0 +1,3 @@
//! 大鱼吃小鱼写入命令过渡落位。
//!
//! 用于表达创建会话、写入消息、更新资产槽和推进运行态等输入。

View File

@@ -0,0 +1,4 @@
//! 大鱼吃小鱼领域模型过渡落位。
//!
//! 后续迁移创作会话、资产槽和运行态聚合时,只保留玩法状态与规则;
//! 图片生成、OSS 与 HTTP handler 均留在 adapter 层。

View File

@@ -0,0 +1,3 @@
//! 大鱼吃小鱼领域错误过渡落位。
//!
//! 错误只表达玩法规则失败,由 HTTP 和 SpacetimeDB adapter 分别映射展示。

View File

@@ -0,0 +1,3 @@
//! 大鱼吃小鱼领域事件过渡落位。
//!
//! 用于表达草稿变化、资产槽变化和运行态 tick 等事实。

View File

@@ -1,3 +1,9 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
use std::{error::Error, fmt};
use serde::{Deserialize, Serialize};

View File

@@ -0,0 +1,3 @@
//! 战斗应用编排过渡落位。
//!
//! 这里只返回结算结果与待处理事件,不直接写入其他上下文表。

View File

@@ -0,0 +1,3 @@
//! 战斗写入命令过渡落位。
//!
//! 用于表达创建战斗、使用技能、逃离和结算等输入,不直接携带表行类型。

View File

@@ -0,0 +1,4 @@
//! 战斗领域模型过渡落位。
//!
//! 后续迁移 `BattleState` 与行动结算规则时,只保留单聚合内部状态变化;
//! 背包奖励、成长记账和任务联动由应用服务或 SpacetimeDB 事务 adapter 编排。

View File

@@ -0,0 +1,3 @@
//! 战斗领域错误过渡落位。
//!
//! 错误保持纯领域语义,不能绑定 HTTP 状态码或 SpacetimeDB 字符串格式。

View File

@@ -0,0 +1,3 @@
//! 战斗领域事件过渡落位。
//!
//! 用于表达战斗胜利、切磋完成、奖励待发放和战斗被终止等事实。

View File

@@ -1,3 +1,9 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
use std::{error::Error, fmt};
use module_runtime_item::{

View File

@@ -0,0 +1,3 @@
//! 自定义世界应用编排过渡落位。
//!
//! 这里只组合领域规则并返回草稿、发布门禁、投影刷新等结果或事件。

View File

@@ -0,0 +1,3 @@
//! 自定义世界写入命令过渡落位。
//!
//! 用于表达会话创建、消息写入、草稿更新、发布和下架等用例输入。

View File

@@ -0,0 +1,4 @@
//! 自定义世界领域模型过渡落位。
//!
//! 后续迁移 profile、Agent 会话、草稿卡、发布门禁和画廊投影规则时,
//! 只保留纯领域结构LLM 推理、SSE 和 OSS 均留在外层 adapter。

View File

@@ -0,0 +1,3 @@
//! 自定义世界领域错误过渡落位。
//!
//! 错误只表达世界创作规则失败,由 adapter 显式映射为 HTTP 或 reducer 错误。

View File

@@ -0,0 +1,3 @@
//! 自定义世界领域事件过渡落位。
//!
//! 用于表达草稿变化、profile 发布、画廊投影刷新和 Agent 操作进度变化。

View File

@@ -1,3 +1,9 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
use std::{error::Error, fmt};
use serde::{Deserialize, Serialize};

View File

@@ -0,0 +1,3 @@
//! 背包应用编排过渡落位。
//!
//! 这里只返回背包变更结果和领域事件,不直接访问持久化。

View File

@@ -0,0 +1,3 @@
//! 背包写入命令过渡落位。
//!
//! 用于表达授予物品、装备、卸下、消耗和整理等输入。

View File

@@ -0,0 +1,4 @@
//! 背包领域模型过渡落位。
//!
//! 后续迁移背包槽、装备槽、堆叠和消耗规则时,只保留物品状态变化;
//! SpacetimeDB 表查询写回由 adapter 处理。

View File

@@ -0,0 +1,3 @@
//! 背包领域错误过渡落位。
//!
//! 错误保持可测试的业务语义,例如数量不足、槽位冲突和物品不存在。

View File

@@ -0,0 +1,3 @@
//! 背包领域事件过渡落位。
//!
//! 用于表达物品获得、物品消耗、装备变化和槽位投影变化等事实。

View File

@@ -1,3 +1,9 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
use std::{error::Error, fmt};
use serde::{Deserialize, Serialize};

View File

@@ -0,0 +1,3 @@
//! NPC 应用编排过渡落位。
//!
//! 这里只返回关系变化、推荐动作和跨上下文事件,不直接写战斗表。

View File

@@ -0,0 +1,3 @@
//! NPC 写入命令过渡落位。
//!
//! 用于表达聊天、帮助、送礼、招募、开战和切磋等输入。

View File

@@ -0,0 +1,4 @@
//! NPC 领域模型过渡落位。
//!
//! 后续迁移 NPC 状态、关系、好感、招募和互动规则时,只保留社交领域变化;
//! 战斗初始化和跨表事务由外层编排。

View File

@@ -0,0 +1,3 @@
//! NPC 领域错误过渡落位。
//!
//! 错误只表达互动规则失败,例如状态不允许、好感不足或目标非法。

View File

@@ -0,0 +1,3 @@
//! NPC 领域事件过渡落位。
//!
//! 用于表达好感变化、关系变化、NPC 被招募和战斗请求产生等事实。

View File

@@ -1,3 +1,9 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
use std::{error::Error, fmt};
use serde::{Deserialize, Serialize};

View File

@@ -0,0 +1,3 @@
//! 成长应用编排过渡落位。
//!
//! 这里只返回等级变化、预算变化和账本结果,不直接读取其他上下文表。

View File

@@ -0,0 +1,3 @@
//! 成长写入命令过渡落位。
//!
//! 用于表达授予经验、创建章节预算、结算章节节奏等输入。

View File

@@ -0,0 +1,4 @@
//! 成长领域模型过渡落位。
//!
//! 后续迁移玩家等级、章节预算和经验曲线时,只保留成长规则;
//! 任务、战斗等奖励来源通过事件或应用结果接入。

View File

@@ -0,0 +1,3 @@
//! 成长领域错误过渡落位。
//!
//! 错误保持纯领域语义,例如章节参数非法或经验来源不被接受。

View File

@@ -0,0 +1,3 @@
//! 成长领域事件过渡落位。
//!
//! 用于表达经验已授予、升级待处理和章节节奏变化等事实。

View File

@@ -1,3 +1,9 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
use std::{error::Error, fmt};
use serde::{Deserialize, Serialize};

View File

@@ -0,0 +1,3 @@
//! 拼图应用编排过渡落位。
//!
//! 这里只组合拼图规则并返回应用结果或领域事件,不直接调用图片服务。

View File

@@ -0,0 +1,3 @@
//! 拼图写入命令过渡落位。
//!
//! 用于表达会话消息、作品更新、发布、开局、交换拼图块和过关推进等输入。

View File

@@ -0,0 +1,4 @@
//! 拼图领域模型过渡落位。
//!
//! 后续迁移拼图 Agent 会话、作品 profile 和运行态聚合时,只保留玩法规则;
//! 图片生成、发布 HTTP shape 和排行榜适配留在外层。

View File

@@ -0,0 +1,3 @@
//! 拼图领域错误过渡落位。
//!
//! 错误只表达拼图业务失败,例如标签不足、移动非法或运行态不存在。

View File

@@ -0,0 +1,3 @@
//! 拼图领域事件过渡落位。
//!
//! 用于表达草稿变化、作品发布、运行态推进和排行榜候选产生等事实。

View File

@@ -1,3 +1,9 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
use std::{
collections::{BTreeMap, BTreeSet, VecDeque},
error::Error,

View File

@@ -0,0 +1,3 @@
//! 任务应用编排过渡落位。
//!
//! 这里只返回任务变更结果、日志和奖励待处理事件,不直接写背包或成长表。

View File

@@ -0,0 +1,3 @@
//! 任务写入命令过渡落位。
//!
//! 用于表达领取任务、推进信号、确认完成和交付任务等输入。

View File

@@ -0,0 +1,4 @@
//! 任务领域模型过渡落位。
//!
//! 后续迁移任务记录、步骤、目标、奖励和日志规则时,只保留任务聚合内部变化;
//! 奖励发放和成长记账通过事件交给外层事务编排。

View File

@@ -0,0 +1,3 @@
//! 任务领域错误过渡落位。
//!
//! 错误保持任务规则语义,例如状态不允许、目标不匹配或重复交付。

View File

@@ -0,0 +1,3 @@
//! 任务领域事件过渡落位。
//!
//! 用于表达任务已领取、进度已推进、任务已完成和奖励待发放等事实。

View File

@@ -1,3 +1,9 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
use std::{error::Error, fmt};
use serde::{Deserialize, Serialize};

View File

@@ -0,0 +1,3 @@
//! 运行时物品应用编排过渡落位。
//!
//! 这里只返回奖励结果、记录快照和待写入背包事件。

View File

@@ -0,0 +1,3 @@
//! 运行时物品写入命令过渡落位。
//!
//! 用于表达宝箱检查、开启、离开和奖励记录等输入。

View File

@@ -0,0 +1,4 @@
//! 运行时物品领域模型过渡落位。
//!
//! 后续迁移宝箱、奇遇和奖励物品规则时,只保留奖励生成与记录规则;
//! 背包落库由外层事务 adapter 编排。

View File

@@ -0,0 +1,3 @@
//! 运行时物品领域错误过渡落位。
//!
//! 错误只表达物品/奇遇规则失败,例如 encounter 缺失或奖励字段非法。

View File

@@ -0,0 +1,3 @@
//! 运行时物品领域事件过渡落位。
//!
//! 用于表达宝箱已结算、奖励物品已生成和资源奖励待入账等事实。

View File

@@ -1,3 +1,9 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
use std::{error::Error, fmt};
use module_inventory::{

View File

@@ -0,0 +1,3 @@
//! runtime story 兼容应用编排过渡落位。
//!
//! 这里只组合旧规则并返回兼容结果真实保存、SSE 和模型调用由外层完成。

View File

@@ -0,0 +1,3 @@
//! runtime story 兼容写入命令过渡落位。
//!
//! 用于表达旧剧情动作解析、战斗动作、锻造动作和 NPC 互动等输入。

View File

@@ -0,0 +1,4 @@
//! runtime story 兼容领域模型过渡落位。
//!
//! 当前 crate 用于旧运行时剧情桥的纯规则兼容。后续迁移时仍只能保留 JSON 规则、
//! 选项生成和视图模型转换,不引入 Axum、LLM 或 SpacetimeDB。

View File

@@ -0,0 +1,3 @@
//! runtime story 兼容领域错误过渡落位。
//!
//! 错误只表达兼容规则失败,不能直接绑定 HTTP 或数据库错误模型。

View File

@@ -0,0 +1,3 @@
//! runtime story 兼容领域事件过渡落位。
//!
//! 用于表达旧剧情快照变化、战斗表现变化和物品/成长待同步等事实。

View File

@@ -1,3 +1,9 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
use serde_json::Value;
use shared_contracts::runtime_story::{
RuntimeBattlePresentation, RuntimeStoryActionRequest, RuntimeStoryOptionView,

View File

@@ -0,0 +1,3 @@
//! 运行时应用编排过渡落位。
//!
//! 这里只返回运行时快照、个人页投影和领域事件,不直接访问外部 adapter。

View File

@@ -0,0 +1,3 @@
//! 运行时写入命令过渡落位。
//!
//! 用于表达保存快照、更新设置、写入浏览历史、调整钱包和保存存档等输入。

View File

@@ -0,0 +1,4 @@
//! 运行时领域模型过渡落位。
//!
//! 后续迁移设置、快照、个人页状态、钱包流水、存档和浏览历史规则时,
//! 只保留纯运行时数据变化SpacetimeDB client 与 HTTP response 不进入本文件。

View File

@@ -0,0 +1,3 @@
//! 运行时领域错误过渡落位。
//!
//! 错误保持运行时业务语义,例如快照版本非法、兑换码不可用或钱包余额不足。

View File

@@ -0,0 +1,3 @@
//! 运行时领域事件过渡落位。
//!
//! 用于表达快照已保存、设置已更新、钱包已记账和存档已变化等事实。

View File

@@ -1,3 +1,9 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
use std::collections::HashSet;
use serde::{Deserialize, Serialize};

View File

@@ -0,0 +1,3 @@
//! 剧情应用编排过渡落位。
//!
//! 这里只返回剧情快照、事件和待投影结果,不直接调用模型或数据库。

View File

@@ -0,0 +1,3 @@
//! 剧情写入命令过渡落位。
//!
//! 用于表达开启剧情会话、继续剧情和归档会话等输入。

View File

@@ -0,0 +1,4 @@
//! 剧情领域模型过渡落位。
//!
//! 后续迁移 `StorySession`、`StoryEvent` 和剧情推进规则时,只保留剧情聚合内部变化;
//! LLM 生成和 SpacetimeDB 写回由外层 adapter 处理。

View File

@@ -0,0 +1,3 @@
//! 剧情领域错误过渡落位。
//!
//! 错误保持纯剧情规则语义,例如会话不存在、状态不允许或输入为空。

View File

@@ -0,0 +1,3 @@
//! 剧情领域事件过渡落位。
//!
//! 用于表达剧情会话已开启、剧情已推进和剧情事件已追加等事实。

View File

@@ -1,3 +1,9 @@
mod application;
mod commands;
mod domain;
mod errors;
mod events;
use std::{error::Error, fmt};
use serde::{Deserialize, Serialize};