101 lines
3.4 KiB
PHP
101 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire;
|
|
|
|
use Livewire\Component;
|
|
use App\Services\ApiService;
|
|
use Illuminate\Support\Facades\Session;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class Registration extends Component
|
|
{
|
|
public $email = '';
|
|
public $password = '';
|
|
public $confirm_password = '';
|
|
public $first_name = '';
|
|
public $middle_name = '';
|
|
public $last_name = '';
|
|
public $website = '';
|
|
public $isSubmitting = false;
|
|
public $status = '';
|
|
public $errors = [];
|
|
public $isRegistered = false;
|
|
|
|
protected $apiService;
|
|
|
|
public function boot(ApiService $apiService)
|
|
{
|
|
$this->apiService = $apiService;
|
|
}
|
|
|
|
public function mount()
|
|
{
|
|
if (Session::get('isRegistered')) {
|
|
return redirect()->route('login');
|
|
}
|
|
}
|
|
|
|
public function register()
|
|
{
|
|
$this->isSubmitting = true;
|
|
$this->status = 'loading';
|
|
$this->errors = [];
|
|
|
|
try {
|
|
$this->validate([
|
|
'email' => ['required', 'email'],
|
|
'password' => ['required'],
|
|
'confirm_password' => ['required', Rule::in([$this->password])],
|
|
'first_name' => ['required'],
|
|
'middle_name' => ['required'],
|
|
'last_name' => ['required'],
|
|
'website' => ['required'],
|
|
], [
|
|
'email.required' => 'Email is required.',
|
|
'email.email' => 'Invalid Email address.',
|
|
'password.required' => 'Password is required.',
|
|
'confirm_password.required' => 'Confirm password is required.',
|
|
'confirm_password.in' => 'Passwords do not match.',
|
|
'first_name.required' => 'First name is required.',
|
|
'middle_name.required' => 'Middle name is required.',
|
|
'last_name.required' => 'Last name is required.',
|
|
'website.required' => 'Website is required.',
|
|
]);
|
|
|
|
$data = [
|
|
'email' => $this->email,
|
|
'password' => $this->password,
|
|
'first_name' => $this->first_name,
|
|
'middle_name' => $this->middle_name,
|
|
'last_name' => $this->last_name,
|
|
'website' => $this->website,
|
|
];
|
|
|
|
$response = $this->apiService->post('/register', $data);
|
|
|
|
if ($response && isset($response['status']) && $response['status'] === 201) {
|
|
$this->status = 'success';
|
|
$this->isRegistered = true;
|
|
Session::put('isRegistered', true);
|
|
Session::flash('success', 'Registration successful.');
|
|
return redirect()->route('login');
|
|
}
|
|
} catch (\Illuminate\Validation\ValidationException $e) {
|
|
$this->status = 'error';
|
|
$this->errors = $e->errors();
|
|
Log::error('Registration validation failed', ['errors' => $this->errors, 'source' => 'RegistrationComponent']);
|
|
} catch (\Exception $e) {
|
|
$this->status = 'error';
|
|
Session::flash('error', 'Something went wrong: ' . $e->getMessage());
|
|
Log::error('Registration failed', ['error' => $e->getMessage(), 'source' => 'RegistrationComponent']);
|
|
} finally {
|
|
$this->isSubmitting = false;
|
|
}
|
|
}
|
|
|
|
public function render()
|
|
{
|
|
return view('livewire.registration')->layout('layouts.app');
|
|
}
|
|
} |