Motivation / 目的
POST /api/v1/user/create を実際のサインアップフォームから呼び出すと常に失敗していた。フォームは first_name / last_name / email / password / age_range のみを送信しており、subscription_tier を含めていなかったため。
Calling POST /api/v1/user/create from the actual signup form always failed. The form only sends first_name / last_name / email / password / age_range, and never subscription_tier.
調査でわかったこと / What we found
CreateUserCommand::fromArray が subscription_tier を必須キーとしていたため、リクエストは常に InvalidArgumentException(Missing required key: subscription_tier、実際には配列の並び順の都合で age_range の欠落として先に検出されるケースもあった)で失敗していた
UserController::createUser に dd($request) のデバッグ用コードが残っており、それ自体もリクエスト処理を止めていた
subscription_tier を単純に任意化しただけでは、CreateUserUseCase が null をそのまま SubscriptionTier::from() に渡してしまい、今度は ValueError("0" is not a valid backing value for enum SubscriptionTier 等)で失敗する別の問題が新たに顕在化した
対応方針 / Proposed fix
UserController::createUser から dd($request) を削除
CreateUserCommand の必須キーから subscription_tier を外す(age_range は必須のまま維持)
CreateUserUseCase で subscription_tier が未指定の場合は free をデフォルト適用する
Test Results / テスト結果
対応PR #548 を参照
Motivation / 目的
POST /api/v1/user/createを実際のサインアップフォームから呼び出すと常に失敗していた。フォームはfirst_name/last_name/email/password/age_rangeのみを送信しており、subscription_tierを含めていなかったため。Calling
POST /api/v1/user/createfrom the actual signup form always failed. The form only sendsfirst_name/last_name/email/password/age_range, and neversubscription_tier.調査でわかったこと / What we found
CreateUserCommand::fromArrayがsubscription_tierを必須キーとしていたため、リクエストは常にInvalidArgumentException(Missing required key: subscription_tier、実際には配列の並び順の都合でage_rangeの欠落として先に検出されるケースもあった)で失敗していたUserController::createUserにdd($request)のデバッグ用コードが残っており、それ自体もリクエスト処理を止めていたsubscription_tierを単純に任意化しただけでは、CreateUserUseCaseがnullをそのままSubscriptionTier::from()に渡してしまい、今度はValueError("0" is not a valid backing value for enum SubscriptionTier 等)で失敗する別の問題が新たに顕在化した対応方針 / Proposed fix
UserController::createUserからdd($request)を削除CreateUserCommandの必須キーからsubscription_tierを外す(age_rangeは必須のまま維持)CreateUserUseCaseでsubscription_tierが未指定の場合はfreeをデフォルト適用するTest Results / テスト結果
対応PR #548 を参照