diff --git a/src/modules/internal/controllers/bulkInsertAnime.controller.ts b/src/modules/internal/controllers/bulkInsertAnime.controller.ts deleted file mode 100644 index 6b06b0a..0000000 --- a/src/modules/internal/controllers/bulkInsertAnime.controller.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Context } from "elysia"; -import { mainErrorHandler } from "../../../helpers/error/handler"; -import { bulkInsertAnimeService } from "../services/http/bulkInsertAnime.service"; -import { returnWriteResponse } from "../../../helpers/callback/httpResponse"; -import { bulkInsertCharWithVAService } from "../services/internal/bulkInsertCharWithVA.service"; - -export const bulkInsertAnimeController = async ( - ctx: Context & { body: { mal_id: number } }, -) => { - try { - const bulkInsertResult = await bulkInsertAnimeService(ctx.body.mal_id); - return returnWriteResponse( - ctx.set, - 201, - "Bulk insert anime operation completed successfully", - bulkInsertResult, - ); - } catch (error) { - return mainErrorHandler(ctx.set, error); - } -}; diff --git a/src/modules/internal/controllers/bulkInsertEpisode.controller.ts b/src/modules/internal/controllers/bulkInsertEpisode.controller.ts index c6bc1ab..6d450dd 100644 --- a/src/modules/internal/controllers/bulkInsertEpisode.controller.ts +++ b/src/modules/internal/controllers/bulkInsertEpisode.controller.ts @@ -3,7 +3,46 @@ import { mainErrorHandler } from "../../../helpers/error/handler"; import { bulkInsertEpisodeService } from "../services/http/bulkInsertEpisode.service"; import { returnWriteResponse } from "../../../helpers/callback/httpResponse"; -// add pagination query +/** + * @function bulkInsertMediaController + * @description Perform bulk insert of episodes for a specific media. This operation fetches episode data from external sources and inserts them into the database. The page parameter is optional; if not provided, the first page of episodes will be fetched. + * + * @param {Context & { body: { media_mal_id: number }; query: { page?: number } }} ctx + * The context object containing the request body. + * The body must include: + * - media_mal_id: number - The MyAnimeList ID of the media for which episodes will be inserted. + * The query may include: + * - page?: number - (Optional) The page number of episodes to fetch and insert. If not provided, defaults to the first page. + * + * @example + * Request route: POST /internal/episode/bulk-insert + * Request body: + * { + * "media_mal_id": 12345 + * } + * Query parameter: + * ?page=2 (Optional, specifies the page number of episodes to fetch and insert) + * + * @returns {Promise} + * A response object indicating success or failure. + * Return example: + * { + * success: true, + * status: 201, + * message: "Bulk insert episode operation completed successfully", + * data: { ...bulkInsertResult } // Data returned only if the env run on development mode + * } + * + * @throws {Object} + * An error response object if validation fails or an error occurs during bulk insert operation. + * Return example: + * { + * success: false, + * status: , + * message: "", + * error: { ...errorDetails } // Additional error details if available and the env run on development mode + * } + */ export const bulkInsertEpisodeController = async ( ctx: Context & { body: { media_mal_id: number }; query: { page?: number } }, ) => { @@ -15,7 +54,7 @@ export const bulkInsertEpisodeController = async ( return returnWriteResponse( ctx.set, 201, - "Success bulk insert for episode", + "Bulk insert episode operation completed successfully", bulkInsertResult, ); } catch (err) { diff --git a/src/modules/internal/controllers/bulkInsertMedia.controller.ts b/src/modules/internal/controllers/bulkInsertMedia.controller.ts new file mode 100644 index 0000000..f27998b --- /dev/null +++ b/src/modules/internal/controllers/bulkInsertMedia.controller.ts @@ -0,0 +1,56 @@ +import { Context } from "elysia"; +import { mainErrorHandler } from "../../../helpers/error/handler"; +import { bulkInsertAnimeService } from "../services/http/bulkInsertAnime.service"; +import { returnWriteResponse } from "../../../helpers/callback/httpResponse"; + +/** + * @function bulkInsertMediaController + * @description Insert new anime to the database only with mal_id. This operation including inserting related data such as genres, studios, producers, licensors, themes, demographics, and relations. + * + * @param {Context & { body: { mal_id: number } }} ctx + * The context object containing the request body. + * The body must include: + * - mal_id: number - The MyAnimeList ID of the anime to be inserted. + * + * @example + * Request route: POST /internal/anime/bulk-insert + * Request body: + * { + * "mal_id": 12345 + * } + * + * @returns {Promise} + * A response object indicating success or failure. + * Return example: + * { + * success: true, + * status: 201, + * message: "Bulk insert anime operation completed successfully", + * data: { ...bulkInsertResult } // Data returned only if the env run on development mode + * } + * + * @throws {Object} + * An error response object if validation fails or an error occurs during bulk insert operation. + * Return example: + * { + * success: false, + * status: , + * message: "", + * error: { ...errorDetails } // Additional error details if available and the env run on development mode + * } + */ +export const bulkInsertMediaController = async ( + ctx: Context & { body: { mal_id: number } }, +) => { + try { + const bulkInsertResult = await bulkInsertAnimeService(ctx.body.mal_id); + return returnWriteResponse( + ctx.set, + 201, + "Bulk insert anime operation completed successfully", + bulkInsertResult, + ); + } catch (error) { + return mainErrorHandler(ctx.set, error); + } +}; diff --git a/src/modules/internal/index.ts b/src/modules/internal/index.ts index e7838c8..b7321b5 100644 --- a/src/modules/internal/index.ts +++ b/src/modules/internal/index.ts @@ -1,7 +1,7 @@ import Elysia from "elysia"; -import { bulkInsertAnimeController } from "./controllers/bulkInsertAnime.controller"; import { bulkInsertEpisodeController } from "./controllers/bulkInsertEpisode.controller"; +import { bulkInsertMediaController } from "./controllers/bulkInsertMedia.controller"; export const internalModule = new Elysia({ prefix: "/internal" }) - .post("/media/bulk-insert", bulkInsertAnimeController) + .post("/media/bulk-insert", bulkInsertMediaController) .post("/episode/bulk-insert", bulkInsertEpisodeController);