validate([ 'full_name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email', 'unique:members,email'], 'password' => ['required', 'confirmed', Password::defaults()], 'phone' => ['nullable', 'string', 'max:20'], 'national_id' => ['nullable', 'string', 'max:20'], 'address_line_1' => ['nullable', 'string', 'max:255'], 'address_line_2' => ['nullable', 'string', 'max:255'], 'city' => ['nullable', 'string', 'max:100'], 'postal_code' => ['nullable', 'string', 'max:10'], 'emergency_contact_name' => ['nullable', 'string', 'max:255'], 'emergency_contact_phone' => ['nullable', 'string', 'max:20'], 'terms_accepted' => ['required', 'accepted'], ]); // Create user and member in a transaction $member = DB::transaction(function () use ($validated) { // Create user account $user = User::create([ 'name' => $validated['full_name'], 'email' => $validated['email'], 'password' => Hash::make($validated['password']), ]); // Create member record with pending status $member = Member::create([ 'user_id' => $user->id, 'full_name' => $validated['full_name'], 'email' => $validated['email'], 'phone' => $validated['phone'] ?? null, 'national_id' => $validated['national_id'] ?? null, 'address_line_1' => $validated['address_line_1'] ?? null, 'address_line_2' => $validated['address_line_2'] ?? null, 'city' => $validated['city'] ?? null, 'postal_code' => $validated['postal_code'] ?? null, 'emergency_contact_name' => $validated['emergency_contact_name'] ?? null, 'emergency_contact_phone' => $validated['emergency_contact_phone'] ?? null, 'membership_status' => Member::STATUS_PENDING, 'membership_type' => Member::TYPE_REGULAR, ]); AuditLogger::log('member.self_registered', $member, [ 'email' => $member->email, 'name' => $member->full_name, ]); return $member; }); // Send welcome email with payment instructions Mail::to($member->email)->queue(new MemberRegistrationWelcomeMail($member)); // Log the user in auth()->loginUsingId($member->user_id); return redirect()->route('member.dashboard') ->with('status', __('Registration successful! Please submit your membership payment to complete your registration.')); } }