from typing import Annotated from fastapi import APIRouter, Depends, status, Request from sqlmodel import Session from app.core.limiter import limiter from app.core.database import get_session from app.core.security import get_current_user_id from app.models.user import User from app.schemas.user import UserCreate router = APIRouter(prefix="/auth", tags=["Authentication"]) SessionDep = Annotated[Session, Depends(get_session)] @router.post("/sync-profile", status_code=status.HTTP_201_CREATED) @limiter.limit("10/minute") def sync_profile( request: Request, user_data: UserCreate, session: SessionDep, sb_user_id: str = Depends(get_current_user_id) ): """ Sincroniza os dados do usuário criados via Supabase no banco de dados local. Deve ser chamado pelo Frontend via Webhook ou logo após o cadastro no Supabase. """ # Verifica se o usuário já existe na sua tabela public.users user = session.get(User, sb_user_id) if not user: # Se não existe, cria ele usando o ID que veio do Supabase user = User( id=sb_user_id, # Importante: usar o mesmo ID do Supabase email=user_data.email, full_name=user_data.full_name, role=user_data.role, # Role é esperado para criação specialty=user_data.specialty, ) session.add(user) session.commit() session.refresh(user) return user