working on onboarding flow
This commit is contained in:
1 parent
868eaa5e3d
commit
d3a36b6103
19 files changed
+2062
-393
No files matched your search
@@ -0,0 +1,55 @@
|
||||
import { NextResponse } from 'next/server'
|
||||
import { auth } from '@clerk/nextjs/server'
|
||||
import { db, users as usersTable, gyms as gymsTable, eq } from '@fitai/database'
|
||||
|
||||
/**
|
||||
* PATCH /api/users/gym
|
||||
* Body: { gymId: string | null }
|
||||
* - Updates the current authenticated user's gym selection.
|
||||
* - gymId can be null to proceed without a gym.
|
||||
* - If gymId is provided, it must exist and be active.
|
||||
*/
|
||||
export async function PATCH(req: Request) {
|
||||
try {
|
||||
const { userId } = await auth()
|
||||
if (!userId) return new NextResponse('Unauthorized', { status: 401 })
|
||||
|
||||
const body = await req.json().catch(() => null)
|
||||
if (!body || typeof body !== 'object' || !('gymId' in body)) {
|
||||
return NextResponse.json({ error: 'gymId is required in body (can be null)' }, { status: 400 })
|
||||
}
|
||||
|
||||
const gymId = body.gymId === null ? null : String(body.gymId)
|
||||
|
||||
// Ensure user exists
|
||||
const user = await db.select().from(usersTable).where(eq(usersTable.id, userId)).get()
|
||||
if (!user) return new NextResponse('User not found', { status: 404 })
|
||||
|
||||
// Validate gym when provided
|
||||
if (gymId) {
|
||||
const gym = await db.select().from(gymsTable).where(eq(gymsTable.id, gymId)).get()
|
||||
if (!gym) {
|
||||
return NextResponse.json({ error: 'Gym not found' }, { status: 404 })
|
||||
}
|
||||
if (gym.status !== 'active') {
|
||||
return NextResponse.json({ error: 'Gym is not active' }, { status: 400 })
|
||||
}
|
||||
}
|
||||
|
||||
// Update user's gym selection
|
||||
await db
|
||||
.update(usersTable)
|
||||
.set({
|
||||
gymId: gymId ?? null,
|
||||
updatedAt: new Date(),
|
||||
})
|
||||
.where(eq(usersTable.id, userId))
|
||||
.run()
|
||||
|
||||
const updated = await db.select().from(usersTable).where(eq(usersTable.id, userId)).get()
|
||||
return NextResponse.json(updated)
|
||||
} catch (error) {
|
||||
console.error('PATCH /users/gym error:', error)
|
||||
return new NextResponse('Internal Server Error', { status: 500 })
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user