From 5a8055db920e492b6bd56ce648a43007ab1d173e Mon Sep 17 00:00:00 2001 From: atomisu0312 Date: Mon, 18 Aug 2025 23:21:01 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E3=80=90=E3=82=A4=E3=83=99=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=80=91=E3=80=90=E6=96=B0=E8=A6=8F=E4=BD=9C=E6=88=90?= =?UTF-8?q?=E3=80=91=E3=83=A6=E3=83=BC=E3=82=B6=E3=82=B0=E3=83=AB=E3=83=BC?= =?UTF-8?q?=E3=83=97=E3=81=8C=E7=A9=BA=E3=81=A7=E3=82=82=E3=82=A4=E3=83=99?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E4=BD=9C=E3=82=8C=E3=81=A6=E3=81=97?= =?UTF-8?q?=E3=81=BE=E3=81=86=EF=BC=88=E3=81=AA=E3=81=8A=E8=AA=B0=E3=82=82?= =?UTF-8?q?=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9=E3=81=AF=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=81=AA=E3=81=84=EF=BC=89=20#272?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ユーザグループを入力しなくてもイベントが作れてしまい、かつ、リダイレクト時に404と出てしまうエラーが確認されました。 流れは以下の通りです。 1. フォーム上のフィールド(user_group)が空欄の状態で渡される 2. バリデーション時にエラーとならず0として解釈 3. userGroupIdが0となり、そんなグループは存在しないので誰もアクセスできない。 以下の対策の両方を実施します。 - 新規グループ作成画面において、デフォルト値としてユーザグループを入れる - バリデーションで弾かれるようにする ご迷惑をおかけいたしました。 --- front/src/actions/event/register/viewmodel.ts | 6 +++--- .../templates/event/register/EventRegisterTemplate.tsx | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/front/src/actions/event/register/viewmodel.ts b/front/src/actions/event/register/viewmodel.ts index 5405e7a..cc08425 100644 --- a/front/src/actions/event/register/viewmodel.ts +++ b/front/src/actions/event/register/viewmodel.ts @@ -19,9 +19,9 @@ const BaseSchema = z.object({ description: z.string({ required_error: 'イベントの説明は必須です。', }), - userGroupId: z.coerce.number({ - required_error: 'ユーザーグループは必須です。', - }), + userGroupId: z.string() + .regex(/^\d+$/, { message: 'ユーザーグループの指定が不正です。' }) + .transform((val) => Number(val)), eventDate: z.string() .regex(DATE_PATTERN, 'イベント日はYYYY-MM-DD形式で入力してください。') .refine((date) => !isNaN(Date.parse(date)), '有効な日付を入力してください。'), diff --git a/front/src/components/templates/event/register/EventRegisterTemplate.tsx b/front/src/components/templates/event/register/EventRegisterTemplate.tsx index 3495ebd..c23f91b 100644 --- a/front/src/components/templates/event/register/EventRegisterTemplate.tsx +++ b/front/src/components/templates/event/register/EventRegisterTemplate.tsx @@ -25,6 +25,7 @@ export default function EventRegisterTemplate({ userGroups }: Readonly ({ value: group.id.toString(), label: group.name From 8e3e73498f480489443939f44876cb53b4602c20 Mon Sep 17 00:00:00 2001 From: atomisu0312 Date: Mon, 18 Aug 2025 23:49:08 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E3=80=90=E3=82=A4=E3=83=99=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=80=91=E3=80=90=E6=96=B0=E8=A6=8F=E4=BD=9C=E6=88=90?= =?UTF-8?q?=E3=80=91=E3=83=A6=E3=83=BC=E3=82=B6=E3=82=B0=E3=83=AB=E3=83=BC?= =?UTF-8?q?=E3=83=97=E3=81=8C=E7=A9=BA=E3=81=A7=E3=82=82=E3=82=A4=E3=83=99?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E4=BD=9C=E3=82=8C=E3=81=A6=E3=81=97?= =?UTF-8?q?=E3=81=BE=E3=81=86=EF=BC=88=E3=81=AA=E3=81=8A=E8=AA=B0=E3=82=82?= =?UTF-8?q?=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9=E3=81=AF=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=81=AA=E3=81=84=EF=BC=89=20#272=20=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E6=BC=8F=E3=82=8C=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- front/src/actions/event/register/viewmodel.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/front/src/actions/event/register/viewmodel.ts b/front/src/actions/event/register/viewmodel.ts index cc08425..66c5528 100644 --- a/front/src/actions/event/register/viewmodel.ts +++ b/front/src/actions/event/register/viewmodel.ts @@ -20,8 +20,7 @@ const BaseSchema = z.object({ required_error: 'イベントの説明は必須です。', }), userGroupId: z.string() - .regex(/^\d+$/, { message: 'ユーザーグループの指定が不正です。' }) - .transform((val) => Number(val)), + .refine((val) => val.length > 0 && !isNaN(Number(val)), { message: 'ユーザーグループの指定が不正です。' }), eventDate: z.string() .regex(DATE_PATTERN, 'イベント日はYYYY-MM-DD形式で入力してください。') .refine((date) => !isNaN(Date.parse(date)), '有効な日付を入力してください。'), @@ -108,6 +107,7 @@ export async function registerEvent( ...rest, startDateTime: new Date(`${eventDate}T${eventStartTime}:00.000`), endDateTime: new Date(`${eventDate}T${eventEndTime}:00.000`), + userGroupId: Number(rest.userGroupId) }; // イベントの登録処理(トランザクションは正直なくてもいいけど、lib/db側の記述がシンプルになるために使用)