| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import json
- from datetime import datetime
- from typing import Optional, Any, Dict
- from pydantic import BaseModel, field_validator
- class NotificationOutboxBase(BaseModel):
- msg_id: Optional[str] = None
- channel: Optional[str] = None
- payload: Optional[Dict[str, Any]] = None
- priority: Optional[int] = 10
- status: Optional[str] = "pending"
- attempts: Optional[int] = 0
- next_retry_at: Optional[datetime] = None
- @field_validator("payload", mode="before")
- def normalize_json_field(cls, v):
- if v is None:
- return None
- if isinstance(v, str):
- try:
- return json.loads(v)
- except Exception:
- return {}
- return v
- class NotificationOutboxCreate(NotificationOutboxBase):
- channel: str
- payload: Dict[str, Any]
- class NotificationOutboxUpdate(BaseModel):
- channel: Optional[str] = None
- payload: Optional[Dict[str, Any]] = None
- priority: Optional[int] = None
- status: Optional[str] = None
- attempts: Optional[int] = None
- next_retry_at: Optional[datetime] = None
- @field_validator("payload", mode="before")
- def normalize_json_field(cls, v):
- if v is None:
- return None
- if isinstance(v, str):
- try:
- return json.loads(v)
- except Exception:
- return {}
- return v
- class NotificationOutboxOut(NotificationOutboxBase):
- id: int
- created_at: datetime
- updated_at: datetime
- model_config = {
- "from_attributes": True
- }
|