T.ME/BIBIL_0DAY
CasperSecurity


Server : Apache/2
System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64
User : gositeme ( 1004)
PHP Version : 8.2.29
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Directory :  /home/gositeme/domains/lavocat.ca/public_html/src/hooks/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/lavocat.ca/public_html/src/hooks/useProfileActivity.ts
import { useState, useEffect } from 'react';
import { useSession } from 'next-auth/react';

export interface ActivityItem {
  id: string;
  type: 'achievement' | 'case' | 'review' | 'endorsement' | 'activity' | 'milestone' | 'badge';
  title: string;
  description: string;
  timestamp: string;
  badge?: string;
  icon?: string;
  metadata?: any;
}

export interface AchievementData {
  id: string;
  name: string;
  description: string;
  type: string;
  target: number;
  xpReward: number;
  currentProgress: number;
  isCompleted: boolean;
  completedAt?: string;
  icon?: string;
}

export interface BadgeData {
  id: string;
  name: string;
  description: string;
  icon: string;
  category: string;
  rarity: string;
  earnedAt: string;
  isVisible: boolean;
}

export interface ProfileActivityData {
  activities: ActivityItem[];
  achievements: AchievementData[];
  badges: BadgeData[];
  isLoading: boolean;
  error: string | null;
}

export function useProfileActivity(userId: string): ProfileActivityData {
  const { data: session } = useSession();
  const [activityData, setActivityData] = useState<ProfileActivityData>({
    activities: [],
    achievements: [],
    badges: [],
    isLoading: true,
    error: null,
  });

  useEffect(() => {
    if (!userId) return;

    const fetchActivityData = async () => {
      try {
        setActivityData(prev => ({ ...prev, isLoading: true, error: null }));

        // Fetch profile activity
        const activityResponse = await fetch(`/api/profile/${userId}/activity`);
        const activityData = activityResponse.ok ? await activityResponse.json() : { activities: [] };

        // Fetch user achievements
        const achievementsResponse = await fetch(`/api/users/${userId}/achievements`);
        const achievementsData = achievementsResponse.ok ? await achievementsResponse.json() : { achievements: [] };

        // Fetch user badges
        const badgesResponse = await fetch(`/api/users/${userId}/badges`);
        const badgesData = badgesResponse.ok ? await badgesResponse.json() : { badges: [] };

        setActivityData({
          activities: activityData.activities || [],
          achievements: achievementsData.achievements || [],
          badges: badgesData.badges || [],
          isLoading: false,
          error: null,
        });

      } catch (error) {
        console.error('Error fetching profile activity:', error);
        setActivityData(prev => ({
          ...prev,
          isLoading: false,
          error: error instanceof Error ? error.message : 'Failed to fetch activity data',
        }));
      }
    };

    fetchActivityData();
  }, [userId]);

  return activityData;
} 

CasperSecurity Mini