48 lines
1.0 KiB
Python
48 lines
1.0 KiB
Python
from typing import Any, Literal
|
|
from uuid import uuid4
|
|
|
|
from layercake.extra_types import CpfStr, NameStr
|
|
from pydantic import (
|
|
UUID4,
|
|
BaseModel,
|
|
ConfigDict,
|
|
EmailStr,
|
|
Field,
|
|
)
|
|
|
|
|
|
class User(BaseModel):
|
|
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
|
|
id: UUID4 | str = Field(default_factory=uuid4)
|
|
name: NameStr
|
|
email: EmailStr
|
|
email_verified: bool = False
|
|
cpf: CpfStr | None = None
|
|
|
|
|
|
class Course(BaseModel):
|
|
id: UUID4 | str = Field(default_factory=uuid4)
|
|
name: str
|
|
access_period: int = 90 # 3 months
|
|
|
|
|
|
class Enrollment(BaseModel):
|
|
id: UUID4 | str = Field(default_factory=uuid4)
|
|
user: User
|
|
course: Course
|
|
progress: int = Field(default=0, ge=0, le=100)
|
|
status: Literal['PENDING'] = 'PENDING'
|
|
|
|
def model_dump(
|
|
self,
|
|
exclude=None,
|
|
*args,
|
|
**kwargs,
|
|
) -> dict[str, Any]:
|
|
return super().model_dump(
|
|
exclude={'user': {'email_verified'}},
|
|
*args,
|
|
**kwargs,
|
|
)
|