From dd70f9f9d4671c236e94646214b45fe1f72c3578 Mon Sep 17 00:00:00 2001 From: Rafi Arrafif Date: Wed, 25 Mar 2026 17:49:16 +0700 Subject: [PATCH 1/2] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor:=20restructur?= =?UTF-8?q?e=20banner=20select=20payload?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GET/findAllActiveHeroBanner.repository.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/modules/heroBanner/repositories/GET/findAllActiveHeroBanner.repository.ts b/src/modules/heroBanner/repositories/GET/findAllActiveHeroBanner.repository.ts index e5cc8b1..9afe52a 100644 --- a/src/modules/heroBanner/repositories/GET/findAllActiveHeroBanner.repository.ts +++ b/src/modules/heroBanner/repositories/GET/findAllActiveHeroBanner.repository.ts @@ -20,6 +20,25 @@ export const findAllActiveHeroBannerRepository = async () => { startDate: "asc", }, ], + select: { + orderPriority: true, + imageUrl: true, + media: { + select: { + id: true, + title: true, + slug: true, + pictureLarge: true, + synopsis: true, + genres: { + select: { + slug: true, + name: true, + }, + }, + }, + }, + }, }); } catch (error) { throw new AppError(500, "Failed to fetch active hero banners", error); -- 2.49.0 From 4001aec6ef168a52e383fa59b164c771ceff76d5 Mon Sep 17 00:00:00 2001 From: Rafi Arrafif Date: Wed, 25 Mar 2026 17:55:48 +0700 Subject: [PATCH 2/2] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor:=20refine=20p?= =?UTF-8?q?ayload=20before=20sending=20to=20frontend?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/getActiveHeroBanner.service.ts | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/modules/heroBanner/services/getActiveHeroBanner.service.ts b/src/modules/heroBanner/services/getActiveHeroBanner.service.ts index 47ec2cf..e10d115 100644 --- a/src/modules/heroBanner/services/getActiveHeroBanner.service.ts +++ b/src/modules/heroBanner/services/getActiveHeroBanner.service.ts @@ -8,26 +8,31 @@ import { findAllActiveHeroBannerRepository } from "../repositories/GET/findAllAc export const getActiveHeroBannerService = async () => { try { // Check if Hero Banner is enabled in system preferences - const isHeroBannerEnabled = await findSystemPreferenceService( - "HERO_BANNER_ENABLED", - "boolean", - ); - if (!isHeroBannerEnabled) - throw new AppError(403, "Hero Banner is disabled"); + const isHeroBannerEnabled = await findSystemPreferenceService("HERO_BANNER_ENABLED", "boolean"); + if (!isHeroBannerEnabled) throw new AppError(403, "Hero Banner is disabled"); // Try to get active banners from Redis cache - const cachedBanners = await redis.get( - `${redisKey.filter((key) => key.name === "HERO_BANNER")[0].key}`, - ); + 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(); + const constructedBanners = activeBanners.map((banner) => ({ + id: banner.media.id, + title: banner.media.title, + slug: banner.media.slug, + imageUrl: banner.imageUrl || banner.media.pictureLarge, + synopsis: banner.media.synopsis, + genres: banner.media.genres.map((genre) => ({ + slug: genre.slug, + name: genre.name, + })), + })); await redis.set( `${redisKey.filter((key) => key.name === "HERO_BANNER")[0].key}`, - JSON.stringify(activeBanners), + JSON.stringify(constructedBanners), ); - return activeBanners; + return constructedBanners; } catch (error) { ErrorForwarder(error); } -- 2.49.0