fix: upsert fs_users before inserting fs_projects to satisfy FK constraint

Made-with: Cursor
This commit is contained in:
2026-02-27 13:36:25 -08:00
parent ef7a88e913
commit c9ef2379ec

View File

@@ -21,17 +21,33 @@ export async function POST(request: Request) {
} }
const email = session.user.email; const email = session.user.email;
const workspace = email.split('@')[0].toLowerCase().replace(/[^a-z0-9]+/g, '-') + '-account';
// Resolve user record from fs_users // Upsert user into fs_users — guarantees the FK target exists
await query(`
INSERT INTO fs_users (id, user_id, data)
VALUES (gen_random_uuid()::text, $1, $2::jsonb)
ON CONFLICT ((data->>'email')) DO UPDATE
SET user_id = EXCLUDED.user_id,
data = fs_users.data || EXCLUDED.data,
updated_at = NOW()
`, [
session.user.id,
JSON.stringify({
email,
name: session.user.name,
image: session.user.image,
workspace,
}),
]);
// Fetch the canonical fs_users row (now guaranteed to exist)
const users = await query<{ id: string; data: any }>(` const users = await query<{ id: string; data: any }>(`
SELECT id, data FROM fs_users WHERE data->>'email' = $1 LIMIT 1 SELECT id, data FROM fs_users WHERE data->>'email' = $1 LIMIT 1
`, [email]); `, [email]);
const firebaseUserId = users[0]?.id || session.user.id || randomUUID(); const firebaseUserId = users[0]!.id;
const userData = users[0]?.data || {}; const userData = users[0]!.data || {};
const workspace =
userData.workspace ||
email.split('@')[0].toLowerCase().replace(/[^a-z0-9]+/g, '-') + '-account';
const body = await request.json(); const body = await request.json();
const { const {