🚀 Initial commit: Versão atual do TrackSteel APP
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
|
||||
-- Adicionar coluna online na tabela profiles
|
||||
ALTER TABLE public.profiles ADD COLUMN IF NOT EXISTS online boolean DEFAULT false;
|
||||
|
||||
-- Criar função para marcar usuário como online
|
||||
CREATE OR REPLACE FUNCTION public.set_user_online(user_id_param uuid)
|
||||
RETURNS void AS $$
|
||||
BEGIN
|
||||
UPDATE public.profiles
|
||||
SET online = true, updated_at = now()
|
||||
WHERE id = user_id_param;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
||||
|
||||
-- Criar função para marcar usuário como offline
|
||||
CREATE OR REPLACE FUNCTION public.set_user_offline(user_id_param uuid)
|
||||
RETURNS void AS $$
|
||||
BEGIN
|
||||
UPDATE public.profiles
|
||||
SET online = false, updated_at = now()
|
||||
WHERE id = user_id_param;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
||||
|
||||
-- Atualizar função get_online_users para usar a nova coluna
|
||||
CREATE OR REPLACE FUNCTION public.get_online_users()
|
||||
RETURNS TABLE(
|
||||
user_id UUID,
|
||||
email TEXT,
|
||||
full_name TEXT,
|
||||
avatar_url TEXT,
|
||||
session_start TIMESTAMP WITH TIME ZONE
|
||||
) AS $$
|
||||
BEGIN
|
||||
RETURN QUERY
|
||||
SELECT
|
||||
p.id,
|
||||
p.email,
|
||||
p.full_name,
|
||||
p.profile_image_url as avatar_url,
|
||||
p.updated_at as session_start
|
||||
FROM public.profiles p
|
||||
WHERE p.online = true
|
||||
ORDER BY p.updated_at DESC;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
||||
|
||||
-- Criar função para verificar e limpar usuários offline (executada periodicamente)
|
||||
CREATE OR REPLACE FUNCTION public.cleanup_offline_users()
|
||||
RETURNS void AS $$
|
||||
BEGIN
|
||||
-- Marcar como offline usuários que não tem sessão ativa há mais de 5 minutos
|
||||
UPDATE public.profiles
|
||||
SET online = false, updated_at = now()
|
||||
WHERE online = true
|
||||
AND id NOT IN (
|
||||
SELECT DISTINCT usl.user_id
|
||||
FROM public.user_session_logs usl
|
||||
WHERE usl.is_active = true
|
||||
AND usl.session_start > (now() - INTERVAL '5 minutes')
|
||||
);
|
||||
END;
|
||||
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
||||
Reference in New Issue
Block a user