Capability:资源申请审批(Core 子域) 上游来源:
../../../03-ddd-modeling.md§III 战术@ddd-aggregates聚合 1(IV-1 ~ IV-6) 责任聚合:ResourceRequest
ResourceRequest.status SHALL 仅取 PENDING | APPROVED | REJECTED | PROVISIONED | RELEASED 五个值之一。
SubmitRequest(type, spec, days, project)ResourceRequest,status = PENDINGResourceRequested 事件status 设为字符串 "ARCHIVED"状态转换 SHALL 仅遵循:PENDING → APPROVED、PENDING → REJECTED、APPROVED → PROVISIONED、PROVISIONED → RELEASED。
ResourceRequest.status = PENDINGApproveRequest(requestId, approver)status = APPROVEDRequestApproved 与 ResourceProvisionRequested 事件ResourceRequest.status = PENDINGRejectRequest(requestId, approver, reason)status = REJECTEDRequestRejected 事件ResourceRequest.status = REJECTEDApproveRequestIllegalStateTransition 异常ResourceRequest.status = APPROVEDResourceProvisioned(requestId) 事件status = PROVISIONEDResourceRequest 在 APPROVED 状态停留 SHALL NOT 超过 30 分钟未变 PROVISIONED。
ResourceRequest.status = APPROVED,approvedAt + 30min < nowApprovalTimeoutMonitor 巡检同一 requestId 重复 SubmitRequest SHALL 仅产生一条记录。
requestId = R-001 的记录SubmitRequest with requestId = R-001ResourceRequest.cost SHALL 在创建时确定,后续生命周期内不可变更。
ResourceRequest 已创建,cost = 720costsetCost 方法 / 运行期断言失败ReleaseResource SHALL 仅由原申请人触发。
ResourceRequest.status = PROVISIONED,applicant = U-AU-A 调用 ReleaseResource(requestId)status = RELEASEDResourceReleased 事件applicant = U-AU-B 调用 ReleaseResource(requestId)PermissionDenied| 事件 | 触发条件 | 载荷 |
|---|---|---|
ResourceRequested |
SubmitRequest 成功 |
requestId, applicant, type, spec, project |
RequestApproved |
ApproveRequest 成功 |
requestId, approver, approvedAt |
RequestRejected |
RejectRequest 成功 |
requestId, approver, reason |
ResourceProvisionRequested |
RequestApproved 同事务发布 |
requestId, type, spec |
ResourceReleased |
ReleaseResource 成功 |
requestId, releasedAt |
interface ResourceRequestRepository {
findById(id: RequestId): Promise<ResourceRequest | null>;
save(request: ResourceRequest): Promise<void>;
findByApplicant(applicant: UserId): Promise<ResourceRequest[]>;
findPending(): Promise<ResourceRequest[]>;
}