TorbatYar/backend/services/loyalty/app/schemas/rewards.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

57 lines
1.3 KiB
Python

"""Reward redemption DTOs — Phase 7.3."""
from __future__ import annotations
from datetime import datetime
from uuid import UUID
from pydantic import BaseModel, ConfigDict, Field
from app.models.types import RedemptionStatus
from app.schemas.common import ORMBase
_FORBID = ConfigDict(extra="forbid")
class RedeemRequest(BaseModel):
model_config = _FORBID
member_id: UUID
idempotency_key: str | None = Field(default=None, max_length=100)
reason: str | None = Field(default=None, max_length=500)
metadata_json: dict | None = None
class CancelRequest(BaseModel):
model_config = _FORBID
reason: str = Field(max_length=500)
class RewardRedemptionRead(ORMBase):
id: UUID
tenant_id: UUID
program_id: UUID
reward_id: UUID
member_id: UUID
point_account_id: UUID
status: RedemptionStatus
points_spent: int
ledger_entry_id: UUID | None
voucher_code: str
idempotency_key: str | None
reason: str | None
cancel_reason: str | None
fulfilled_at: datetime | None
cancelled_at: datetime | None
metadata_json: dict | None
actor_user_id: str | None
created_at: datetime
updated_at: datetime
class RewardRedemptionPage(BaseModel):
items: list[RewardRedemptionRead]
total: int
offset: int
limit: int