Feat: Rearranging Providers
This commit is contained in:
+5
-5
@@ -35,11 +35,11 @@ return [
|
|||||||
|
|
||||||
'privacy' => [
|
'privacy' => [
|
||||||
'providers' => [
|
'providers' => [
|
||||||
\Modules\Core\Privacy\Providers\CustomerDataProvider::class,
|
\Modules\Core\Customer\Privacy\CustomerDataProvider::class,
|
||||||
\Modules\Core\Privacy\Providers\AddressDataProvider::class,
|
\Modules\Core\Customer\Privacy\AddressDataProvider::class,
|
||||||
\Modules\Core\Privacy\Providers\OrderDataProvider::class,
|
\Modules\Core\Order\Privacy\OrderDataProvider::class,
|
||||||
\Modules\Core\Privacy\Providers\CartDataProvider::class,
|
\Modules\Core\Cart\Privacy\CartDataProvider::class,
|
||||||
\Modules\Core\Privacy\Providers\ReviewDataProvider::class,
|
\Modules\Core\Review\Privacy\ReviewDataProvider::class,
|
||||||
],
|
],
|
||||||
|
|
||||||
'grace_period_days' => 30,
|
'grace_period_days' => 30,
|
||||||
|
|||||||
+16
-5
@@ -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
|
payload for export (e.g. `AddressDataProvider::eraseForUser()`, since addresses belong to a
|
||||||
Customer, not an individual).
|
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
|
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:
|
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
|
// config/core.php
|
||||||
'privacy' => [
|
'privacy' => [
|
||||||
'providers' => [
|
'providers' => [
|
||||||
\Modules\Core\Privacy\Providers\CustomerDataProvider::class,
|
\Modules\Core\Customer\Privacy\CustomerDataProvider::class,
|
||||||
\Modules\Core\Privacy\Providers\AddressDataProvider::class,
|
\Modules\Core\Customer\Privacy\AddressDataProvider::class,
|
||||||
\Modules\Core\Privacy\Providers\OrderDataProvider::class,
|
\Modules\Core\Order\Privacy\OrderDataProvider::class,
|
||||||
\Modules\Core\Privacy\Providers\CartDataProvider::class,
|
\Modules\Core\Cart\Privacy\CartDataProvider::class,
|
||||||
\Modules\Core\Privacy\Providers\ReviewDataProvider::class,
|
\Modules\Core\Review\Privacy\ReviewDataProvider::class,
|
||||||
// A future module just adds its own provider here.
|
// A future module just adds its own provider here.
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Modules\Core\Privacy\Providers;
|
namespace Modules\Core\Cart\Privacy;
|
||||||
|
|
||||||
use Lunar\Models\Cart;
|
use Lunar\Models\Cart;
|
||||||
use Lunar\Models\CartAddress;
|
use Lunar\Models\CartAddress;
|
||||||
+2
-3
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Modules\Core\Privacy\Providers;
|
namespace Modules\Core\Customer\Privacy;
|
||||||
|
|
||||||
use Lunar\Models\Address;
|
use Lunar\Models\Address;
|
||||||
use Modules\Core\Privacy\Contracts\PersonalDataProvider;
|
use Modules\Core\Privacy\Contracts\PersonalDataProvider;
|
||||||
@@ -17,8 +17,7 @@ use Modules\Core\Privacy\DTOs\UserSubject;
|
|||||||
* OrderAddress, handled by OrderDataProvider), so they're freely deleted outright
|
* OrderAddress, handled by OrderDataProvider), so they're freely deleted outright
|
||||||
* rather than pseudonymized in place.
|
* rather than pseudonymized in place.
|
||||||
*/
|
*/
|
||||||
class
|
class AddressDataProvider implements PersonalDataProvider
|
||||||
AddressDataProvider implements PersonalDataProvider
|
|
||||||
{
|
{
|
||||||
public function name(): string
|
public function name(): string
|
||||||
{
|
{
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Modules\Core\Privacy\Providers;
|
namespace Modules\Core\Customer\Privacy;
|
||||||
|
|
||||||
use Lunar\Models\Customer;
|
use Lunar\Models\Customer;
|
||||||
use Modules\Core\Privacy\Contracts\PersonalDataProvider;
|
use Modules\Core\Privacy\Contracts\PersonalDataProvider;
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Modules\Core\Privacy\Providers;
|
namespace Modules\Core\Order\Privacy;
|
||||||
|
|
||||||
use Lunar\Models\Order;
|
use Lunar\Models\Order;
|
||||||
use Lunar\Models\OrderAddress;
|
use Lunar\Models\OrderAddress;
|
||||||
@@ -19,9 +19,11 @@ use ZipArchive;
|
|||||||
* listener) without touching how the data is gathered.
|
* listener) without touching how the data is gathered.
|
||||||
*
|
*
|
||||||
* Column schema: every provider's data is either a list of associative arrays
|
* Column schema: every provider's data is either a list of associative arrays
|
||||||
* (rows directly) or a single associative array (one row) — see the providers in
|
* (rows directly) or a single associative array (one row) — see the providers
|
||||||
* Modules\Core\Privacy\Providers, all of which return exactly one of those two
|
* registered in config('core.privacy.providers'), each living in its own owning
|
||||||
* shapes. Any nested array value within a row (e.g. an order's `addresses`) is
|
* module's Privacy/ subdirectory (e.g. Modules\Core\Order\Privacy\
|
||||||
|
* OrderDataProvider), all of which return exactly one of those two shapes. Any
|
||||||
|
* nested array value within a row (e.g. an order's `addresses`) is
|
||||||
* JSON-encoded into that one cell rather than exploded into further columns —
|
* JSON-encoded into that one cell rather than exploded into further columns —
|
||||||
* CsvWriter's generic stringify() behavior, not special-cased here.
|
* CsvWriter's generic stringify() behavior, not special-cased here.
|
||||||
*/
|
*/
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Modules\Core\Privacy\Providers;
|
namespace Modules\Core\Review\Privacy;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Modules\Core\Privacy\Contracts\PersonalDataProvider;
|
use Modules\Core\Privacy\Contracts\PersonalDataProvider;
|
||||||
Reference in New Issue
Block a user