feat: add like/unlike toggle API for rooms

This commit is contained in:
2026-06-28 13:40:52 -05:00
parent fdca926468
commit f6b76eb396
+54
View File
@@ -0,0 +1,54 @@
import { NextRequest, NextResponse } from 'next/server';
import { db } from '@/lib/db';
export async function GET(request: NextRequest, { params }: { params: { id: string } }) {
try {
const roomId = parseInt(params.id, 10);
if (isNaN(roomId)) {
return NextResponse.json({ error: 'Invalid room ID' }, { status: 400 });
}
const [countResult, userLikeResult] = await Promise.all([
db.query('SELECT COUNT(*) AS count FROM room_likes WHERE room_id = $1', [roomId]),
db.query('SELECT 1 FROM room_likes WHERE room_id = $1 AND user_id = $2', [roomId, 1]),
]);
return NextResponse.json({
count: parseInt(countResult.rows[0].count, 10),
user_liked: userLikeResult.rows.length > 0,
});
} catch (err: any) {
// Table may not exist yet — return safe defaults
return NextResponse.json({ count: 0, user_liked: false });
}
}
export async function POST(request: NextRequest, { params }: { params: { id: string } }) {
try {
const roomId = parseInt(params.id, 10);
if (isNaN(roomId)) {
return NextResponse.json({ error: 'Invalid room ID' }, { status: 400 });
}
// TODO: get user_id from session/auth instead of hardcoded
const userId = 1;
// Toggle: if already liked, unlike; otherwise like
const existing = await db.query(
'SELECT id FROM room_likes WHERE room_id = $1 AND user_id = $2',
[roomId, userId]
);
if (existing.rows.length > 0) {
await db.query('DELETE FROM room_likes WHERE id = $1', [existing.rows[0].id]);
} else {
await db.query('INSERT INTO room_likes (room_id, user_id) VALUES ($1, $2)', [roomId, userId]);
}
const countResult = await db.query('SELECT COUNT(*) AS count FROM room_likes WHERE room_id = $1', [roomId]);
return NextResponse.json({ count: parseInt(countResult.rows[0].count, 10) });
} catch (err: any) {
return NextResponse.json({ error: err.message || 'Failed to toggle like' }, { status: 500 });
}
}