Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 89
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
ShortcutCategoryFormRequest
0.00% covered (danger)
0.00%
0 / 89
0.00% covered (danger)
0.00%
0 / 2
90
0.00% covered (danger)
0.00%
0 / 1
 authorize
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 rules
0.00% covered (danger)
0.00%
0 / 88
0.00% covered (danger)
0.00%
0 / 1
72
1<?php
2
3namespace App\Http\Requests;
4
5use Illuminate\Foundation\Http\FormRequest;
6use Illuminate\Validation\Rule;
7
8class ShortcutCategoryFormRequest extends FormRequest
9{
10    public function authorize(): bool
11    {
12        return true;
13    }
14
15    public function rules(): array
16    {
17        $rules = [];
18        switch ($this->method()) {
19            case 'POST':
20                $rules = [
21                    'name' => [
22                        'required',
23                        Rule::unique('shortcut_categories')->where(function ($query) {
24                            return $query->where([
25                                ['name', $this->name],
26                                ['user_id', request()->user()->id],
27                            ]);
28                        }),
29                    ],
30                    'category_id' => 'exists:shortcut_categories,_id',
31                    'sub_categories_lv1' => 'exists:shortcut_sub_categories_lv1,_id',
32                ];
33
34                if ($this->category_id) {
35                    $rules['name'] = [
36                        'required',
37                        Rule::unique('shortcut_sub_categories_lv1')->where(function ($query) {
38                            return $query->where([
39                                ['name', $this->name],
40                                ['user_id', request()->user()->id],
41                                ['category_id', $this->category_id],
42                            ]);
43                        }),
44                    ];
45                }
46
47                if ($this->sub_categories_lv1) {
48                    $rules['name'] = [
49                        'required',
50                        Rule::unique('shortcut_sub_categories_lv2')->where(function ($query) {
51                            return $query->where([
52                                ['name', $this->name],
53                                ['user_id', request()->user()->id],
54                                ['sub_categories_lv1', $this->sub_categories_lv1],
55                            ]);
56                        }),
57                    ];
58                }
59
60                break;
61
62            case 'PUT':
63                $rules = [
64                    'name' => [
65                        'required',
66                        Rule::unique('shortcut_categories')->where(function ($query) {
67                            return $query->where([
68                                ['name', $this->name],
69                                ['user_id', request()->user()->id],
70                                ['_id', '!=', $this->id],
71                            ]);
72                        }),
73                    ],
74                    'category_id' => 'exists:shortcut_categories,_id',
75                    'sub_categories_lv1' => 'exists:shortcut_sub_categories_lv1,_id',
76                    'source_category_type' => 'in:category,sub_categories_lv1,sub_categories_lv2'
77                ];
78
79                if ($this->category_id) {
80                    $rules['name'] = [
81                        'required',
82                        Rule::unique('shortcut_sub_categories_lv1')->where(function ($query) {
83                            return $query->where([
84                                ['name', $this->name],
85                                ['user_id', request()->user()->id],
86                                ['category_id', $this->category_id],
87                                ['_id', '!=', $this->id],
88                            ]);
89                        }),
90                    ];
91                }
92
93                if ($this->sub_categories_lv1) {
94                    $rules['name'] = [
95                        'required',
96                        Rule::unique('shortcut_sub_categories_lv2')->where(function ($query) {
97                            return $query->where([
98                                ['name', $this->name],
99                                ['user_id', request()->user()->id],
100                                ['sub_categories_lv1', $this->sub_categories_lv1],
101                                ['_id', '!=', $this->id],
102                            ]);
103                        }),
104                    ];
105                }
106
107                break;
108
109            case 'DELETE':
110                $rules = [
111                    'category_type' => 'required|in:category,sub_categories_lv1,sub_categories_lv2',
112                    'type' => 'in:move,remove',
113                    'category_id' => 'exists:shortcut_categories,_id'
114                ];
115                break;
116        }
117
118        return $rules;
119    }
120}