From f6044f3c247d7ae55ac5795791822e54dcd34d59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yusuf=20=C4=B0pek?= Date: Sat, 7 Feb 2026 17:59:37 +0300 Subject: [PATCH] refactor: Update API response handling to access nested data structure --- .../projects/[projectId]/members/page.tsx | 4 ++-- .../projects/[projectId]/settings/page.tsx | 17 ++++++++++------- .../projects/[projectId]/share/page.tsx | 7 ++++--- .../videos/[videoId]/compare/page.tsx | 3 ++- .../[projectId]/videos/[videoId]/page.tsx | 5 +++-- app/(dashboard)/projects/new/page.tsx | 4 ++-- app/(dashboard)/settings/page.tsx | 10 +++++----- .../workspaces/[workspaceId]/members/page.tsx | 4 ++-- .../[workspaceId]/projects/new/page.tsx | 2 +- .../workspaces/[workspaceId]/settings/page.tsx | 7 ++++--- app/(dashboard)/workspaces/new/page.tsx | 2 +- app/api/projects/[projectId]/members/route.ts | 6 +++--- .../workspaces/[workspaceId]/members/route.ts | 6 +++--- app/watch/[videoId]/page.tsx | 5 +++-- 14 files changed, 45 insertions(+), 37 deletions(-) diff --git a/app/(dashboard)/projects/[projectId]/members/page.tsx b/app/(dashboard)/projects/[projectId]/members/page.tsx index 557b6f6..cdd240b 100644 --- a/app/(dashboard)/projects/[projectId]/members/page.tsx +++ b/app/(dashboard)/projects/[projectId]/members/page.tsx @@ -68,8 +68,8 @@ export default function ProjectMembersPage() { return; } const data = await res.json(); - setMembers(data.members); - setOwner(data.owner); + setMembers(data.data.members); + setOwner(data.data.owner); } catch { setError('Failed to load members'); } finally { diff --git a/app/(dashboard)/projects/[projectId]/settings/page.tsx b/app/(dashboard)/projects/[projectId]/settings/page.tsx index 4cb2f05..5e3c0ad 100644 --- a/app/(dashboard)/projects/[projectId]/settings/page.tsx +++ b/app/(dashboard)/projects/[projectId]/settings/page.tsx @@ -89,10 +89,11 @@ export default function ProjectSettingsPage({ params }: ProjectSettingsPageProps if (data.error) { setError(data.error); } else { + const project = data.data; setFormData({ - name: data.name || '', - description: data.description || '', - visibility: data.visibility || 'PRIVATE', + name: project.name || '', + description: project.description || '', + visibility: project.visibility || 'PRIVATE', }); } }) @@ -103,8 +104,8 @@ export default function ProjectSettingsPage({ params }: ProjectSettingsPageProps fetch(`/api/projects/${id}/tags`) .then((res) => res.json()) .then((data) => { - if (Array.isArray(data)) { - setTags(data); + if (Array.isArray(data.data)) { + setTags(data.data); } }) .catch(() => { /* Silent fail - tags are optional */ }); @@ -150,7 +151,8 @@ export default function ProjectSettingsPage({ params }: ProjectSettingsPageProps body: JSON.stringify({ name: newTagName.trim(), color: newTagColor }), }); if (res.ok) { - const newTag = await res.json(); + const data = await res.json(); + const newTag = data.data; setTags([...tags, newTag]); setNewTagName(''); setNewTagColor('#3B82F6'); @@ -171,7 +173,8 @@ export default function ProjectSettingsPage({ params }: ProjectSettingsPageProps body: JSON.stringify({ name: editTagName.trim(), color: editTagColor }), }); if (res.ok) { - const updated = await res.json(); + const data = await res.json(); + const updated = data.data; setTags(tags.map((t) => (t.id === tagId ? updated : t))); setEditingTagId(null); } diff --git a/app/(dashboard)/projects/[projectId]/share/page.tsx b/app/(dashboard)/projects/[projectId]/share/page.tsx index c17e782..b5a5a40 100644 --- a/app/(dashboard)/projects/[projectId]/share/page.tsx +++ b/app/(dashboard)/projects/[projectId]/share/page.tsx @@ -45,9 +45,10 @@ export default function ProjectSharePage({ params }: ProjectSharePageProps) { if (data.error) { setError(data.error); } else { - setProjectName(data.name || ''); - setProjectVisibility(data.visibility || 'PRIVATE'); - setMembers(data.members || []); + const project = data.data; + setProjectName(project.name || ''); + setProjectVisibility(project.visibility || 'PRIVATE'); + setMembers(project.members || []); } }) .catch(() => setError('Failed to load project')) diff --git a/app/(dashboard)/projects/[projectId]/videos/[videoId]/compare/page.tsx b/app/(dashboard)/projects/[projectId]/videos/[videoId]/compare/page.tsx index 10d01d3..c6ca0bc 100644 --- a/app/(dashboard)/projects/[projectId]/videos/[videoId]/compare/page.tsx +++ b/app/(dashboard)/projects/[projectId]/videos/[videoId]/compare/page.tsx @@ -79,7 +79,8 @@ export default function CompareVersionsPage() { setLoading(false); return; } - const data = await res.json(); + const response = await res.json(); + const data = response.data; setVideo(data); // Set initial versions from query params or defaults diff --git a/app/(dashboard)/projects/[projectId]/videos/[videoId]/page.tsx b/app/(dashboard)/projects/[projectId]/videos/[videoId]/page.tsx index 25f4896..d2330d1 100644 --- a/app/(dashboard)/projects/[projectId]/videos/[videoId]/page.tsx +++ b/app/(dashboard)/projects/[projectId]/videos/[videoId]/page.tsx @@ -240,7 +240,8 @@ export default function VideoPage() { try { const res = await fetch(`/api/projects/${projectId}/tags`); if (res.ok) { - const tags = await res.json(); + const data = await res.json(); + const tags = data.data || []; setAvailableTags(tags); // Auto-select first tag (Feedback) as default if (tags.length > 0 && !selectedTagId) { @@ -1165,7 +1166,7 @@ export default function VideoPage() { const res = await fetch(`/api/projects/${projectId}/videos/${videoId}`); if (res.ok) { const data = await res.json(); - setVideo(data); + setVideo(data.data); } } catch { /* silent */ } }, 10000); diff --git a/app/(dashboard)/projects/new/page.tsx b/app/(dashboard)/projects/new/page.tsx index 77ffc9d..141419e 100644 --- a/app/(dashboard)/projects/new/page.tsx +++ b/app/(dashboard)/projects/new/page.tsx @@ -67,7 +67,7 @@ export default function NewProjectPage() { const res = await fetch('/api/workspaces'); if (res.ok) { const data = await res.json(); - const workspacesData = data.workspaces || []; + const workspacesData = data.data.workspaces || []; setWorkspaces(workspacesData); // Auto-select if only one workspace and none preselected if (!preselectedWorkspace && workspacesData.length === 1) { @@ -106,7 +106,7 @@ export default function NewProjectPage() { return; } - router.push(`/projects/${data.id}`); + router.push(`/projects/${data.data.id}`); } catch { setError('Something went wrong. Please try again.'); } finally { diff --git a/app/(dashboard)/settings/page.tsx b/app/(dashboard)/settings/page.tsx index 6c1082b..ea4512d 100644 --- a/app/(dashboard)/settings/page.tsx +++ b/app/(dashboard)/settings/page.tsx @@ -102,9 +102,9 @@ export default function SettingsPage() { const res = await fetch('/api/settings/notifications'); if (res.ok) { const data = await res.json(); - setSettings(data); - setTelegramToken(data.telegramBotToken || ''); - setTelegramChatId(data.telegramChatId || ''); + setSettings(data.data); + setTelegramToken(data.data.telegramBotToken || ''); + setTelegramChatId(data.data.telegramChatId || ''); } } catch { console.error('Failed to fetch notification settings'); @@ -135,7 +135,7 @@ export default function SettingsPage() { if (res.ok) { const data = await res.json(); - setSettings(data); + setSettings(data.data); showMessage('success', 'Settings saved'); } else { const data = await res.json(); @@ -163,7 +163,7 @@ export default function SettingsPage() { }); const data = await res.json(); if (res.ok) { - showMessage('success', data.message); + showMessage('success', data.data.message); } else { showMessage('error', data.error || 'Test failed'); } diff --git a/app/(dashboard)/workspaces/[workspaceId]/members/page.tsx b/app/(dashboard)/workspaces/[workspaceId]/members/page.tsx index c534c4a..2f5ed33 100644 --- a/app/(dashboard)/workspaces/[workspaceId]/members/page.tsx +++ b/app/(dashboard)/workspaces/[workspaceId]/members/page.tsx @@ -68,8 +68,8 @@ export default function WorkspaceMembersPage() { return; } const data = await res.json(); - setMembers(data.members); - setOwner(data.owner); + setMembers(data.data.members); + setOwner(data.data.owner); } catch { setError('Failed to load members'); } finally { diff --git a/app/(dashboard)/workspaces/[workspaceId]/projects/new/page.tsx b/app/(dashboard)/workspaces/[workspaceId]/projects/new/page.tsx index abeb625..6447101 100644 --- a/app/(dashboard)/workspaces/[workspaceId]/projects/new/page.tsx +++ b/app/(dashboard)/workspaces/[workspaceId]/projects/new/page.tsx @@ -63,7 +63,7 @@ export default function NewWorkspaceProjectPage({ params }: { params: Promise<{ return; } - router.push(`/projects/${data.id}`); + router.push(`/projects/${data.data.id}`); } catch { setError('Something went wrong. Please try again.'); } finally { diff --git a/app/(dashboard)/workspaces/[workspaceId]/settings/page.tsx b/app/(dashboard)/workspaces/[workspaceId]/settings/page.tsx index 3ce38b0..9f71536 100644 --- a/app/(dashboard)/workspaces/[workspaceId]/settings/page.tsx +++ b/app/(dashboard)/workspaces/[workspaceId]/settings/page.tsx @@ -40,10 +40,11 @@ export default function WorkspaceSettingsPage() { return; } const data = await res.json(); - setWorkspace(data); + const workspace = data.data; + setWorkspace(workspace); setFormData({ - name: data.name, - description: data.description || '', + name: workspace.name, + description: workspace.description || '', }); } catch { setError('Failed to load workspace'); diff --git a/app/(dashboard)/workspaces/new/page.tsx b/app/(dashboard)/workspaces/new/page.tsx index 99ede1b..e0c43c9 100644 --- a/app/(dashboard)/workspaces/new/page.tsx +++ b/app/(dashboard)/workspaces/new/page.tsx @@ -38,7 +38,7 @@ export default function NewWorkspacePage() { return; } - router.push(`/workspaces/${data.id}`); + router.push(`/workspaces/${data.data.id}`); } catch { setError('Something went wrong. Please try again.'); } finally { diff --git a/app/api/projects/[projectId]/members/route.ts b/app/api/projects/[projectId]/members/route.ts index 25440ef..927ae70 100644 --- a/app/api/projects/[projectId]/members/route.ts +++ b/app/api/projects/[projectId]/members/route.ts @@ -38,14 +38,14 @@ export async function GET(request: NextRequest, { params }: RouteParams) { const members = await db.projectMember.findMany({ where: { projectId }, include: { - user: { select: { id: true, name: true, image: true } }, + user: { select: { id: true, name: true, email: true, image: true } }, }, orderBy: { createdAt: 'asc' }, }); const owner = await db.user.findUnique({ where: { id: project.ownerId }, - select: { id: true, name: true, image: true }, + select: { id: true, name: true, email: true, image: true }, }); const response = successResponse({ members, owner }); @@ -127,7 +127,7 @@ export async function POST(request: NextRequest, { params }: RouteParams) { role: memberRole as ProjectMemberRole, }, include: { - user: { select: { id: true, name: true, image: true } }, + user: { select: { id: true, name: true, email: true, image: true } }, }, }); diff --git a/app/api/workspaces/[workspaceId]/members/route.ts b/app/api/workspaces/[workspaceId]/members/route.ts index db917fb..cf49b54 100644 --- a/app/api/workspaces/[workspaceId]/members/route.ts +++ b/app/api/workspaces/[workspaceId]/members/route.ts @@ -38,7 +38,7 @@ export async function GET(request: NextRequest, { params }: RouteParams) { const members = await db.workspaceMember.findMany({ where: { workspaceId }, include: { - user: { select: { id: true, name: true, image: true } }, + user: { select: { id: true, name: true, email: true, image: true } }, }, orderBy: { createdAt: 'asc' }, }); @@ -46,7 +46,7 @@ export async function GET(request: NextRequest, { params }: RouteParams) { // Include the owner as well const owner = await db.user.findUnique({ where: { id: workspace.ownerId }, - select: { id: true, name: true, image: true }, + select: { id: true, name: true, email: true, image: true }, }); const response = successResponse({ members, owner }); @@ -128,7 +128,7 @@ export async function POST(request: NextRequest, { params }: RouteParams) { role: memberRole as WorkspaceMemberRole, }, include: { - user: { select: { id: true, name: true, image: true } }, + user: { select: { id: true, name: true, email: true, image: true } }, }, }); diff --git a/app/watch/[videoId]/page.tsx b/app/watch/[videoId]/page.tsx index 8a83c29..82a0468 100644 --- a/app/watch/[videoId]/page.tsx +++ b/app/watch/[videoId]/page.tsx @@ -222,7 +222,8 @@ export default function WatchPage() { try { const res = await fetch(`/api/projects/${projectId}/tags`); if (res.ok) { - const tags = await res.json(); + const data = await res.json(); + const tags = data.data || []; setAvailableTags(tags); // Auto-select first tag (Feedback) as default if (tags.length > 0 && !selectedTagId) { @@ -1118,7 +1119,7 @@ export default function WatchPage() { const res = await fetch(`/api/watch/${videoId}`); if (res.ok) { const data = await res.json(); - setVideo(data); + setVideo(data.data); } } catch { /* silent */ } }, 10000);