check() && auth()->user()->role === 'admin'; } public function rules(): array { return [ 'segments' => ['required', 'array', 'min:2', 'max:10'], 'segments.*' => ['required', 'string', 'min:20', 'max:10000'], 'notes' => ['nullable', 'string', 'max:500'], ]; } public function messages(): array { return [ 'segments.required' => 'Sila masukkan segmen untuk split.', 'segments.min' => 'Split memerlukan sekurang-kurangnya 2 segmen.', 'segments.max' => 'Maksimum 10 segmen dibenarkan dalam satu operasi split.', 'segments.*.required' => 'Segmen tidak boleh kosong.', 'segments.*.min' => 'Setiap segmen mesti sekurang-kurangnya 20 aksara untuk embedding bermakna.', 'segments.*.max' => 'Setiap segmen tidak boleh melebihi 10,000 aksara.', 'notes.max' => 'Nota tidak boleh melebihi 500 aksara.', ]; } protected function prepareForValidation(): void { // Trim setiap segmen dan buang segmen yang benar-benar kosong if ($this->has('segments')) { $segments = array_values( array_filter( array_map('trim', $this->input('segments', [])), fn($s) => $s !== '' ) ); $this->merge(['segments' => $segments]); } } }