diff --git a/app/modules/loyalty/schemas/program.py b/app/modules/loyalty/schemas/program.py index b8bab56f..ac1e027f 100644 --- a/app/modules/loyalty/schemas/program.py +++ b/app/modules/loyalty/schemas/program.py @@ -10,7 +10,7 @@ Merchant-based programs: from datetime import datetime -from pydantic import BaseModel, ConfigDict, Field +from pydantic import BaseModel, ConfigDict, Field, field_validator class PointsRewardConfig(BaseModel): @@ -83,6 +83,13 @@ class ProgramCreate(BaseModel): description="Minimum purchase amount to earn points (0 = no minimum)", ) + @field_validator("minimum_purchase_cents", mode="before") + @classmethod + def _coerce_purchase_cents_none_to_zero(cls, v): + # Form sends null for empty number inputs; DB column is NOT NULL + # with default 0, and 0 already means "no minimum" semantically. + return 0 if v is None else v + # Future: Tier configuration tier_config: list[TierConfig] | None = Field( None,