Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
6 / 6
CRAP
100.00% covered (success)
100.00%
1 / 1
PromptPersonalMilestoneController
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
6 / 6
6
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 index
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 show
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 store
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 update
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 destroy
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\PromptPersonalMilestone;
7use App\Http\Requests\v2\PromptPersonalMilestone\DestroyPromptPersonalMilestoneRequest;
8use App\Http\Requests\v2\PromptPersonalMilestone\IndexPromptPersonalMilestoneRequest;
9use App\Http\Requests\v2\PromptPersonalMilestone\ShowPromptPersonalMilestoneRequest;
10use App\Http\Requests\v2\PromptPersonalMilestone\StorePromptPersonalMilestoneRequest;
11use App\Http\Requests\v2\PromptPersonalMilestone\UpdatePromptPersonalMilestoneRequest;
12use App\Http\Resources\v2\PromptPersonalMilestoneResource;
13use App\Http\Services\PromptPersonalMilestoneService;
14use Illuminate\Http\JsonResponse;
15use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
16
17/**
18 * Controller for managing prompt personal milestone configurations.
19 *
20 * Only accessible by users with the VENGRESO_ADMIN role.
21 * Provides CRUD operations for the prompt_personal_milestone collection,
22 * which stores "celebrate" post options used by post AI features.
23 */
24class PromptPersonalMilestoneController extends Controller
25{
26    public function __construct(
27        private PromptPersonalMilestoneService $promptPersonalMilestoneService
28    ) {}
29
30    /**
31     * Get all prompt personal milestones.
32     *
33     * @param  IndexPromptPersonalMilestoneRequest  $request  Validated request (authorization only)
34     *
35     * @response 200 {
36     *   "result": {
37     *     "data": [
38     *       {
39     *         "id": "684c1ce8dca2c6351807ec23",
40     *         "title": "Work Anniversary",
41     *         "prompt": "Create a post celebrating a work anniversary...",
42     *         "created_at": 1718278600,
43     *         "updated_at": 1718278600
44     *       }
45     *     ]
46     *   }
47     * }
48     */
49    public function index(IndexPromptPersonalMilestoneRequest $request): AnonymousResourceCollection
50    {
51        $milestones = $this->promptPersonalMilestoneService->getAll();
52
53        return PromptPersonalMilestoneResource::collection($milestones);
54    }
55
56    /**
57     * Get a single prompt personal milestone by ID.
58     *
59     * @param  ShowPromptPersonalMilestoneRequest  $request  Validated request (authorization only)
60     * @param  PromptPersonalMilestone  $promptPersonalMilestone  The milestone to retrieve (route model binding)
61     */
62    public function show(ShowPromptPersonalMilestoneRequest $request, PromptPersonalMilestone $promptPersonalMilestone): PromptPersonalMilestoneResource
63    {
64        return new PromptPersonalMilestoneResource($promptPersonalMilestone);
65    }
66
67    /**
68     * Create a new prompt personal milestone.
69     *
70     * @param  StorePromptPersonalMilestoneRequest  $request  Validated request with milestone data
71     */
72    public function store(StorePromptPersonalMilestoneRequest $request): JsonResponse
73    {
74        $milestone = $this->promptPersonalMilestoneService->create($request->validated());
75
76        return (new PromptPersonalMilestoneResource($milestone))
77            ->response()
78            ->setStatusCode(201);
79    }
80
81    /**
82     * Update an existing prompt personal milestone.
83     *
84     * @param  UpdatePromptPersonalMilestoneRequest  $request  Validated request with update data
85     * @param  PromptPersonalMilestone  $promptPersonalMilestone  The milestone to update (route model binding)
86     */
87    public function update(UpdatePromptPersonalMilestoneRequest $request, PromptPersonalMilestone $promptPersonalMilestone): PromptPersonalMilestoneResource
88    {
89        $milestone = $this->promptPersonalMilestoneService->update($promptPersonalMilestone, $request->validated());
90
91        return new PromptPersonalMilestoneResource($milestone);
92    }
93
94    /**
95     * Delete a prompt personal milestone.
96     *
97     * @param  DestroyPromptPersonalMilestoneRequest  $request  Validated request (authorization only)
98     * @param  PromptPersonalMilestone  $promptPersonalMilestone  The milestone to delete (route model binding)
99     *
100     * @response 204 No content
101     */
102    public function destroy(DestroyPromptPersonalMilestoneRequest $request, PromptPersonalMilestone $promptPersonalMilestone): JsonResponse
103    {
104        $this->promptPersonalMilestoneService->delete($promptPersonalMilestone);
105
106        return response()->json(null, 204);
107    }
108}