mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-22 04:11:13 -05:00
Refactor code structure and remove redundant changes
This commit is contained in:
90
src-old/hooks/useUserRole.ts
Normal file
90
src-old/hooks/useUserRole.ts
Normal file
@@ -0,0 +1,90 @@
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { useCallback } from 'react';
|
||||
import { supabase } from '@/lib/supabaseClient';
|
||||
import { useAuth } from '@/hooks/useAuth';
|
||||
import { queryKeys } from '@/lib/queryKeys';
|
||||
import { handleNonCriticalError } from '@/lib/errorHandler';
|
||||
|
||||
export type UserRole = 'admin' | 'moderator' | 'user' | 'superuser';
|
||||
|
||||
export interface UserPermissions {
|
||||
can_ban_any_user: boolean;
|
||||
can_manage_admin_roles: boolean;
|
||||
can_manage_moderator_roles: boolean;
|
||||
can_view_all_profiles: boolean;
|
||||
can_assign_superuser: boolean;
|
||||
role_level: string;
|
||||
}
|
||||
|
||||
export function useUserRole() {
|
||||
const { user } = useAuth();
|
||||
|
||||
// Fetch user roles with TanStack Query for automatic caching
|
||||
const rolesQuery = useQuery({
|
||||
queryKey: queryKeys.userRoles(user?.id),
|
||||
queryFn: async () => {
|
||||
if (!user) return [];
|
||||
|
||||
const { data, error } = await supabase
|
||||
.from('user_roles')
|
||||
.select('role')
|
||||
.eq('user_id', user.id);
|
||||
|
||||
if (error) {
|
||||
handleNonCriticalError(error, {
|
||||
action: 'Fetch user roles',
|
||||
userId: user.id,
|
||||
});
|
||||
return [];
|
||||
}
|
||||
|
||||
return data?.map(r => r.role as UserRole) || [];
|
||||
},
|
||||
enabled: !!user,
|
||||
staleTime: 5 * 60 * 1000, // 5 minutes - roles don't change often
|
||||
gcTime: 10 * 60 * 1000, // 10 minutes garbage collection
|
||||
});
|
||||
|
||||
// Fetch user permissions with TanStack Query for automatic caching
|
||||
const permissionsQuery = useQuery({
|
||||
queryKey: queryKeys.userPermissions(user?.id),
|
||||
queryFn: async () => {
|
||||
if (!user) return null;
|
||||
|
||||
const { data, error } = await supabase
|
||||
.rpc('get_user_management_permissions', { _user_id: user.id });
|
||||
|
||||
if (error) {
|
||||
handleNonCriticalError(error, {
|
||||
action: 'Fetch user permissions',
|
||||
userId: user.id,
|
||||
});
|
||||
return null;
|
||||
}
|
||||
|
||||
return data as unknown as UserPermissions;
|
||||
},
|
||||
enabled: !!user,
|
||||
staleTime: 5 * 60 * 1000, // 5 minutes - permissions don't change often
|
||||
gcTime: 10 * 60 * 1000, // 10 minutes garbage collection
|
||||
});
|
||||
|
||||
const roles = rolesQuery.data || [];
|
||||
const permissions = permissionsQuery.data || null;
|
||||
const loading = rolesQuery.isLoading || permissionsQuery.isLoading;
|
||||
|
||||
const hasRole = useCallback((role: UserRole) => roles.includes(role), [roles]);
|
||||
const isModerator = useCallback(() => hasRole('admin') || hasRole('moderator') || hasRole('superuser'), [hasRole]);
|
||||
const isAdmin = useCallback(() => hasRole('admin') || hasRole('superuser'), [hasRole]);
|
||||
const isSuperuser = useCallback(() => hasRole('superuser'), [hasRole]);
|
||||
|
||||
return {
|
||||
roles,
|
||||
permissions,
|
||||
loading,
|
||||
hasRole,
|
||||
isModerator,
|
||||
isAdmin,
|
||||
isSuperuser
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user