Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
0.00% |
0 / 71 |
|
0.00% |
0 / 9 |
CRAP | |
0.00% |
0 / 1 |
| UserPersonaController | |
0.00% |
0 / 71 |
|
0.00% |
0 / 9 |
90 | |
0.00% |
0 / 1 |
| __construct | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
| index | |
0.00% |
0 / 16 |
|
0.00% |
0 / 1 |
2 | |||
| getQuota | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
2 | |||
| create | |
0.00% |
0 / 9 |
|
0.00% |
0 / 1 |
2 | |||
| generate | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
2 | |||
| update | |
0.00% |
0 / 9 |
|
0.00% |
0 / 1 |
2 | |||
| setDefault | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
2 | |||
| delete | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
| get | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
| 1 | <?php |
| 2 | |
| 3 | namespace App\Http\Controllers\v2; |
| 4 | |
| 5 | use App\Enums\HttpStatusCode; |
| 6 | use App\Http\Controllers\Controller; |
| 7 | use App\Http\Models\UserPersona; |
| 8 | use App\Http\Requests\UserPersona\UserPersonaCreateFormRequest; |
| 9 | use App\Http\Requests\UserPersona\UserPersonaGenerateAIEmulationFormRequest; |
| 10 | use App\Http\Requests\UserPersona\UserPersonaIndexFormRequest; |
| 11 | use App\Http\Requests\UserPersona\UserPersonaSetDefaultFormRequest; |
| 12 | use App\Http\Services\UserPersonaService; |
| 13 | use App\Traits\SubscriptionTrait; |
| 14 | use Illuminate\Http\JsonResponse; |
| 15 | use Illuminate\Http\Request; |
| 16 | use Illuminate\Support\Facades\Cache; |
| 17 | |
| 18 | class UserPersonaController extends Controller |
| 19 | { |
| 20 | use SubscriptionTrait; |
| 21 | private string $regeneratePersonaCacheKey = 'regenerate_persona_cache_key'; |
| 22 | |
| 23 | public function __construct( |
| 24 | private UserPersonaService $userPersonaService, |
| 25 | ) {} |
| 26 | |
| 27 | |
| 28 | public function index(UserPersonaIndexFormRequest $request): JsonResponse |
| 29 | { |
| 30 | $itemsPerPage = $request->input('items_per_page'); |
| 31 | $currentPage = $request->input('page'); |
| 32 | $disabled = $request->input('disabled', 'false') === 'true'; |
| 33 | $filter = $request->input('filter', ''); |
| 34 | |
| 35 | $data = $this->userPersonaService->getAll( |
| 36 | $itemsPerPage, |
| 37 | $currentPage, |
| 38 | $filter, |
| 39 | $disabled |
| 40 | ); |
| 41 | |
| 42 | return response()->json( |
| 43 | data: [ |
| 44 | 'data' => $data |
| 45 | ], |
| 46 | status: HttpStatusCode::OK->value |
| 47 | ); |
| 48 | } |
| 49 | |
| 50 | public function getQuota(Request $request): JsonResponse |
| 51 | { |
| 52 | $user = $request->user(); |
| 53 | $plan = $this->getCurrentPlan($user); |
| 54 | |
| 55 | $personaCount = UserPersona::where('user_id', $user->_id)->count(); |
| 56 | |
| 57 | return response()->json( |
| 58 | data: [ |
| 59 | 'created' => $personaCount, |
| 60 | 'quota' => $plan->user_persona_available, |
| 61 | 'remaining' => $plan->user_persona_available - $personaCount |
| 62 | ], |
| 63 | status: HttpStatusCode::CREATED->value |
| 64 | ); |
| 65 | } |
| 66 | |
| 67 | public function create(UserPersonaCreateFormRequest $request): JsonResponse |
| 68 | { |
| 69 | $userId = $request->user()->id; |
| 70 | |
| 71 | Cache::delete($this->regeneratePersonaCacheKey . "_{$userId}"); |
| 72 | |
| 73 | $validatedData = $request->validated(); |
| 74 | $validatedData['user_id'] = $userId; |
| 75 | |
| 76 | $data = $this->userPersonaService->create($validatedData); |
| 77 | |
| 78 | return response()->json( |
| 79 | data: $data, |
| 80 | status: HttpStatusCode::CREATED->value |
| 81 | ); |
| 82 | } |
| 83 | |
| 84 | public function generate(UserPersonaGenerateAIEmulationFormRequest $request): JsonResponse |
| 85 | { |
| 86 | $user = $request->user(); |
| 87 | $userId = $user->id; |
| 88 | $regenerateCount = Cache::get($this->regeneratePersonaCacheKey . "_{$userId}", 0); |
| 89 | Cache::put($this->regeneratePersonaCacheKey . "_{$userId}", $regenerateCount + 1, now()->addDay()); |
| 90 | |
| 91 | $validatedData = $request->validated(); |
| 92 | $validatedData['user_id'] = $userId; |
| 93 | |
| 94 | $data = $this->userPersonaService->generateUserPersonaAIEmulation($validatedData, $user, $regenerateCount); |
| 95 | |
| 96 | return response()->json( |
| 97 | data: $data, |
| 98 | status: HttpStatusCode::CREATED->value |
| 99 | ); |
| 100 | } |
| 101 | |
| 102 | public function update(UserPersonaCreateFormRequest $request, UserPersona $userPersona): JsonResponse |
| 103 | { |
| 104 | $userId = $request->user()->id; |
| 105 | |
| 106 | Cache::delete($this->regeneratePersonaCacheKey . "_{$userId}"); |
| 107 | |
| 108 | $validatedData = $request->validated(); |
| 109 | $validatedData['user_id'] = $userId; |
| 110 | |
| 111 | $data = $this->userPersonaService->update($userPersona->id, $validatedData); |
| 112 | |
| 113 | return response()->json( |
| 114 | data: $data, |
| 115 | status: HttpStatusCode::CREATED->value |
| 116 | ); |
| 117 | } |
| 118 | |
| 119 | public function setDefault(UserPersonaSetDefaultFormRequest $request, UserPersona $userPersona): JsonResponse |
| 120 | { |
| 121 | $validatedData = $request->validated(); |
| 122 | $data = $this->userPersonaService->setDefault($userPersona->id, $validatedData['is_default']); |
| 123 | |
| 124 | return response()->json( |
| 125 | data: $data, |
| 126 | status: HttpStatusCode::CREATED->value |
| 127 | ); |
| 128 | } |
| 129 | |
| 130 | public function delete(UserPersona $userPersona): JsonResponse |
| 131 | { |
| 132 | $this->userPersonaService->delete($userPersona); |
| 133 | |
| 134 | return response()->json( |
| 135 | status: HttpStatusCode::NO_CONTENT->value |
| 136 | ); |
| 137 | } |
| 138 | |
| 139 | public function get(UserPersona $userPersona): JsonResponse |
| 140 | { |
| 141 | return response()->json( |
| 142 | data: $userPersona, |
| 143 | status: HttpStatusCode::OK->value |
| 144 | ); |
| 145 | } |
| 146 | } |