From 2e96682464683f1b0cf2ab8cdcd695ec270ff74b Mon Sep 17 00:00:00 2001 From: Tokyun02 Date: Tue, 18 Feb 2025 14:39:53 +0900 Subject: [PATCH 1/4] =?UTF-8?q?:bug:=20fix=20:=20comment=20=EC=8A=A4?= =?UTF-8?q?=ED=82=A4=EB=A7=88=20=EC=9E=AC=EC=A7=80=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/comments/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apis/comments/index.ts b/src/apis/comments/index.ts index fbab138..4c110c2 100644 --- a/src/apis/comments/index.ts +++ b/src/apis/comments/index.ts @@ -26,7 +26,7 @@ export const getComments = async (params: GetCommentsParams) => { */ export const putComment = async (commentId: number, putCommentForm: PutCommentForm) => { const response = await axiosClientHelper.put(`/comments/${commentId}`, putCommentForm); - return safeResponse(response.data, commentsResponseSchema); + return safeResponse(response.data, commentSchema); }; /** From 8e13f0e24d07df4774e88541f49c6e4226d9affe Mon Sep 17 00:00:00 2001 From: Tokyun02 Date: Tue, 18 Feb 2025 15:28:39 +0900 Subject: [PATCH 2/4] =?UTF-8?q?:recycle:=20refactor=20:=20schema=20trim=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/auth/types.ts | 6 +++--- src/apis/cards/types.ts | 6 +++--- src/apis/columns/types.ts | 2 +- src/apis/comments/types.ts | 2 +- src/apis/dashboards/types.ts | 1 + src/apis/users/types.ts | 6 +++--- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/apis/auth/types.ts b/src/apis/auth/types.ts index 23faf10..72a0038 100644 --- a/src/apis/auth/types.ts +++ b/src/apis/auth/types.ts @@ -31,9 +31,9 @@ export type LoginResponse = Promise; export const passwordSchema = z .object({ - password: z.string().min(PASSWORD_PUT_FORM_VALID_LENGTH.PASSWORD.MIN, PASSWORD_PUT_FORM_ERROR_MESSAGE.PASSWORD.MIN), - newPassword: z.string().min(PASSWORD_PUT_FORM_VALID_LENGTH.NEW_PASSWORD.MIN, PASSWORD_PUT_FORM_ERROR_MESSAGE.NEW_PASSWORD.MIN), - newPasswordConfirm: z.string(), + password: z.string().min(PASSWORD_PUT_FORM_VALID_LENGTH.PASSWORD.MIN, PASSWORD_PUT_FORM_ERROR_MESSAGE.PASSWORD.MIN).trim(), + newPassword: z.string().min(PASSWORD_PUT_FORM_VALID_LENGTH.NEW_PASSWORD.MIN, PASSWORD_PUT_FORM_ERROR_MESSAGE.NEW_PASSWORD.MIN).trim(), + newPasswordConfirm: z.string().trim(), }) .refine((check) => check.newPassword === check.newPasswordConfirm, { message: PASSWORD_PUT_FORM_ERROR_MESSAGE.NEW_PASSWORD_CONFRIM.NOT_MATCH, diff --git a/src/apis/cards/types.ts b/src/apis/cards/types.ts index 968e7ec..5549384 100644 --- a/src/apis/cards/types.ts +++ b/src/apis/cards/types.ts @@ -6,12 +6,12 @@ const IMAGE_URL = 'https://sprint-fe-project.s3.ap-northeast-2.amazonaws.com/tas const cardBaseSchema = z.object({ dashboardId: z.number(), columnId: z.number(), - title: z.string(), - description: z.string(), + title: z.string().trim(), + description: z.string().trim(), dueDate: z.union([z.string(), z.instanceof(Date)]).refine((date) => isValidDate(date), { message: '유효하지 않은 날짜 형식입니다.', }), - tags: z.array(z.string()), + tags: z.array(z.string().trim()), imageUrl: z.string().url(), }); diff --git a/src/apis/columns/types.ts b/src/apis/columns/types.ts index 01a3fd1..887f2e1 100644 --- a/src/apis/columns/types.ts +++ b/src/apis/columns/types.ts @@ -25,7 +25,7 @@ export const getColumnsParamsSchema = z.object({ export type GetColumnsParams = z.infer; export const columnFormSchema = z.object({ - title: z.string(), + title: z.string().trim(), }); export type ColumnForm = z.infer; diff --git a/src/apis/comments/types.ts b/src/apis/comments/types.ts index af623b4..88fe7af 100644 --- a/src/apis/comments/types.ts +++ b/src/apis/comments/types.ts @@ -16,7 +16,7 @@ export const commentSchema = z.object({ export type Comment = z.infer; export const commentFormSchema = z.object({ - content: z.string(), + content: z.string().trim(), cardId: z.number(), columnId: z.number(), dashboardId: z.number(), diff --git a/src/apis/dashboards/types.ts b/src/apis/dashboards/types.ts index a524526..f466893 100644 --- a/src/apis/dashboards/types.ts +++ b/src/apis/dashboards/types.ts @@ -30,6 +30,7 @@ export type GetDashboardsRequest = Partial & { export const dashboardFormSchema = z.object({ title: z .string() + .trim() .min(DASHBOARD_FORM_VALID_LENGTH.TITLE.MIN, { message: DASHBOARD_FORM_ERROR_MESSAGE.TITLE.MIN }) .max(DASHBOARD_FORM_VALID_LENGTH.TITLE.MAX, { message: DASHBOARD_FORM_ERROR_MESSAGE.TITLE.MAX }), color: z.enum(DEFAULT_COLORS), diff --git a/src/apis/users/types.ts b/src/apis/users/types.ts index fde19d7..d5ac11f 100644 --- a/src/apis/users/types.ts +++ b/src/apis/users/types.ts @@ -9,9 +9,9 @@ interface FailResponse { export const signupSchema = z .object({ email: z.string().min(SIGNUP_FORM_VALID_LENGTH.EMAIL.MIN, SIGNUP_FORM_ERROR_MESSAGE.EMAIL.MIN).email(SIGNUP_FORM_ERROR_MESSAGE.EMAIL.NOT_FORM), - nickname: z.string().min(SIGNUP_FORM_VALID_LENGTH.NICKNAME.MIN, SIGNUP_FORM_ERROR_MESSAGE.NICKNAME.MIN).max(SIGNUP_FORM_VALID_LENGTH.NICKNAME.MAX, SIGNUP_FORM_ERROR_MESSAGE.NICKNAME.MAX), - password: z.string().min(SIGNUP_FORM_VALID_LENGTH.PASSWORD.MIN, SIGNUP_FORM_ERROR_MESSAGE.PASSWORD.MIN), - passwordConfirm: z.string(), + nickname: z.string().trim().min(SIGNUP_FORM_VALID_LENGTH.NICKNAME.MIN, SIGNUP_FORM_ERROR_MESSAGE.NICKNAME.MIN).max(SIGNUP_FORM_VALID_LENGTH.NICKNAME.MAX, SIGNUP_FORM_ERROR_MESSAGE.NICKNAME.MAX), + password: z.string().trim().min(SIGNUP_FORM_VALID_LENGTH.PASSWORD.MIN, SIGNUP_FORM_ERROR_MESSAGE.PASSWORD.MIN), + passwordConfirm: z.string().trim(), terms: z.boolean(), }) .refine((check) => check.password === check.passwordConfirm, { From 20abe9b8b1d9fc7510beb671c496d0ca79cbc46d Mon Sep 17 00:00:00 2001 From: "chanki.kim" Date: Tue, 18 Feb 2025 15:53:01 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=90=9B=20fix=20:=20tags=20=EA=B8=B8?= =?UTF-8?q?=EC=9D=B4=20=EC=A0=9C=ED=95=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?= =?UTF-8?q?=20=EC=97=90=EB=9F=AC=EB=A9=94=EC=8B=9C=EC=A7=80=20=ED=95=B8?= =?UTF-8?q?=EB=93=A4=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/cards/types.ts | 2 +- src/components/columns/CreateCard.tsx | 4 +++- src/components/todo/TodoEditModal.tsx | 10 +++++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/apis/cards/types.ts b/src/apis/cards/types.ts index 5549384..2f09415 100644 --- a/src/apis/cards/types.ts +++ b/src/apis/cards/types.ts @@ -11,7 +11,7 @@ const cardBaseSchema = z.object({ dueDate: z.union([z.string(), z.instanceof(Date)]).refine((date) => isValidDate(date), { message: '유효하지 않은 날짜 형식입니다.', }), - tags: z.array(z.string().trim()), + tags: z.array(z.string().trim().max(10, '10글자 이하로 작성해주세요')), imageUrl: z.string().url(), }); diff --git a/src/components/columns/CreateCard.tsx b/src/components/columns/CreateCard.tsx index df1fff2..aea41e5 100644 --- a/src/components/columns/CreateCard.tsx +++ b/src/components/columns/CreateCard.tsx @@ -3,6 +3,7 @@ import { Ref } from 'react'; import { Controller, useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; +import { isArray } from 'es-toolkit/compat'; import useAlert from '@/hooks/useAlert'; import { CardForm, cardFormSchema } from '@/apis/cards/types'; import { useCreateCard } from '@/apis/cards/queries'; @@ -100,7 +101,8 @@ export default function CreateCard({ dashboardId, columnId, ref }: CreateCardPro name='tags' control={control} render={({ field }) => { - return ; + const errorMessage = isArray(errors.tags) ? errors.tags.find((error) => !!error)?.message : undefined; + return ; }} /> } /> - } /> + { + const errorMessage = isArray(errors.tags) ? errors.tags.find((error) => !!error)?.message : undefined; + return ; + }} + /> } /> From e1a1613b923d1c790fe90b1c3baff3f4142983e0 Mon Sep 17 00:00:00 2001 From: SeokChan-Lee Date: Tue, 18 Feb 2025 16:10:48 +0900 Subject: [PATCH 4/4] =?UTF-8?q?:bug:=20fix:=EC=BB=AC=EB=9F=BC=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EC=8B=9C=20=EA=B3=B5=EB=B0=B1=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20=EC=A0=9C=ED=95=9C(z.trim.min=20=EC=B6=94=EA=B0=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/columns/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apis/columns/types.ts b/src/apis/columns/types.ts index 887f2e1..135b2bd 100644 --- a/src/apis/columns/types.ts +++ b/src/apis/columns/types.ts @@ -25,7 +25,7 @@ export const getColumnsParamsSchema = z.object({ export type GetColumnsParams = z.infer; export const columnFormSchema = z.object({ - title: z.string().trim(), + title: z.string().trim().min(2, { message: '컬럼 이름은 최소 2글자 이상이어야 합니다.' }), }); export type ColumnForm = z.infer;