Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
RolePlaySettingsController
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
2 / 2
2
100.00% covered (success)
100.00%
1 / 1
 show
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 update
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace App\Http\Controllers\v2\RolePlay;
4
5use App\Http\Controllers\Controller;
6use App\Http\Models\UserRolePlaySettings;
7use Illuminate\Http\JsonResponse;
8use Illuminate\Http\Request;
9
10/**
11 * RolePlay Settings Controller
12 *
13 * Manages per-user roleplay settings including default call type,
14 * difficulty, focus sections, and UI preferences.
15 */
16class RolePlaySettingsController extends Controller
17{
18    /**
19     * Get the authenticated user's roleplay settings.
20     *
21     * Returns existing settings or creates defaults if none exist.
22     *
23     * @param Request $request
24     * @return JsonResponse
25     *
26     * @response 200 {
27     *   "result": {
28     *     "id": "...",
29     *     "user_id": "...",
30     *     "default_call_type": "cold-call",
31     *     "default_difficulty": 3,
32     *     "focus_sections": [],
33     *     "scorecard_override": null,
34     *     "ui_preferences": {"show_radar": true, "show_timeline": true}
35     *   }
36     * }
37     */
38    public function show(Request $request): JsonResponse
39    {
40        $settings = UserRolePlaySettings::forUser($request->user()->id);
41
42        return response()->json(['data' => $settings]);
43    }
44
45    /**
46     * Update the authenticated user's roleplay settings.
47     *
48     * @param Request $request
49     * @return JsonResponse
50     *
51     * @response 200 {
52     *   "result": {
53     *     "data": {
54     *       "id": "...",
55     *       "user_id": "...",
56     *       "default_call_type": "cold-call",
57     *       "default_difficulty": 3,
58     *       "focus_sections": ["Introduction", "Rapport"],
59     *       "scorecard_override": null,
60     *       "ui_preferences": {"show_radar": true, "show_timeline": true}
61     *     }
62     *   }
63     * }
64     */
65    public function update(Request $request): JsonResponse
66    {
67        $validated = $request->validate([
68            'default_call_type'  => 'sometimes|in:cold-call,discovery-call',
69            'default_difficulty' => 'sometimes|integer|min:1|max:5',
70            'focus_sections'     => 'sometimes|array',
71            'focus_sections.*'   => 'string',
72            'ui_preferences'     => 'sometimes|array',
73        ]);
74
75        $settings = UserRolePlaySettings::forUser($request->user()->id);
76        $settings->update($validated);
77
78        return response()->json(['data' => $settings->fresh()]);
79    }
80}