Spaces:
Running
Running
| 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)] | |
| 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 |