Skip to content

Commit a3ff334

Browse files
feature: allow scheduling of scheduled tasks (#290)
* feature: allow scheduling of scheduled tasks * Update src/Resources/app/administration/src/module/frosh-tools/component/frosh-tools-tab-scheduled/index.js Co-authored-by: Felix Schneider <69912882+schneider-felix@users.noreply.github.com> --------- Co-authored-by: Felix Schneider <69912882+schneider-felix@users.noreply.github.com>
1 parent d157d8f commit a3ff334

6 files changed

Lines changed: 78 additions & 0 deletions

File tree

src/Controller/ScheduledTaskController.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Shopware\Core\Framework\MessageQueue\ScheduledTask\Scheduler\TaskRunner;
1515
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
1616
use Symfony\Component\HttpFoundation\JsonResponse;
17+
use Symfony\Component\HttpFoundation\Request;
1718
use Symfony\Component\HttpFoundation\Response;
1819
use Symfony\Component\Routing\Attribute\Route;
1920

@@ -52,6 +53,30 @@ public function runTask(string $id, Context $context): JsonResponse
5253
return new JsonResponse(null, Response::HTTP_NO_CONTENT);
5354
}
5455

56+
#[Route(path: '/scheduled-task/schedule/{id}', name: 'api.frosh.tools.scheduled.task.schedule', methods: ['POST'])]
57+
public function scheduleTask(Request $request, string $id, Context $context): JsonResponse
58+
{
59+
$scheduledTask = $this->fetchTask($id, $context);
60+
61+
if (!$scheduledTask instanceof ScheduledTaskEntity) {
62+
return new JsonResponse(null, Response::HTTP_NOT_FOUND);
63+
}
64+
65+
$data = [
66+
'id' => $id,
67+
'status' => ScheduledTaskDefinition::STATUS_SCHEDULED,
68+
];
69+
70+
$immediately = $request->request->has('immediately') && $request->request->get('immediately', false);
71+
if ($immediately) {
72+
$data['nextExecutionTime'] = new \DateTime();
73+
}
74+
75+
$this->scheduledTaskRepository->update([$data], $context);
76+
77+
return new JsonResponse(null, Response::HTTP_NO_CONTENT);
78+
}
79+
5580
#[Route(path: '/scheduled-tasks/register', name: 'api.frosh.tools.scheduled.tasks.register', methods: ['POST'])]
5681
public function registerTasks(): JsonResponse
5782
{

src/Resources/app/administration/src/api/frosh-tools.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,21 @@ class FroshTools extends ApiService {
6666
});
6767
}
6868

69+
scheduleScheduledTask(id, immediately = false) {
70+
const apiRoute = `${this.getApiBasePath()}/scheduled-task/schedule/${id}`;
71+
return this.httpClient.post(
72+
apiRoute,
73+
{
74+
'immediately': immediately
75+
},
76+
{
77+
headers: this.getBasicHeaders()
78+
}
79+
).then((response) => {
80+
return ApiService.handleResponse(response);
81+
});
82+
}
83+
6984
scheduledTasksRegister() {
7085
const apiRoute = `${this.getApiBasePath()}/scheduled-tasks/register`;
7186
return this.httpClient.post(

src/Resources/app/administration/src/module/frosh-tools/component/frosh-tools-tab-scheduled/index.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,28 @@ Component.register('frosh-tools-tab-scheduled', {
104104
this.createdComponent();
105105
},
106106

107+
async scheduleTask(item, immediately = false) {
108+
this.isLoading = true;
109+
110+
try {
111+
this.createNotificationInfo({
112+
message: this.$t('frosh-tools.scheduledTaskScheduleStarted', {'name': item.name})
113+
})
114+
await this.froshToolsService.scheduleScheduledTask(item.id, immediately);
115+
this.createNotificationSuccess({
116+
message: this.$t('frosh-tools.scheduledTaskScheduleSucceed', {'name': item.name})
117+
})
118+
} catch (e) {
119+
this.createNotificationError({
120+
message: this.$t('frosh-tools.scheduledTaskScheduleFailed', {'name': item.name})
121+
})
122+
123+
this.taskError = e.response.data;
124+
}
125+
126+
this.createdComponent();
127+
},
128+
107129
async registerScheduledTasks() {
108130
this.isLoading = true;
109131

src/Resources/app/administration/src/module/frosh-tools/component/frosh-tools-tab-scheduled/template.twig

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@
4747
<sw-context-menu-item variant="primary" @click="runTask(item)">
4848
{{ $tc('frosh-tools.runManually') }}
4949
</sw-context-menu-item>
50+
<sw-context-menu-item variant="primary" @click="scheduleTask(item)">
51+
{{ $tc('frosh-tools.setToScheduled') }}
52+
</sw-context-menu-item>
53+
<sw-context-menu-item variant="primary" @click="scheduleTask(item, true)">
54+
{{ $tc('frosh-tools.setToScheduledImmediately') }}
55+
</sw-context-menu-item>
5056
</template>
5157
</sw-entity-listing>
5258
</sw-card>

src/Resources/app/administration/src/module/frosh-tools/snippet/de-DE.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@
7777
"scheduledTaskStarted": "Die geplante Aufgabe für \"{name}\" wurde gestartet",
7878
"scheduledTaskSucceed": "Die geplante Aufgabe für \"{name}\" war erfolgreich",
7979
"scheduledTaskFailed": "Die geplante Aufgabe für \"{name}\" ist fehlgeschlagen",
80+
"setToScheduled": "auf geplant setzen",
81+
"setToScheduledImmediately": "auf sofort geplant setzen",
82+
"scheduledTaskScheduleStarted": "Die geplante Aufgabe für \"{name}\" wird auf geplant gesetzt",
83+
"scheduledTaskScheduleSucceed": "Die geplante Aufgabe für \"{name}\" wurde auf geplant gesetzt",
84+
"scheduledTaskScheduleFailed": "Die geplante Aufgabe für \"{name}\" konnte nicht auf geplant gesetzt werden",
8085
"scheduledTasksRegisterStarted": "Registriere geplante Aufgaben",
8186
"scheduledTasksRegisterSucceed": "Geplante Aufgaben registriert",
8287
"scheduledTasksRegisterFailed": "Es ist ein Fehler beim Registrieren aufgetreten",

src/Resources/app/administration/src/module/frosh-tools/snippet/en-GB.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@
7777
"scheduledTaskStarted": "The scheduled task execution for \"{name}\" started",
7878
"scheduledTaskSucceed": "The scheduled task execution for \"{name}\" succeed",
7979
"scheduledTaskFailed": "The scheduled task execution for \"{name}\" failed",
80+
"setToScheduled": "Set task status to scheduled",
81+
"setToScheduledImmediately": "Set task status to scheduled immediately",
82+
"scheduledTaskScheduleStarted": "The scheduled task for \"{name}\" is being scheduled",
83+
"scheduledTaskScheduleSucceed": "The scheduled task for \"{name}\" has been scheduled",
84+
"scheduledTaskScheduleFailed": "The scheduled task for \"{name}\" could not be scheduled",
8085
"scheduledTasksRegisterStarted": "Register scheduled tasks",
8186
"scheduledTasksRegisterSucceed": "Scheduled tasks registered",
8287
"scheduledTasksRegisterFailed": "Scheduled tasks registration failed",

0 commit comments

Comments
 (0)