ProviderClientBlockService.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace App\Services;
  3. use App\Models\ProviderClientBlock;
  4. use Exception;
  5. class ProviderClientBlockService
  6. {
  7. public function getByProviderId(int $providerId)
  8. {
  9. return ProviderClientBlock::with(['client.user'])
  10. ->where('provider_id', $providerId)
  11. ->orderBy('created_at', 'desc')
  12. ->get();
  13. }
  14. public function create(array $data): ProviderClientBlock
  15. {
  16. // Validar duplicidade (ignorando soft-deleted)
  17. $existing = ProviderClientBlock::where('provider_id', $data['provider_id'])
  18. ->where('client_id', $data['client_id'])
  19. ->first();
  20. if ($existing) {
  21. if ($existing->trashed()) {
  22. // Se foi deletado (desbloqueado), restaura
  23. $existing->restore();
  24. $existing->load(['client.user']);
  25. return $existing;
  26. } else {
  27. // Se já existe ativo, lança erro
  28. throw new Exception(__('validation.provider_client_block.already_blocked'));
  29. }
  30. }
  31. $block = ProviderClientBlock::create($data);
  32. $block->load(['client.user']);
  33. return $block;
  34. }
  35. public function delete(int $id): bool
  36. {
  37. $block = ProviderClientBlock::findOrFail($id);
  38. return $block->delete();
  39. }
  40. public function getBlockedClientIds(int $providerId): array
  41. {
  42. return ProviderClientBlock::where('provider_id', $providerId)
  43. ->pluck('client_id')
  44. ->toArray();
  45. }
  46. }