import { NextResponse } from 'next/server' import { bitqueryService } from '../../../../lib/bitquery-service' export async function POST(request) { try { const body = await request.json() const { symbol, side, amount, price, orderType = 'market' } = body console.log('🔄 Execute trade request:', { symbol, side, amount, price, orderType }) // Validate inputs if (!symbol || !side || !amount) { return NextResponse.json( { success: false, error: 'Missing required fields: symbol, side, amount' }, { status: 400 } ) } if (!['BUY', 'SELL'].includes(side.toUpperCase())) { return NextResponse.json( { success: false, error: 'Invalid side. Must be BUY or SELL' }, { status: 400 } ) } if (amount <= 0) { return NextResponse.json( { success: false, error: 'Amount must be greater than 0' }, { status: 400 } ) } // Check if Bitquery service is configured if (!bitqueryService.isConfigured()) { return NextResponse.json( { success: false, error: 'Bitquery service not configured' }, { status: 503 } ) } // Execute the trade via Bitquery const tradeResult = await bitqueryService.executeTrade({ symbol: symbol.toUpperCase(), side: side.toUpperCase(), amount: parseFloat(amount), price: price ? parseFloat(price) : undefined }) if (!tradeResult.success) { return NextResponse.json( { success: false, error: tradeResult.error || 'Trade execution failed' }, { status: 500 } ) } // Log the successful trade console.log('✅ Trade executed successfully:', tradeResult) // Return trade result return NextResponse.json({ success: true, trade: { txId: tradeResult.txId, symbol: symbol.toUpperCase(), side: side.toUpperCase(), amount: tradeResult.executedAmount, executedPrice: tradeResult.executedPrice, timestamp: Date.now(), orderType, status: 'FILLED' }, message: `${side.toUpperCase()} order for ${amount} ${symbol} executed at $${tradeResult.executedPrice?.toFixed(4)}` }) } catch (error) { console.error('❌ Trade execution API error:', error) return NextResponse.json( { success: false, error: 'Internal server error', message: error.message }, { status: 500 } ) } } export async function GET() { return NextResponse.json({ message: 'Trading Execute API - use POST method to execute trades', endpoints: { POST: '/api/trading/execute - Execute a trade via Bitquery' }, parameters: { symbol: 'string (required) - Trading symbol (e.g., SOL, BTC, ETH)', side: 'string (required) - BUY or SELL', amount: 'number (required) - Amount to trade', price: 'number (optional) - Limit price (market order if not provided)', orderType: 'string (optional) - market or limit (default: market)' } }) }