diff --git a/server/utils/nocodb-events.ts b/server/utils/nocodb-events.ts index 5312514..3822e9b 100644 --- a/server/utils/nocodb-events.ts +++ b/server/utils/nocodb-events.ts @@ -62,13 +62,49 @@ export function createNocoDBEventsClient() { if (filters?.limit) queryParams.set('limit', filters.limit.toString()); if (filters?.offset) queryParams.set('offset', filters.offset.toString()); - // Build where clause for filtering using simple NocoDB v2 syntax - // Start with just the status filter to test basic functionality + // Build where clause for filtering using correct NocoDB v2 syntax + const whereConditions: string[] = []; + + if (filters?.start_date && filters?.end_date) { + // Date range filtering using btw (between) operator + whereConditions.push(`(start_datetime,btw,${filters.start_date},${filters.end_date})`); + } + + if (filters?.event_type) { + whereConditions.push(`(event_type,eq,${filters.event_type})`); + } + + if (filters?.visibility) { + whereConditions.push(`(visibility,eq,${filters.visibility})`); + } else if (filters?.user_role) { + // Role-based visibility filtering + if (filters.user_role === 'user') { + whereConditions.push(`(visibility,eq,public)`); + } else if (filters.user_role === 'board') { + // Board members can see public and board-only events + whereConditions.push(`~or((visibility,eq,public),(visibility,eq,board-only))`); + } + // Admin sees all events (no filter) + } + if (filters?.status) { - queryParams.set('where', `(status,eq,${filters.status})`); + whereConditions.push(`(status,eq,${filters.status})`); } else { - // Default to active events only - test this simple query first - queryParams.set('where', `(status,eq,active)`); + // Default to active events only + whereConditions.push(`(status,eq,active)`); + } + + if (filters?.search) { + // Search in title or description using like operator + whereConditions.push(`~or((title,like,%${filters.search}%),(description,like,%${filters.search}%))`); + } + + // Combine conditions with ~and if multiple conditions exist + if (whereConditions.length > 0) { + const whereClause = whereConditions.length === 1 + ? whereConditions[0] + : `~and(${whereConditions.join(',')})`; + queryParams.set('where', whereClause); } // Sort by start date