From b8f4fa32809345ac94e6969c0047cba2730cbb27 Mon Sep 17 00:00:00 2001 From: Okoli Johnpaul Sochimaobi <132228270+Johnpii1@users.noreply.github.com> Date: Sat, 28 Mar 2026 20:55:58 +0100 Subject: [PATCH 01/12] Refactor pagination constants and clean up imports --- src/modules/creator/creator.controller.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/modules/creator/creator.controller.ts b/src/modules/creator/creator.controller.ts index 9e032f9..3416e51 100644 --- a/src/modules/creator/creator.controller.ts +++ b/src/modules/creator/creator.controller.ts @@ -15,9 +15,6 @@ import { wrapPublicCreatorListResponse } from '../creators/public-creator-list-e import { resolveCreatorListLimit } from '../creators/creators.limit.utils'; import { buildCreatorListRequestContext } from '../creators/creator-list-context.utils'; import { - -DEFAULT_PAGE, - MIN_PAGE_SIZE, MAX_PAGE_SIZE, } from '../../constants/pagination.constants'; @@ -31,9 +28,7 @@ const LegacyCreatorQuerySchema = z.object({ label: 'Page', }), limit: safeIntParam({ - - defaultValue: resolveCreatorListLimit() ?? PUBLIC_PAGE_PAGINATION_DEFAULTS.limit, - + defaultValue: resolveCreatorListLimit() ?? PUBLIC_PAGE_PAGINATION_DEFAULTS.limit, min: MIN_PAGE_SIZE, max: MAX_PAGE_SIZE, label: 'Limit', @@ -46,11 +41,12 @@ export async function listCreators(req: Request, res: Response) { try { const ctx = buildCreatorListRequestContext(req); const parsed = parsePublicQuery(LegacyCreatorQuerySchema, ctx.query); + if (!parsed.ok) { return sendValidationError(res, 'Invalid query parameters', parsed.details); } - const { page, limit, sortBy, sortOrder } = parsed.data; + const { page, limit, sortBy, sortOrder } = parsed.data; const sort = parseCreatorSortOptions(sortBy, sortOrder); const { creators, meta } = await getPaginatedCreators({ From ffcbb7b2b2a3c2e2a0a38ca94a87ba3d1ca1cbf8 Mon Sep 17 00:00:00 2001 From: Okoli Johnpaul Sochimaobi <132228270+Johnpii1@users.noreply.github.com> Date: Sat, 28 Mar 2026 21:02:42 +0100 Subject: [PATCH 02/12] conflit fix --- src/modules/creators/creators.schemas.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/modules/creators/creators.schemas.ts b/src/modules/creators/creators.schemas.ts index 0567808..41acb2d 100644 --- a/src/modules/creators/creators.schemas.ts +++ b/src/modules/creators/creators.schemas.ts @@ -5,7 +5,10 @@ import { withCreatorListQueryStringNormalization } from './creators.query-string import { safeIntParam } from '../../utils/query.utils'; import { -DEFAULT_OFFSET, +import { + MIN_PAGE_SIZE, + MAX_PAGE_SIZE, +} from '../../constants/pagination.constants'; MIN_PAGE_SIZE, MAX_PAGE_SIZE, From cf4365c9cb79805640445389793495305d8ae31d Mon Sep 17 00:00:00 2001 From: Okoli Johnpaul Sochimaobi <132228270+Johnpii1@users.noreply.github.com> Date: Sat, 28 Mar 2026 21:23:19 +0100 Subject: [PATCH 03/12] Update creators.schemas.ts --- src/modules/creators/creators.schemas.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/modules/creators/creators.schemas.ts b/src/modules/creators/creators.schemas.ts index 41acb2d..4b27c8e 100644 --- a/src/modules/creators/creators.schemas.ts +++ b/src/modules/creators/creators.schemas.ts @@ -3,16 +3,11 @@ import { CREATOR_LIST_SORT_OPTIONS } from './creators.sort'; import { creatorListSortDirectionQueryParam } from './creators.sort-direction.parse'; import { withCreatorListQueryStringNormalization } from './creators.query-string.utils'; import { safeIntParam } from '../../utils/query.utils'; -import { - import { MIN_PAGE_SIZE, MAX_PAGE_SIZE, } from '../../constants/pagination.constants'; - - MIN_PAGE_SIZE, - MAX_PAGE_SIZE, -} from '../../constants/pagination.constants'; + import { PUBLIC_OFFSET_PAGINATION_DEFAULTS } from '../../utils/public-list-query-defaults'; import { DEFAULT_CREATOR_LIST_SORT } from '../../constants/creator-list-sort.constants'; import { resolveCreatorListLimit } from './creators.limit.utils'; From 73944e848e3e14fbc02c2f9e3ea75bb038a8c24c Mon Sep 17 00:00:00 2001 From: Okoli Johnpaul Sochimaobi <132228270+Johnpii1@users.noreply.github.com> Date: Sun, 29 Mar 2026 07:21:47 +0100 Subject: [PATCH 04/12] Update creator.controller.ts --- src/modules/creator/creator.controller.ts | 111 ++++++++-------------- 1 file changed, 38 insertions(+), 73 deletions(-) diff --git a/src/modules/creator/creator.controller.ts b/src/modules/creator/creator.controller.ts index ad7cb77..e425f66 100644 --- a/src/modules/creator/creator.controller.ts +++ b/src/modules/creator/creator.controller.ts @@ -1,80 +1,45 @@ -// src/modules/creator/creator.controller.ts -import { Request, Response } from 'express'; -import { z } from 'zod'; -import { - sendSuccess, - sendError, - sendValidationError, - ErrorCode, -} from '../../utils/api-response.utils'; -import { getPaginatedCreators } from './creator.service'; -import { parseCreatorSortOptions } from './creator.utils'; -import { safeIntParam } from '../../utils/query.utils'; -import { parsePublicQuery } from '../../utils/public-query-parse.utils'; -import { wrapPublicCreatorListResponse } from '../creators/public-creator-list-envelope.utils'; -import { resolveCreatorListLimit } from '../creators/creators.limit.utils'; -import { buildCreatorListRequestContext } from '../creators/creator-list-context.utils'; -import { normalizeCreatorListPage } from './creator-list-page.guard'; -import { - MIN_PAGE_SIZE, - MAX_PAGE_SIZE, -} from '../../constants/pagination.constants'; -import { PUBLIC_PAGE_PAGINATION_DEFAULTS } from '../../utils/public-list-query-defaults'; +export async function listCreators(req: Request, res: Response) { + try { + const ctx = buildCreatorListRequestContext(req); + const parsed = parsePublicQuery(LegacyCreatorQuerySchema, ctx.query); -const LegacyCreatorQuerySchema = z.object({ - page: safeIntParam({ - defaultValue: PUBLIC_PAGE_PAGINATION_DEFAULTS.page, - min: MIN_PAGE_SIZE, - max: Number.MAX_SAFE_INTEGER, - label: 'Page', - }), - limit: safeIntParam({ - defaultValue: resolveCreatorListLimit() ?? PUBLIC_PAGE_PAGINATION_DEFAULTS.limit, - min: MIN_PAGE_SIZE, - max: MAX_PAGE_SIZE, - label: 'Limit', - }), - sortBy: z.string().optional(), - sortOrder: z.string().optional(), -}); + if (!parsed.ok) { + return sendValidationError( + res, + 'Invalid query parameters', + parsed.details + ); + } -export async function listCreators(req: Request, res: Response) { - try { - const ctx = buildCreatorListRequestContext(req); - const parsed = parsePublicQuery(LegacyCreatorQuerySchema, ctx.query); + // Destructure once + let { page, limit, sortBy, sortOrder } = parsed.data; - if (!parsed.ok) { - return sendValidationError( - res, - 'Invalid query parameters', - parsed.details - ); - } -const { limit, sortBy, sortOrder } = parsed.data; -const page = normalizeCreatorListPage(parsed.data.page); + // Normalize page + page = normalizeCreatorListPage(page); - const { page, limit, sortBy, sortOrder } = parsed.data; - const sort = parseCreatorSortOptions(sortBy, sortOrder); + // Build sort options + const sort = parseCreatorSortOptions(sortBy, sortOrder); - const { creators, meta } = await getPaginatedCreators({ - page, - limit, - sort, - }); + // Fetch paginated creators + const { creators, meta } = await getPaginatedCreators({ + page, + limit, + sort, + }); - return sendSuccess( - res, - wrapPublicCreatorListResponse(creators, meta), - 200, - 'Creators retrieved successfully' - ); - } catch (error) { - console.error('Error listing creators:', error); - return sendError( - res, - 500, - ErrorCode.INTERNAL_ERROR, - 'Failed to retrieve creators' - ); - } + return sendSuccess( + res, + wrapPublicCreatorListResponse(creators, meta), + 200, + 'Creators retrieved successfully' + ); + } catch (error) { + console.error('Error listing creators:', error); + return sendError( + res, + 500, + ErrorCode.INTERNAL_ERROR, + 'Failed to retrieve creators' + ); + } } From 247786d0d9b352e62d5f855a9c9fbe9504edf6f9 Mon Sep 17 00:00:00 2001 From: Okoli Johnpaul Sochimaobi <132228270+Johnpii1@users.noreply.github.com> Date: Sun, 29 Mar 2026 07:25:07 +0100 Subject: [PATCH 05/12] Update creator.controller.ts --- src/modules/creator/creator.controller.ts | 37 +++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/modules/creator/creator.controller.ts b/src/modules/creator/creator.controller.ts index e425f66..20219f4 100644 --- a/src/modules/creator/creator.controller.ts +++ b/src/modules/creator/creator.controller.ts @@ -1,4 +1,37 @@ -export async function listCreators(req: Request, res: Response) { +// src/modules/creator/creator.controller.ts +import { Request, Response, RequestHandler } from 'express'; +import { z } from 'zod'; + +// API response helpers +import { + sendSuccess, + sendError, + sendValidationError, + ErrorCode, +} from '../../utils/api-response.utils'; + +// Creator service and utilities +import { getPaginatedCreators } from './creator.service'; +import { parseCreatorSortOptions } from './creator.utils'; +import { safeIntParam } from '../../utils/query.utils'; +import { parsePublicQuery } from '../../utils/public-query-parse.utils'; +import { wrapPublicCreatorListResponse } from '../creators/public-creator-list-envelope.utils'; +import { resolveCreatorListLimit } from '../creators/creators.limit.utils'; +import { buildCreatorListRequestContext } from '../creators/creator-list-context.utils'; +import { normalizeCreatorListPage } from './creator-list-page.guard'; + +// Pagination constants +import { + MIN_PAGE_SIZE, + MAX_PAGE_SIZE, +} from '../../constants/pagination.constants'; +import { PUBLIC_PAGE_PAGINATION_DEFAULTS } from '../../utils/public-list-query-defaults'; + +// Legacy query schema +import { CreatorListQuerySchema as LegacyCreatorQuerySchema } from '../creators/creators.schemas'; + +// Typed Express handler +export const listCreators: RequestHandler = async (req, res) => { try { const ctx = buildCreatorListRequestContext(req); const parsed = parsePublicQuery(LegacyCreatorQuerySchema, ctx.query); @@ -42,4 +75,4 @@ export async function listCreators(req: Request, res: Response) { 'Failed to retrieve creators' ); } -} +}; From ee144f5256680ffcd100e4301e1ff50e3d646a3c Mon Sep 17 00:00:00 2001 From: Okoli Johnpaul Sochimaobi <132228270+Johnpii1@users.noreply.github.com> Date: Sun, 29 Mar 2026 07:27:28 +0100 Subject: [PATCH 06/12] Update creator.controller.ts --- src/modules/creator/creator.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/creator/creator.controller.ts b/src/modules/creator/creator.controller.ts index 20219f4..37842a3 100644 --- a/src/modules/creator/creator.controller.ts +++ b/src/modules/creator/creator.controller.ts @@ -42,7 +42,7 @@ export const listCreators: RequestHandler = async (req, res) => { 'Invalid query parameters', parsed.details ); - } + } // Destructure once let { page, limit, sortBy, sortOrder } = parsed.data; From efd407cbfa07c98a0121c22335f163028bea8606 Mon Sep 17 00:00:00 2001 From: Okoli Johnpaul Sochimaobi <132228270+Johnpii1@users.noreply.github.com> Date: Sun, 29 Mar 2026 07:30:42 +0100 Subject: [PATCH 07/12] Update creators.schemas.ts --- src/modules/creators/creators.schemas.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/modules/creators/creators.schemas.ts b/src/modules/creators/creators.schemas.ts index 1cabe0f..0b0b1f0 100644 --- a/src/modules/creators/creators.schemas.ts +++ b/src/modules/creators/creators.schemas.ts @@ -62,4 +62,7 @@ export const CreatorListQuerySchema = z.object({ ), }); -export type CreatorListQueryType = z.infer; \ No newline at end of file +// Export as LegacyCreatorQuerySchema for backward compatibility +export const LegacyCreatorQuerySchema = CreatorListQuerySchema; + +export type CreatorListQueryType = z.infer; From a5b73228ebc73cde9317f3553718112a101d799d Mon Sep 17 00:00:00 2001 From: Okoli Johnpaul Sochimaobi <132228270+Johnpii1@users.noreply.github.com> Date: Sun, 29 Mar 2026 07:34:08 +0100 Subject: [PATCH 08/12] Update creator.controller.ts --- src/modules/creator/creator.controller.ts | 28 ++++------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/src/modules/creator/creator.controller.ts b/src/modules/creator/creator.controller.ts index 37842a3..085253a 100644 --- a/src/modules/creator/creator.controller.ts +++ b/src/modules/creator/creator.controller.ts @@ -1,6 +1,5 @@ // src/modules/creator/creator.controller.ts -import { Request, Response, RequestHandler } from 'express'; -import { z } from 'zod'; +import { RequestHandler } from 'express'; // API response helpers import { @@ -13,22 +12,14 @@ import { // Creator service and utilities import { getPaginatedCreators } from './creator.service'; import { parseCreatorSortOptions } from './creator.utils'; -import { safeIntParam } from '../../utils/query.utils'; import { parsePublicQuery } from '../../utils/public-query-parse.utils'; import { wrapPublicCreatorListResponse } from '../creators/public-creator-list-envelope.utils'; import { resolveCreatorListLimit } from '../creators/creators.limit.utils'; import { buildCreatorListRequestContext } from '../creators/creator-list-context.utils'; import { normalizeCreatorListPage } from './creator-list-page.guard'; -// Pagination constants -import { - MIN_PAGE_SIZE, - MAX_PAGE_SIZE, -} from '../../constants/pagination.constants'; -import { PUBLIC_PAGE_PAGINATION_DEFAULTS } from '../../utils/public-list-query-defaults'; - // Legacy query schema -import { CreatorListQuerySchema as LegacyCreatorQuerySchema } from '../creators/creators.schemas'; +import { LegacyCreatorQuerySchema } from '../creators/creators.schemas'; // Typed Express handler export const listCreators: RequestHandler = async (req, res) => { @@ -37,12 +28,8 @@ export const listCreators: RequestHandler = async (req, res) => { const parsed = parsePublicQuery(LegacyCreatorQuerySchema, ctx.query); if (!parsed.ok) { - return sendValidationError( - res, - 'Invalid query parameters', - parsed.details - ); - } + return sendValidationError(res, 'Invalid query parameters', parsed.details); + } // Destructure once let { page, limit, sortBy, sortOrder } = parsed.data; @@ -68,11 +55,6 @@ export const listCreators: RequestHandler = async (req, res) => { ); } catch (error) { console.error('Error listing creators:', error); - return sendError( - res, - 500, - ErrorCode.INTERNAL_ERROR, - 'Failed to retrieve creators' - ); + return sendError(res, 500, ErrorCode.INTERNAL_ERROR, 'Failed to retrieve creators'); } }; From e4d1ba50f1e39adec3fecd3a077a570fee7140ee Mon Sep 17 00:00:00 2001 From: Okoli Johnpaul Sochimaobi <132228270+Johnpii1@users.noreply.github.com> Date: Sun, 29 Mar 2026 07:38:30 +0100 Subject: [PATCH 09/12] Update creator.controller.ts --- src/modules/creator/creator.controller.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/modules/creator/creator.controller.ts b/src/modules/creator/creator.controller.ts index 085253a..fbbfe2a 100644 --- a/src/modules/creator/creator.controller.ts +++ b/src/modules/creator/creator.controller.ts @@ -24,17 +24,20 @@ import { LegacyCreatorQuerySchema } from '../creators/creators.schemas'; // Typed Express handler export const listCreators: RequestHandler = async (req, res) => { try { + // Build request context const ctx = buildCreatorListRequestContext(req); + + // Parse query using legacy schema const parsed = parsePublicQuery(LegacyCreatorQuerySchema, ctx.query); if (!parsed.ok) { return sendValidationError(res, 'Invalid query parameters', parsed.details); } - // Destructure once + // Destructure data once let { page, limit, sortBy, sortOrder } = parsed.data; - // Normalize page + // Normalize page number page = normalizeCreatorListPage(page); // Build sort options @@ -47,6 +50,7 @@ export const listCreators: RequestHandler = async (req, res) => { sort, }); + // Send success response return sendSuccess( res, wrapPublicCreatorListResponse(creators, meta), From 8dad941b8ce5cf5f6ec0aabc393c4ab0a6e83e8e Mon Sep 17 00:00:00 2001 From: Okoli Johnpaul Sochimaobi <132228270+Johnpii1@users.noreply.github.com> Date: Sun, 29 Mar 2026 07:41:49 +0100 Subject: [PATCH 10/12] Update creator.controller.ts --- src/modules/creator/creator.controller.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/modules/creator/creator.controller.ts b/src/modules/creator/creator.controller.ts index fbbfe2a..96270eb 100644 --- a/src/modules/creator/creator.controller.ts +++ b/src/modules/creator/creator.controller.ts @@ -14,7 +14,6 @@ import { getPaginatedCreators } from './creator.service'; import { parseCreatorSortOptions } from './creator.utils'; import { parsePublicQuery } from '../../utils/public-query-parse.utils'; import { wrapPublicCreatorListResponse } from '../creators/public-creator-list-envelope.utils'; -import { resolveCreatorListLimit } from '../creators/creators.limit.utils'; import { buildCreatorListRequestContext } from '../creators/creator-list-context.utils'; import { normalizeCreatorListPage } from './creator-list-page.guard'; From 79e63a3850bef4bd71b2030e5f01eb9bdcd875a2 Mon Sep 17 00:00:00 2001 From: Okoli Johnpaul Sochimaobi <132228270+Johnpii1@users.noreply.github.com> Date: Sun, 29 Mar 2026 07:48:16 +0100 Subject: [PATCH 11/12] Update creator.controller.ts --- src/modules/creator/creator.controller.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/modules/creator/creator.controller.ts b/src/modules/creator/creator.controller.ts index 96270eb..6fa7255 100644 --- a/src/modules/creator/creator.controller.ts +++ b/src/modules/creator/creator.controller.ts @@ -33,20 +33,20 @@ export const listCreators: RequestHandler = async (req, res) => { return sendValidationError(res, 'Invalid query parameters', parsed.details); } - // Destructure data once - let { page, limit, sortBy, sortOrder } = parsed.data; + // Destructure using correct schema properties + const { offset, limit, sort, order: sortOrder } = parsed.data; - // Normalize page number - page = normalizeCreatorListPage(page); + // Convert offset to page number if needed + const page = normalizeCreatorListPage(offset); // Build sort options - const sort = parseCreatorSortOptions(sortBy, sortOrder); + const sortOptions = parseCreatorSortOptions(sort, sortOrder); // Fetch paginated creators const { creators, meta } = await getPaginatedCreators({ page, limit, - sort, + sort: sortOptions, }); // Send success response From ed73ac041807951722741c8ebfe9bee627326020 Mon Sep 17 00:00:00 2001 From: Okoli Johnpaul Sochimaobi <132228270+Johnpii1@users.noreply.github.com> Date: Sun, 29 Mar 2026 07:50:04 +0100 Subject: [PATCH 12/12] Update creator.controller.ts --- src/modules/creator/creator.controller.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/creator/creator.controller.ts b/src/modules/creator/creator.controller.ts index 6fa7255..1eae1f6 100644 --- a/src/modules/creator/creator.controller.ts +++ b/src/modules/creator/creator.controller.ts @@ -33,10 +33,10 @@ export const listCreators: RequestHandler = async (req, res) => { return sendValidationError(res, 'Invalid query parameters', parsed.details); } - // Destructure using correct schema properties + // Destructure using schema fields const { offset, limit, sort, order: sortOrder } = parsed.data; - // Convert offset to page number if needed + // Convert offset to page number const page = normalizeCreatorListPage(offset); // Build sort options