64 lines
2.3 KiB
PHP
64 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace Modules\Core\Customer\Privacy;
|
|
|
|
use Lunar\Models\Address;
|
|
use Modules\Core\Privacy\Contracts\PersonalDataProvider;
|
|
use Modules\Core\Privacy\DTOs\CustomerSubject;
|
|
use Modules\Core\Privacy\Enums\ErasureOutcome;
|
|
use Modules\Core\Privacy\DTOs\ProviderErasureResult;
|
|
use Modules\Core\Privacy\DTOs\ProviderExportResult;
|
|
use Modules\Core\Privacy\DTOs\UserSubject;
|
|
|
|
/**
|
|
* A customer's saved addresses (lunar_addresses) — belong to the Customer
|
|
* (business account) via customer_id, not to an individual User, so this is
|
|
* Customer-scope only. No legal retention requirement of their own (unlike
|
|
* OrderAddress, handled by OrderDataProvider), so they're freely deleted outright
|
|
* rather than pseudonymized in place.
|
|
*/
|
|
class AddressDataProvider implements PersonalDataProvider
|
|
{
|
|
public function name(): string
|
|
{
|
|
return 'addresses';
|
|
}
|
|
|
|
public function exportForCustomer(CustomerSubject $subject): ProviderExportResult
|
|
{
|
|
$addresses = Address::where('customer_id', $subject->customerId)->get();
|
|
|
|
return new ProviderExportResult('addresses', $addresses->map(fn (Address $address) => [
|
|
'id' => $address->id,
|
|
'first_name' => $address->first_name,
|
|
'last_name' => $address->last_name,
|
|
'company_name' => $address->company_name,
|
|
'line_one' => $address->line_one,
|
|
'line_two' => $address->line_two,
|
|
'line_three' => $address->line_three,
|
|
'city' => $address->city,
|
|
'state' => $address->state,
|
|
'postcode' => $address->postcode,
|
|
'contact_email' => $address->contact_email,
|
|
'contact_phone' => $address->contact_phone,
|
|
])->all());
|
|
}
|
|
|
|
public function exportForUser(UserSubject $subject): ProviderExportResult
|
|
{
|
|
return new ProviderExportResult('addresses', []);
|
|
}
|
|
|
|
public function eraseForCustomer(CustomerSubject $subject): ProviderErasureResult
|
|
{
|
|
Address::where('customer_id', $subject->customerId)->delete();
|
|
|
|
return new ProviderErasureResult('addresses', ErasureOutcome::Erased);
|
|
}
|
|
|
|
public function eraseForUser(UserSubject $subject): ProviderErasureResult
|
|
{
|
|
return new ProviderErasureResult('addresses', ErasureOutcome::Skipped, 'Addresses belong to Customer accounts, not individual users.');
|
|
}
|
|
}
|