Skip to content

Commit 08461d5

Browse files
authored
Merge pull request #5 from NoResponseMate/SYL-5115/batch-processing
[Export] Added batching export of resources data
2 parents 85231a6 + 2652e52 commit 08461d5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+748
-178
lines changed

config/config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
imports:
2+
- { resource: "./config/messenger.yaml" }
23
- { resource: "./config/sylius_grid.yaml" }
34
- { resource: "./config/sylius_resource.yaml" }
45
- { resource: "./config/twig_hooks.yaml" }

config/config/messenger.yaml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
parameters:
2+
env(SYLIUS_IMPORT_EXPORT_MESSENGER_TRANSPORT_EXPORT_COMMAND_DSN): 'sync://'
3+
env(SYLIUS_IMPORT_EXPORT_MESSENGER_TRANSPORT_EXPORT_EVENT_DSN): 'sync://'
4+
5+
sylius_import_export_messenger_transport_export_command_dsn: '%env(resolve:SYLIUS_IMPORT_EXPORT_MESSENGER_TRANSPORT_EXPORT_COMMAND_DSN)%'
6+
sylius_import_export_messenger_transport_export_event_dsn: '%env(resolve:SYLIUS_IMPORT_EXPORT_MESSENGER_TRANSPORT_EXPORT_EVENT_DSN)%'
7+
8+
framework:
9+
messenger:
10+
transports:
11+
export_command:
12+
dsn: '%sylius_import_export_messenger_transport_export_command_dsn%'
13+
failure_transport: 'export_event'
14+
export_event:
15+
dsn: '%sylius_import_export_messenger_transport_export_event_dsn%'
16+
routing:
17+
'Sylius\GridImportExport\Messenger\Command\ExportCommand': export_command
18+
'Sylius\GridImportExport\Messenger\Event\ExportProcessCompleted': export_event
19+
buses:
20+
sylius_import_export.export.command_bus:
21+
middleware:
22+
- doctrine_transaction
23+
- sylius_import_export.messenger.middleware.export_batch_tracking
24+
sylius_import_export.export.event_bus: ~

config/config/sylius_grid.yaml

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,20 @@ sylius_grid:
77
export: '@SyliusGridImportExport\admin\import_export\grid\bulk_action\export.html.twig'
88

99
grids:
10-
sylius_grid_import_export_admin_process:
10+
sylius_grid_import_export_admin_process_export:
1111
driver:
1212
name: doctrine/orm
1313
options:
14-
class: Sylius\GridImportExport\Entity\Process
14+
class: Sylius\GridImportExport\Entity\ExportProcess
1515
sorting:
1616
createdAt: desc
1717
fields:
1818
createdAt:
1919
type: datetime
2020
label: sylius.ui.created_at
21-
type:
22-
type: twig
23-
label: sylius.ui.type
24-
options:
25-
template: '@SyliusGridImportExport\admin\import_export\grid\field\type.html.twig'
21+
format:
22+
type: string
23+
label: sylius_grid_import_export.ui.format
2624
resource:
2725
type: string
2826
label: sylius_grid_import_export.ui.resource
@@ -38,7 +36,7 @@ sylius_grid:
3836
label: sylius_grid_import_export.ui.download
3937
options:
4038
link:
41-
route: sylius_grid_import_export_admin_process_download
39+
route: sylius_grid_import_export_admin_process_export_download
4240
parameters:
4341
uuid: resource.uuid
4442
show:

config/config/sylius_resource.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
sylius_resource:
22
resources:
3-
sylius_grid_import_export.process:
3+
sylius_grid_import_export.process_export:
44
driver: doctrine/orm
55
classes:
6-
model: Sylius\GridImportExport\Entity\Process
7-
interface: Sylius\GridImportExport\Entity\ProcessInterface
6+
model: Sylius\GridImportExport\Entity\ExportProcess
7+
interface: Sylius\GridImportExport\Entity\ExportProcessInterface

config/config/twig_hooks.yaml

