@@ -2,7 +2,8 @@ import type { Event } from '@prisma/client';
22
33import { prisma } from '../prisma.js' ;
44import { NotFoundError } from '../utils/AppError.js' ;
5- import { getAllEateriesData } from '../utils/cache.js' ;
5+ import { getAllEateriesData , refreshCacheFromDB } from '../utils/cache.js' ;
6+ import type { EateryWithEvents } from '../utils/cache.js' ;
67
78export const getAllEateries = async ( days : number = 0 ) => {
89 // Calculate date range for filtering events
@@ -22,36 +23,26 @@ export const getAllEateries = async (days: number = 0) => {
2223 const cachedEateries = getAllEateriesData ( ) ;
2324
2425 // Filter events to only include those on the specified day
25- const filteredEateries = cachedEateries . map ( ( eatery ) => ( {
26- ...eatery ,
27- events : eatery . events . filter ( ( event : Event ) => {
28- const eventStart = new Date ( event . startTimestamp ) ;
29- const eventEnd = new Date ( event . endTimestamp ) ;
30-
31- // Include event if it overlaps with the target day
32- return eventStart <= endOfDay && eventEnd >= startOfDay ;
33- } ) ,
34- } ) ) ;
26+ const filteredEateries = filterEateries (
27+ cachedEateries ,
28+ startOfDay ,
29+ endOfDay ,
30+ ) ;
3531
3632 return filteredEateries ;
3733 } catch {
3834 // If cache is cold (should never happen), fall back to database
39- const eateries = await prisma . eatery . findMany ( {
40- include : {
41- events : {
42- where : {
43- startTimestamp : {
44- lte : endOfDay ,
45- } ,
46- endTimestamp : {
47- gte : startOfDay ,
48- } ,
49- } ,
50- } ,
51- } ,
52- } ) ;
35+ refreshCacheFromDB ( ) ;
36+ const cachedEateries = getAllEateriesData ( ) ;
37+
38+ // Filter events to only include those on the specified day
39+ const filteredEateries = filterEateries (
40+ cachedEateries ,
41+ startOfDay ,
42+ endOfDay ,
43+ ) ;
5344
54- return eateries ;
45+ return filteredEateries ;
5546 }
5647} ;
5748
@@ -103,3 +94,21 @@ export const getEateryById = async (eateryId: number) => {
10394 return eatery ;
10495 }
10596} ;
97+
98+ function filterEateries (
99+ cachedEateries : EateryWithEvents [ ] ,
100+ startOfDay : Date ,
101+ endOfDay : Date ,
102+ ) {
103+ const filteredEateries = cachedEateries . map ( ( eatery ) => ( {
104+ ...eatery ,
105+ events : eatery . events . filter ( ( event : Event ) => {
106+ const eventStart = new Date ( event . startTimestamp ) ;
107+ const eventEnd = new Date ( event . endTimestamp ) ;
108+
109+ // Include event if it overlaps with the target day
110+ return eventStart <= endOfDay && eventEnd >= startOfDay ;
111+ } ) ,
112+ } ) ) ;
113+ return filteredEateries ;
114+ }
0 commit comments