Skip to content

Commit 22722e9

Browse files
Save lead when user joins a "soon" workshop
When an authenticated user joins a workshop with status "soon", create a Leads record (tagged by workshop slug) if one doesn't already exist. If this is the user's first lead, fire the LeadRegistered event. Add createLeadForWorkshop helper and necessary imports.
1 parent 6ca3777 commit 22722e9

1 file changed

Lines changed: 35 additions & 0 deletions

File tree

app/Http/Controllers/WorkshopController.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
namespace App\Http\Controllers;
44

5+
use App\Events\LeadRegistered;
56
use App\Events\UserJoinedWorkshop as UserJoinedWorkshopEvent;
67
use App\Events\UsersFirstWorkshop;
78
use App\Http\Resources\WorkshopCardResource;
89
use App\Http\Resources\WorkshopResource;
10+
use App\Models\Leads;
911
use App\Models\Workshop;
1012
use Illuminate\Database\Eloquent\Builder;
1113
use Illuminate\Http\Request;
@@ -99,6 +101,11 @@ public function userJoined(Request $request, $slug)
99101
// checks if user is joining the workshop for the first time
100102
if (! $user->workshops->contains($workshop)) {
101103
event(new UserJoinedWorkshopEvent($user, $workshop));
104+
105+
// Se o workshop está com status "soon", salva o lead
106+
if ($workshop->status === 'soon') {
107+
$this->createLeadForWorkshop($user, $workshop);
108+
}
102109
}
103110

104111
$user->workshops()->syncWithoutDetaching($workshop->id);
@@ -114,6 +121,34 @@ public function userJoined(Request $request, $slug)
114121
return response()->json(['message' => 'User entered workshop']);
115122
}
116123

124+
private function createLeadForWorkshop($user, $workshop)
125+
{
126+
$tag = 'workshop-' . $workshop->slug;
127+
128+
// Verifica se já existe um lead com esse email e tag
129+
$existingLead = Leads::where('email', $user->email)
130+
->where('tag', $tag)
131+
->first();
132+
133+
if ($existingLead) {
134+
return; // Já existe, não cria outro
135+
}
136+
137+
// Cria o lead
138+
$lead = new Leads();
139+
$lead->email = $user->email;
140+
$lead->name = $user->name;
141+
$lead->tag = $tag;
142+
$lead->save();
143+
144+
// Verifica se é o primeiro lead deste usuário
145+
$isFirstLead = Leads::where('email', $user->email)->count() === 1;
146+
147+
if ($isFirstLead) {
148+
event(new LeadRegistered($lead->email));
149+
}
150+
}
151+
117152
protected function workshopQueryWithFilters(
118153
Request $request,
119154
Builder $query

0 commit comments

Comments
 (0)