ClientFavoriteProviderService.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace App\Services;
  3. use App\Models\ClientFavoriteProvider;
  4. use App\Http\Resources\ClientFavoriteProviderResource;
  5. use Illuminate\Database\Eloquent\Collection;
  6. use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
  7. class ClientFavoriteProviderService
  8. {
  9. public function getByClientId(int $clientId): Collection
  10. {
  11. return ClientFavoriteProvider::where('client_favorite_providers.client_id', $clientId)
  12. ->leftJoin('providers', 'providers.id', '=', 'client_favorite_providers.provider_id')
  13. ->leftJoin('users as provider_user', 'provider_user.id', '=', 'providers.user_id')
  14. ->leftJoin('addresses as provider_address', function ($join) {
  15. $join->on('provider_address.source_id', '=', 'providers.id')
  16. ->where('provider_address.source', 'provider')
  17. ->whereNull('provider_address.deleted_at');
  18. })
  19. ->leftJoin('cities', 'cities.id', '=', 'provider_address.city_id')
  20. ->select(
  21. 'client_favorite_providers.id',
  22. 'client_favorite_providers.client_id',
  23. 'client_favorite_providers.provider_id',
  24. 'client_favorite_providers.notes',
  25. 'client_favorite_providers.created_at',
  26. 'client_favorite_providers.updated_at',
  27. 'provider_user.name as provider_name',
  28. 'providers.average_rating',
  29. 'providers.daily_price_8h',
  30. 'providers.daily_price_6h',
  31. 'providers.daily_price_4h',
  32. 'providers.daily_price_2h',
  33. 'providers.total_services',
  34. 'cities.name as city_name',
  35. )
  36. ->orderBy('client_favorite_providers.created_at', 'desc')
  37. ->get();
  38. }
  39. public function getById(int $id): ClientFavoriteProviderResource
  40. {
  41. $favorite = ClientFavoriteProvider::with('provider')->findOrFail($id);
  42. return new ClientFavoriteProviderResource($favorite);
  43. }
  44. public function create(array $data): ClientFavoriteProviderResource
  45. {
  46. $favorite = ClientFavoriteProvider::create($data);
  47. $favorite->load('provider');
  48. return new ClientFavoriteProviderResource($favorite);
  49. }
  50. public function update(int $id, array $data): ClientFavoriteProviderResource
  51. {
  52. $favorite = ClientFavoriteProvider::findOrFail($id);
  53. $favorite->update($data);
  54. $favorite->load('provider');
  55. return new ClientFavoriteProviderResource($favorite);
  56. }
  57. public function delete(int $id): bool
  58. {
  59. $favorite = ClientFavoriteProvider::findOrFail($id);
  60. return $favorite->delete();
  61. }
  62. public function getFavoritedProviderIds(int $clientId): array
  63. {
  64. return ClientFavoriteProvider::where('client_id', $clientId)
  65. ->pluck('provider_id')
  66. ->toArray();
  67. }
  68. }