Coverage for backend \ app \ Usuarios \ schemas \ usuarioSchemas.py: 90.74%
54 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-29 16:13 -0500
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-29 16:13 -0500
1from pydantic import BaseModel,Field,EmailStr,field_validator
2from typing import Optional,Literal
3from app.Usuarios.schemas.rolSchemas import RolSchema
4# Esquema de Autenticación
5class IniciarSesionRequest(BaseModel):
6 username: str
7 password: str
13# Esquema de Usuario
15def validarPassword(v: str) -> str:
16 if len(v) < 8:
17 raise ValueError("La contraseña debe tener al menos 8 caracteres")
18 if not any(c.islower() for c in v):
19 raise ValueError("Debe contener al menos una letra minúscula")
20 if not any(c.isupper() for c in v):
21 raise ValueError("Debe contener al menos una letra mayúscula")
22 if not any(c.isdigit() for c in v):
23 raise ValueError("Debe contener al menos un número")
24 return v
26class UsuarioBaseSchema(BaseModel):
27 nombreCompleto: str = Field(..., min_length=3, max_length=50,example="Juan Perez")
28 cedulaUsuario: str = Field(..., min_length=10, max_length=10,example="1750834515")
29 emailUsuario: EmailStr = Field(..., example="juan.perez@example.com")
30 passwordUsuario: str = Field(..., min_length=8,example="Cl@veSegura123")
32 @field_validator("passwordUsuario")
33 def validar_password(cls, v: str) -> str:
34 return validarPassword(v)
37class UsuarioCrearSchema(UsuarioBaseSchema):
38 idRol: Literal[1, 2, 3] = Field(..., example=1)
40class UsuarioActualizarSchema(BaseModel):
41 idRol: Optional[Literal[1, 2, 3]] = Field(None, example=1)
42 nombreCompleto: Optional[str] = Field(None, min_length=3, max_length=50,example="Juan Perez")
43 emailUsuario: Optional[EmailStr] = Field(None, example="juan.perez@example.com")
44 passwordUsuario: Optional[str] = Field(None, min_length=8,example="Cl@veSegura123")
45 activoUsuario: Optional[bool] = None
46 @field_validator("passwordUsuario")
47 def validar_password(cls, v: str) -> str:
48 return validarPassword(v)
51class UsuarioRespuestaSchema(BaseModel):
52 idUsuario: int
53 nombreCompleto: str
54 cedulaUsuario: str
55 emailUsuario: EmailStr
56 passwordUsuario: str
57 rol: RolSchema
58 activoUsuario: bool
59 class Config:
60 from_attributes = True
63# Schema público paralelo que NO devuelve la contraseña
64class UsuarioPublicoSchema(BaseModel):
65 idUsuario: int
66 nombreCompleto: str
67 cedulaUsuario: str
68 emailUsuario: EmailStr
69 rol: RolSchema
70 activoUsuario: bool
71 class Config:
72 from_attributes = True