Skip to content

Commit 5e2824a

Browse files
committed
Remove package providers when package is deleted
1 parent 82a1034 commit 5e2824a

4 files changed

Lines changed: 59 additions & 1 deletion

File tree

src/Doctrine/EventListener/PackageListener.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,29 @@
44

55
use CodedMonkey\Dirigent\Doctrine\Entity\Package;
66
use CodedMonkey\Dirigent\Doctrine\Repository\PackageRepository;
7+
use CodedMonkey\Dirigent\Message\RemovePackageProvider;
78
use Doctrine\Bundle\DoctrineBundle\Attribute\AsEntityListener;
89
use Doctrine\ORM\Event\PreRemoveEventArgs;
910
use Doctrine\ORM\Events;
11+
use Symfony\Component\Messenger\MessageBusInterface;
1012

1113
#[AsEntityListener(Events::preRemove, entity: Package::class)]
12-
class PackageListener
14+
readonly class PackageListener
1315
{
16+
public function __construct(
17+
private MessageBusInterface $messenger,
18+
) {
19+
}
20+
1421
public function preRemove(Package $package, PreRemoveEventArgs $event): void
1522
{
1623
/** @var PackageRepository $repository */
1724
$repository = $event->getObjectManager()->getRepository(Package::class);
1825

1926
// Delete existing package links
2027
$repository->deletePackageLinks($package);
28+
29+
// Remove package provider
30+
$this->messenger->dispatch(new RemovePackageProvider($package->getId()));
2131
}
2232
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace CodedMonkey\Dirigent\Message;
4+
5+
use Symfony\Component\Messenger\Attribute\AsMessage;
6+
7+
#[AsMessage]
8+
readonly class RemovePackageProvider
9+
{
10+
public function __construct(
11+
public int $packageId,
12+
) {
13+
}
14+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace CodedMonkey\Dirigent\Message;
4+
5+
use CodedMonkey\Dirigent\Doctrine\Repository\PackageRepository;
6+
use CodedMonkey\Dirigent\Package\PackageProviderManager;
7+
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
8+
9+
#[AsMessageHandler]
10+
readonly class RemovePackageProviderHandler
11+
{
12+
use PackageHandlerTrait;
13+
14+
public function __construct(
15+
private PackageRepository $packageRepository,
16+
private PackageProviderManager $providerManager,
17+
) {
18+
}
19+
20+
public function __invoke(RemovePackageProvider $message): void
21+
{
22+
$package = $this->getPackage($this->packageRepository, $message->packageId);
23+
24+
$this->providerManager->remove($package);
25+
}
26+
}

src/Package/PackageProviderManager.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ public function dump(Package $package): void
4444
$package->setDumpedAt(new \DateTimeImmutable());
4545
}
4646

47+
public function remove(Package $package): void
48+
{
49+
$packageName = $package->getName();
50+
51+
$this->filesystem->remove($this->path($packageName));
52+
$this->filesystem->remove($this->path("$packageName~dev"));
53+
}
54+
4755
public function exists(string $packageName): bool
4856
{
4957
return $this->filesystem->exists($this->path($packageName));

0 commit comments

Comments
 (0)