File size: 1,121 Bytes
c6cc0f2
 
 
 
 
 
 
 
 
 
 
 
faa9d54
c6cc0f2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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)
    role: str | None = 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()
        }