Browse Source

✨ feat(landing): adicionar endpoint público de registro de associado via landing page

Fase: dev | Origin: ajuste-cliente
Gustavo Zanatta 1 tuần trước cách đây
mục cha
commit
77bc753ed8

+ 19 - 0
app/Http/Controllers/LandingPageController.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Http\Requests\LandingPageRegisterRequest;
+use App\Services\LandingPageService;
+use Illuminate\Http\JsonResponse;
+
+class LandingPageController extends Controller
+{
+    public function __construct(protected LandingPageService $service) {}
+
+    public function register(LandingPageRegisterRequest $request): JsonResponse
+    {
+        $this->service->registerUser($request->validated());
+
+        return $this->successResponse(message: __('messages.landing.register_success'));
+    }
+}

+ 20 - 0
app/Http/Requests/LandingPageRegisterRequest.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class LandingPageRegisterRequest extends FormRequest
+{
+    public function rules(): array
+    {
+        return [
+            'name'           => 'required|string|max:255',
+            'cpf'            => 'required|string|max:14|unique:users,cpf',
+            'email'          => 'required|email|unique:users,email',
+            'phone'          => 'required|string|max:20',
+            'position_label' => 'required|string|max:255',
+            'sector_label'   => 'required|string|max:255',
+        ];
+    }
+}

+ 28 - 0
app/Services/LandingPageService.php

@@ -0,0 +1,28 @@
+<?php
+
+namespace App\Services;
+
+use App\Enums\LanguageEnum;
+use App\Enums\UserStatusEnum;
+use App\Enums\UserTypeEnum;
+use App\Models\User;
+use Illuminate\Support\Str;
+
+class LandingPageService
+{
+    public function registerUser(array $data): User
+    {
+        return User::create([
+            'name'           => $data['name'],
+            'email'          => $data['email'],
+            'cpf'            => $data['cpf'],
+            'phone'          => $data['phone'],
+            'position_label' => $data['position_label'],
+            'sector_label'   => $data['sector_label'],
+            'status'         => UserStatusEnum::PENDING,
+            'type'           => UserTypeEnum::ASSOCIADO,
+            'language'       => LanguageEnum::PORTUGUESE,
+            'password'       => bcrypt(Str::random(32)),
+        ]);
+    }
+}

+ 3 - 0
lang/en/messages.php

@@ -19,4 +19,7 @@ return [
     'appointment_confirmed'   => 'Appointment confirmed successfully',
     'not_found'               => 'Record not found',
     'unauthorized'            => 'Unauthorized action',
+    'landing'                 => [
+        'register_success' => 'Association request sent successfully!',
+    ],
 ];

+ 3 - 0
lang/es/messages.php

@@ -19,4 +19,7 @@ return [
     'appointment_confirmed'   => 'Cita confirmada exitosamente',
     'not_found'               => 'Registro no encontrado',
     'unauthorized'            => 'Acción no autorizada',
+    'landing'                 => [
+        'register_success' => '¡Solicitud de asociación enviada con éxito!',
+    ],
 ];

+ 3 - 0
lang/pt/messages.php

@@ -19,4 +19,7 @@ return [
     'appointment_confirmed'   => 'Agendamento confirmado com sucesso',
     'not_found'               => 'Registro não encontrado',
     'unauthorized'            => 'Ação não autorizada',
+    'landing'                 => [
+        'register_success' => 'Solicitação de associação enviada com sucesso!',
+    ],
 ];

+ 6 - 0
routes/noAuthRoutes/landing.php

@@ -0,0 +1,6 @@
+<?php
+
+use Illuminate\Support\Facades\Route;
+use App\Http\Controllers\LandingPageController;
+
+Route::post('/landing-page-register-user', [LandingPageController::class, 'register']);