ClientProviderBlockService.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace App\Services;
  3. use App\Models\ClientProviderBlock;
  4. use Exception;
  5. class ClientProviderBlockService
  6. {
  7. public function getByClientId(int $clientId)
  8. {
  9. return ClientProviderBlock::where('client_provider_blocks.client_id', $clientId)
  10. ->leftJoin('providers', 'providers.id', '=', 'client_provider_blocks.provider_id')
  11. ->leftJoin('users as provider_user', 'provider_user.id', '=', 'providers.user_id')
  12. ->leftJoin('addresses as provider_address', function ($join) {
  13. $join->on('provider_address.source_id', '=', 'providers.id')
  14. ->where('provider_address.source', 'provider')
  15. ->whereNull('provider_address.deleted_at');
  16. })
  17. ->select(
  18. 'client_provider_blocks.id',
  19. 'client_provider_blocks.client_id',
  20. 'client_provider_blocks.provider_id',
  21. 'client_provider_blocks.created_at',
  22. 'client_provider_blocks.updated_at',
  23. 'provider_user.name as provider_name',
  24. 'provider_user.email as provider_email',
  25. 'provider_user.phone as provider_phone',
  26. 'providers.average_rating as provider_rating',
  27. 'provider_address.district as provider_district',
  28. )
  29. ->orderBy('client_provider_blocks.created_at', 'desc')
  30. ->get();
  31. }
  32. public function create(array $data): ClientProviderBlock
  33. {
  34. $existing = ClientProviderBlock::where('client_id', $data['client_id'])
  35. ->where('provider_id', $data['provider_id'])
  36. ->first();
  37. if ($existing) {
  38. if ($existing->trashed()) {
  39. $existing->restore();
  40. $existing->load(['provider.user']);
  41. return $existing;
  42. } else {
  43. throw new Exception(__('validation.client_provider_block.already_blocked'));
  44. }
  45. }
  46. $block = ClientProviderBlock::create($data);
  47. $block->load(['provider.user']);
  48. return $block;
  49. }
  50. public function delete(int $id): bool
  51. {
  52. $block = ClientProviderBlock::findOrFail($id);
  53. return $block->delete();
  54. }
  55. public function getBlockedProviderIds(int $clientId): array
  56. {
  57. return ClientProviderBlock::where('client_id', $clientId)
  58. ->pluck('provider_id')
  59. ->toArray();
  60. }
  61. }