Files
2026-01-14 11:35:37 +08:00

51 lines
1.1 KiB
Python

import enum
import uuid
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, ConfigDict, Field
class DistributionTargetType(str, enum.Enum):
SITE = "SITE"
ROLE = "ROLE"
USER = "USER"
class DistributionStatus(str, enum.Enum):
ACTIVE = "ACTIVE"
CLOSED = "CLOSED"
class DistributionTarget(BaseModel):
target_type: DistributionTargetType
target_id: str
class DistributionCreate(BaseModel):
targets: list[DistributionTarget]
due_at: Optional[datetime] = None
class DistributionStats(BaseModel):
total: int = 0
received: int = 0
read: int = 0
trained: int = 0
overdue: int = 0
class DistributionRead(BaseModel):
id: uuid.UUID
document_id: uuid.UUID
version_id: uuid.UUID
target_type: DistributionTargetType
target_id: str
status: DistributionStatus
due_at: Optional[datetime] = None
created_by: Optional[uuid.UUID] = None
created_at: datetime
stats: DistributionStats = Field(default_factory=DistributionStats)
model_config = ConfigDict(from_attributes=True)