🚀 Auto-deploy: GPI atualizado em 02/04/2026 10:31:12
This commit is contained in:
@@ -1,34 +1,35 @@
|
|||||||
import { Request, Response } from 'express';
|
import { Request, Response } from 'express';
|
||||||
import { supabase, findOneGpi, queryGpi } from '../config/supabase.js';
|
import { supabase, findOneGpi, queryGpi } from '../config/supabase.js';
|
||||||
|
import { User } from '../lib/compat.js';
|
||||||
|
|
||||||
interface AuthRequest extends Request {
|
interface AuthRequest extends Request {
|
||||||
appUser?: any;
|
appUser?: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const syncUser = async (req: Request, res: Response) => {
|
export const syncUser = async (req: AuthRequest, res: Response) => {
|
||||||
try {
|
try {
|
||||||
const { email, name, logto_id } = req.body;
|
// Se já estiver autenticado pelo middleware, usa os dados do appUser
|
||||||
|
if (req.appUser) {
|
||||||
if (!email || !name) {
|
return res.json(req.appUser);
|
||||||
return res.status(400).json({ error: 'email e name são obrigatórios.' });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
if (!user) {
|
||||||
const { data, error } = await supabase
|
user = await User.create({
|
||||||
.from('users')
|
|
||||||
.insert({
|
|
||||||
email,
|
email,
|
||||||
name,
|
name: name || email.split('@')[0],
|
||||||
logto_id,
|
logto_id,
|
||||||
role: 'guest'
|
role: 'guest'
|
||||||
})
|
});
|
||||||
.select()
|
} else if (logto_id && !user.logto_id) {
|
||||||
.single();
|
user = await User.findByIdAndUpdate(user.id, { logto_id });
|
||||||
|
|
||||||
if (error) throw error;
|
|
||||||
user = data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
res.json(user);
|
res.json(user);
|
||||||
@@ -41,13 +42,18 @@ export const syncUser = async (req: Request, res: Response) => {
|
|||||||
export const getCurrentUser = async (req: AuthRequest, res: Response) => {
|
export const getCurrentUser = async (req: AuthRequest, res: Response) => {
|
||||||
try {
|
try {
|
||||||
if (!req.appUser) {
|
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);
|
res.json(req.appUser);
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error('Error getting current user:', error);
|
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.' });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ import { extractUser, requireAdmin } from '../middleware/authMiddleware.js';
|
|||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
// Sync user from Clerk (public - called on login)
|
|
||||||
router.post('/sync', syncUser);
|
|
||||||
|
|
||||||
// Get current user (requires extractUser middleware)
|
// Get current user (requires extractUser middleware)
|
||||||
router.get('/me', extractUser, getCurrentUser);
|
router.get('/me', extractUser, getCurrentUser);
|
||||||
|
|||||||
Reference in New Issue
Block a user