ReviewRequest.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. 'favorite_provider' => ['sometimes', 'boolean'],
  25. 'photos' => ['sometimes', 'array', 'max:5'],
  26. 'photos.*' => ['file', 'image', 'mimes:jpg,jpeg,png,webp', 'max:10240'],
  27. ];
  28. if ($this->isMethod('POST')) {
  29. $scheduleId = $this->input('schedule_id');
  30. $origin = $this->input('origin');
  31. $originId = $this->input('origin_id');
  32. $rules['schedule_id'] = ['required', 'integer', 'exists:schedules,id'];
  33. $rules['origin'] = ['required', 'string', Rule::in(['provider', 'client'])];
  34. $rules['origin_id'] = [
  35. 'required',
  36. 'integer',
  37. Rule::unique('reviews', 'origin_id')
  38. ->where('schedule_id', $scheduleId)
  39. ->where('origin', $origin)
  40. ->whereNull('deleted_at')
  41. ->ignore($reviewId),
  42. ];
  43. $rules['stars'] = ['required', 'numeric', 'min:0', 'max:5'];
  44. $rules['improvements_ids'] = ['sometimes', 'array'];
  45. $rules['improvements_ids.*'] = ['integer', 'exists:improvement_types,id'];
  46. }
  47. return $rules;
  48. }
  49. public function messages(): array
  50. {
  51. return [
  52. 'origin_id.unique' => __('validation.custom.review.already_reviewed'),
  53. 'origin.in' => __('validation.custom.review.invalid_origin'),
  54. ];
  55. }
  56. }