Public Access
feat(meals): enforce three lower-calorie dinners with media
This commit is contained in:
@@ -14,9 +14,10 @@ from app.schemas.meal_plan_generation import (
|
||||
GenerationDebug,
|
||||
GenerationItem,
|
||||
GenerationResponse,
|
||||
PublicGenerateRequest,
|
||||
RegenerateRequest,
|
||||
)
|
||||
from app.security import require_admin
|
||||
from app.security import require_admin, require_session
|
||||
from app.services.planner.config import DEFAULT
|
||||
from app.services.planner.generate import generate_meal_plan
|
||||
from app.services.planner.types import GenerationResult
|
||||
@@ -82,6 +83,55 @@ def generate(payload: GenerateRequest, db: Session = Depends(get_db)) -> Generat
|
||||
return _to_response(payload.week_start_date, result.meal_plan_id, items, result)
|
||||
|
||||
|
||||
@public_router.post("/generate", response_model=GenerationResponse, status_code=status.HTTP_201_CREATED)
|
||||
def generate_for_family(
|
||||
payload: PublicGenerateRequest,
|
||||
db: Session = Depends(get_db),
|
||||
session_family_id: str = Depends(require_session),
|
||||
) -> GenerationResponse:
|
||||
try:
|
||||
family_id = UUID(session_family_id)
|
||||
except ValueError:
|
||||
raise HTTPException(status_code=404, detail="family_profile not found")
|
||||
|
||||
family = db.query(FamilyProfile).filter(FamilyProfile.id == family_id).first()
|
||||
if family is None:
|
||||
raise HTTPException(status_code=404, detail="family_profile not found")
|
||||
|
||||
existing = (
|
||||
db.query(MealPlan)
|
||||
.filter(
|
||||
MealPlan.family_profile_id == family_id,
|
||||
MealPlan.week_start_date == payload.week_start_date,
|
||||
)
|
||||
.first()
|
||||
)
|
||||
if existing is not None:
|
||||
has_items = (
|
||||
db.query(MealPlanItem.id)
|
||||
.filter(MealPlanItem.meal_plan_id == existing.id)
|
||||
.first()
|
||||
is not None
|
||||
)
|
||||
if has_items:
|
||||
raise HTTPException(status_code=409, detail="meal plan already has items")
|
||||
db.delete(existing)
|
||||
db.commit()
|
||||
|
||||
result = generate_meal_plan(
|
||||
db,
|
||||
family_id=family_id,
|
||||
week_start_date=payload.week_start_date,
|
||||
)
|
||||
items = (
|
||||
db.query(MealPlanItem)
|
||||
.filter(MealPlanItem.meal_plan_id == result.meal_plan_id)
|
||||
.order_by(MealPlanItem.day_of_week)
|
||||
.all()
|
||||
)
|
||||
return _to_response(payload.week_start_date, result.meal_plan_id, items, result)
|
||||
|
||||
|
||||
@admin_router.post("/regenerate", response_model=GenerationResponse, status_code=status.HTTP_201_CREATED)
|
||||
def regenerate(payload: RegenerateRequest, db: Session = Depends(get_db)) -> GenerationResponse:
|
||||
family = db.query(FamilyProfile).filter(FamilyProfile.id == payload.family_profile_id).first()
|
||||
|
||||
Reference in New Issue
Block a user