Fix family_members API - use tagged template literals

- Remove display_name from query (column doesn't exist in DB)
- Use sql template literals instead of unsafe()
- Fix settings page to show member.name properly

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Manohar Gupta 2026-05-11 00:53:02 +05:30
parent 9e9ba17afb
commit 5aa7b7df31
2 changed files with 15 additions and 24 deletions

View file

@ -11,26 +11,18 @@ export async function GET(request: Request) {
}
try {
// First check what columns exist
const columns = await sql.unsafe(
`SELECT column_name FROM information_schema.columns WHERE table_name = 'family_members'`
);
console.log("family_members columns:", columns);
// Try with just user data
const members = await sql.unsafe(
`SELECT fm.id, fm.user_id as "userId", fm.role, fm.created_at as "createdAt",
u.name, u.email
// Simple query - no aliases
const members = await sql`
SELECT fm.id, fm.user_id, fm.role, fm.created_at, u.name, u.email
FROM family_members fm
LEFT JOIN users u ON u.id = fm.user_id
WHERE fm.family_id = $1
ORDER BY fm.created_at`,
[familyId]
);
console.log("Members query result:", members);
WHERE fm.family_id = ${familyId}
ORDER BY fm.created_at
`;
return NextResponse.json({ members: members || [] });
} catch (error) {
console.error("Members API error:", error);
console.error("Members error:", error);
return NextResponse.json({ error: String(error) }, { status: 500 });
}
}
@ -45,7 +37,7 @@ export async function DELETE(request: Request) {
}
try {
await sql.unsafe(`DELETE FROM family_members WHERE id = $1`, [memberId]);
await sql`DELETE FROM family_members WHERE id = ${memberId}`;
return NextResponse.json({ success: true });
} catch (error) {
console.error(error);
@ -57,16 +49,15 @@ export async function DELETE(request: Request) {
export async function PATCH(request: Request) {
try {
const body = await request.json();
const { memberId, role, displayName } = body;
const { memberId, role } = body;
if (!memberId) {
return NextResponse.json({ error: "Member ID required" }, { status: 400 });
}
await sql.unsafe(
`UPDATE family_members SET role = $1, display_name = $2 WHERE id = $3`,
[role || "caregiver", displayName, memberId]
);
await sql`
UPDATE family_members SET role = ${role || "caregiver"} WHERE id = ${memberId}
`;
return NextResponse.json({ success: true });
} catch (error) {

View file

@ -167,7 +167,7 @@ export default function SettingsPage() {
{members.map((member) => (
<div key={member.id} className="flex items-center justify-between p-2 bg-gray-50 dark:bg-gray-700 rounded">
<div>
<div className="font-medium text-sm">{member.displayName || member.name || member.email}</div>
<div className="font-medium text-sm">{member.name || member.email}</div>
<div className="text-xs text-gray-400">{member.email}</div>
</div>
<span className={`text-xs px-2 py-1 rounded ${member.role === "admin" ? "bg-rose-100 text-rose-600" : "bg-gray-100 dark:bg-gray-600"}`}>