tliu93
4284bd40a7
M6-T04: add EnergyContract CRUD + versions + profile validation API
- app/services/contracts.py: create_contract, add_version (append-only,
auto-closes prior version), activate_contract (mutex), and
active_contract_version_at (half-open [from, to)) for the billing engine.
- app/schemas/energy_contract.py + routes/api/energy_contracts.py: 6 endpoints
(GET/POST contracts, GET/PATCH contracts/{id}, POST .../versions, GET profiles).
Values validated against pricing profiles (422 on mismatch); no DELETE.
- main.py registers router; OpenAPI re-exported; tests for CRUD/version/activate.
2026-06-23 21:19:25 +02:00
..
2026-06-21 21:20:28 +02:00
2026-06-21 22:27:07 +02:00
2026-06-23 20:43:46 +02:00
2026-06-13 15:20:50 +02:00
2026-06-23 21:19:25 +02:00
2026-06-22 20:11:54 +02:00
2026-06-22 14:17:59 +02:00
2026-06-12 23:33:08 +02:00
2026-06-21 22:08:55 +02:00
2026-06-21 22:08:55 +02:00
2026-06-13 15:20:50 +02:00
2026-06-21 21:38:22 +02:00
2026-06-12 16:57:54 +02:00
2026-06-13 15:20:50 +02:00
2026-06-23 20:33:35 +02:00
2026-06-23 20:33:35 +02:00
2026-06-22 20:11:54 +02:00
2026-06-12 16:50:05 +02:00
2026-04-20 11:48:48 +02:00
2026-06-12 16:50:05 +02:00
2026-06-21 21:20:28 +02:00
2026-06-12 19:11:13 +02:00
2026-06-22 13:03:50 +02:00
2026-06-22 13:03:50 +02:00
2026-06-22 20:45:47 +02:00
2026-06-22 13:24:11 +02:00
2026-06-22 13:03:50 +02:00
2026-06-22 15:06:30 +02:00
2026-06-12 16:50:05 +02:00
2026-06-23 20:58:34 +02:00
2026-06-23 20:58:34 +02:00
2026-06-13 15:20:50 +02:00
2026-06-13 15:20:50 +02:00
2026-06-13 15:20:50 +02:00
2026-06-13 15:20:50 +02:00
2026-06-22 12:45:50 +02:00