ReviewRequest.php 2.2 KB

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