✨ feat: add endpoint to get all episodes by media #9
@ -0,0 +1,22 @@
|
||||
import { Context } from "elysia";
|
||||
import { mainErrorHandler } from "../../../helpers/error/handler";
|
||||
import { returnReadResponse } from "../../../helpers/callback/httpResponse";
|
||||
import { getAllEpisodeFromSpecificMediaService } from "../services/http/getAllEpisodeFromSpecificMedia.service";
|
||||
|
||||
export const getAllEpisodeFromSpecificMediaController = async (
|
||||
ctx: Context & { params: { mediaSlug: string } },
|
||||
) => {
|
||||
try {
|
||||
const episodesData = await getAllEpisodeFromSpecificMediaService(
|
||||
ctx.params.mediaSlug,
|
||||
);
|
||||
return returnReadResponse(
|
||||
ctx.set,
|
||||
200,
|
||||
"Episodes fetched successfully",
|
||||
episodesData,
|
||||
);
|
||||
} catch (error) {
|
||||
return mainErrorHandler(ctx.set, error);
|
||||
}
|
||||
};
|
||||
7
src/modules/episode/index.ts
Normal file
7
src/modules/episode/index.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import Elysia from "elysia";
|
||||
import { getAllEpisodeFromSpecificMediaController } from "./controllers/getAllEpisodeFromSpecificMedia.controller";
|
||||
|
||||
export const episodeModule = new Elysia({ prefix: "/episodes/:mediaSlug" }).get(
|
||||
"/",
|
||||
getAllEpisodeFromSpecificMediaController,
|
||||
);
|
||||
@ -0,0 +1,22 @@
|
||||
import { AppError } from "../../../../helpers/error/instances/app";
|
||||
import { mediaModel } from "../../../media/model";
|
||||
|
||||
export const getAllEpisodeFromMediaRepository = async (mediaSlug: string) => {
|
||||
try {
|
||||
return mediaModel.findUnique({
|
||||
where: { slug: mediaSlug },
|
||||
select: {
|
||||
episodes: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
episode: true,
|
||||
pictureThumbnail: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
throw new AppError(500, "Failed to fetch episodes from media", error);
|
||||
}
|
||||
};
|
||||
@ -0,0 +1,16 @@
|
||||
import { AppError } from "../../../../helpers/error/instances/app";
|
||||
import { ErrorForwarder } from "../../../../helpers/error/instances/forwarder";
|
||||
import { getAllEpisodeFromMediaRepository } from "../../repositories/GET/getAllEpisodeFromMedia.repository";
|
||||
|
||||
export const getAllEpisodeFromSpecificMediaService = async (
|
||||
mediaSlug: string,
|
||||
) => {
|
||||
try {
|
||||
const mediaData = await getAllEpisodeFromMediaRepository(mediaSlug);
|
||||
if (!mediaData)
|
||||
throw new AppError(404, `Media with slug ${mediaSlug} not found`);
|
||||
return mediaData.episodes;
|
||||
} catch (error) {
|
||||
ErrorForwarder(error);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user