- Criadas APIs para Health (métricas de saúde) * Registrar peso, altura, % gordura, medidas * Histórico completo de medições * Estatísticas e resumo - Criadas APIs para Tasks (tarefas) * Criar, editar e deletar tarefas * Filtros por status e data * Estatísticas detalhadas * Prioridades (baixa, média, alta) - Frontend implementado: * Página Health.tsx - registro de métricas * Página Tasks.tsx - gerenciamento de tarefas * Página Progress.tsx - visualização de progresso * Dashboard integrado com estatísticas reais - Schemas e modelos atualizados - Todas as funcionalidades testadas e operacionais
54 lines
1.2 KiB
Python
54 lines
1.2 KiB
Python
from pydantic import BaseModel, EmailStr, field_validator
|
|
from typing import Optional
|
|
import uuid
|
|
import re
|
|
|
|
class UserBase(BaseModel):
|
|
email: EmailStr
|
|
username: str
|
|
full_name: str
|
|
phone: str
|
|
|
|
class UserCreate(UserBase):
|
|
password: str
|
|
|
|
@field_validator('phone')
|
|
@classmethod
|
|
def validate_phone(cls, v):
|
|
# Remove tudo que não é número
|
|
phone = re.sub(r'\D', '', v)
|
|
if len(phone) < 10 or len(phone) > 11:
|
|
raise ValueError('Telefone deve ter 10 ou 11 dígitos')
|
|
return phone
|
|
|
|
@field_validator('full_name')
|
|
@classmethod
|
|
def validate_full_name(cls, v):
|
|
if not v or len(v.strip()) < 3:
|
|
raise ValueError('Nome completo deve ter no mínimo 3 caracteres')
|
|
return v.strip()
|
|
|
|
class UserLogin(BaseModel):
|
|
email: EmailStr
|
|
password: str
|
|
|
|
class UserResponse(BaseModel):
|
|
id: uuid.UUID
|
|
email: EmailStr
|
|
username: str
|
|
full_name: Optional[str]
|
|
phone: Optional[str]
|
|
is_superadmin: bool = False
|
|
is_verified: bool = False
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
class Token(BaseModel):
|
|
access_token: str
|
|
token_type: str = "bearer"
|
|
user: UserResponse
|
|
|
|
class TokenData(BaseModel):
|
|
sub: str
|