fix: test-email actually sends; vote page pre-checks existing votes; lowercase MealPlanItemStatus everywhere

- /api/admin/test-email now calls get_email_backend().send() instead of only logging.
- /api/meals/vote/{id} GET now queries MealPlanVote and renders 'already voted' confirmation if found.
- api/meals.py: fix remaining uppercase MealPlanItemStatus enum ref (DENIED, APPROVED, PENDING).
- Fixes the 'all meals show as pending' status regression and the 'Error: Already voted' bug.
This commit is contained in:
2026-05-14 12:17:44 -07:00
parent 26d9985433
commit 6323eadc86
6 changed files with 77 additions and 27 deletions
+6 -6
View File
@@ -33,11 +33,11 @@ class MealPlanStatus(enum.Enum):
LOCKED = "locked"
class MealPlanItemStatus(enum.Enum):
PENDING = "pending"
APPROVED = "approved"
DENIED = "denied"
SWAPPED = "swapped"
class MealPlanItemStatus(str, enum.Enum):
pending = "pending"
approved = "approved"
denied = "denied"
swapped = "swapped"
class ApprovalTokenStatus(enum.Enum):
@@ -221,7 +221,7 @@ class MealPlanItem(Base):
recipe_id = Column(UUID(as_uuid=True), ForeignKey("recipe.id"))
day_of_week = Column(Integer, nullable=False)
meal_type = Column(SQLEnum(MealType, name="meal_type_enum", create_type=False, values_callable=lambda obj: [e.value for e in obj]), nullable=False)
approval_status = Column(SQLEnum(MealPlanItemStatus, name="meal_plan_item_status_enum", create_type=False, values_callable=lambda obj: [e.value for e in obj]), default=MealPlanItemStatus.PENDING)
approval_status = Column(SQLEnum(MealPlanItemStatus, name="meal_plan_item_status_enum", create_type=False, values_callable=lambda obj: [e.value for e in obj]), default=MealPlanItemStatus.pending)
denial_reason = Column(SQLEnum(DenialReason, name="denial_reason_enum", create_type=False, values_callable=lambda obj: [e.value for e in obj]))
denial_details = Column(Text)
estimated_cost = Column(Numeric(10, 2))