ClientProviderBlockService.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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.gender',
  27. 'providers.average_rating as provider_rating',
  28. 'provider_address.district as provider_district',
  29. )
  30. ->orderBy('client_provider_blocks.created_at', 'desc')
  31. ->get();
  32. }
  33. public function create(array $data): ClientProviderBlock
  34. {
  35. $existing = ClientProviderBlock::where('client_id', data_get($data, 'client_id'))
  36. ->where('provider_id', data_get($data, 'provider_id'))
  37. ->first();
  38. if ($existing) {
  39. if ($existing->trashed()) {
  40. $existing->restore();
  41. $existing->load(['provider.user']);
  42. return $existing;
  43. } else {
  44. throw new Exception(__('validation.client_provider_block.already_blocked'));
  45. }
  46. }
  47. $block = ClientProviderBlock::create($data);
  48. $block->load(['provider.user']);
  49. return $block;
  50. }
  51. public function delete(int $id): bool
  52. {
  53. $block = ClientProviderBlock::findOrFail($id);
  54. return $block->delete();
  55. }
  56. //
  57. public function getBlockedProviderIds(int $clientId): array
  58. {
  59. return ClientProviderBlock::where('client_id', $clientId)
  60. ->pluck('provider_id')
  61. ->toArray();
  62. }
  63. }