|
|
@@ -23,6 +23,7 @@ class ProviderService
|
|
|
public function __construct(
|
|
|
private readonly PagarmeRecipientService $pagarmeRecipientService,
|
|
|
private readonly MediaService $mediaService,
|
|
|
+ private readonly EmailService $emailService,
|
|
|
) {}
|
|
|
|
|
|
public function getAll(): Collection
|
|
|
@@ -63,6 +64,8 @@ class ProviderService
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+ $wasAccepted = $model->approval_status === ApprovalStatusEnum::ACCEPTED;
|
|
|
+
|
|
|
if (isset($data['avatar']) && $data['avatar'] instanceof UploadedFile) {
|
|
|
$media = $this->mediaService->replaceFile(
|
|
|
newFile: $data['avatar'],
|
|
|
@@ -79,7 +82,13 @@ class ProviderService
|
|
|
|
|
|
$model->update($data);
|
|
|
|
|
|
- return $model->fresh(['user', 'profileMedia']);
|
|
|
+ $provider = $model->fresh(['user', 'profileMedia']);
|
|
|
+
|
|
|
+ if (! $wasAccepted && $provider->approval_status === ApprovalStatusEnum::ACCEPTED) {
|
|
|
+ $this->sendApprovedEmail($provider);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $provider;
|
|
|
}
|
|
|
|
|
|
public function delete(int $id): bool
|
|
|
@@ -108,13 +117,20 @@ class ProviderService
|
|
|
|
|
|
public function approve(int $id): Provider
|
|
|
{
|
|
|
- return DB::transaction(function () use ($id) {
|
|
|
+ [$provider, $wasAccepted] = DB::transaction(function () use ($id) {
|
|
|
$provider = Provider::findOrFail($id);
|
|
|
+ $wasAccepted = $provider->approval_status === ApprovalStatusEnum::ACCEPTED;
|
|
|
|
|
|
$provider->update(['approval_status' => ApprovalStatusEnum::ACCEPTED->value]);
|
|
|
|
|
|
- return $provider->fresh(['user', 'profileMedia']);
|
|
|
+ return [$provider->fresh(['user', 'profileMedia']), $wasAccepted];
|
|
|
});
|
|
|
+
|
|
|
+ if (! $wasAccepted) {
|
|
|
+ $this->sendApprovedEmail($provider);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $provider;
|
|
|
}
|
|
|
|
|
|
public function reject(int $id): Provider
|
|
|
@@ -432,4 +448,33 @@ class ProviderService
|
|
|
|
|
|
return $digits === '' ? null : $digits;
|
|
|
}
|
|
|
+
|
|
|
+ //
|
|
|
+
|
|
|
+ private function sendApprovedEmail(Provider $provider): void
|
|
|
+ {
|
|
|
+ if (! empty($provider->user?->email)) {
|
|
|
+ try {
|
|
|
+ $this->emailService->sendProviderApproved(
|
|
|
+ email: $provider->user->email,
|
|
|
+ recipientName: $provider->user->name ?? '',
|
|
|
+ locale: $provider->user->language?->value,
|
|
|
+ );
|
|
|
+ } catch (\Throwable $exception) {
|
|
|
+ Log::error('Provider approval email failed', [
|
|
|
+ 'provider_id' => $provider->id,
|
|
|
+ 'user_id' => $provider->user?->id,
|
|
|
+ 'email' => $provider->user?->email,
|
|
|
+ 'error' => $exception->getMessage(),
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Log::warning('Provider approval email skipped: provider user has no email', [
|
|
|
+ 'provider_id' => $provider->id,
|
|
|
+ 'user_id' => $provider->user?->id,
|
|
|
+ ]);
|
|
|
+ }
|
|
|
}
|