Part 16 · Capstone & Mock Interview

State machine, API contract và transaction boundary

Order status là domain state, không phải string tùy ý; transition phải atomic và bảo vệ khỏi concurrent/stale commands.

Model

Order aggregate chứa identity, customer reference, line snapshots, amount/currency, status/version và timestamps. State: PENDING_PAYMENT → CONFIRMED/FAILED/CANCELLED với guarded transitions.

API

POST /orders trả 201 hoặc 202 tùy workflow; Location/resource ID; GET status. Validate semantic constraints, consistent problem details, pagination/filter nếu list; không expose persistence entity.

Transaction

Local DB transaction giữ aggregate/outbox atomic; external call không nằm trong DB transaction dài. Optimistic locking/version ngăn lost update; unique constraints bảo vệ invariant cuối.

Concurrency tests

Hai confirmation/cancel commands, stale version và duplicate create. Kiểm chứng một legal outcome, no partial rows và error contract deterministic.

Spring Transactions · RFC 9457 Problem Details