fix: critical boolean compatibility for PostgreSQL/SQLite
Fixed boolean value handling differences between databases: - SQLite stores booleans as 0/1, PostgreSQL as true/false - Add formatBoolean() calls to critical queries that were failing Files fixed: - adminEvents.js: Fixed status filters and archive queries - adminDashboard.js: Fixed active/archived event counts - expirationChecker.js: Fixed expiration checking queries - dbCompat.js: Updated to avoid circular dependency Added migration 024 to: - Enable foreign keys for SQLite (PRAGMA foreign_keys = ON) - Document boolean compatibility requirements This fixes queries returning 0 results in SQLite when checking boolean columns like is_active, is_archived. Critical for proper event management and expiration handling. Note: 23 more boolean comparisons remain to be fixed in other files.
This commit is contained in:
@@ -11,6 +11,7 @@ const { archiveEvent } = require('../services/archiveService');
|
||||
const { escapeLikePattern } = require('../utils/sqlSecurity');
|
||||
const { formatDate } = require('../utils/dateFormatter');
|
||||
const { validatePasswordInContext, getBcryptRounds } = require('../utils/passwordValidation');
|
||||
const { formatBoolean } = require('../utils/dbCompat');
|
||||
|
||||
// Create new event
|
||||
router.post('/', adminAuth, [
|
||||
@@ -183,17 +184,17 @@ router.get('/', adminAuth, async (req, res) => {
|
||||
|
||||
// Apply status filter
|
||||
if (status === 'active') {
|
||||
query = query.where('is_active', true).where('is_archived', false);
|
||||
query = query.where('is_active', formatBoolean(true)).where('is_archived', formatBoolean(false));
|
||||
} else if (status === 'archived') {
|
||||
query = query.where('is_archived', true);
|
||||
query = query.where('is_archived', formatBoolean(true));
|
||||
} else if (status === 'inactive') {
|
||||
query = query.where('is_active', false).where('is_archived', false);
|
||||
query = query.where('is_active', formatBoolean(false)).where('is_archived', formatBoolean(false));
|
||||
} else if (status === 'expiring') {
|
||||
const sevenDaysFromNow = new Date();
|
||||
sevenDaysFromNow.setDate(sevenDaysFromNow.getDate() + 7);
|
||||
query = query
|
||||
.where('is_active', true)
|
||||
.where('is_archived', false)
|
||||
.where('is_active', formatBoolean(true))
|
||||
.where('is_archived', formatBoolean(false))
|
||||
.where('expires_at', '<=', sevenDaysFromNow.toISOString())
|
||||
.where('expires_at', '>', new Date().toISOString());
|
||||
}
|
||||
@@ -554,7 +555,7 @@ router.post('/bulk-archive', adminAuth, [
|
||||
// Get all events to archive
|
||||
const events = await db('events')
|
||||
.whereIn('id', eventIds)
|
||||
.where('is_archived', false);
|
||||
.where('is_archived', formatBoolean(false));
|
||||
|
||||
if (events.length === 0) {
|
||||
return res.status(400).json({ error: 'No valid events found to archive' });
|
||||
|
||||
Reference in New Issue
Block a user