Skip to content

Commit 0d49632

Browse files
committed
Refactored constraints, to reuse existing mechanisms
1 parent 702e5c8 commit 0d49632

26 files changed

+264
-542
lines changed

src/Controller/BulkInfoProviderImportController.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,25 @@
2222

2323
namespace App\Controller;
2424

25-
use App\Entity\BulkInfoProviderImportJob;
26-
use App\Entity\BulkInfoProviderImportJobPart;
27-
use App\Entity\BulkImportJobStatus;
25+
use App\Entity\InfoProviderSystem\BulkImportJobStatus;
26+
use App\Entity\InfoProviderSystem\BulkInfoProviderImportJob;
27+
use App\Entity\InfoProviderSystem\BulkInfoProviderImportJobPart;
2828
use App\Entity\Parts\Part;
2929
use App\Entity\Parts\Supplier;
30+
use App\Entity\UserSystem\User;
3031
use App\Form\InfoProviderSystem\GlobalFieldMappingType;
3132
use App\Services\InfoProviderSystem\BulkInfoProviderService;
32-
use App\Services\InfoProviderSystem\DTOs\BulkSearchResponseDTO;
3333
use App\Services\InfoProviderSystem\DTOs\BulkSearchFieldMappingDTO;
3434
use App\Services\InfoProviderSystem\DTOs\BulkSearchPartResultsDTO;
35+
use App\Services\InfoProviderSystem\DTOs\BulkSearchResponseDTO;
3536
use Doctrine\ORM\EntityManagerInterface;
3637
use Psr\Log\LoggerInterface;
3738
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
3839
use Symfony\Component\DependencyInjection\Attribute\Autowire;
40+
use Symfony\Component\HttpFoundation\JsonResponse;
3941
use Symfony\Component\HttpFoundation\Request;
4042
use Symfony\Component\HttpFoundation\Response;
41-
use Symfony\Component\HttpFoundation\JsonResponse;
4243
use Symfony\Component\Routing\Attribute\Route;
43-
use App\Entity\UserSystem\User;
4444

4545
#[Route('/tools/bulk_info_provider_import')]
4646
class BulkInfoProviderImportController extends AbstractController

