TorbatYar/backend/services/loyalty/app/schemas/campaigns.py
Mortezakoohjani 071c484530 Ship Loyalty phases 7.2-7.6 (points through wallet) with production deploy.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-26 21:27:22 +03:30

53 lines
1.3 KiB
Python

"""Campaign Engine DTOs — Phase 7.4."""
from __future__ import annotations
from datetime import datetime
from uuid import UUID
from pydantic import BaseModel, ConfigDict, Field
from app.models.types import CampaignApplicationStatus
from app.schemas.common import ORMBase
_FORBID = ConfigDict(extra="forbid")
class CampaignRulesUpdateRequest(BaseModel):
model_config = _FORBID
rules: dict = Field(default_factory=dict)
class ApplyCampaignRequest(BaseModel):
model_config = _FORBID
member_id: UUID
point_account_id: UUID | None = None
base_amount: int | None = Field(default=None, ge=0)
idempotency_key: str | None = Field(default=None, max_length=100)
metadata_json: dict | None = None
class CampaignApplicationRead(ORMBase):
id: UUID
tenant_id: UUID
campaign_id: UUID
program_id: UUID
member_id: UUID
point_account_id: UUID
rule_version: int
points_granted: int
ledger_entry_id: UUID | None
status: CampaignApplicationStatus
idempotency_key: str | None
actor_user_id: str | None
metadata_json: dict | None
created_at: datetime
class CampaignApplicationPage(BaseModel):
items: list[CampaignApplicationRead]
total: int
offset: int
limit: int