const events = await db.query.events.findMany({
where: (allEvents, { sql, and }) => {
if (!query && fromDate.getTime() !== fromDate.getTime()) return
// This works but it's not scalable :(
// if there's only a query, search by title
if (query && fromDate.getTime() !== fromDate.getTime()) {
return sql`${allEvents.title} ilike ${`%${query}%`}`
// if there's only a date, search by date
} else if (!query && fromDate.getTime() === fromDate.getTime()) {
return sql`${allEvents.dateTimeStart} >= ${formattedFromDate} AND ${allEvents.dateTimeStart} <= ${formattedToDate}`
} else {
// if there's both, filter by both
return and(
sql`${allEvents.title} ilike ${`%${query}%`}`,
sql`${allEvents.dateTimeStart} >= ${formattedFromDate} AND ${allEvents.dateTimeStart} <= ${formattedToDate}`
)
}
},
orderBy: [asc(schema.events.dateTimeStart)],
})
const events = await db.query.events.findMany({
where: (allEvents, { sql, and }) => {
if (!query && fromDate.getTime() !== fromDate.getTime()) return
// This works but it's not scalable :(
// if there's only a query, search by title
if (query && fromDate.getTime() !== fromDate.getTime()) {
return sql`${allEvents.title} ilike ${`%${query}%`}`
// if there's only a date, search by date
} else if (!query && fromDate.getTime() === fromDate.getTime()) {
return sql`${allEvents.dateTimeStart} >= ${formattedFromDate} AND ${allEvents.dateTimeStart} <= ${formattedToDate}`
} else {
// if there's both, filter by both
return and(
sql`${allEvents.title} ilike ${`%${query}%`}`,
sql`${allEvents.dateTimeStart} >= ${formattedFromDate} AND ${allEvents.dateTimeStart} <= ${formattedToDate}`
)
}
},
orderBy: [asc(schema.events.dateTimeStart)],
})