Merge pull request '⚡ perf: cache banners with Redis' (#23) from perf into main
All checks were successful
Sync to GitHub / sync (push) Successful in 8s
All checks were successful
Sync to GitHub / sync (push) Successful in 8s
Reviewed-on: #23
This commit is contained in:
7
src/config/redis/key.ts
Normal file
7
src/config/redis/key.ts
Normal file
@ -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`,
|
||||||
|
},
|
||||||
|
];
|
||||||
@ -1,10 +1,13 @@
|
|||||||
|
import { redisKey } from "../../../config/redis/key";
|
||||||
import { AppError } from "../../../helpers/error/instances/app";
|
import { AppError } from "../../../helpers/error/instances/app";
|
||||||
import { ErrorForwarder } from "../../../helpers/error/instances/forwarder";
|
import { ErrorForwarder } from "../../../helpers/error/instances/forwarder";
|
||||||
|
import { redis } from "../../../utils/databases/redis/connection";
|
||||||
import { findSystemPreferenceService } from "../../systemPreference/services/internal/findSystemPreference.service";
|
import { findSystemPreferenceService } from "../../systemPreference/services/internal/findSystemPreference.service";
|
||||||
import { findAllActiveHeroBannerRepository } from "../repositories/GET/findAllActiveHeroBanner.repository";
|
import { findAllActiveHeroBannerRepository } from "../repositories/GET/findAllActiveHeroBanner.repository";
|
||||||
|
|
||||||
export const getActiveHeroBannerService = async () => {
|
export const getActiveHeroBannerService = async () => {
|
||||||
try {
|
try {
|
||||||
|
// Check if Hero Banner is enabled in system preferences
|
||||||
const isHeroBannerEnabled = await findSystemPreferenceService(
|
const isHeroBannerEnabled = await findSystemPreferenceService(
|
||||||
"HERO_BANNER_ENABLED",
|
"HERO_BANNER_ENABLED",
|
||||||
"boolean",
|
"boolean",
|
||||||
@ -12,7 +15,19 @@ export const getActiveHeroBannerService = async () => {
|
|||||||
if (!isHeroBannerEnabled)
|
if (!isHeroBannerEnabled)
|
||||||
throw new AppError(403, "Hero Banner is disabled");
|
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) {
|
} catch (error) {
|
||||||
ErrorForwarder(error);
|
ErrorForwarder(error);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user