2026-06-12 16:36:51 +08:00
|
|
|
|
"""订单数据模块 (T4.1 + T4.2)
|
2026-06-12 15:24:20 +08:00
|
|
|
|
|
2026-06-12 16:36:51 +08:00
|
|
|
|
提供:
|
|
|
|
|
|
- SQLite schema(AES-256 加密字段 + 6 态状态机 + 审计表)
|
|
|
|
|
|
- Fernet 加密/解密/索引哈希派生
|
|
|
|
|
|
- 6 态订单状态机
|
|
|
|
|
|
- ``Order`` dataclass + 加密/脱敏序列化
|
|
|
|
|
|
- ``OrdersDAO`` 完整 CRUD + 事务 + 状态机守护(**T4.2**)
|
|
|
|
|
|
|
|
|
|
|
|
下游使用
|
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
|
import os
|
|
|
|
|
|
os.environ["GAOKAO_ORDERS_FERNET_KEY"] = "your-secret-here"
|
|
|
|
|
|
|
|
|
|
|
|
from data.orders import (
|
|
|
|
|
|
# schema
|
|
|
|
|
|
apply_schema,
|
|
|
|
|
|
# crypto
|
|
|
|
|
|
encrypt, decrypt, hash_for_index,
|
|
|
|
|
|
# state machine
|
|
|
|
|
|
assert_valid_transition, OrderStatus,
|
|
|
|
|
|
# models
|
|
|
|
|
|
Order, generate_order_id,
|
|
|
|
|
|
# DAO (T4.2)
|
|
|
|
|
|
OrdersDAO, UpsertResult, StatusChange,
|
|
|
|
|
|
OrderNotFound, DuplicateOrder,
|
|
|
|
|
|
)
|
|
|
|
|
|
```
|
2026-06-12 15:24:20 +08:00
|
|
|
|
"""
|
2026-06-12 16:36:51 +08:00
|
|
|
|
|
|
|
|
|
|
from .crypto import (
|
|
|
|
|
|
ENV_KEY_NAME,
|
|
|
|
|
|
EncryptionError,
|
|
|
|
|
|
MissingEncryptionKey,
|
|
|
|
|
|
constant_time_equals,
|
|
|
|
|
|
decrypt,
|
|
|
|
|
|
derive_key,
|
|
|
|
|
|
encrypt,
|
|
|
|
|
|
get_fernet,
|
|
|
|
|
|
hash_for_index,
|
|
|
|
|
|
)
|
|
|
|
|
|
from .dao import (
|
|
|
|
|
|
DuplicateOrder,
|
|
|
|
|
|
OrderNotFound,
|
|
|
|
|
|
OrdersDAO,
|
|
|
|
|
|
StatusChange,
|
|
|
|
|
|
UpsertResult,
|
|
|
|
|
|
)
|
|
|
|
|
|
from .models import (
|
|
|
|
|
|
DecryptPolicy,
|
|
|
|
|
|
Order,
|
|
|
|
|
|
generate_order_id,
|
|
|
|
|
|
utc_now_iso,
|
|
|
|
|
|
)
|
|
|
|
|
|
from .schema import SCHEMA_SQL, apply_schema, get_schema_version
|
|
|
|
|
|
from .state_machine import (
|
|
|
|
|
|
ALLOWED_TRANSITIONS,
|
|
|
|
|
|
InvalidStateTransition,
|
|
|
|
|
|
OrderStatus,
|
|
|
|
|
|
TERMINAL_STATUSES,
|
|
|
|
|
|
assert_valid_transition,
|
|
|
|
|
|
is_known_status,
|
|
|
|
|
|
is_terminal,
|
|
|
|
|
|
is_valid_transition,
|
|
|
|
|
|
next_states,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
__all__ = [
|
|
|
|
|
|
# schema
|
|
|
|
|
|
"SCHEMA_SQL",
|
|
|
|
|
|
"apply_schema",
|
|
|
|
|
|
"get_schema_version",
|
|
|
|
|
|
# crypto
|
|
|
|
|
|
"ENV_KEY_NAME",
|
|
|
|
|
|
"EncryptionError",
|
|
|
|
|
|
"MissingEncryptionKey",
|
|
|
|
|
|
"constant_time_equals",
|
|
|
|
|
|
"decrypt",
|
|
|
|
|
|
"derive_key",
|
|
|
|
|
|
"encrypt",
|
|
|
|
|
|
"get_fernet",
|
|
|
|
|
|
"hash_for_index",
|
|
|
|
|
|
# state machine
|
|
|
|
|
|
"ALLOWED_TRANSITIONS",
|
|
|
|
|
|
"InvalidStateTransition",
|
|
|
|
|
|
"OrderStatus",
|
|
|
|
|
|
"TERMINAL_STATUSES",
|
|
|
|
|
|
"assert_valid_transition",
|
|
|
|
|
|
"is_known_status",
|
|
|
|
|
|
"is_terminal",
|
|
|
|
|
|
"is_valid_transition",
|
|
|
|
|
|
"next_states",
|
|
|
|
|
|
# models
|
|
|
|
|
|
"DecryptPolicy",
|
|
|
|
|
|
"Order",
|
|
|
|
|
|
"generate_order_id",
|
|
|
|
|
|
"utc_now_iso",
|
|
|
|
|
|
# DAO
|
|
|
|
|
|
"DuplicateOrder",
|
|
|
|
|
|
"OrderNotFound",
|
|
|
|
|
|
"OrdersDAO",
|
|
|
|
|
|
"StatusChange",
|
|
|
|
|
|
"UpsertResult",
|
|
|
|
|
|
]
|