Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
GetBrandStatsRequest
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
4
100.00% covered (success)
100.00%
1 / 1
 rules
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3namespace App\Http\Requests\Api\V4;
4
5use App\Http\Requests\Api\V4\BaseApiRequest;
6use Illuminate\Support\Carbon;
7use Illuminate\Validation\ValidationException;
8
9class GetBrandStatsRequest extends BaseApiRequest
10{
11    /**
12     * Get the validation rules that apply to the request.
13     *
14     * @return array
15     * @throws \Illuminate\Validation\ValidationException If given dates are unparsable of
16     *                                                    period is bigger than 3 months.
17     * @throws \Exception If carbon date processing failed.
18     */
19    public function rules(): array
20    {
21        try {
22            if (Carbon::parse($this->end)->floatDiffInMonths(Carbon::parse($this->start)) > 3) {
23                throw ValidationException::withMessages([
24                    'Vous devez sélectionner une période de maximum 3 mois'
25                ]);
26            }
27        } catch (\Exception $e) {
28            if (\get_class($e) !== ValidationException::class) {
29                throw ValidationException::withMessages([
30                    'Les dates séléectionnées ne sembles pas être valides'
31                ]);
32            }
33            throw $e;
34        }
35        return [
36            'start' => 'required|date|date_format:Y-m-d',
37            'end'   => 'required|date|date_format:Y-m-d|after_or_equal:start',
38        ];
39    }
40}