add library management

This commit is contained in:
2026-03-25 16:40:01 -04:00
parent ff3cfe7ec3
commit 90528c4768
9 changed files with 552 additions and 53 deletions

View File

@@ -0,0 +1,17 @@
import { NextRequest, NextResponse } from 'next/server'
import { getLibrary, removeLibrary } from '@/lib/libraries'
export async function DELETE(
_request: NextRequest,
{ params }: { params: Promise<{ id: string }> }
) {
const { id } = await params
const library = getLibrary(id)
if (!library) {
return NextResponse.json({ error: 'Library not found' }, { status: 404 })
}
removeLibrary(id)
return new NextResponse(null, { status: 204 })
}

View File

@@ -1,12 +1,41 @@
import { NextResponse } from 'next/server'
import { getLibraries } from '@/lib/libraries'
import { NextRequest, NextResponse } from 'next/server'
import { getLibraries, addLibrary } from '@/lib/libraries'
import type { LibraryType } from '@/types'
export function GET() {
try {
const libraries = getLibraries()
return NextResponse.json(libraries)
} catch (err) {
console.error('Failed to read libraries.json', err)
console.error('Failed to read libraries', err)
return NextResponse.json({ error: 'Failed to load libraries' }, { status: 500 })
}
}
export async function POST(request: NextRequest) {
let body: { name?: string; path?: string; type?: string }
try {
body = await request.json()
} catch {
return NextResponse.json({ error: 'Invalid JSON body' }, { status: 400 })
}
const { name, path, type } = body
if (!name || !path || !type) {
return NextResponse.json({ error: 'name, path, and type are required' }, { status: 400 })
}
const validTypes: LibraryType[] = ['games', 'mixed']
if (!validTypes.includes(type as LibraryType)) {
return NextResponse.json({ error: `type must be one of: ${validTypes.join(', ')}` }, { status: 400 })
}
try {
const library = addLibrary(name, path, type as LibraryType)
return NextResponse.json(library, { status: 201 })
} catch (err) {
const message = err instanceof Error ? err.message : 'Failed to add library'
return NextResponse.json({ error: message }, { status: 400 })
}
}