src/Controller/PartController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public function edit(Part $part, Request $request): Response
144144
$jobId = $request->query->get('jobId');
145145
$bulkJob = null;
146146
if ($jobId) {
147-
$bulkJob = $this->em->getRepository(\App\Entity\BulkInfoProviderImportJob::class)->find($jobId);
147+
$bulkJob = $this->em->getRepository(\App\Entity\InfoProviderSystem\BulkInfoProviderImportJob::class)->find($jobId);
148148
// Verify user owns this job
149149
if ($bulkJob && $bulkJob->getCreatedBy() !== $this->getUser()) {
150150
$bulkJob = null;
@@ -165,7 +165,7 @@ public function markBulkImportComplete(Part $part, int $jobId, Request $request)
165165
throw $this->createAccessDeniedException('Invalid CSRF token');
166166
}
167167

168-
$bulkJob = $this->em->getRepository(\App\Entity\BulkInfoProviderImportJob::class)->find($jobId);
168+
$bulkJob = $this->em->getRepository(\App\Entity\InfoProviderSystem\BulkInfoProviderImportJob::class)->find($jobId);
169169
if (!$bulkJob || $bulkJob->getCreatedBy() !== $this->getUser()) {
170170
throw $this->createNotFoundException('Bulk import job not found');
171171
}
@@ -331,7 +331,7 @@ public function updateFromInfoProvider(
331331
$jobId = $request->query->get('jobId');
332332
$bulkJob = null;
333333
if ($jobId) {
334-
$bulkJob = $this->em->getRepository(\App\Entity\BulkInfoProviderImportJob::class)->find($jobId);
334+
$bulkJob = $this->em->getRepository(\App\Entity\InfoProviderSystem\BulkInfoProviderImportJob::class)->find($jobId);
335335
// Verify user owns this job
336336
if ($bulkJob && $bulkJob->getCreatedBy() !== $this->getUser()) {
337337
$bulkJob = null;

src/DataTables/Filters/Constraints/Part/BulkImportJobExistsConstraint.php

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,41 +23,18 @@
2323

2424
namespace App\DataTables\Filters\Constraints\Part;
2525

26-
use App\DataTables\Filters\Constraints\AbstractConstraint;
27-
use App\Entity\BulkInfoProviderImportJobPart;
26+
use App\DataTables\Filters\Constraints\BooleanConstraint;
27+
use App\Entity\InfoProviderSystem\BulkInfoProviderImportJobPart;
2828
use Doctrine\ORM\QueryBuilder;
2929

30-
class BulkImportJobExistsConstraint extends AbstractConstraint
30+
class BulkImportJobExistsConstraint extends BooleanConstraint
3131
{
32-
/** @var bool|null The value of our constraint */
33-
protected ?bool $value = null;
3432

3533
public function __construct()
3634
{
3735
parent::__construct('bulk_import_job_exists');
3836
}
3937

40-
/**
41-
* Gets the value of this constraint. Null means "don't filter", true means "filter for parts in bulk import jobs", false means "filter for parts not in bulk import jobs".
42-
*/
43-
public function getValue(): ?bool
44-
{
45-
return $this->value;
46-
}
47-
48-
/**
49-
* Sets the value of this constraint. Null means "don't filter", true means "filter for parts in bulk import jobs", false means "filter for parts not in bulk import jobs".
50-
*/
51-
public function setValue(?bool $value): void
52-
{
53-
$this->value = $value;
54-
}
55-
56-
public function isEnabled(): bool
57-
{
58-
return $this->value !== null;
59-
}
60-
6138
public function apply(QueryBuilder $queryBuilder): void
6239
{
6340
// Do not apply a filter if value is null (filter is set to ignore)
@@ -79,4 +56,4 @@ public function apply(QueryBuilder $queryBuilder): void
7956
$queryBuilder->andWhere('NOT EXISTS (' . $existsSubquery->getDQL() . ')');
8057
}
8158
}
82-
}
59+
}

src/DataTables/Filters/Constraints/Part/BulkImportJobStatusConstraint.php

Lines changed: 6 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -24,59 +24,18 @@
2424
namespace App\DataTables\Filters\Constraints\Part;
2525

2626
use App\DataTables\Filters\Constraints\AbstractConstraint;
27-
use App\Entity\BulkInfoProviderImportJobPart;
27+
use App\DataTables\Filters\Constraints\ChoiceConstraint;
28+
use App\Entity\InfoProviderSystem\BulkInfoProviderImportJobPart;
2829
use Doctrine\ORM\QueryBuilder;
2930

30-
class BulkImportJobStatusConstraint extends AbstractConstraint
31+
class BulkImportJobStatusConstraint extends ChoiceConstraint
3132
{
32-
/** @var array The status values to filter by */
33-
protected array $values = [];
34-
35-
/** @var string|null The operator to use ('any_of', 'none_of', 'all_of') */
36-
protected ?string $operator = null;
3733

3834
public function __construct()
3935
{
4036
parent::__construct('bulk_import_job_status');
4137
}
4238

43-
/**
44-
* Gets the status values to filter by.
45-
*/
46-
public function getValues(): array
47-
{
48-
return $this->values;
49-
}
50-
51-
/**
52-
* Sets the status values to filter by.
53-
*/
54-
public function setValues(array $values): void
55-
{
56-
$this->values = $values;
57-
}
58-
59-
/**
60-
* Gets the operator to use.
61-
*/
62-
public function getOperator(): ?string
63-
{
64-
return $this->operator;
65-
}
66-
67-
/**
68-
* Sets the operator to use.
69-
*/
70-
public function setOperator(?string $operator): void
71-
{
72-
$this->operator = $operator;
73-
}
74-
75-
public function isEnabled(): bool
76-
{
77-
return !empty($this->values) && $this->operator !== null;
78-
}
79-
8039
public function apply(QueryBuilder $queryBuilder): void
8140
{
8241
// Do not apply a filter if values are empty or operator is null
@@ -95,11 +54,11 @@ public function apply(QueryBuilder $queryBuilder): void
9554
if ($this->operator === 'ANY') {
9655
$existsSubquery->andWhere('job_status.status IN (:job_status_values)');
9756
$queryBuilder->andWhere('EXISTS (' . $existsSubquery->getDQL() . ')');
98-
$queryBuilder->setParameter('job_status_values', $this->values);
57+
$queryBuilder->setParameter('job_status_values', $this->value);
9958
} elseif ($this->operator === 'NONE') {
10059
$existsSubquery->andWhere('job_status.status IN (:job_status_values)');
10160
$queryBuilder->andWhere('NOT EXISTS (' . $existsSubquery->getDQL() . ')');
102-
$queryBuilder->setParameter('job_status_values', $this->values);
61+
$queryBuilder->setParameter('job_status_values', $this->value);
10362
}
10463
}
105-
}
64+
}

src/DataTables/Filters/Constraints/Part/BulkImportPartStatusConstraint.php

Lines changed: 6 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -23,60 +23,17 @@
2323

2424
namespace App\DataTables\Filters\Constraints\Part;
2525

26-
use App\DataTables\Filters\Constraints\AbstractConstraint;
27-
use App\Entity\BulkInfoProviderImportJobPart;
26+
use App\DataTables\Filters\Constraints\ChoiceConstraint;
27+
use App\Entity\InfoProviderSystem\BulkInfoProviderImportJobPart;
2828
use Doctrine\ORM\QueryBuilder;
2929

30-
class BulkImportPartStatusConstraint extends AbstractConstraint
30+
class BulkImportPartStatusConstraint extends ChoiceConstraint
3131
{
32-
/** @var array The status values to filter by */
33-
protected array $values = [];
34-
35-
/** @var string|null The operator to use ('any_of', 'none_of', 'all_of') */
36-
protected ?string $operator = null;
37-
3832
public function __construct()
3933
{
4034
parent::__construct('bulk_import_part_status');
4135
}
4236

43-
/**
44-
* Gets the status values to filter by.
45-
*/
46-
public function getValues(): array
47-
{
48-
return $this->values;
49-
}
50-
51-
/**
52-
* Sets the status values to filter by.
53-
*/
54-
public function setValues(array $values): void
55-
{
56-
$this->values = $values;
57-
}
58-
59-
/**
60-
* Gets the operator to use.
61-
*/
62-
public function getOperator(): ?string
63-
{
64-
return $this->operator;
65-
}
66-
67-
/**
68-
* Sets the operator to use.
69-
*/
70-
public function setOperator(?string $operator): void
71-
{
72-
$this->operator = $operator;
73-
}
74-
75-
public function isEnabled(): bool
76-
{
77-
return !empty($this->values) && $this->operator !== null;
78-
}
79-
8037
public function apply(QueryBuilder $queryBuilder): void
8138
{
8239
// Do not apply a filter if values are empty or operator is null
@@ -94,11 +51,11 @@ public function apply(QueryBuilder $queryBuilder): void
9451
if ($this->operator === 'ANY') {
9552
$existsSubquery->andWhere('bip_part_status.status IN (:part_status_values)');
9653
$queryBuilder->andWhere('EXISTS (' . $existsSubquery->getDQL() . ')');
97-
$queryBuilder->setParameter('part_status_values', $this->values);
54+
$queryBuilder->setParameter('part_status_values', $this->value);
9855
} elseif ($this->operator === 'NONE') {
9956
$existsSubquery->andWhere('bip_part_status.status IN (:part_status_values)');
10057
$queryBuilder->andWhere('NOT EXISTS (' . $existsSubquery->getDQL() . ')');
101-
$queryBuilder->setParameter('part_status_values', $this->values);
58+
$queryBuilder->setParameter('part_status_values', $this->value);
10259
}
10360
}
104-
}
61+
}

