2026072729_persist_project_constraints_f647c6bd94ae.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. """persist project_constraints
  2. Revision ID: f647c6bd94ae
  3. Revises: a2c893432a1f
  4. Create Date: 2026-07-27 01:29:36.369652
  5. """
  6. import json
  7. import sqlalchemy as sa
  8. from alembic import op
  9. # revision identifiers, used by Alembic.
  10. revision = "f647c6bd94ae"
  11. down_revision = "a2c893432a1f"
  12. branch_labels = None
  13. depends_on = None
  14. def upgrade():
  15. default_constraints = json.dumps(
  16. {
  17. "dejeuner_start": 11,
  18. "dejeuner_end": 14,
  19. "diner_start": 19,
  20. "diner_end": 22,
  21. "nuit_start": 22,
  22. "nuit_end": 10,
  23. "duree_repas_h": 1.0,
  24. "duree_nuit_h": 8.0,
  25. "duree_pause_h": 0.5,
  26. }
  27. )
  28. op.add_column(
  29. "projects",
  30. sa.Column(
  31. "constraints",
  32. sa.JSON(),
  33. nullable=False,
  34. server_default=default_constraints,
  35. ),
  36. )
  37. # drop the server_default after backfill so future inserts must go through
  38. # the Pydantic model (PlanningConstraints) rather than silently relying on
  39. # a DB-level default that can drift from the schema's defaults over time
  40. op.alter_column("projects", "constraints", server_default=None)
  41. def downgrade():
  42. op.drop_column("projects", "constraints")