Files
CRM/app/Services/Account/Settings/DestroyAccount.php
Kroonk a213a1dba0
Some checks failed
Build & Push Monica Image to Gitea Registry / build-and-push (push) Failing after 9s
refactor: replace custom CRM with Monica fork
2026-05-22 16:19:55 +02:00

87 lines
1.7 KiB
PHP

<?php
namespace App\Services\Account\Settings;
use App\Services\BaseService;
use App\Models\Account\Account;
use App\Exceptions\StripeException;
class DestroyAccount extends BaseService
{
/**
* Get the validation rules that apply to the service.
*
* @return array
*/
public function rules()
{
return [
'account_id' => 'required|integer|exists:accounts,id',
];
}
/**
* Completely delete an account.
*
* @param array $data
* @return void
*
* @throws StripeException
*/
public function execute(array $data): void
{
$this->validate($data);
$account = Account::find($data['account_id']);
$this->destroyDocuments($account);
$this->destroyPhotos($account);
$this->cancelStripe($account);
$account->delete();
}
/**
* Destroy the documents.
*
* @param Account $account
* @return void
*/
private function destroyDocuments(Account $account)
{
app(DestroyAllDocuments::class)->execute([
'account_id' => $account->id,
]);
}
/**
* Destroy the photos.
*
* @param Account $account
* @return void
*/
private function destroyPhotos(Account $account)
{
app(DestroyAllPhotos::class)->execute([
'account_id' => $account->id,
]);
}
/**
* Cancel Stripe subscription.
*
* @param Account $account
* @return void
*
* @throws StripeException
*/
private function cancelStripe(Account $account)
{
if ($account->isSubscribed() && ! $account->has_access_to_paid_version_for_free) {
$account->subscriptionCancel();
}
}
}