Letschat / src /app /api /codes /enter /route.ts
HonzaH's picture
Upload 194 files
dac0489 verified
Raw History Blame Contribute Delete
1.86 kB
import { NextRequest, NextResponse } from 'next/server'
import { isSupabaseConfigured } from 'lib/supabase/server'
import { markCodeAsUsed } from 'lib/roomService'
import { generateSessionHash, generateCode } from 'lib/codes'
import { getCodeById, insertCode, updateCode } from 'lib/persistence'
import { logEvent } from 'lib/logger'
import { getAppSession } from 'lib/appSession'
export async function POST(request: NextRequest) {
try {
const body = await request.json()
const { codeId, userAgent } = body
if (!isSupabaseConfigured()) {
return NextResponse.json(
{ error: 'Supabase not configured (missing NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY)' },
{ status: 503 }
)
}
const session = await getAppSession()
const detectedUserId = session?.userId
const codeData = await getCodeById(codeId)
if (!codeData) {
return NextResponse.json({ error: 'Kód nenalezen' }, { status: 404 })
}
let roomId = codeData.room_id
if (!roomId) {
return NextResponse.json({ error: 'Místnost neexistuje' }, { status: 404 })
}
if (codeData.used !== 1) {
const sessionHash = detectedUserId ? undefined : generateSessionHash(codeData.code, userAgent || '')
await markCodeAsUsed(codeData.id, detectedUserId, sessionHash)
}
await logEvent({
module: 'codes',
operation: 'enter',
data: { codeId: codeData.id, roomId },
ip: (request as any).headers?.get?.('x-forwarded-for') || null,
userAgent: (request as any).headers?.get?.('user-agent') || null
})
return NextResponse.json({
roomId,
codeId: codeData.id,
success: true
})
} catch (error) {
console.error('Code entry error:', error)
return NextResponse.json({ error: 'Vnitřní chyba serveru' }, { status: 500 })
}
}