From 6ffa087e91309c680bdac16e30b054bf3999ea45 Mon Sep 17 00:00:00 2001 From: Rafi Arrafif Date: Mon, 2 Mar 2026 22:32:05 +0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20add=20endpoint=20to=20get?= =?UTF-8?q?=20active=20banners?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../getActiveHeroBanner.controller.ts | 18 ++++++++++++++++++ src/modules/heroBanner/index.ts | 7 +++++++ .../GET/findAllActiveHeroBanner.repository.ts | 19 +++++++++++++++++++ .../services/getActiveHeroBanner.service.ts | 10 ++++++++++ 4 files changed, 54 insertions(+) create mode 100644 src/modules/heroBanner/controllers/getActiveHeroBanner.controller.ts create mode 100644 src/modules/heroBanner/index.ts create mode 100644 src/modules/heroBanner/repositories/GET/findAllActiveHeroBanner.repository.ts create mode 100644 src/modules/heroBanner/services/getActiveHeroBanner.service.ts diff --git a/src/modules/heroBanner/controllers/getActiveHeroBanner.controller.ts b/src/modules/heroBanner/controllers/getActiveHeroBanner.controller.ts new file mode 100644 index 0000000..65c454d --- /dev/null +++ b/src/modules/heroBanner/controllers/getActiveHeroBanner.controller.ts @@ -0,0 +1,18 @@ +import { Context } from "elysia"; +import { mainErrorHandler } from "../../../helpers/error/handler"; +import { returnReadResponse } from "../../../helpers/callback/httpResponse"; +import { getActiveHeroBannerService } from "../services/getActiveHeroBanner.service"; + +export const getActiveHeroBannerController = async (ctx: Context) => { + try { + const response = await getActiveHeroBannerService(); + return returnReadResponse( + ctx.set, + 200, + "Active hero banners fetched successfully", + response, + ); + } catch (error) { + return mainErrorHandler(ctx.set, error); + } +}; diff --git a/src/modules/heroBanner/index.ts b/src/modules/heroBanner/index.ts new file mode 100644 index 0000000..5ee94c1 --- /dev/null +++ b/src/modules/heroBanner/index.ts @@ -0,0 +1,7 @@ +import Elysia from "elysia"; +import { getActiveHeroBannerController } from "./controllers/getActiveHeroBanner.controller"; + +export const heroBannerModule = new Elysia({ prefix: "/hero-banner" }).get( + "/", + getActiveHeroBannerController, +); diff --git a/src/modules/heroBanner/repositories/GET/findAllActiveHeroBanner.repository.ts b/src/modules/heroBanner/repositories/GET/findAllActiveHeroBanner.repository.ts new file mode 100644 index 0000000..6b899d9 --- /dev/null +++ b/src/modules/heroBanner/repositories/GET/findAllActiveHeroBanner.repository.ts @@ -0,0 +1,19 @@ +import { AppError } from "../../../../helpers/error/instances/app"; +import { prisma } from "../../../../utils/databases/prisma/connection"; + +export const findAllActiveHeroBannerRepository = async () => { + try { + return await prisma.heroBanner.findMany({ + where: { + startDate: { + lte: new Date(), + }, + endDate: { + gte: new Date(), + }, + }, + }); + } catch (error) { + throw new AppError(500, "Failed to fetch active hero banners", error); + } +}; diff --git a/src/modules/heroBanner/services/getActiveHeroBanner.service.ts b/src/modules/heroBanner/services/getActiveHeroBanner.service.ts new file mode 100644 index 0000000..b6093c9 --- /dev/null +++ b/src/modules/heroBanner/services/getActiveHeroBanner.service.ts @@ -0,0 +1,10 @@ +import { ErrorForwarder } from "../../../helpers/error/instances/forwarder"; +import { findAllActiveHeroBannerRepository } from "../repositories/GET/findAllActiveHeroBanner.repository"; + +export const getActiveHeroBannerService = async () => { + try { + return await findAllActiveHeroBannerRepository(); + } catch (error) { + ErrorForwarder(error); + } +};