summaryrefslogtreecommitdiff
path: root/lib/approval-template/category-validations.ts
blob: a613fd9451f80a31f22ff7d247ef4bec87eddbd3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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>;