From ca2bdc19abf80d6a125f3b841e7c322f23bd1f26 Mon Sep 17 00:00:00 2001 From: admtracksteel Date: Thu, 2 Apr 2026 10:31:12 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Auto-deploy:=20GPI=20atualizado?= =?UTF-8?q?=20em=2002/04/2026=2010:31:12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/controllers/userController.ts | 48 +++++++++++++----------- src/server/routes/userRoutes.ts | 2 - 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/server/controllers/userController.ts b/src/server/controllers/userController.ts index 92e6f18..8ab1956 100644 --- a/src/server/controllers/userController.ts +++ b/src/server/controllers/userController.ts @@ -1,34 +1,35 @@ import { Request, Response } from 'express'; import { supabase, findOneGpi, queryGpi } from '../config/supabase.js'; +import { User } from '../lib/compat.js'; interface AuthRequest extends Request { appUser?: any; } -export const syncUser = async (req: Request, res: Response) => { +export const syncUser = async (req: AuthRequest, res: Response) => { try { - const { email, name, logto_id } = req.body; - - if (!email || !name) { - return res.status(400).json({ error: 'email e name são obrigatórios.' }); + // Se já estiver autenticado pelo middleware, usa os dados do appUser + if (req.appUser) { + return res.json(req.appUser); } - let user = await findOneGpi('users', { email }); + const { email, name, logto_id } = req.body; + + if (!email) { + return res.status(400).json({ error: 'Email é obrigatório para sincronização.' }); + } + + let user = await User.findOne({ email }); if (!user) { - const { data, error } = await supabase - .from('users') - .insert({ - email, - name, - logto_id, - role: 'guest' - }) - .select() - .single(); - - if (error) throw error; - user = data; + user = await User.create({ + email, + name: name || email.split('@')[0], + logto_id, + role: 'guest' + }); + } else if (logto_id && !user.logto_id) { + user = await User.findByIdAndUpdate(user.id, { logto_id }); } res.json(user); @@ -41,13 +42,18 @@ export const syncUser = async (req: Request, res: Response) => { export const getCurrentUser = async (req: AuthRequest, res: Response) => { try { if (!req.appUser) { - return res.status(404).json({ error: 'Usuário não encontrado.' }); + // Se o middleware não encontrou, tenta autenticar novamente aqui para garantir + const user = await User.findOne({ id: (req as any).headers['x-user-id'] }); // Fallback opcional + if (!user) { + return res.status(404).json({ error: 'Usuário não autenticado ou não encontrado no banco.' }); + } + return res.json(user); } res.json(req.appUser); } catch (error: any) { console.error('Error getting current user:', error); - res.status(500).json({ error: 'Erro ao buscar usuário.' }); + res.status(500).json({ error: 'Erro ao buscar perfil do usuário.' }); } }; diff --git a/src/server/routes/userRoutes.ts b/src/server/routes/userRoutes.ts index e00b03e..e38f054 100644 --- a/src/server/routes/userRoutes.ts +++ b/src/server/routes/userRoutes.ts @@ -4,8 +4,6 @@ import { extractUser, requireAdmin } from '../middleware/authMiddleware.js'; const router = express.Router(); -// Sync user from Clerk (public - called on login) -router.post('/sync', syncUser); // Get current user (requires extractUser middleware) router.get('/me', extractUser, getCurrentUser);