Lines changed: 2 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,2 @@
1-
sylius_twig_hooks:
2-
hooks:
3-
'sylius_grid_import_export.admin.process.show.content':
4-
sections:
5-
template: '@SyliusGridImportExport/admin/import_export/show/content/sections.html.twig'
6-
priority: 0
7-
8-
'sylius_grid_import_export.admin.process.show.content.sections':
9-
general:
10-
template: '@SyliusGridImportExport/admin/import_export/show/content/sections/general.html.twig'
11-
priority: 0
12-
13-
'sylius_grid_import_export.admin.process.show.content.sections.general':
14-
header:
15-
template: '@SyliusGridImportExport/admin/import_export/show/content/sections/general/header.html.twig'
16-
priority: 100
17-
table:
18-
template: '@SyliusGridImportExport/admin/import_export/show/content/sections/general/table.html.twig'
19-
priority: 0
20-
21-
'sylius_grid_import_export.admin.process.show.content.sections.general.header':
22-
title:
23-
template: '@SyliusGridImportExport/admin/import_export/show/content/sections/general/header/title.html.twig'
24-
priority: 0
25-
26-
'sylius_grid_import_export.admin.process.show.content.sections.general.table':
27-
uuid:
28-
template: '@SyliusGridImportExport/admin/import_export/show/content/sections/general/uuid.html.twig'
29-
priority: 500
30-
type:
31-
template: '@SyliusGridImportExport/admin/import_export/show/content/sections/general/type.html.twig'
32-
priority: 400
33-
resource:
34-
template: '@SyliusGridImportExport/admin/import_export/show/content/sections/general/resource.html.twig'
35-
priority: 300
36-
format:
37-
template: '@SyliusGridImportExport/admin/import_export/show/content/sections/general/format.html.twig'
38-
priority: 200
39-
status:
40-
template: '@SyliusGridImportExport/admin/import_export/show/content/sections/general/status.html.twig'
41-
priority: 150
42-
output:
43-
template: '@SyliusGridImportExport/admin/import_export/show/content/sections/general/output.html.twig'
44-
priority: 100
45-
timestamps:
46-
template: '@SyliusGridImportExport/admin/import_export/show/content/sections/general/timestamps.html.twig'
47-
priority: 0
1+
imports:
2+
- { resource: 'twig_hooks/**.yaml' }
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
sylius_twig_hooks:
2+
hooks:
3+
'sylius_grid_import_export.admin.process_export.show.content':
4+
sections:
5+
template: '@SyliusGridImportExport/admin/import_export/process_export/show/content/sections.html.twig'
6+
priority: 0
7+
8+
'sylius_grid_import_export.admin.process_export.show.content.sections':
9+
general:
10+
template: '@SyliusGridImportExport/admin/import_export/process_export/show/content/sections/general.html.twig'
11+
priority: 0
12+
13+
'sylius_grid_import_export.admin.process_export.show.content.sections.general':
14+
header:
15+
template: '@SyliusGridImportExport/admin/import_export/process_export/show/content/sections/general/header.html.twig'
16+
priority: 100
17+
table:
18+
template: '@SyliusGridImportExport/admin/import_export/process_export/show/content/sections/general/table.html.twig'
19+
priority: 0
20+
21+
'sylius_grid_import_export.admin.process_export.show.content.sections.general.header':
22+
title:
23+
template: '@SyliusGridImportExport/admin/import_export/process_export/show/content/sections/general/header/title.html.twig'
24+
priority: 0
25+
26+
'sylius_grid_import_export.admin.process_export.show.content.sections.general.table':
27+
uuid:
28+
template: '@SyliusGridImportExport/admin/import_export/process_export/show/content/sections/general/uuid.html.twig'
29+
priority: 400
30+
resource:
31+
template: '@SyliusGridImportExport/admin/import_export/process_export/show/content/sections/general/resource.html.twig'
32+
priority: 300
33+
format:
34+
template: '@SyliusGridImportExport/admin/import_export/process_export/show/content/sections/general/format.html.twig'
35+
priority: 200
36+
status:
37+
template: '@SyliusGridImportExport/admin/import_export/process_export/show/content/sections/general/status.html.twig'
38+
priority: 150
39+
output:
40+
template: '@SyliusGridImportExport/admin/import_export/process_export/show/content/sections/general/output.html.twig'
41+
priority: 100
42+
timestamps:
43+
template: '@SyliusGridImportExport/admin/import_export/process_export/show/content/sections/general/timestamps.html.twig'
44+
priority: 0
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,21 @@
44
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
55
xmlns:gedmo="http://gediminasm.org/schemas/orm/doctrine-extensions-mapping"
66
>
7-
<mapped-superclass name="Sylius\GridImportExport\Entity\Process" table="sylius_grid_import_export_process">
7+
<mapped-superclass name="Sylius\GridImportExport\Entity\ExportProcess" table="sylius_grid_import_export_process_export">
88
<id name="uuid" column="uuid" type="string">
99
<generator strategy="NONE" />
1010
</id>
1111