src/DataTables/Filters/PartFilter.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@
2828
use App\DataTables\Filters\Constraints\EntityConstraint;
2929
use App\DataTables\Filters\Constraints\IntConstraint;
3030
use App\DataTables\Filters\Constraints\NumberConstraint;
31-
use App\DataTables\Filters\Constraints\Part\LessThanDesiredConstraint;
32-
use App\DataTables\Filters\Constraints\Part\ParameterConstraint;
33-
use App\DataTables\Filters\Constraints\Part\TagsConstraint;
3431
use App\DataTables\Filters\Constraints\Part\BulkImportJobExistsConstraint;
3532
use App\DataTables\Filters\Constraints\Part\BulkImportJobStatusConstraint;
3633
use App\DataTables\Filters\Constraints\Part\BulkImportPartStatusConstraint;
34+
use App\DataTables\Filters\Constraints\Part\LessThanDesiredConstraint;
35+
use App\DataTables\Filters\Constraints\Part\ParameterConstraint;
36+
use App\DataTables\Filters\Constraints\Part\TagsConstraint;
3737
use App\DataTables\Filters\Constraints\TextConstraint;
3838
use App\Entity\Attachments\AttachmentType;
3939
use App\Entity\Parts\Category;
@@ -45,8 +45,6 @@
4545
use App\Entity\Parts\Supplier;
4646
use App\Entity\ProjectSystem\Project;
4747
use App\Entity\UserSystem\User;
48-
use App\Entity\BulkInfoProviderImportJob;
49-
use App\Entity\BulkInfoProviderImportJobPart;
5048
use App\Services\Trees\NodesListBuilder;
5149
use Doctrine\Common\Collections\ArrayCollection;
5250
use Doctrine\ORM\QueryBuilder;

