Files

41 lines
1.2 KiB
TypeScript

import { NextResponse } from 'next/server';
import { assertChannelRoomAccess } from '@/lib/auth/room-access';
import {
consumeDice,
getRoom,
notifyRoom,
toPublicRoom,
} from '@/lib/rooms/store';
export const runtime = 'nodejs';
type Params = { params: Promise<{ roomId: string }> };
export async function POST(request: Request, { params }: Params) {
const { roomId } = await params;
const room = getRoom(roomId);
if (!room) {
return NextResponse.json({ error: '방을 찾을 수 없습니다.' }, { status: 404 });
}
const access = await assertChannelRoomAccess(room, request);
if (!access.ok) return access.response;
const body = (await request.json().catch(() => ({}))) as { count?: number };
const count = Math.max(1, Math.trunc(body.count ?? 1));
if (!room.settings.chzzkEnabled) {
return NextResponse.json({ room: toPublicRoom(room), consumed: 0 });
}
const updated = consumeDice(roomId, count);
if (!updated) {
return NextResponse.json(
{ error: '남은 주사위가 없습니다.', room: toPublicRoom(room) },
{ status: 409 },
);
}
notifyRoom(roomId);
return NextResponse.json({ room: toPublicRoom(updated), consumed: count });
}