12-
<field name="type" column="type" type="string" />
1312
<field name="status" column="status" type="string" />
1413
<field name="resource" column="resource" type="string" />
14+
<field name="grid" column="grid" type="string" />
1515
<field name="output" column="output" type="text" nullable="true" />
1616
<field name="errorMessage" column="error_message" type="text" nullable="true" />
1717
<field name="format" column="format" type="string" />
18+
<field name="parameters" column="parameters" type="json" />
1819
<field name="resourceIds" column="resource_ids" type="json" nullable="true" />
20+
<field name="temporaryDataStorage" column="temporary_data_storage" type="string" nullable="true" />
21+
<field name="batchesCount" column="batches_count" type="integer" />
1922
<field name="createdAt" column="created_at" type="datetime">
2023
<gedmo:timestampable on="create" />
2124
</field>

config/routes/admin.yaml

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,32 @@ sylius_import_export.admin.resource.export:
66
_sylius:
77
filterable: true
88

9-
sylius_grid_import_export_admin_process:
9+
sylius_grid_import_export_admin_process_export:
1010
resource: |
11-
alias: sylius_grid_import_export.process
11+
alias: sylius_grid_import_export.process_export
1212
section: admin
1313
templates: "@SyliusAdmin\\shared\\crud"
1414
except: ['show', 'create', 'update']
1515
redirect: index
16-
grid: sylius_grid_import_export_admin_process
16+
grid: sylius_grid_import_export_admin_process_export
1717
permission: true
18+
path: /import-export/exports
1819
type: sylius.resource
1920

20-
sylius_grid_import_export_admin_process_show:
21-
path: /import-export/processes/{id}
21+
sylius_grid_import_export_admin_process_export_show:
22+
path: /import-export/exports/{id}
2223
methods: [ GET ]
2324
defaults:
24-
_controller: sylius_grid_import_export.controller.process::showAction
25+
_controller: sylius_grid_import_export.controller.process_export::showAction
2526
_sylius:
2627
section: admin
2728
template: '@SyliusAdmin/shared/crud/show.html.twig'
2829
permission: true
2930
vars:
30-
hook_prefix: 'sylius_grid_import_export.admin.process'
31+
hook_prefix: 'sylius_grid_import_export.admin.process_export'
3132

32-
sylius_grid_import_export_admin_process_download:
33-
path: /import-export/processes/{uuid}/download
33+
sylius_grid_import_export_admin_process_export_download:
34+
path: /import-export/exports/{uuid}/download
3435
methods: [ GET ]
3536
defaults:
3637
_controller: sylius_import_export.controller.download_export_action

config/services.xml

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,38 @@
1010
</imports>
1111

1212
<services>
13+
<service id="sylius_import_export.messenger.command_handler.create_export_process" class="Sylius\GridImportExport\Messenger\Handler\CreateExportProcessHandler">
14+
<argument type="service" id="sylius_import_export.factory.process" />
15+
<argument type="service" id="sylius_grid_import_export.repository.process_export" />
16+
<argument type="service" id="sylius_import_export.export.command_bus" />
17+
<argument type="service" id="sylius_import_export.export.batched_data_manager" />
18+
19+
<tag name="messenger.message_handler" bus="sylius.command_bus" />
20+
</service>
21+
1322
<service id="sylius_import_export.messenger.command_handler.export" class="Sylius\GridImportExport\Messenger\Handler\ExportCommandHandler">
1423
<argument type="service" id="sylius.resource_registry" />
15-
<argument type="service" id="sylius_import_export.custom_factory.process" />
16-
<argument type="service" id="sylius_grid_import_export.repository.process" />
24+
<argument type="service" id="sylius_grid_import_export.repository.process_export" />
1725
<argument type="service" id="sylius_import_export.registry.resource_data_provider" />
1826
<argument type="service" id="sylius_grid_import_export.exporter_resolver" />
27+
<argument type="service" id="sylius_import_export.export.batched_data_manager" />
1928

