new endpoints
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import { Request, Response } from 'express';
|
||||
import { supabase, findOneGpi, queryGpi } from '../config/supabase.js';
|
||||
import { User } from '../lib/compat.js';
|
||||
import { supabase } from '../config/supabase.js';
|
||||
|
||||
interface AuthRequest extends Request {
|
||||
appUser?: any;
|
||||
@@ -8,7 +7,6 @@ interface AuthRequest extends Request {
|
||||
|
||||
export const syncUser = async (req: AuthRequest, res: Response) => {
|
||||
try {
|
||||
// Se já estiver autenticado pelo middleware, usa os dados do appUser
|
||||
if (req.appUser) {
|
||||
return res.json(req.appUser);
|
||||
}
|
||||
@@ -19,17 +17,39 @@ export const syncUser = async (req: AuthRequest, res: Response) => {
|
||||
return res.status(400).json({ error: 'Email é obrigatório para sincronização.' });
|
||||
}
|
||||
|
||||
let user = await User.findOne({ email });
|
||||
const { data: existingUser } = await supabase
|
||||
.from('users')
|
||||
.select('*')
|
||||
.eq('email', email)
|
||||
.single();
|
||||
|
||||
if (!user) {
|
||||
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 });
|
||||
let user;
|
||||
if (!existingUser) {
|
||||
const { data, error } = await supabase
|
||||
.from('users')
|
||||
.insert({
|
||||
email,
|
||||
name: name || email.split('@')[0],
|
||||
logto_id,
|
||||
role: 'guest'
|
||||
})
|
||||
.select()
|
||||
.single();
|
||||
|
||||
if (error) throw error;
|
||||
user = data;
|
||||
} else {
|
||||
if (logto_id && !existingUser.logto_id) {
|
||||
const { data } = await supabase
|
||||
.from('users')
|
||||
.update({ logto_id })
|
||||
.eq('id', existingUser.id)
|
||||
.select()
|
||||
.single();
|
||||
user = data;
|
||||
} else {
|
||||
user = existingUser;
|
||||
}
|
||||
}
|
||||
|
||||
res.json(user);
|
||||
@@ -42,14 +62,8 @@ export const syncUser = async (req: AuthRequest, res: Response) => {
|
||||
export const getCurrentUser = async (req: AuthRequest, res: Response) => {
|
||||
try {
|
||||
if (!req.appUser) {
|
||||
// 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);
|
||||
return res.status(404).json({ error: 'Usuário não autenticado ou não encontrado no banco.' });
|
||||
}
|
||||
|
||||
res.json(req.appUser);
|
||||
} catch (error: any) {
|
||||
console.error('Error getting current user:', error);
|
||||
@@ -62,7 +76,12 @@ export const getAllUsers = async (req: Request, res: Response) => {
|
||||
const organizationId = req.headers['x-organization-id'] as string;
|
||||
|
||||
if (!organizationId) {
|
||||
return res.status(400).json({ error: 'Organização não selecionada.' });
|
||||
const { data, error } = await supabase
|
||||
.from('users')
|
||||
.select('*');
|
||||
|
||||
if (error && error.code !== '42P01') throw error;
|
||||
return res.json(data || []);
|
||||
}
|
||||
|
||||
const { data, error } = await supabase
|
||||
@@ -70,7 +89,7 @@ export const getAllUsers = async (req: Request, res: Response) => {
|
||||
.select('*, users(*)')
|
||||
.eq('organization_id', organizationId);
|
||||
|
||||
if (error) throw error;
|
||||
if (error && error.code !== '42P01') throw error;
|
||||
res.json(data || []);
|
||||
} catch (error: any) {
|
||||
console.error('Error getting users:', error);
|
||||
@@ -142,12 +161,6 @@ export const heartbeat = async (req: AuthRequest, res: Response) => {
|
||||
|
||||
export const getActiveUsers = async (req: AuthRequest, res: Response) => {
|
||||
try {
|
||||
const organizationId = req.headers['x-organization-id'] as string;
|
||||
|
||||
if (!organizationId) {
|
||||
return res.status(400).json([]);
|
||||
}
|
||||
|
||||
const twoMinutesAgo = new Date(Date.now() - 2 * 60 * 1000).toISOString();
|
||||
|
||||
const { data, error } = await supabase
|
||||
@@ -155,7 +168,7 @@ export const getActiveUsers = async (req: AuthRequest, res: Response) => {
|
||||
.select('id, email, name, last_seen_at')
|
||||
.gte('last_seen_at', twoMinutesAgo);
|
||||
|
||||
if (error) throw error;
|
||||
if (error && error.code !== '42P01') throw error;
|
||||
res.json(data || []);
|
||||
} catch (error: any) {
|
||||
console.error('Error getting active users:', error);
|
||||
@@ -178,4 +191,4 @@ export const deleteUser = async (req: Request, res: Response) => {
|
||||
console.error('Error deleting user:', error);
|
||||
res.status(500).json({ error: 'Erro ao remover membro.' });
|
||||
}
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user