-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathWrappedSchedule.php
More file actions
86 lines (77 loc) · 1.6 KB
/
WrappedSchedule.php
File metadata and controls
86 lines (77 loc) · 1.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php declare(strict_types=1);
namespace Torr\TaskManager\Schedule;
use Symfony\Component\Lock\LockInterface;
use Symfony\Component\Scheduler\RecurringMessage;
use Symfony\Component\Scheduler\Schedule;
use Symfony\Component\Scheduler\ScheduleProviderInterface;
use Symfony\Contracts\Cache\CacheInterface;
use Torr\TaskManager\Task\DispatchAfterRunTask\DispatchAfterRunTask;
use Torr\TaskManager\Task\Task;
/**
* Wrapper around Symfony's Schedule with sensible defaults
*
* @final
*
* @internal
*/
readonly class WrappedSchedule implements ScheduleProviderInterface
{
/**
*
*/
private Schedule $schedule;
/**
*/
public function __construct (
CacheInterface $cache,
LockInterface $lock,
)
{
$this->schedule = new Schedule()
->lock($lock)
->stateful($cache)
->processOnlyLastMissedRun(true);
}
/**
* Adds a cron task
*/
public function cron (
string $cronExpression,
Task $task,
\DateTimeZone|string|null $timezone = null,
) : static
{
$this->schedule->add(RecurringMessage::cron(
$cronExpression,
new DispatchAfterRunTask($task),
$timezone,
));
return $this;
}
/**
* Adds a cron task
*/
public function every (
string|int|\DateInterval $frequency,
Task $task,
string|\DateTimeImmutable|null $from = null,
string|\DateTimeImmutable $until = new \DateTimeImmutable('3000-01-01'),
) : static
{
$this->schedule->add(RecurringMessage::every(
$frequency,
new DispatchAfterRunTask($task),
$from,
$until,
));
return $this;
}
/**
*
*/
#[\Override]
public function getSchedule () : Schedule
{
return $this->schedule->getSchedule();
}
}