From 22119dbf6f618df7ce969132d03f2770a5c32808 Mon Sep 17 00:00:00 2001 From: mudabbir-ahmad Date: Tue, 11 Mar 2025 20:19:03 +0000 Subject: [PATCH] fixed a bit --- app/(main)/team/[teamId]/members/route.js | 31 +++++++++++++++++++++++ app/(main)/team/[teamId]/page.js | 19 +++++++++----- 2 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 app/(main)/team/[teamId]/members/route.js diff --git a/app/(main)/team/[teamId]/members/route.js b/app/(main)/team/[teamId]/members/route.js new file mode 100644 index 0000000..82bfe29 --- /dev/null +++ b/app/(main)/team/[teamId]/members/route.js @@ -0,0 +1,31 @@ +// app/api/teams/[teamId]/members/route.js +import { query } from '../../../../../lib/db'; +import { getServerSession } from 'next-auth/next'; +import { authOptions } from '../../../auth/[...nextauth]/route'; + +export async function GET(request, { params }) { + const session = await getServerSession(authOptions); + + if (!session) { + return Response.json({ error: 'Unauthorised' }, { status: 401 }); + } + + try { + const { teamId } = params; + + // Ensure the user is requesting their own team or is an admin + if (session.user.teamId != teamId && session.user.role !== 'admin') { + return Response.json({ error: 'Not authorized to view this team' }, { status: 403 }); + } + + const members = await query( + 'SELECT id, username FROM users WHERE team_id = ?', + [teamId] + ); + + return Response.json(members); + } catch (error) { + console.error('Team members fetch error:', error); + return Response.json({ error: 'Failed to fetch team members' }, { status: 500 }); + } +} \ No newline at end of file diff --git a/app/(main)/team/[teamId]/page.js b/app/(main)/team/[teamId]/page.js index 47defdf..44a2bfd 100644 --- a/app/(main)/team/[teamId]/page.js +++ b/app/(main)/team/[teamId]/page.js @@ -17,10 +17,15 @@ export default function TeamPage({ params }) { useEffect(() => { async function fetchTeamData() { try { + if (!teamId) { + throw new Error('No team ID provided'); + } + // Fetch team details const teamResponse = await fetch(`/api/teams/${teamId}`); if (!teamResponse.ok) { - throw new Error('Failed to fetch team data'); + const errorData = await teamResponse.json(); + throw new Error(errorData.error || 'Failed to fetch team data'); } const teamData = await teamResponse.json(); setTeam(teamData); @@ -28,19 +33,21 @@ export default function TeamPage({ params }) { // Fetch team members const membersResponse = await fetch(`/api/teams/${teamId}/members`); if (!membersResponse.ok) { - throw new Error('Failed to fetch team members'); + // Don't throw here, just log the error + console.error('Failed to fetch team members'); + } else { + const membersData = await membersResponse.json(); + setTeamMembers(membersData); } - const membersData = await membersResponse.json(); - setTeamMembers(membersData); } catch (err) { - console.error(err); + console.error('Team page error:', err); setError(err.message); } finally { setLoading(false); } } - if (status === 'authenticated') { + if (status === 'authenticated' && teamId) { fetchTeamData(); } }, [teamId, status]);