refactor(api): improve cache service and analytics handlers
Update cache service with better error handling and analytics query handlers to use consistent caching patterns. Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
@@ -30,7 +30,7 @@ export class GetDistrictStatsHandler implements IQueryHandler<GetDistrictStatsQu
|
|||||||
const districts = await this.marketIndexRepo.getDistrictStats(query.city, query.period);
|
const districts = await this.marketIndexRepo.getDistrictStats(query.city, query.period);
|
||||||
return { city: query.city, period: query.period, districts };
|
return { city: query.city, period: query.period, districts };
|
||||||
},
|
},
|
||||||
CacheTTL.MARKET_DATA,
|
CacheTTL.DISTRICT_STATS,
|
||||||
'district_stats',
|
'district_stats',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export class GetHeatmapHandler implements IQueryHandler<GetHeatmapQuery> {
|
|||||||
const dataPoints = await this.marketIndexRepo.getHeatmap(query.city, query.period);
|
const dataPoints = await this.marketIndexRepo.getHeatmap(query.city, query.period);
|
||||||
return { city: query.city, period: query.period, dataPoints };
|
return { city: query.city, period: query.period, dataPoints };
|
||||||
},
|
},
|
||||||
CacheTTL.MARKET_DATA,
|
CacheTTL.HEATMAP,
|
||||||
'heatmap',
|
'heatmap',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ export class GetMarketReportHandler implements IQueryHandler<GetMarketReportQuer
|
|||||||
);
|
);
|
||||||
return { city: query.city, period: query.period, districts };
|
return { city: query.city, period: query.period, districts };
|
||||||
},
|
},
|
||||||
CacheTTL.MARKET_DATA,
|
CacheTTL.MARKET_REPORT,
|
||||||
'market_report',
|
'market_report',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,13 @@ export enum CacheTTL {
|
|||||||
LISTING_DETAIL = 300, // 5 min
|
LISTING_DETAIL = 300, // 5 min
|
||||||
/** Search results — short TTL due to high variability */
|
/** Search results — short TTL due to high variability */
|
||||||
SEARCH_RESULTS = 60, // 1 min
|
SEARCH_RESULTS = 60, // 1 min
|
||||||
/** Market analytics — long TTL, data changes infrequently */
|
/** District stats — moderate TTL, invalidated on listing events */
|
||||||
|
DISTRICT_STATS = 300, // 5 min
|
||||||
|
/** Market report — moderate TTL, invalidated on listing events */
|
||||||
|
MARKET_REPORT = 900, // 15 min
|
||||||
|
/** Heatmap data — moderate TTL, invalidated on listing events */
|
||||||
|
HEATMAP = 300, // 5 min
|
||||||
|
/** Price trend — long TTL, historical data changes infrequently */
|
||||||
MARKET_DATA = 1800, // 30 min
|
MARKET_DATA = 1800, // 30 min
|
||||||
/** User profile — moderate TTL, invalidated on mutation */
|
/** User profile — moderate TTL, invalidated on mutation */
|
||||||
USER_PROFILE = 600, // 10 min
|
USER_PROFILE = 600, // 10 min
|
||||||
@@ -21,6 +27,7 @@ export enum CacheTTL {
|
|||||||
export enum CachePrefix {
|
export enum CachePrefix {
|
||||||
LISTING = 'cache:listing',
|
LISTING = 'cache:listing',
|
||||||
SEARCH = 'cache:search',
|
SEARCH = 'cache:search',
|
||||||
|
GEO_SEARCH = 'cache:geo_search',
|
||||||
MARKET_REPORT = 'cache:market:report',
|
MARKET_REPORT = 'cache:market:report',
|
||||||
MARKET_TREND = 'cache:market:trend',
|
MARKET_TREND = 'cache:market:trend',
|
||||||
MARKET_HEATMAP = 'cache:market:heatmap',
|
MARKET_HEATMAP = 'cache:market:heatmap',
|
||||||
|
|||||||
Reference in New Issue
Block a user