From 7bb351a7facff234e98ac4445b3d2f1a9485ae78 Mon Sep 17 00:00:00 2001 From: huytran17 Date: Fri, 6 Sep 2024 20:06:14 +0700 Subject: [PATCH] add get subscription paginated controller --- .../get-subscriptions-paginated.ts | 49 +++++++++++++++++++ .../controllers/admin/subscription/index.ts | 14 +++++- .../validators/get-subscriptions-paginated.ts | 7 +++ .../admin/subscription/validators/index.ts | 4 +- 4 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 core/server/src/data-access/controllers/admin/subscription/get-subscriptions-paginated.ts create mode 100644 core/server/src/data-access/controllers/admin/subscription/validators/get-subscriptions-paginated.ts diff --git a/core/server/src/data-access/controllers/admin/subscription/get-subscriptions-paginated.ts b/core/server/src/data-access/controllers/admin/subscription/get-subscriptions-paginated.ts new file mode 100644 index 00000000..104e4989 --- /dev/null +++ b/core/server/src/data-access/controllers/admin/subscription/get-subscriptions-paginated.ts @@ -0,0 +1,49 @@ +import { Request } from "express"; +import { get } from "lodash"; +import { HttpStatusCode } from "../../../../constants/http-status-code"; +import { + GetSubscriptionsPaginated, + IGetSubscriptionsPaginated, +} from "../../../../use-cases/subscription/get-subscriptions-paginated"; + +export default function makeGetSubscriptionsPaginatedController({ + getSubscriptionsPaginated, +}: { + getSubscriptionsPaginated: GetSubscriptionsPaginated; +}) { + return async function getSubscriptionsPaginatedController( + httpRequest: Request & { context: { validated: {} } } + ) { + const headers = { + "Content-Type": "application/json", + }; + + try { + const { query, page, entries_per_page } = ( + get(httpRequest, "context.validated", {}) + ); + + const data = await getSubscriptionsPaginated({ + query, + page: Number(page), + entries_per_page: Number(entries_per_page), + }); + + return { + headers, + statusCode: HttpStatusCode.OK, + body: { + data, + }, + }; + } catch (error) { + throw { + headers, + statusCode: HttpStatusCode.INTERNAL_SERVER_ERROR, + body: { + data: error.message, + }, + }; + } + }; +} diff --git a/core/server/src/data-access/controllers/admin/subscription/index.ts b/core/server/src/data-access/controllers/admin/subscription/index.ts index 2e297cc2..76835b1f 100644 --- a/core/server/src/data-access/controllers/admin/subscription/index.ts +++ b/core/server/src/data-access/controllers/admin/subscription/index.ts @@ -1,9 +1,16 @@ import { getSubscriptionAnalystics, getSubscriptions, + getSubscriptionsPaginated, } from "../../../../use-cases/subscription"; import makeGetSubscriptionAnalysticsController from "./get-subscription-analystics"; import makeGetSubscriptionsController from "./get-subscriptions"; +import makeGetSubscriptionsPaginatedController from "./get-subscriptions-paginated"; + +const getSubscriptionsPaginatedController = + makeGetSubscriptionsPaginatedController({ + getSubscriptionsPaginated, + }); const getSubscriptionAnalysticsController = makeGetSubscriptionAnalysticsController({ @@ -17,6 +24,11 @@ const getSubscriptionsController = makeGetSubscriptionsController({ export default Object.freeze({ getSubscriptionsController, getSubscriptionAnalysticsController, + getSubscriptionsPaginatedController, }); -export { getSubscriptionAnalysticsController, getSubscriptionsController }; +export { + getSubscriptionAnalysticsController, + getSubscriptionsController, + getSubscriptionsPaginatedController, +}; diff --git a/core/server/src/data-access/controllers/admin/subscription/validators/get-subscriptions-paginated.ts b/core/server/src/data-access/controllers/admin/subscription/validators/get-subscriptions-paginated.ts new file mode 100644 index 00000000..3a643d99 --- /dev/null +++ b/core/server/src/data-access/controllers/admin/subscription/validators/get-subscriptions-paginated.ts @@ -0,0 +1,7 @@ +const getSubscriptionsPaginatedRules = { + query: "string", + page: "integer", + entries_per_page: "integer", +}; + +export default getSubscriptionsPaginatedRules; diff --git a/core/server/src/data-access/controllers/admin/subscription/validators/index.ts b/core/server/src/data-access/controllers/admin/subscription/validators/index.ts index 28cca7f3..9a2b72e0 100644 --- a/core/server/src/data-access/controllers/admin/subscription/validators/index.ts +++ b/core/server/src/data-access/controllers/admin/subscription/validators/index.ts @@ -1,7 +1,9 @@ import getSubscriptionAnalysticsRules from "./get-subscription-analystics"; +import getSubscriptionsPaginatedRules from "./get-subscriptions-paginated"; export default Object.freeze({ getSubscriptionAnalysticsRules, + getSubscriptionsPaginatedRules, }); -export { getSubscriptionAnalysticsRules }; +export { getSubscriptionAnalysticsRules, getSubscriptionsPaginatedRules };