Merhabalar laravel queue ile bir controllerde istekleri alıp jobs olarak kaydediyorum sonra belirli işlemler yapıyorum arkada. Benim sorum şu kullanıcı herhangi bir tabloya kayıt olmadan tekrardan istek atabiliyor. Jobs tablosu içinde email değerini aratıp buna engel olmaya çalıştım fakat çözemedim.
`private function isEmailInQueue(string $email): bool
{
// Fetch all jobs from the 'jobs' table
$jobs = DB::table('jobs')->get();
foreach ($jobs as $job) {
// Unserialize the 'payload' field
$payload = json_decode($job->payload, true);
if (isset($payload['data']['command'])) {
// Unserialize the 'command' data to access the job data
$command = unserialize($payload['data']['command']);
if (isset($command->data['user_email']) && $command->data['user_email'] === $email) {
return true;
}
}
}
return false;
}`
şu şekilde bir kod gördüm fakat burada her istekte tüm jobs tablosunu çektiği için performans sorunları oluşur diye düşünüyorum.
Kendi kodum ise şu şekilde
private function isEmailInQueue(string $email): bool
{
// Check if the email is already queued (add your logic here)
$queuedEmail = DB::table('jobs')
->where('payload', 'LIKE', '%"user_email":"' . $email . '"%')
->first();
if ($queuedEmail) {
return true;
}
return false;
}
}
Controller içinde de şöyle kullanıyorum
// Check if the email is already in the queue
if ($this->isEmailInQueue($user_email)) {
return response()->json(['success' => 0, 'message' => 'Email is already queued for processing.'], 422);
}