From 4b9ade64c37ce38cf33b0796b12ff3cbca0bb3fa Mon Sep 17 00:00:00 2001 From: Vivy Bot Date: Tue, 3 Feb 2026 15:25:15 +0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20add=20get=20all=20media=20e?= =?UTF-8?q?ndpoint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/getAllMedia.controller.ts | 20 +++++++++++++++++++ src/modules/media/index.ts | 3 ++- .../GET/getAllMedia.repository.ts | 17 ++++++++++++++++ .../services/http/getAllMedia.service.ts | 15 ++++++++++++++ 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/modules/media/controllers/getAllMedia.controller.ts create mode 100644 src/modules/media/repositories/GET/getAllMedia.repository.ts create mode 100644 src/modules/media/services/http/getAllMedia.service.ts diff --git a/src/modules/media/controllers/getAllMedia.controller.ts b/src/modules/media/controllers/getAllMedia.controller.ts new file mode 100644 index 0000000..fdadf8c --- /dev/null +++ b/src/modules/media/controllers/getAllMedia.controller.ts @@ -0,0 +1,20 @@ +import { Context } from "elysia"; +import { mainErrorHandler } from "../../../helpers/error/handler"; +import { getAllMediaService } from "../services/http/getAllMedia.service"; +import { returnReadResponse } from "../../../helpers/callback/httpResponse"; + +export const getAllMediaController = async ( + ctx: Context & { query: { page: string } }, +) => { + try { + const mediaData = await getAllMediaService(ctx.query.page); + return returnReadResponse( + ctx.set, + 200, + "Media fetched successfully", + mediaData, + ); + } catch (error) { + return mainErrorHandler(ctx.set, error); + } +}; diff --git a/src/modules/media/index.ts b/src/modules/media/index.ts index 00a7dee..106d7de 100644 --- a/src/modules/media/index.ts +++ b/src/modules/media/index.ts @@ -1,6 +1,7 @@ import Elysia from "elysia"; +import { getAllMediaController } from "./controllers/getAllMedia.controller"; export const mediaModule = new Elysia({ prefix: "/media" }).get( "/", - () => "Media Module", + getAllMediaController, ); diff --git a/src/modules/media/repositories/GET/getAllMedia.repository.ts b/src/modules/media/repositories/GET/getAllMedia.repository.ts new file mode 100644 index 0000000..30a5ca8 --- /dev/null +++ b/src/modules/media/repositories/GET/getAllMedia.repository.ts @@ -0,0 +1,17 @@ +import { AppError } from "../../../../helpers/error/instances/app"; +import { mediaModel } from "../../model"; + +export const getAllMediaRepository = async (page: number) => { + try { + const limit = 10; + return await mediaModel.findMany({ + take: limit, + skip: (page - 1) * limit, + where: { + deletedAt: null, + }, + }); + } catch (error) { + throw new AppError(500, "Failed to get all media from repository", error); + } +}; diff --git a/src/modules/media/services/http/getAllMedia.service.ts b/src/modules/media/services/http/getAllMedia.service.ts new file mode 100644 index 0000000..88316f4 --- /dev/null +++ b/src/modules/media/services/http/getAllMedia.service.ts @@ -0,0 +1,15 @@ +import { ErrorForwarder } from "../../../../helpers/error/instances/forwarder"; +import { getAllMediaRepository } from "../../repositories/GET/getAllMedia.repository"; + +export const getAllMediaService = async (pagination: string) => { + try { + const page = + /^\d+$/.test(pagination) && Number(pagination) > 0 + ? Number(pagination) + : 1; + + return getAllMediaRepository(page); + } catch (error) { + ErrorForwarder(error); + } +}; -- 2.49.0