From ff321e0e337c0f1ae409daf5be3468c261cc7db5 Mon Sep 17 00:00:00 2001 From: "k_95.21" Date: Sun, 19 Nov 2023 12:34:47 +0900 Subject: [PATCH] add zod schema --- src/schema/corporation.ts | 66 +++++++++++++++++++++++++++++++++++++++ src/schema/individual.ts | 53 +++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 src/schema/corporation.ts create mode 100644 src/schema/individual.ts diff --git a/src/schema/corporation.ts b/src/schema/corporation.ts new file mode 100644 index 0000000..a22e393 --- /dev/null +++ b/src/schema/corporation.ts @@ -0,0 +1,66 @@ +import { z } from 'zod' + +// mail +const mail: z.ZodString = z + .string({ required_error: '入力が必須の項目です' }) + .min(1, { message: '入力が必須の項目です' }) + .max(255, { message: '255文字以内で入力してください' }) + .email({ message: 'メールアドレスの形式で入力してください' }) + +// conpanyName +const company: z.ZodString = z + .string({ required_error: '入力が必須の項目です' }) + .min(1, { message: '入力が必須の項目です' }) + .max(255, { message: '255文字以内で入力してください' }) +// department +const department: z.ZodString = z + .string({ required_error: '入力が必須の項目です' }) + .min(1, { message: '入力が必須の項目です' }) + .max(255, { message: '255文字以内で入力してください' }) + +// name +const name: z.ZodString = z + .string({ required_error: '入力が必須の項目です' }) + .min(1, { message: '入力が必須の項目です' }) + .max(255, { message: '255文字以内で入力してください' }) + +// ふりがな +const kana: z.ZodString = z.string({ required_error: '入力が必須の項目です' }) +// TODO ふりがなのバリデーション調べて追加 + +// tel +const telephone: z.ZodString = z + .string({ required_error: '入力が必須の項目です' }) + .min(1, { message: '入力ちが必須の項目です' }) + .max(255, { message: '255文字以内で入力してください' }) + +// messageTitle +const title: z.ZodString = z + .string({ required_error: '入力が必須の項目です' }) + .min(1, { message: '入力が必須の項目です' }) + .max(255, { message: '255文字以内で入力してください' }) + +// message +const message: z.ZodString = z + .string({ required_error: '入力が必須の項目です' }) + .min(1, { message: '入力が必須の項目です' }) + .max(1000, { message: '1000文字以内で入力してください' }) + +// agree +const agree: z.ZodLiteral = z.literal('true', { + errorMap: () => ({ message: '同意が必要です' }), +}) + +export const ContactCorporationSchema = z.object({ + mail: mail, + company: company, + department: department, + name: name, + kana: kana, + telephone: telephone, + title: title, + message: message, + agree: agree, +}) + +export type ContactCorporationType = z.infer \ No newline at end of file diff --git a/src/schema/individual.ts b/src/schema/individual.ts new file mode 100644 index 0000000..739925c --- /dev/null +++ b/src/schema/individual.ts @@ -0,0 +1,53 @@ +import { z } from 'zod' + +// mail +const email: z.ZodString = z + .string({ required_error: '入力が必須の項目です' }) + .min(1, { message: '入力が必須の項目です' }) + .max(255, { message: '255文字以内で入力してください' }) + .email({ message: 'メールアドレスの形式で入力してください' }) + +// name +const name: z.ZodString = z + .string({ required_error: '入力が必須の項目です' }) + .min(1, { message: '入力が必須の項目です' }) + .max(255, { message: '255文字以内で入力してください' }) + +// ふりがな +const kana: z.ZodString = z.string({ required_error: '入力が必須の項目です' }) +// TODO ふりがなのバリデーション調べて追加 + +// tel +const telephone: z.ZodString = z + .string({ required_error: '入力が必須の項目です' }) + .min(1, { message: '入力ちが必須の項目です' }) + .max(255, { message: '255文字以内で入力してください' }) + +// messageTitle +const title: z.ZodString = z + .string({ required_error: '入力が必須の項目です' }) + .min(1, { message: '入力が必須の項目です' }) + .max(255, { message: '255文字以内で入力してください' }) + +// message +const message: z.ZodString = z + .string({ required_error: '入力が必須の項目です' }) + .min(1, { message: '入力が必須の項目です' }) + .max(1000, { message: '1000文字以内で入力してください' }) + +// agree +const agree: z.ZodLiteral = z.literal('true', { + errorMap: () => ({ message: '同意が必須です' }), +}) + +export const ContactIndividualSchema = z.object({ + email: email, + name: name, + kana: kana, + telephone: telephone, + title: title, + message: message, + agree: agree, +}) + +export type ContactIndividualType = z.infer \ No newline at end of file