Skip to content

Commit 0d52c76

Browse files
Merge pull request #2613 from Leantime/updateQueueService
Update queue service to include web worker
2 parents 000680a + 00f219e commit 0d52c76

File tree

5 files changed

+76
-5
lines changed

5 files changed

+76
-5
lines changed

app/Domain/Queue/Services/Queue.php

+21-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Leantime\Core\Mailer as MailerCore;
66
use Leantime\Core\Language as LanguageCore;
77
use Leantime\Domain\Queue\Repositories\Queue as QueueRepository;
8+
use Leantime\Domain\Queue\Workers\DefaultWorker;
89
use Leantime\Domain\Queue\Workers\EmailWorker;
910
use Leantime\Domain\Queue\Workers\HttpRequestWorker;
1011
use Leantime\Domain\Queue\Workers\Workers;
@@ -73,21 +74,39 @@ public function processQueue(Workers $worker): bool
7374
$worker->handleQueue($messages);
7475
}
7576

77+
if($worker == Workers::DEFAULT){
78+
$worker = app()->make(DefaultWorker::class);
79+
$worker->handleQueue($messages);
80+
}
81+
7682
return true;
7783
}
7884

7985

8086
public function addToQueue(Workers $channel, string $subject, string $message, $projectId) {
8187

82-
83-
return $this->queue->addMessageToQueue(
88+
return $this->queue->addMessageToQueue(
8489
channel: $channel,
8590
subject: $subject,
8691
message: $message,
8792
projectId: $projectId,
8893
userId: session("userdata.id"));
8994

9095
}
96+
97+
public static function addJob(Workers $channel, string $subject, mixed $message, ?int $userId = null, ?int $projectId = null) {
98+
99+
$queue = app()->make(QueueRepository::class);
100+
101+
return $queue->addMessageToQueue(
102+
channel: $channel,
103+
subject: $subject,
104+
message: serialize($message),
105+
projectId: $projectId ?? session('currentProject'),
106+
userId:$userId ?? session('userdata.id')
107+
);
108+
109+
}
91110
}
92111

93112
}
+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace Leantime\Domain\Queue\Workers;
4+
5+
use GuzzleHttp\Exception\GuzzleException;
6+
use Leantime\Core\Mailer;
7+
use Leantime\Domain\Queue\Repositories\Queue;
8+
use Leantime\Domain\Setting\Repositories\Setting;
9+
use Leantime\Domain\Users\Repositories\Users;
10+
use GuzzleHttp\Client;
11+
use PHPUnit\Exception;
12+
13+
class DefaultWorker
14+
{
15+
public function __construct(
16+
private Users $userRepo,
17+
private Setting $settingsRepo,
18+
private Queue $queue,
19+
private Client $client
20+
) {
21+
}
22+
23+
public function handleQueue($messages)
24+
{
25+
26+
27+
foreach ($messages as $message) {
28+
try {
29+
$payload = unserialize($message['message']);
30+
$subjectClass = $message['subject'];
31+
32+
$jobClass = app()->make($subjectClass);
33+
34+
$result = $jobClass->handle($payload);
35+
36+
if ($result) {
37+
$this->queue->deleteMessageInQueue($message['msghash']);
38+
return true;
39+
}
40+
41+
} catch (Exception $e) {
42+
error_log($e);
43+
}
44+
45+
return false;
46+
}
47+
}
48+
}

app/Domain/Queue/Workers/HttpRequestWorker.php

+1-3
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,7 @@ public function handleQueue($messages) {
3737
$messageArray
3838
);
3939

40-
if($response->getStatusCode() == 200){
41-
$this->queue->deleteMessageInQueue($request['msghash']);
42-
}
40+
$this->queue->deleteMessageInQueue($request['msghash']);
4341

4442
} catch (GuzzleException $e) {
4543
report($e);

app/Domain/Queue/Workers/Workers.php

+2
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ enum Workers: string
55
{
66
case EMAILS = "email";
77
case HTTPREQUESTS = "httprequests";
8+
9+
case DEFAULT = "default";
810
}

app/Domain/Queue/register.php

+4
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,8 @@
1919
$scheduler
2020
->call(fn () => app()->make(Services\Queue::class)->processQueue(Workers::HTTPREQUESTS))
2121
->everyFiveMinutes();
22+
23+
$scheduler
24+
->call(fn () => app()->make(Services\Queue::class)->processQueue(Workers::DEFAULT))
25+
->everyFiveMinutes();
2226
});

0 commit comments

Comments
 (0)