Public Access
- Add planner_config JSONB to family_profile model + migration - Add PlannerConfig.merge(overrides) + to_dict() for family-level override merging - generate_meal_plan merges family.planner_config into DEFAULT before filtering/scoring/selection - New endpoints on /api/profile: - GET /planner-config — returns merged effective config - PUT /planner-config — partial override validation + merge - DELETE /planner-config — reset to system defaults - Schemas: PlannerConfigOverride, PlannerConfigResponse, PlannerConfigUpdateRequest with weight-sum validation (0.999–1.001) - Export RecipeBase/Create/Read/Update from schemas/__init__ to resolve forward refs
29 lines
672 B
Python
29 lines
672 B
Python
"""Add planner_config JSONB to family_profile.
|
|
|
|
Revision ID: 0013
|
|
Revises: 0012
|
|
Create Date: 2026-05-24 17:00:00
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
import sqlalchemy as sa
|
|
from alembic import op
|
|
from sqlalchemy.dialects import postgresql
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision: str = "0013"
|
|
down_revision: Union[str, None] = "0012"
|
|
branch_labels: Union[Sequence[str], None] = None
|
|
depends_on: Union[Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.add_column(
|
|
"family_profile",
|
|
sa.Column("planner_config", postgresql.JSONB, nullable=True),
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_column("family_profile", "planner_config")
|