generateur_v3/backend/api/database/auth/models.py
Kilton937342 84b38cc12d ...
2022-09-18 22:43:04 +02:00

74 lines
2.1 KiB
Python

from typing import List, Optional
from typing import TYPE_CHECKING, Optional
from uuid import UUID
import uuid
from sqlmodel import Field, SQLModel, Relationship
from pydantic import validator, BaseModel
from services.password import validate_password
from services.schema import as_form
if TYPE_CHECKING:
from database.exercices.models import Exercice, Tag
from database.room.models import Member
class UserBase(SQLModel):
username: str = Field(max_length=20, index= True)
firstname: Optional[str]
name: Optional[str]
email: Optional[str]
class User(UserBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
clientId: Optional[UUID] = Field(default=uuid.uuid4(), index=True)
hashed_password: str
exercices: List['Exercice'] = Relationship(back_populates='author')
tags: List['Tag'] = Relationship(back_populates='author')
members: List["Member"] = Relationship(back_populates='user')
@as_form
class UserEdit(UserBase):
pass
class UserRead(UserBase):
id: int
@as_form
class UserRegister(BaseModel):
username: str = Field(max_length=20)
password: str
password_confirm: str
@validator('password')
def password_validation(cls, v):
is_valid = validate_password(v)
if is_valid != True:
raise ValueError(is_valid)
return v
@validator('password_confirm')
def password_match(cls, v, values):
if 'password' in values and v != values['password']:
raise ValueError('Les mots de passe ne correspondent pas')
return v
@as_form
class PasswordSet(BaseModel):
old_password: str
password: str
password_confirm: str
@validator('password')
def password_validation(cls, v):
is_valid = validate_password(v)
if is_valid != True:
raise ValueError(is_valid)
return v
@validator('password_confirm')
def password_match(cls, v, values):
if 'password' in values and v != values['password']:
raise ValueError('Les mots de passe ne correspondent pas')
return v