Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
71.43% covered (warning)
71.43%
5 / 7
75.00% covered (warning)
75.00%
3 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
UserController
71.43% covered (warning)
71.43%
5 / 7
75.00% covered (warning)
75.00%
3 / 4
4.37
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 updateBetaFlag
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 setPassword
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 updateDeveloperMode
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace App\Http\Controllers\v2\Admin;
4
5use App\Http\Controllers\Controller;
6use App\Http\Models\Auth\User;
7use App\Http\Requests\v2\User\AdminSetPasswordRequest;
8use App\Http\Requests\v2\User\UpdateBetaFlagRequest;
9use App\Http\Requests\v2\User\UpdateDeveloperModeRequest;
10use App\Http\Resources\v2\Admin\UserBetaFlagResource;
11use App\Http\Resources\v2\Admin\UserDeveloperModeResource;
12use App\Http\Services\Admin\Users\AdminSetPasswordService;
13use App\Http\Services\Admin\Users\UserBetaFlagService;
14use App\Http\Services\Admin\Users\UserDeveloperModeService;
15use Illuminate\Http\JsonResponse;
16
17/**
18 * Admin User Controller
19 *
20 * Provides administrative operations on users.
21 * All endpoints require the VENGRESO_ADMIN role.
22 */
23class UserController extends Controller
24{
25    public function __construct(
26        private UserBetaFlagService $userBetaFlagService,
27        private AdminSetPasswordService $adminSetPasswordService,
28        private UserDeveloperModeService $userDeveloperModeService,
29    ) {}
30
31    /**
32     * Update the is_beta flag for a given user.
33     *
34     * @param  UpdateBetaFlagRequest  $request  Validated admin request with is_beta boolean
35     * @param  User  $user  The target user (resolved via route model binding)
36     *
37     * @response 200 {
38     *   "result": {
39     *     "id": "507f1f77bcf86cd799439011",
40     *     "email": "user@example.com",
41     *     "is_beta": true
42     *   }
43     * }
44     */
45    public function updateBetaFlag(UpdateBetaFlagRequest $request, User $user): UserBetaFlagResource
46    {
47        $updated = $this->userBetaFlagService->updateBetaFlag($user, $request->boolean('is_beta'));
48
49        return new UserBetaFlagResource($updated);
50    }
51
52    /**
53     * Force-set a new password for a user without requiring the old password.
54     *
55     * This endpoint is restricted to VENGRESO_ADMIN users only.
56     *
57     * @param  AdminSetPasswordRequest  $request  Validated request containing the new password
58     * @param  User  $user  The target user (resolved via route model binding)
59     *
60     * @response 200 {"result": {"message": "Password updated successfully."}}
61     */
62    public function setPassword(AdminSetPasswordRequest $request, User $user): JsonResponse
63    {
64        $this->adminSetPasswordService->setPassword($user, $request->input('password'));
65
66        return response()->json(['message' => 'Password updated successfully.']);
67    }
68
69    /**
70     * Update the developer_mode flag for a given user.
71     *
72     * When enabled, the meta-data endpoint returns `developer_mode: true` so the
73     * client can override the global remote configuration.
74     *
75     * @param  UpdateDeveloperModeRequest  $request  Validated admin request with developer_mode boolean
76     * @param  User  $user  The target user (resolved via route model binding)
77     *
78     * @response 200 {
79     *   "result": {
80     *     "id": "507f1f77bcf86cd799439011",
81     *     "email": "user@example.com",
82     *     "developer_mode": true
83     *   }
84     * }
85     */
86    public function updateDeveloperMode(UpdateDeveloperModeRequest $request, User $user): UserDeveloperModeResource
87    {
88        $updated = $this->userDeveloperModeService->updateDeveloperMode($user, $request->boolean('developer_mode'));
89
90        return new UserDeveloperModeResource($updated);
91    }
92}