![]() 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/private_html/src/hooks/ |
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;
}