feat(api): registration auth, account creation, check-email & email notifications
- Add POST /public/check-email endpoint with rate limiting (10/min)
- Create user accounts during volunteer registration (new or returning)
- Returning volunteers authenticate with existing password
- Add password validation to VolunteerRegistrationRequest
- Normalize emails to lowercase throughout registration flow
- Handle race condition on duplicate accounts gracefully
- Create RegistrationConfirmationMail, RegistrationApprovedMail, RegistrationRejectedMail
- Wire approval/rejection emails into PersonController
- Add POST persons/{person}/reject endpoint
- Trigger TagSyncService on registration and approval
- Add CheckEmailTest, PersonApprovalEmailTest, extend VolunteerRegistrationTest
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Http\Controllers\Api\V1\CheckEmailController;
|
||||
use App\Http\Controllers\Api\V1\CompanyController;
|
||||
use App\Http\Controllers\Api\V1\CrowdListController;
|
||||
use App\Http\Controllers\Api\V1\CrowdTypeController;
|
||||
@@ -60,6 +61,7 @@ Route::post('invitations/{token}/accept', [InvitationController::class, 'accept'
|
||||
|
||||
// Public portal routes
|
||||
Route::get('public/events/{slug}/registration-data', PublicRegistrationDataController::class);
|
||||
Route::post('public/check-email', CheckEmailController::class)->middleware('throttle:10,1');
|
||||
Route::post('events/{event}/volunteer-register', VolunteerRegistrationController::class);
|
||||
Route::post('portal/token-auth', [PortalTokenController::class, 'auth']);
|
||||
|
||||
@@ -164,6 +166,7 @@ Route::middleware('auth:sanctum')->group(function () {
|
||||
|
||||
Route::apiResource('persons', PersonController::class);
|
||||
Route::post('persons/{person}/approve', [PersonController::class, 'approve']);
|
||||
Route::post('persons/{person}/reject', [PersonController::class, 'reject']);
|
||||
|
||||
// Volunteer availabilities
|
||||
Route::get('persons/{person}/availabilities', [VolunteerAvailabilityController::class, 'index']);
|
||||
|
||||
Reference in New Issue
Block a user