deckhearth/api/v1/cards/[id].ts

90 lines
2.1 KiB
TypeScript
Raw Normal View History

import { NextRequest, NextResponse } from 'next/server'
import cardsData from '../../../src/data/cards.json'
interface Card {
id: number
name: string
set_name?: string
set_code?: string
card_number?: string
rarity?: string
game: string
mana_cost?: string
cmc?: number
card_type?: string
colors?: string[]
oracle_text?: string
flavor_text?: string
power?: string
toughness?: string
artist?: string
image_url?: string
stock_image_url?: string
artwork_crop_coords?: any
current_price?: number
market_price?: number
verified: boolean
created_at?: string
updated_at?: string
}
export default async function handler(req: NextRequest) {
// Enable CORS
const headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
}
if (req.method === 'OPTIONS') {
return new NextResponse(null, { status: 200, headers })
}
try {
const url = new URL(req.url)
const pathSegments = url.pathname.split('/')
const cardId = parseInt(pathSegments[pathSegments.length - 1])
if (isNaN(cardId)) {
return new NextResponse(JSON.stringify({ error: 'Invalid card ID' }), {
status: 400,
headers: {
...headers,
'Content-Type': 'application/json',
},
})
}
const cards: Card[] = cardsData as Card[]
const card = cards.find(c => c.id === cardId)
if (!card) {
return new NextResponse(JSON.stringify({ error: 'Card not found' }), {
status: 404,
headers: {
...headers,
'Content-Type': 'application/json',
},
})
}
return new NextResponse(JSON.stringify(card), {
status: 200,
headers: {
...headers,
'Content-Type': 'application/json',
},
})
} catch (error) {
console.error('API Error:', error)
return new NextResponse(JSON.stringify({ error: 'Internal server error' }), {
status: 500,
headers: {
...headers,
'Content-Type': 'application/json',
},
})
}
}