VerificationController.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Resources\IdentityVerificationResource;
  4. use App\Services\IdentityVerificationService;
  5. use Illuminate\Http\JsonResponse;
  6. use Illuminate\Http\Request;
  7. use Throwable;
  8. class VerificationController extends Controller
  9. {
  10. public function __construct(
  11. private readonly IdentityVerificationService $service,
  12. ) {}
  13. public function createSession(Request $request): JsonResponse
  14. {
  15. try {
  16. return $this->successResponse(
  17. payload: $this->service->startFor($request->user(), $request->boolean('native')),
  18. message: __('identity_verification.session_created'),
  19. code: 201,
  20. );
  21. } catch (Throwable $e) {
  22. return $this->errorResponse(message: $e->getMessage(), code: 422);
  23. }
  24. }
  25. public function callback(Request $request)
  26. {
  27. $schemes = [
  28. 'client' => 'br.com.diarista.client',
  29. 'provider' => 'br.com.diarista.provider',
  30. ];
  31. return response()
  32. ->view('verification.callback', [
  33. 'status' => $request->query('status'),
  34. 'scheme' => $schemes[$request->query('app')] ?? null,
  35. ])
  36. ->header('Cache-Control', 'no-store');
  37. }
  38. public function me(Request $request): JsonResponse
  39. {
  40. return $this->successResponse(payload: $this->service->statusFor($request->user()));
  41. }
  42. public function pending(Request $request): JsonResponse
  43. {
  44. return $this->successResponse(
  45. payload: $this->service->pending(
  46. perPage: (int) $request->integer('per_page', 10),
  47. page: (int) $request->integer('page', 1),
  48. ),
  49. );
  50. }
  51. public function show(int $id): JsonResponse
  52. {
  53. $verification = $this->service->findWithFreshDecision($id);
  54. if (! $verification) {
  55. return $this->errorResponse(message: __('identity_verification.not_found'), code: 404);
  56. }
  57. return $this->successResponse(payload: $verification);
  58. }
  59. public function approve(Request $request, int $id): JsonResponse
  60. {
  61. return $this->review($request, $id, approved: true);
  62. }
  63. public function reject(Request $request, int $id): JsonResponse
  64. {
  65. return $this->review($request, $id, approved: false);
  66. }
  67. //
  68. private function review(Request $request, int $id, bool $approved): JsonResponse
  69. {
  70. try {
  71. $verification = $this->service->review(
  72. id: $id,
  73. approved: $approved,
  74. reviewer: $request->user(),
  75. comment: $request->string('comment')->toString() ?: null,
  76. );
  77. return $this->successResponse(
  78. payload: new IdentityVerificationResource($verification),
  79. message: __('identity_verification.reviewed'),
  80. );
  81. } catch (Throwable $e) {
  82. return $this->errorResponse(message: $e->getMessage(), code: 422);
  83. }
  84. }
  85. }