EvaluationController.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\EvaluationRequest;
  4. use App\Http\Resources\EvaluationCampaignResource;
  5. use App\Http\Resources\EvaluationResource;
  6. use App\Services\EvaluationCampaignService;
  7. use Illuminate\Http\JsonResponse;
  8. use Illuminate\Support\Facades\Auth;
  9. class EvaluationController extends Controller
  10. {
  11. public function __construct(protected EvaluationCampaignService $service) {}
  12. /**
  13. * Campanha que o usuário logado ainda precisa responder (null quando não há pendência).
  14. */
  15. public function pending(): JsonResponse
  16. {
  17. $campaign = $this->service->getPendingForUser(Auth::user());
  18. return $this->successResponse(
  19. payload: $campaign ? new EvaluationCampaignResource($campaign) : null,
  20. );
  21. }
  22. public function store(EvaluationRequest $request): JsonResponse
  23. {
  24. $validated = $request->validated();
  25. $result = $this->service->submit(
  26. user: Auth::user(),
  27. campaignId: (int) $validated['evaluation_campaign_id'],
  28. data: $validated,
  29. );
  30. if (isset($result['error'])) {
  31. return match ($result['error']) {
  32. 'not_found' => $this->errorResponse(message: __('messages.not_found')),
  33. 'already_answered' => $this->errorResponse(message: __('messages.evaluation.already_answered'), code: 409),
  34. 'not_eligible' => $this->errorResponse(message: __('messages.evaluation.not_eligible'), code: 403),
  35. default => $this->errorResponse(message: __('messages.evaluation.inactive'), code: 422),
  36. };
  37. }
  38. return $this->successResponse(
  39. payload: new EvaluationResource($result['evaluation']),
  40. message: __('messages.evaluation.submitted'),
  41. code: 201,
  42. );
  43. }
  44. }