import { sql } from '@vercel/postgres'; import jwt from 'jsonwebtoken'; const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key-change-in-production'; export default async function handler(req, res) { // Set CORS headers res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); if (req.method === 'OPTIONS') { res.status(200).end(); return; } if (req.method !== 'GET') { return res.status(405).json({ error: 'Method not allowed' }); } // Verify authentication const authHeader = req.headers.authorization; if (!authHeader || !authHeader.startsWith('Bearer ')) { return res.status(401).json({ error: 'Authentication required' }); } const token = authHeader.substring(7); try { jwt.verify(token, JWT_SECRET); } catch (error) { return res.status(401).json({ error: 'Invalid token' }); } const { q: query } = req.query; if (!query || query.length < 2) { return res.status(400).json({ error: 'Query must be at least 2 characters' }); } try { // Search users by email (partial match) const result = await sql` SELECT id, email, role, created_at FROM users WHERE email ILIKE ${`%${query}%`} ORDER BY email LIMIT 10 `; res.status(200).json({ users: result.rows }); } catch (error) { console.error('User search error:', error); res.status(500).json({ error: 'Internal server error' }); } }