ReviewRequest.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace App\Http\Requests;
  3. use Illuminate\Foundation\Http\FormRequest;
  4. use Illuminate\Validation\Rule;
  5. class ReviewRequest extends FormRequest
  6. {
  7. public function authorize(): bool
  8. {
  9. return true;
  10. }
  11. public function rules(): array
  12. {
  13. $reviewId = $this->route('id');
  14. $rules = [
  15. 'schedule_id' => ['sometimes', 'integer', 'exists:schedules,id'],
  16. 'origin' => ['sometimes', 'string', Rule::in(['provider', 'client'])],
  17. 'origin_id' => ['sometimes', 'integer'],
  18. 'stars' => ['sometimes', 'numeric', 'min:0', 'max:5'],
  19. 'comment' => ['nullable', 'string'],
  20. 'improvements_ids' => ['nullable', 'array'],
  21. 'improvements_ids.*' => ['integer', 'exists:improvement_types,id'],
  22. 'block_provider' => ['sometimes', 'boolean'],
  23. 'block_client' => ['sometimes', 'boolean'],
  24. ];
  25. if ($this->isMethod('POST')) {
  26. $scheduleId = $this->input('schedule_id');
  27. $origin = $this->input('origin');
  28. $originId = $this->input('origin_id');
  29. $rules['schedule_id'] = ['required', 'integer', 'exists:schedules,id'];
  30. $rules['origin'] = ['required', 'string', Rule::in(['provider', 'client'])];
  31. $rules['origin_id'] = [
  32. 'required',
  33. 'integer',
  34. Rule::unique('reviews', 'origin_id')
  35. ->where('schedule_id', $scheduleId)
  36. ->where('origin', $origin)
  37. ->whereNull('deleted_at')
  38. ->ignore($reviewId),
  39. ];
  40. $rules['stars'] = ['required', 'numeric', 'min:0', 'max:5'];
  41. $rules['improvements_ids'] = ['sometimes', 'array'];
  42. $rules['improvements_ids.*'] = ['integer', 'exists:improvement_types,id'];
  43. }
  44. return $rules;
  45. }
  46. public function messages(): array
  47. {
  48. return [
  49. 'origin_id.unique' => __('validation.custom.review.already_reviewed'),
  50. 'origin.in' => __('validation.custom.review.invalid_origin'),
  51. ];
  52. }
  53. }