Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 58
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
UserPersonaGenerateAIEmulationFormRequest
0.00% covered (danger)
0.00%
0 / 58
0.00% covered (danger)
0.00%
0 / 3
42
0.00% covered (danger)
0.00%
0 / 1
 authorize
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
6
 rules
0.00% covered (danger)
0.00%
0 / 47
0.00% covered (danger)
0.00%
0 / 1
12
 prepareForValidation
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\Http\Requests\UserPersona;
4
5use App\Traits\SubscriptionTrait;
6use Illuminate\Foundation\Http\FormRequest;
7use Illuminate\Support\Facades\Cache;
8
9class UserPersonaGenerateAIEmulationFormRequest extends FormRequest
10{
11    use SubscriptionTrait;
12
13    /**
14     * Determine if the user is authorized to make this request.
15     */
16    public function authorize(): bool
17    {
18        $user = $this->user();
19        $plan = $this->getCurrentPlan($user);
20
21        // if regenerate is true, we don't need to check for persona count
22        if ($this->input('regenerate')) {
23            $userId = $user->id;
24            $regenerateCount = Cache::get($this->regeneratePersonaCacheKey . "_{$userId}", 0);
25
26            return $regenerateCount < $plan->regenerate_count;
27        }
28
29        return true;
30    }
31
32    /**
33     * Get the validation rules that apply to the request.
34     *
35     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
36     */
37    public function rules(): array
38    {
39        $requiredString = 'required|string';
40        $sometimesString = 'sometimes|nullable|string';
41        $requiredArray = 'required|array|min:1';
42        $sometimesArray = 'sometimes|array';
43        $sometimesStringMax = 'sometimes|nullable|string|max:1000';
44
45        $rules = [
46            'name' => $requiredString,
47            'professional_interests' => $requiredArray,
48            'professional_interests.*' => $requiredString,
49            'industry' => $requiredString,
50            'prompt_tone_id' => 'required|string|exists:prompt_tone,_id',
51            'type' => 'required|string|in:person,company',
52            'linkedin_url' => $sometimesString,
53            'achievements' => $sometimesString,
54            'preferred_keywords_and_phrases' => $sometimesArray,
55            'preferred_keywords_and_phrases.*' => $requiredString,
56            'communication_style' => $sometimesArray,
57            'communication_style.*' => $requiredString,
58            'education_background' => $sometimesArray,
59            'education_background.*' => $requiredString,
60            'field_of_expertise' => $sometimesArray,
61            'field_of_expertise.*' => $requiredString,
62            'goals' => $sometimesString,
63            'hobbies' => $sometimesArray,
64            'hobbies.*' => $requiredString,
65            'personal_interests' => $sometimesArray,
66            'personal_interests.*' => $requiredString,
67            'skills' => $sometimesArray,
68            'skills.*' => $requiredString,
69            'taboos' => $sometimesArray,
70            'taboos.*' => $requiredString,
71            'title' => $sometimesString,
72            'content' => $sometimesStringMax,
73            'networking' => $sometimesStringMax,
74            'personal_info' => $sometimesStringMax,
75            'is_default' => 'required|boolean',
76            'regenerate' => 'required|boolean',
77        ];
78
79        if ($this->input('type') === 'person') {
80            $rules['first_name'] = $requiredString;
81            $rules['last_name'] = $requiredString;
82            $rules['company_name'] = $sometimesString;
83        }
84
85        if ($this->input('type') === 'company') {
86            $rules['first_name'] = $sometimesString;
87            $rules['last_name'] = $sometimesString;
88            $rules['company_name'] = $requiredString;
89        }
90
91        return $rules;
92    }
93
94    protected function prepareForValidation()
95    {
96        $this->merge([
97            'items_per_page' => $this->input('items_per_page', 10),
98            'page' => $this->input('page', 1),
99        ]);
100    }
101}