src/DataTables/PartsDataTable.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
use App\Entity\Parts\Part;
4444
use App\Entity\Parts\PartLot;
4545
use App\Entity\ProjectSystem\Project;
46-
use App\Entity\BulkInfoProviderImportJobPart;
4746
use App\Services\EntityURLGenerator;
4847
use App\Services\Formatters\AmountFormatter;
4948
use App\Settings\BehaviorSettings\TableSettings;

src/Entity/BulkImportJobStatus.php renamed to src/Entity/InfoProviderSystem/BulkImportJobStatus.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@
2020

2121
declare(strict_types=1);
2222

23-
namespace App\Entity;
23+
namespace App\Entity\InfoProviderSystem;
24+
25+
use Symfony\Contracts\Translation\TranslatableInterface;
26+
use Symfony\Contracts\Translation\TranslatorInterface;
2427

2528
enum BulkImportJobStatus: string
2629
{
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
/*
3+
* This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
4+
*
5+
* Copyright (C) 2019 - 2025 Jan Böhmer (https://github.com/jbtronics)
6+
*
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU Affero General Public License as published
9+
* by the Free Software Foundation, either version 3 of the License, or
10+
* (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU Affero General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU Affero General Public License
18+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
19+
*/
20+
21+
declare(strict_types=1);
22+
23+
namespace App\Entity\InfoProviderSystem;
24+
25+
26+
enum BulkImportPartStatus: string
27+
{
28+
case PENDING = 'pending';
29+
case COMPLETED = 'completed';
30+
case SKIPPED = 'skipped';
31+
case FAILED = 'failed';
32+
}

src/Entity/BulkInfoProviderImportJob.php renamed to src/Entity/InfoProviderSystem/BulkInfoProviderImportJob.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,18 @@
2020

2121
declare(strict_types=1);
2222

23-
namespace App\Entity;
23+
namespace App\Entity\InfoProviderSystem;
2424

2525
use App\Entity\Base\AbstractDBElement;
2626
use App\Entity\Parts\Part;
2727
use App\Entity\UserSystem\User;
28-
use App\Services\InfoProviderSystem\DTOs\BulkSearchResponseDTO;
2928
use App\Services\InfoProviderSystem\DTOs\BulkSearchFieldMappingDTO;
29+
use App\Services\InfoProviderSystem\DTOs\BulkSearchResponseDTO;
3030
use Doctrine\Common\Collections\ArrayCollection;
3131
use Doctrine\Common\Collections\Collection;
3232
use Doctrine\DBAL\Types\Types;
33-
use Doctrine\ORM\Mapping as ORM;
3433
use Doctrine\ORM\EntityManagerInterface;
34+
use Doctrine\ORM\Mapping as ORM;
3535

3636
#[ORM\Entity]
3737
#[ORM\Table(name: 'bulk_info_provider_import_jobs')]

0 commit comments

Comments
 (0)