主键(未落库为 null)。
所属租户(ALS 盖章·未落库为 null)。
所属工作区(null=未分区·可空是业务语义,非「未落库」)。
Staticdraft新建一份草稿态帖子(缺省未发布)。不变量只防御、不比边界严:title 非空即放行,
口径与 @saas/contracts 的 createPostSchema.title(reqString=z.string().min(1))一致——
HTTP 面已被 zod 先行拦截,此抛错仅护住非 HTTP 直调(承 Money.fromMinorUnits 同款「防御不可达」)。
新建写意图(业务字段)。
草稿态 Post 实例(id/租户/时间戳为 null)。
Staticrestore
posts 上下文的充血领域实体(Clean Architecture 锥体 Entities 层在本仓的首个物化样板)。
Remarks
与
infrastructure/entities/post.entity.ts的物理数据实体(MikroORMdefineEntity)严格分离: 本类零框架依赖(不 import@nestjs/*/@mikro-orm/*/HTTP/其他上下文·守 layer 依赖表 domain/ 行), 承载不可变状态 + 构造期不变量 + 纯转移函数(返回新实例·FC 口径·architecture「投影镜射教义」); 二者由仓储适配器经infrastructure/repositories/post-mapping.ts的纯fromRowmapper 复原映射。两阶段构造:Post.draft 新建写意图(业务字段·经不变量校验·id/租户/时间戳为
null); Post.restore 从持久层复原(含技术字段·不重复校验)。仓储create/findById/list一律返回restore后的完整实例,故到传输投影PostReadModel的映射只发生在完整实例上(领域实体绝不越界进api/)。