Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added .codex
Empty file.
15 changes: 14 additions & 1 deletion src/constants/creator-list-sort.constants.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
/**
* Allowed public sort fields for creator list endpoints.
* Keep these names stable for request parsing across list handlers.
*/
export const CREATOR_LIST_SORT_FIELDS = [
'createdAt',
'updatedAt',
'displayName',
'handle',
] as const;

export type CreatorListSortField = (typeof CREATOR_LIST_SORT_FIELDS)[number];

/** Default sort field used by creator list handlers. */
export const DEFAULT_CREATOR_LIST_SORT = 'createdAt' as const;
export const DEFAULT_CREATOR_LIST_SORT: CreatorListSortField = 'createdAt';

/** Default sort order used by creator list handlers. */
export const DEFAULT_CREATOR_LIST_ORDER = 'desc' as const;
7 changes: 4 additions & 3 deletions src/modules/creator/creator.utils.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
// src/modules/creator/creator.utils.ts
import { Prisma } from '@prisma/client';
import {
CREATOR_LIST_SORT_FIELDS,
DEFAULT_CREATOR_LIST_ORDER,
DEFAULT_CREATOR_LIST_SORT,
type CreatorListSortField,
} from '../../constants/creator-list-sort.constants';

export type CreatorSortField = 'createdAt' | 'handle' | 'displayName';
export type CreatorSortField = CreatorListSortField;
export type SortOrder = 'asc' | 'desc';

export interface CreatorSortOptions {
Expand All @@ -21,10 +23,9 @@ export function parseCreatorSortOptions(
sortBy?: string,
sortOrder?: string
): CreatorSortOptions {
const validFields: CreatorSortField[] = ['createdAt', 'handle', 'displayName'];
const validOrders: SortOrder[] = ['asc', 'desc'];

const field = validFields.includes(sortBy as CreatorSortField)
const field = CREATOR_LIST_SORT_FIELDS.includes(sortBy as CreatorSortField)
? (sortBy as CreatorSortField)
: DEFAULT_CREATOR_LIST_SORT;

Expand Down
8 changes: 5 additions & 3 deletions src/modules/creators/creators.schemas.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { z } from 'zod';
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';
Expand All @@ -8,7 +7,10 @@ import {
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 {
CREATOR_LIST_SORT_FIELDS,
DEFAULT_CREATOR_LIST_SORT,
} from '../../constants/creator-list-sort.constants';

/**
* Validation schema for creator list query parameters.
Expand Down Expand Up @@ -36,7 +38,7 @@ export const CreatorListQuerySchema = z.object({

// Sorting
sort: withCreatorListQueryStringNormalization(
z.enum(CREATOR_LIST_SORT_OPTIONS).optional().default(DEFAULT_CREATOR_LIST_SORT)
z.enum(CREATOR_LIST_SORT_FIELDS).optional().default(DEFAULT_CREATOR_LIST_SORT)
),
order: creatorListSortDirectionQueryParam(),

Expand Down
13 changes: 6 additions & 7 deletions src/modules/creators/creators.sort.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
import { Prisma } from '@prisma/client';
import {
CREATOR_LIST_SORT_FIELDS,
type CreatorListSortField,
} from '../../constants/creator-list-sort.constants';

/**
* Public sort options accepted by creator list endpoints.
* These remain stable even if the internal query implementation changes.
*/
export const CREATOR_LIST_SORT_OPTIONS = [
'createdAt',
'updatedAt',
'displayName',
'handle',
] as const;
export const CREATOR_LIST_SORT_OPTIONS = CREATOR_LIST_SORT_FIELDS;

export const CREATOR_LIST_SORT_ORDERS = ['asc', 'desc'] as const;

export type CreatorListSortOption = (typeof CREATOR_LIST_SORT_OPTIONS)[number];
export type CreatorListSortOption = CreatorListSortField;
export type CreatorListSortOrder = (typeof CREATOR_LIST_SORT_ORDERS)[number];

const CREATOR_LIST_SORT_FIELD_MAP: Record<
Expand Down
Loading