diff options
Diffstat (limited to 'lib/approval-template/category-validations.ts')
| -rw-r--r-- | lib/approval-template/category-validations.ts | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/approval-template/category-validations.ts b/lib/approval-template/category-validations.ts new file mode 100644 index 00000000..a613fd94 --- /dev/null +++ b/lib/approval-template/category-validations.ts @@ -0,0 +1,47 @@ +import { + createSearchParamsCache, + parseAsArrayOf, + parseAsInteger, + parseAsString, + parseAsStringEnum, +} from 'nuqs/server'; +import { z } from 'zod'; + +import { getFiltersStateParser, getSortingStateParser } from '@/lib/parsers'; +import { approvalTemplateCategories } from '@/db/schema/knox/approvals'; + +// 검색 파라미터 캐시 +export const SearchParamsApprovalTemplateCategoryCache = createSearchParamsCache({ + flags: parseAsArrayOf(z.enum(['advancedTable', 'floatingBar'])).withDefault([]), + page: parseAsInteger.withDefault(1), + perPage: parseAsInteger.withDefault(10), + sort: getSortingStateParser<typeof approvalTemplateCategories>().withDefault([ + { id: 'sortOrder', desc: false }, + { id: 'name', desc: false }, + ]), + filters: getFiltersStateParser().withDefault([]), + joinOperator: parseAsStringEnum(['and', 'or']).withDefault('and'), + search: parseAsString.withDefault(''), +}); + +export type GetApprovalTemplateCategorySchema = Awaited< + ReturnType<typeof SearchParamsApprovalTemplateCategoryCache.parse> +>; + +// 카테고리 생성 스키마 +export const createApprovalTemplateCategorySchema = z.object({ + name: z.string().min(1, '카테고리 이름을 입력해주세요.').max(100, '카테고리 이름은 100자 이내로 입력해주세요.'), + description: z.string().max(500, '설명은 500자 이내로 입력해주세요.').optional(), + sortOrder: z.number().int().min(0).default(0), +}); + +// 카테고리 업데이트 스키마 +export const updateApprovalTemplateCategorySchema = z.object({ + name: z.string().min(1, '카테고리 이름을 입력해주세요.').max(100, '카테고리 이름은 100자 이내로 입력해주세요.').optional(), + description: z.string().max(500, '설명은 500자 이내로 입력해주세요.').optional(), + isActive: z.boolean().optional(), + sortOrder: z.number().int().min(0).optional(), +}); + +export type CreateApprovalTemplateCategorySchema = z.infer<typeof createApprovalTemplateCategorySchema>; +export type UpdateApprovalTemplateCategorySchema = z.infer<typeof updateApprovalTemplateCategorySchema>; |
