ai-native-devops

Spec · resource-request

Capability:资源申请审批(Core 子域) 上游来源../../../03-ddd-modeling.md §III 战术 @ddd-aggregates 聚合 1(IV-1 ~ IV-6) 责任聚合ResourceRequest


ADDED Requirements

Requirement: 状态枚举受限(IV-1)

ResourceRequest.status SHALL 仅取 PENDING | APPROVED | REJECTED | PROVISIONED | RELEASED 五个值之一。

Scenario: 创建后初始状态为 PENDING

Scenario: 拒绝非法状态值


Requirement: 状态转换合法路径(IV-2)

状态转换 SHALL 仅遵循:PENDING → APPROVEDPENDING → REJECTEDAPPROVED → PROVISIONEDPROVISIONED → RELEASED

Scenario: 审批后进入 APPROVED

Scenario: 拒绝后进入 REJECTED 终态

Scenario: 拒绝从 REJECTED 反向转换

Scenario: 监听 ResourceProvisioned 推进到 PROVISIONED


Requirement: 审批超时告警(IV-3)

ResourceRequestAPPROVED 状态停留 SHALL NOT 超过 30 分钟未变 PROVISIONED

Scenario: 30 分钟未配置触发告警


Requirement: 提交幂等(IV-4)

同一 requestId 重复 SubmitRequest SHALL 仅产生一条记录。

Scenario: 重复提交返回已存在


Requirement: 成本不可变(IV-5)

ResourceRequest.cost SHALL 在创建时确定,后续生命周期内不可变更。

Scenario: 拒绝外部修改 cost


Requirement: 释放权限受限(IV-6)

ReleaseResource SHALL 仅由原申请人触发。

Scenario: 申请人释放成功

Scenario: 非申请人释放被拒


Events

事件 触发条件 载荷
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

Repository

interface ResourceRequestRepository {
  findById(id: RequestId): Promise<ResourceRequest | null>;
  save(request: ResourceRequest): Promise<void>;
  findByApplicant(applicant: UserId): Promise<ResourceRequest[]>;
  findPending(): Promise<ResourceRequest[]>;
}