From 72f8e9e4eb9e38ec4c0d8b7a31965f6ba1aa147c Mon Sep 17 00:00:00 2001 From: Rafi Arrafif Date: Thu, 2 Apr 2026 09:48:31 +0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=94=20feat:=20implement=20database=20r?= =?UTF-8?q?epository=20for=20get=20media=20by=20slug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../media/controllers/getMediaBySlug.controller.ts | 2 +- .../SELECT/selectMediaBySlug.repository.ts | 12 ++++++++++++ .../media/services/http/getMediaBySlug.service.ts | 9 +++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 src/modules/media/repositories/SELECT/selectMediaBySlug.repository.ts diff --git a/src/modules/media/controllers/getMediaBySlug.controller.ts b/src/modules/media/controllers/getMediaBySlug.controller.ts index 138bedb..212202f 100644 --- a/src/modules/media/controllers/getMediaBySlug.controller.ts +++ b/src/modules/media/controllers/getMediaBySlug.controller.ts @@ -9,7 +9,7 @@ export const getMediaBySlugController = async (ctx: { params: Static; }) => { try { - const mediaData = getMediaBySlugService(ctx.params.slug); + const mediaData = await getMediaBySlugService(ctx.params.slug); return returnReadResponse(ctx.set, 200, "Media fetched successfully", mediaData); } catch (error) { return mainErrorHandler(ctx.set, error); diff --git a/src/modules/media/repositories/SELECT/selectMediaBySlug.repository.ts b/src/modules/media/repositories/SELECT/selectMediaBySlug.repository.ts new file mode 100644 index 0000000..94490c5 --- /dev/null +++ b/src/modules/media/repositories/SELECT/selectMediaBySlug.repository.ts @@ -0,0 +1,12 @@ +import { AppError } from "../../../../helpers/error/instances/app"; +import { prisma } from "../../../../utils/databases/prisma/connection"; + +export const selectMediaBySlugRepository = async (slug: string) => { + try { + return await prisma.media.findUnique({ + where: { slug }, + }); + } catch (error) { + throw new AppError(500, "Failed to fetch media by slug", error); + } +}; diff --git a/src/modules/media/services/http/getMediaBySlug.service.ts b/src/modules/media/services/http/getMediaBySlug.service.ts index b886415..1dfcf96 100644 --- a/src/modules/media/services/http/getMediaBySlug.service.ts +++ b/src/modules/media/services/http/getMediaBySlug.service.ts @@ -1,8 +1,13 @@ +import { AppError } from "../../../../helpers/error/instances/app"; import { ErrorForwarder } from "../../../../helpers/error/instances/forwarder"; +import { selectMediaBySlugRepository } from "../../repositories/SELECT/selectMediaBySlug.repository"; -export const getMediaBySlugService = (slug: string) => { +export const getMediaBySlugService = async (slug: string) => { try { - return `Mengambil media dengan slug '${slug}'`; + const mediaData = await selectMediaBySlugRepository(slug); + if (!mediaData) throw new AppError(404, "Media not found with the provided slug."); + + return mediaData; } catch (error) { ErrorForwarder(error); }