user()->isActive(); } public function rules(): array { $maxKb = config('speech2text.upload.max_mb', 200) * 1024; $extensions = implode(',', config('speech2text.upload.allowed_extensions')); return [ 'title' => ['required', 'string', 'max:255'], 'description' => ['nullable', 'string', 'max:2000'], 'audio' => [ 'required', 'file', "mimes:{$extensions}", "max:{$maxKb}", new ValidAudioMagicBytes(), ], 'language' => ['nullable', 'string', 'in:ms,en'], ]; } public function attributes(): array { return [ 'title' => 'Tajuk projek', 'description' => 'Penerangan', 'audio' => 'Fail audio', 'language' => 'Bahasa', ]; } public function messages(): array { $maxMb = config('speech2text.upload.max_mb', 200); return [ 'audio.max' => "Saiz fail audio melebihi had maksimum {$maxMb}MB.", 'audio.mimes' => 'Format fail tidak disokong. Guna: mp3, wav, m4a, mp4, aac, ogg, flac, webm.', ]; } }