deckhearth/lib/database.js
Randall Stillwell e75a4a6649 Major redesign: Enhanced card display with particle effects, improved filters, and search functionality
- Redesigned card display with 2.5:3.5 aspect ratio and image-only view
- Added infinite scroll to replace pagination
- Implemented authentic card back placeholders for MTG, Pokemon, and Lorcana
- Added rarity-based particle effects with tiered intensity (mythic/enchanted/rare/uncommon)
- Enhanced hover details panel with structured card information
- Fixed search functionality with debouncing and Enter key support
- Improved filter system with working TCG, rarity, set, and price filters
- Added favorite system for cards in both hover and detail views
- Updated card detail page with comprehensive metadata and actions
- Fixed API filtering with proper Vercel Postgres implementation
- Added particle animations and rarity glow effects
- Improved overall UX with better visual hierarchy and interactions
2025-07-23 21:26:54 -05:00

47 lines
No EOL
1.4 KiB
JavaScript

import { neon } from '@neondatabase/serverless';
// Get the database URL from environment variables
const sql = neon(process.env.POSTGRES_URL);
// Database adapter that works with Neon
class DatabaseAdapter {
async query(sqlString, params = []) {
try {
// For Neon, we need to use tagged template literals
// This is a simplified approach - in production you'd want more robust parameter handling
let result;
if (params.length === 0) {
// No parameters
result = await sql`${sql.unsafe(sqlString)}`;
} else {
// With parameters - this is a simplified approach
// In production, you'd want proper parameter escaping
const escapedParams = params.map(param =>
typeof param === 'string' ? `'${param.replace(/'/g, "''")}'` : param
);
let query = sqlString;
for (let i = 0; i < escapedParams.length; i++) {
query = query.replace(`$${i + 1}`, escapedParams[i]);
}
result = await sql`${sql.unsafe(query)}`;
}
return {
rows: Array.isArray(result) ? result : [result],
rowCount: Array.isArray(result) ? result.length : 1
};
} catch (error) {
console.error('Database query error:', error);
throw error;
}
}
async raw(sqlString, params = []) {
return await this.query(sqlString, params);
}
}
export const db = new DatabaseAdapter();