import { createClient } from '@/lib/supabase/server' import { PrismaClient } from '@prisma/client' import { NextRequest, NextResponse } from 'next/server' const prisma = new PrismaClient() export async function POST(req: NextRequest) { const supabase = await createClient() const { data: { user } } = await supabase.auth.getUser() if (!user) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } try { const body = await req.json() const { name, slug, bio, category } = body // Validate input if (!name || !slug) { return NextResponse.json( { error: 'Channel name and slug are required' }, { status: 400 } ) } // Check if slug is already taken const existingChannel = await prisma.channel.findUnique({ where: { slug }, }) if (existingChannel) { return NextResponse.json( { error: 'This channel URL is already taken' }, { status: 400 } ) } // Find or create user by Supabase ID let dbUser = await prisma.user.findUnique({ where: { supabaseId: user.id }, }) if (!dbUser) { // Create user in database dbUser = await prisma.user.create({ data: { supabaseId: user.id, email: user.email!, username: user.email?.split('@')[0] || `user_${user.id.slice(0, 8)}`, displayName: user.user_metadata?.full_name || user.email?.split('@')[0], avatarUrl: user.user_metadata?.avatar_url, }, }) } // Create channel const channel = await prisma.channel.create({ data: { name, slug, description: bio, category: category || 'other', userId: dbUser.id, }, }) // Mark user as creator await prisma.user.update({ where: { id: dbUser.id }, data: { isCreator: true }, }) // Create initial channel stats await prisma.channelStats.create({ data: { channelId: channel.id, }, }) // Create user preferences if not exists const preferences = await prisma.userPreferences.findUnique({ where: { userId: dbUser.id }, }) if (!preferences) { await prisma.userPreferences.create({ data: { userId: dbUser.id, }, }) } return NextResponse.json( { channel, message: 'Channel created successfully', }, { status: 201 } ) } catch (error) { console.error('Error creating channel:', error) return NextResponse.json( { error: 'Failed to create channel' }, { status: 500 } ) } }