/
itp_practice
/
itp_backend
Обзор
Документация
Войти
/
itp_practice
/
itp_backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/Http/Requests/UpdateTelegramRequest.php
130 строк
4 KB
vivanenko
profile edit
29 май 2025, 19:57
29 май 2025, 19:57
2ec716b
Код
Авторство
О чём код?
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Auth; use Illuminate\Validation\Rule; /** * Update Telegram Form Request * * Validates Telegram data update requests following SOLID principles: * - Single Responsibility: Only validates Telegram update data * - Open/Closed: Rules can be extended without modification */ class UpdateTelegramRequest extends FormRequest { /** * Determine if the user is authorized to make this request. */ public function authorize(): bool { // User must be authenticated to update their Telegram data return Auth::check(); } /** * Get the validation rules that apply to the request. * * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string> */ public function rules(): array { return [ 'telegram_username' => [ 'nullable', 'string', 'min:5', 'max:32', 'regex:/^[a-zA-Z0-9_]+$/', // Only alphanumeric and underscore Rule::unique('users', 'telegram_username') ->ignore(Auth::id()) ->whereNotNull('telegram_username') ], 'telegram_id' => [ 'nullable', 'string', 'regex:/^\d+$/', // Only numeric 'min:5', 'max:20', Rule::unique('users', 'telegram_id') ->ignore(Auth::id()) ->whereNotNull('telegram_id') ] ]; } /** * Get custom error messages for validator errors. * * @return array<string, string> */ public function messages(): array { return [ 'telegram_username.string' => 'Telegram username должен быть строкой', 'telegram_username.min' => 'Telegram username должен содержать минимум 5 символов', 'telegram_username.max' => 'Telegram username должен содержать максимум 32 символа', 'telegram_username.regex' => 'Telegram username может содержать только буквы, цифры и подчеркивания', 'telegram_username.unique' => 'Этот Telegram username уже используется другим пользователем', 'telegram_id.string' => 'Telegram ID должен быть строкой', 'telegram_id.regex' => 'Telegram ID должен содержать только цифры', 'telegram_id.min' => 'Telegram ID должен содержать минимум 5 цифр', 'telegram_id.max' => 'Telegram ID должен содержать максимум 20 цифр', 'telegram_id.unique' => 'Этот Telegram ID уже используется другим пользователем' ]; } /** * Get custom attributes for validator errors. * * @return array<string, string> */ public function attributes(): array { return [ 'telegram_username' => 'Telegram Username', 'telegram_id' => 'Telegram ID' ]; } /** * Configure the validator instance. * * @param \Illuminate\Validation\Validator $validator * @return void */ public function withValidator($validator): void { $validator->after(function ($validator) { // At least one field must be provided if (!$this->telegram_username && !$this->telegram_id) { $validator->errors()->add('telegram_data', 'Необходимо указать хотя бы одно поле: Telegram Username или Telegram ID'); } }); } /** * Prepare the data for validation. * * @return void */ protected function prepareForValidation(): void { // Clean telegram username from @ symbol if present if ($this->has('telegram_username') && $this->telegram_username) { $this->merge([ 'telegram_username' => ltrim($this->telegram_username, '@') ]); } // Trim whitespace from telegram_id if ($this->has('telegram_id') && $this->telegram_id) { $this->merge([ 'telegram_id' => trim($this->telegram_id) ]); } } }