from datetime import datetime from passlib.context import CryptContext from pydantic import field_validator, Field, EmailStr from trauma.api.account.dto import AccountType from trauma.core.database import MongoBaseModel class AccountModel(MongoBaseModel): email: EmailStr password: str | None = Field(exclude=True, default=None) accountType: AccountType = AccountType.User datetimeInserted: datetime = Field(default_factory=datetime.now) datetimeUpdated: datetime = Field(default_factory=datetime.now) @field_validator("datetimeUpdated", mode="before", check_fields=False) @classmethod def validate_datetimeUpdated(cls, v): return v or datetime.now() @field_validator('password', mode='before', check_fields=False) @classmethod def set_password_hash(cls, v): if not v.startswith("$2b$"): return CryptContext(schemes=["bcrypt"], deprecated="auto").hash(v) return v class Config: arbitrary_types_allowed = True json_encoders = { datetime: lambda dt: dt.isoformat() }