api.so-manager-dev.com/app/Http/Requests/Api/UserInformationHistoryStoreRequest.php
Your Name 0b4acd7475
All checks were successful
Deploy api / deploy (push) Successful in 22s
Batch & API
2026-01-16 19:28:13 +09:00

85 lines
2.7 KiB
PHP

<?php
namespace App\Http\Requests\Api;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;
use App\Models\User;
class UserInformationHistoryStoreRequest extends FormRequest
{
/**
* リクエスト認可
*/
public function authorize(): bool
{
return true;
}
/**
* バリデーションルール
*/
public function rules(): array
{
return [
'user_id' => 'required|integer',
'entry_date' => 'required|date_format:Y-m-d',
'user_information_history' => 'required|string|max:255',
];
}
/**
* バリデーションエラーメッセージ
*/
public function messages(): array
{
return [
'user_id.required' => 'E02: user_id が未設定です。',
'user_id.integer' => 'E02: user_id は整数で指定してください。',
'entry_date.required' => 'E04: entry_date が未設定です。',
'entry_date.date_format' => 'E05: entry_date の形式が不正です。YYYY-MM-DD形式で指定してください。',
'user_information_history.required' => 'E06: user_information_history が未設定です。',
'user_information_history.string' => 'E06: user_information_history は文字列で指定してください。',
'user_information_history.max' => 'E07: user_information_history が255文字を超えています。',
];
}
/**
* 追加バリデーション
*/
public function withValidator(Validator $validator)
{
$validator->after(function ($validator) {
// user_idのエラーがない場合のみ存在チェック
if (!$validator->errors()->has('user_id') && $this->user_id) {
if (!User::where('user_id', $this->user_id)->exists()) {
$validator->errors()->add('user_id', 'E03: 指定された user_id が userテーブルに存在しません。');
}
}
});
}
/**
* バリデーション失敗時の処理
*/
protected function failedValidation(Validator $validator)
{
$errors = $validator->errors()->first();
// エラーコード抽出
preg_match('/^(E\d{2}):/', $errors, $matches);
$errorCode = $matches[1] ?? 'E99';
$message = preg_replace('/^E\d{2}: /', '', $errors);
throw new HttpResponseException(
response()->json([
'error' => [
'code' => $errorCode,
'message' => $message
]
], 400)
);
}
}