20-
<tag name="messenger.message_handler" bus="sylius.command_bus" />
29+
<tag name="messenger.message_handler" bus="sylius_import_export.export.command_bus" />
30+
</service>
31+
32+
<service id="sylius_import_export.messenger.event_handler.export_completed" class="Sylius\GridImportExport\Messenger\Handler\ExportCompletedHandler">
33+
<argument type="service" id="sylius_grid_import_export.repository.process_export" />
34+
<argument type="service" id="sylius_grid_import_export.exporter_resolver" />
35+
<argument type="service" id="sylius_import_export.export.batched_data_manager" />
36+
37+
<tag name="messenger.message_handler" bus="sylius_import_export.export.event_bus" />
38+
</service>
39+
40+
<service id="sylius_import_export.messenger.middleware.export_batch_tracking" class="Sylius\GridImportExport\Messenger\Middleware\ExportBatchTrackingMiddleware">
41+
<argument type="service" id="sylius_grid_import_export.repository.process_export" />
42+
<argument type="service" id="sylius_import_export.export.event_bus" />
43+
44+
<tag name="messenger.middleware" />
2145
</service>
2246

2347
<service id="sylius_import_export.twig.component.export_resource" class="Sylius\GridImportExport\Twig\Component\ExportResourceFormComponent">
@@ -55,13 +79,18 @@
5579
</service>
5680

5781
<service id="sylius_import_export.controller.download_export_action" class="Sylius\GridImportExport\Controller\DownloadExportAction" public="true">
58-
<argument type="service" id="sylius_grid_import_export.repository.process" />
82+
<argument type="service" id="sylius_grid_import_export.repository.process_export" />
5983

6084
<tag name="controller.service_arguments" />
6185
</service>
6286

63-
<service id="sylius_import_export.custom_factory.process" class="Sylius\GridImportExport\Factory\ProcessFactory" decorates="sylius_grid_import_export.factory.process">
64-
<argument type="service" id=".inner" />
87+
<service id="sylius_import_export.factory.process" class="Sylius\GridImportExport\Factory\ProcessFactory">
88+
<argument type="service" id="sylius_grid_import_export.factory.process_export" />
89+
</service>
90+
91+
<service id="sylius_import_export.export.batched_data_manager" class="Sylius\GridImportExport\Manager\BatchedExportDataManager">
92+
<argument type="service" id="sylius_grid_import_export.repository.process_export" />
93+
<argument>%sylius_grid_import_export.export_files_directory%</argument>
6594
</service>
6695

6796
<service id="sylius_grid_import_export.menu.admin_listener" class="Sylius\GridImportExport\Menu\AdminImportExportMenuListener">

src/Controller/DownloadExportAction.php

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
namespace Sylius\GridImportExport\Controller;
1515

16-
use Sylius\GridImportExport\Entity\ProcessInterface;
16+
use Sylius\GridImportExport\Entity\ExportProcessInterface;
1717
use Sylius\Resource\Doctrine\Persistence\RepositoryInterface;
1818
use Symfony\Component\HttpFoundation\BinaryFileResponse;
1919
use Symfony\Component\HttpFoundation\Response;
@@ -22,18 +22,15 @@
2222

2323
final class DownloadExportAction
2424
{
25-
/**
26-
* @param RepositoryInterface<ProcessInterface> $processRepository
27-
*/
25+
/** @param RepositoryInterface<ExportProcessInterface> $exportProcessRepository */
2826
public function __construct(
29-
private RepositoryInterface $processRepository,
27+
private RepositoryInterface $exportProcessRepository,
3028
) {
3129
}
3230

3331
public function __invoke(string $uuid): Response
3432
{
35-
$process = $this->processRepository->find($uuid);
36-
33+
$process = $this->exportProcessRepository->find($uuid);
3734
if (null === $process) {
3835
throw new NotFoundHttpException(sprintf('Export process "%s" not found', $uuid));
3936
}

0 commit comments

Comments
 (0)