From fdd1899c3441492d9022d30307098e496ee488c3 Mon Sep 17 00:00:00 2001 From: Konstantinos Arvanitakis Date: Wed, 16 Sep 2026 13:44:14 +0300 Subject: [PATCH] Feat: Rearranging Providers --- config/core.php | 10 ++++----- docs/privacy.md | 21 ++++++++++++++----- .../Privacy}/CartDataProvider.php | 2 +- .../Privacy}/AddressDataProvider.php | 5 ++--- .../Privacy}/CustomerDataProvider.php | 2 +- .../Privacy}/OrderDataProvider.php | 2 +- .../Listeners/WriteExportToCsvListener.php | 8 ++++--- .../Privacy}/ReviewDataProvider.php | 2 +- 8 files changed, 32 insertions(+), 20 deletions(-) rename src/{Privacy/Providers => Cart/Privacy}/CartDataProvider.php (98%) rename src/{Privacy/Providers => Customer/Privacy}/AddressDataProvider.php (95%) rename src/{Privacy/Providers => Customer/Privacy}/CustomerDataProvider.php (99%) rename src/{Privacy/Providers => Order/Privacy}/OrderDataProvider.php (98%) rename src/{Privacy/Providers => Review/Privacy}/ReviewDataProvider.php (98%) diff --git a/config/core.php b/config/core.php index bd901cb..54eabde 100644 --- a/config/core.php +++ b/config/core.php @@ -35,11 +35,11 @@ return [ 'privacy' => [ 'providers' => [ - \Modules\Core\Privacy\Providers\CustomerDataProvider::class, - \Modules\Core\Privacy\Providers\AddressDataProvider::class, - \Modules\Core\Privacy\Providers\OrderDataProvider::class, - \Modules\Core\Privacy\Providers\CartDataProvider::class, - \Modules\Core\Privacy\Providers\ReviewDataProvider::class, + \Modules\Core\Customer\Privacy\CustomerDataProvider::class, + \Modules\Core\Customer\Privacy\AddressDataProvider::class, + \Modules\Core\Order\Privacy\OrderDataProvider::class, + \Modules\Core\Cart\Privacy\CartDataProvider::class, + \Modules\Core\Review\Privacy\ReviewDataProvider::class, ], 'grace_period_days' => 30, diff --git a/docs/privacy.md b/docs/privacy.md index c74db14..2359c44 100644 --- a/docs/privacy.md +++ b/docs/privacy.md @@ -61,6 +61,17 @@ implements that method as a no-op — `ErasureOutcome::Skipped` with a reason fo payload for export (e.g. `AddressDataProvider::eraseForUser()`, since addresses belong to a Customer, not an individual). +A provider implementation lives inside the module that owns the data it erases/exports, under +that module's own `Privacy/` subdirectory (e.g. `Modules\Core\Order\Privacy\OrderDataProvider`, +`Modules\Core\Customer\Privacy\CustomerDataProvider`) — never inside `Modules\Core\Privacy` +itself, which only owns the shared contract (`Contracts\PersonalDataProvider`), the request +lifecycle (`Services\PrivacyManager`/`PrivacyService`), and the DTOs/enums every provider +returns. This mirrors how this codebase already handles other cross-cutting-but-domain-specific +code (e.g. a resource's own `Filament/Extensions/` subdirectory) — and matters concretely if a +module is ever extracted into its own composer package (see `docs/modules.md`): the provider +that knows how to erase that module's data must travel with it, not get stranded in `Privacy` +depending on a package that no longer ships in this repo. + A module registers by adding its provider class to `config('core.privacy.providers')` — the same shape as Lunar's own `config('lunar.search.indexers')` model→indexer map: @@ -68,11 +79,11 @@ same shape as Lunar's own `config('lunar.search.indexers')` model→indexer map: // config/core.php 'privacy' => [ 'providers' => [ - \Modules\Core\Privacy\Providers\CustomerDataProvider::class, - \Modules\Core\Privacy\Providers\AddressDataProvider::class, - \Modules\Core\Privacy\Providers\OrderDataProvider::class, - \Modules\Core\Privacy\Providers\CartDataProvider::class, - \Modules\Core\Privacy\Providers\ReviewDataProvider::class, + \Modules\Core\Customer\Privacy\CustomerDataProvider::class, + \Modules\Core\Customer\Privacy\AddressDataProvider::class, + \Modules\Core\Order\Privacy\OrderDataProvider::class, + \Modules\Core\Cart\Privacy\CartDataProvider::class, + \Modules\Core\Review\Privacy\ReviewDataProvider::class, // A future module just adds its own provider here. ], ], diff --git a/src/Privacy/Providers/CartDataProvider.php b/src/Cart/Privacy/CartDataProvider.php similarity index 98% rename from src/Privacy/Providers/CartDataProvider.php rename to src/Cart/Privacy/CartDataProvider.php index fd1043e..2ef7360 100644 --- a/src/Privacy/Providers/CartDataProvider.php +++ b/src/Cart/Privacy/CartDataProvider.php @@ -1,6 +1,6 @@