Files
la-huasca-ts/src/app/api/amenities/route.ts
T

83 lines
2.8 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { db } from '@/lib/db';
export const dynamic = 'force-dynamic';
export async function GET() {
try {
const { rows } = await db.query(
'SELECT id, name, icon_svg, sort_order FROM room_amenities ORDER BY sort_order, name'
);
return NextResponse.json({ data: rows });
} catch (error) {
console.error('Failed to fetch amenities:', error);
return NextResponse.json({ error: 'Failed to fetch amenities' }, { status: 500 });
}
}
export async function POST(request: NextRequest) {
try {
const { name, icon_svg, sort_order } = await request.json();
if (!name || !icon_svg) {
return NextResponse.json({ error: 'Name and icon_svg are required' }, { status: 400 });
}
const { rows } = await db.query(
'INSERT INTO room_amenities (name, icon_svg, sort_order) VALUES ($1, $2, $3) RETURNING id, name, icon_svg, sort_order',
[name, icon_svg, sort_order || 0]
);
return NextResponse.json({ data: rows[0] });
} catch (error: any) {
console.error('Failed to create amenity:', error);
if (error.code === '23505') {
return NextResponse.json({ error: 'Amenity with this name already exists' }, { status: 409 });
}
return NextResponse.json({ error: 'Failed to create amenity' }, { status: 500 });
}
}
export async function PUT(request: NextRequest) {
try {
const { id, name, icon_svg, sort_order } = await request.json();
if (!id) {
return NextResponse.json({ error: 'ID is required' }, { status: 400 });
}
const { rows } = await db.query(
'UPDATE room_amenities SET name = $1, icon_svg = $2, sort_order = $3 WHERE id = $4 RETURNING id, name, icon_svg, sort_order',
[name, icon_svg, sort_order || 0, id]
);
if (rows.length === 0) {
return NextResponse.json({ error: 'Amenity not found' }, { status: 404 });
}
return NextResponse.json({ data: rows[0] });
} catch (error: any) {
console.error('Failed to update amenity:', error);
if (error.code === '23505') {
return NextResponse.json({ error: 'Amenity with this name already exists' }, { status: 409 });
}
return NextResponse.json({ error: 'Failed to update amenity' }, { status: 500 });
}
}
export async function DELETE(request: NextRequest) {
try {
const { searchParams } = new URL(request.url);
const id = searchParams.get('id');
if (!id) {
return NextResponse.json({ error: 'ID is required' }, { status: 400 });
}
await db.query('DELETE FROM room_amenities WHERE id = $1', [id]);
return NextResponse.json({ success: true });
} catch (error) {
console.error('Failed to delete amenity:', error);
return NextResponse.json({ error: 'Failed to delete amenity' }, { status: 500 });
}
}