project-standalo-sonic-cloud/app/api/users/me/route.ts

83 lines
1.8 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import { prisma } from '@/lib/prisma'
import { getCurrentUser } from '@/lib/auth'
export async function GET() {
try {
const user = await getCurrentUser()
if (!user) {
return NextResponse.json(
{ error: 'Unauthorized' },
{ status: 401 }
)
}
return NextResponse.json({ user })
} catch (error) {
console.error('Get current user error:', error)
return NextResponse.json(
{ error: 'Failed to get user' },
{ status: 500 }
)
}
}
export async function PUT(request: NextRequest) {
try {
const currentUser = await getCurrentUser()
if (!currentUser) {
return NextResponse.json(
{ error: 'Unauthorized' },
{ status: 401 }
)
}
const body = await request.json()
const { displayName, bio, avatarUrl } = body
const user = await prisma.user.update({
where: { id: currentUser.id },
data: {
...(displayName !== undefined && { displayName }),
...(bio !== undefined && { bio }),
...(avatarUrl !== undefined && { avatarUrl }),
},
select: {
id: true,
email: true,
username: true,
displayName: true,
avatarUrl: true,
bio: true,
role: true,
createdAt: true,
artist: {
select: {
id: true,
name: true,
slug: true,
verified: true,
},
},
label: {
select: {
id: true,
name: true,
slug: true,
},
},
},
})
return NextResponse.json({ user })
} catch (error) {
console.error('Update user error:', error)
return NextResponse.json(
{ error: 'Failed to update user' },
{ status: 500 }
)
}
}