Files
drinkmarble/app/api/rooms/[roomId]/simulate-donation/route.ts

51 lines
1.4 KiB
TypeScript

import { NextResponse } from 'next/server';
import {
addDiceFromDonation,
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 body = (await request.json().catch(() => ({}))) as {
payAmount?: number;
donatorNickname?: string;
};
const payAmount = Number(body.payAmount ?? 0);
if (!Number.isFinite(payAmount) || payAmount <= 0) {
return NextResponse.json({ error: 'payAmount가 필요합니다.' }, { status: 400 });
}
if (!room.settings.chzzkEnabled) {
return NextResponse.json(
{ error: '연동 없는 룸에서는 후원 시뮬레이션을 사용할 수 없습니다.' },
{ status: 400 },
);
}
const result = addDiceFromDonation(roomId, {
payAmount,
donatorNickname: body.donatorNickname || '테스트후원',
donationText: 'simulate',
simulated: true,
});
if (!result) {
return NextResponse.json({ error: '처리 실패' }, { status: 500 });
}
notifyRoom(roomId);
return NextResponse.json({
room: toPublicRoom(result.room),
diceAdded: result.diceAdded,
});
}