diff --git a/src/config/redis/key.ts b/src/config/redis/key.ts new file mode 100644 index 0000000..52ad1c9 --- /dev/null +++ b/src/config/redis/key.ts @@ -0,0 +1,7 @@ +export const redisKey = [ + { + name: "HERO_BANNER", + description: "Key for caching active hero banner data", + key: `${process.env.APP_NAME}:system:banner`, + }, +]; diff --git a/src/modules/heroBanner/services/getActiveHeroBanner.service.ts b/src/modules/heroBanner/services/getActiveHeroBanner.service.ts index 475c210..47ec2cf 100644 --- a/src/modules/heroBanner/services/getActiveHeroBanner.service.ts +++ b/src/modules/heroBanner/services/getActiveHeroBanner.service.ts @@ -1,10 +1,13 @@ +import { redisKey } from "../../../config/redis/key"; import { AppError } from "../../../helpers/error/instances/app"; import { ErrorForwarder } from "../../../helpers/error/instances/forwarder"; +import { redis } from "../../../utils/databases/redis/connection"; import { findSystemPreferenceService } from "../../systemPreference/services/internal/findSystemPreference.service"; import { findAllActiveHeroBannerRepository } from "../repositories/GET/findAllActiveHeroBanner.repository"; export const getActiveHeroBannerService = async () => { try { + // Check if Hero Banner is enabled in system preferences const isHeroBannerEnabled = await findSystemPreferenceService( "HERO_BANNER_ENABLED", "boolean", @@ -12,7 +15,19 @@ export const getActiveHeroBannerService = async () => { if (!isHeroBannerEnabled) throw new AppError(403, "Hero Banner is disabled"); - return await findAllActiveHeroBannerRepository(); + // Try to get active banners from Redis cache + const cachedBanners = await redis.get( + `${redisKey.filter((key) => key.name === "HERO_BANNER")[0].key}`, + ); + if (cachedBanners) return JSON.parse(cachedBanners); + + // If not in cache, fetch from database and cache the result + const activeBanners = await findAllActiveHeroBannerRepository(); + await redis.set( + `${redisKey.filter((key) => key.name === "HERO_BANNER")[0].key}`, + JSON.stringify(activeBanners), + ); + return activeBanners; } catch (error) { ErrorForwarder(error); }