$package, ]); } /** * Handle an incoming registration request. * * @throws \Illuminate\Validation\ValidationException */ public function store(Request $request): RedirectResponse { $request->validate([ 'name' => ['required', 'string', 'max:255'], 'username' => ['required', 'string', 'max:255', 'unique:'.User::class], 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class], 'password' => ['required', 'confirmed', Rules\Password::defaults()], 'first_name' => ['required', 'string', 'max:255'], 'last_name' => ['required', 'string', 'max:255'], 'address' => ['required', 'string', 'max:500'], 'phone' => ['required', 'string', 'max:20'], 'privacy_consent' => ['accepted'], 'package_id' => ['nullable', 'exists:packages,id'], ]); $user = User::create([ 'name' => $request->name, 'username' => $request->username, 'email' => $request->email, 'first_name' => $request->first_name, 'last_name' => $request->last_name, 'address' => $request->address, 'phone' => $request->phone, 'password' => Hash::make($request->password), ]); $tenant = Tenant::create([ 'user_id' => $user->id, 'name' => $request->name, 'slug' => Str::slug($request->name . '-' . now()->timestamp), 'email' => $request->email, 'is_active' => true, 'is_suspended' => false, 'event_credits_balance' => 0, 'subscription_tier' => 'free', 'subscription_expires_at' => null, 'settings' => json_encode([ 'branding' => [ 'logo_url' => null, 'primary_color' => '#3B82F6', 'secondary_color' => '#1F2937', 'font_family' => 'Inter, sans-serif', ], 'features' => [ 'photo_likes_enabled' => false, 'event_checklist' => false, 'custom_domain' => false, 'advanced_analytics' => false, ], 'custom_domain' => null, 'contact_email' => $request->email, 'event_default_type' => 'general', ]), ]); event(new Registered($user)); Auth::login($user); // Send Welcome Email \Illuminate\Support\Facades\Mail::to($user)->send(new \App\Mail\Welcome($user)); if ($request->filled('package_id')) { $package = Package::find($request->package_id); if (!$package) { // Fallback for invalid package_id } else if ($package->price == 0) { // Assign free package TenantPackage::create([ 'tenant_id' => $tenant->id, 'package_id' => $package->id, 'active' => true, 'price' => 0, ]); PackagePurchase::create([ 'tenant_id' => $tenant->id, 'package_id' => $package->id, 'type' => $package->type === 'endcustomer' ? 'endcustomer_event' : 'reseller_subscription', 'price' => 0, 'purchased_at' => now(), 'provider_id' => 'free', ]); $tenant->update(['subscription_status' => 'active']); } else { // Redirect to buy for paid package return redirect()->route('buy.packages', $package->id); } } return $user->hasVerifiedEmail() ? redirect()->intended(route('dashboard')) : redirect()->route('verification.notice'); } }