ReviewService.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace App\Services;
  3. use App\Models\ClientProviderBlock;
  4. use App\Models\ProviderClientBlock;
  5. use App\Models\Review;
  6. use App\Models\Schedule;
  7. use Exception;
  8. use Illuminate\Support\Facades\DB;
  9. use Illuminate\Support\Facades\Log;
  10. class ReviewService
  11. {
  12. public function getAll()
  13. {
  14. return Review::with(['schedule.client.user', 'schedule.provider.user', 'reviewsImprovements.improvementType'])
  15. ->orderBy('created_at', 'desc')
  16. ->get();
  17. }
  18. public function getByScheduleId(int $scheduleId)
  19. {
  20. return Review::with(['schedule.client.user', 'schedule.provider.user'])
  21. ->where('schedule_id', $scheduleId)
  22. ->orderBy('created_at', 'desc')
  23. ->get();
  24. }
  25. public function getByOrigin(string $origin, int $originId)
  26. {
  27. return Review::with(['schedule.client.user', 'schedule.provider.user'])
  28. ->where('origin', $origin)
  29. ->where('origin_id', $originId)
  30. ->orderBy('created_at', 'desc')
  31. ->get();
  32. }
  33. public function create(array $data): Review
  34. {
  35. try {
  36. DB::beginTransaction();
  37. $review = new Review();
  38. $review->fill($data);
  39. $review->save();
  40. $review->refresh();
  41. if (isset($data['improvements_ids'])) {
  42. $review->improvements()->sync($data['improvements_ids']);
  43. }
  44. if($data['block_provider'] == true) {
  45. $schedule = Schedule::find($data['schedule_id']);
  46. $client_provider_block = new ClientProviderBlock();
  47. $client_provider_block->client_id = $schedule->client_id;
  48. $client_provider_block->provider_id = $schedule->provider_id;
  49. $client_provider_block->save();
  50. }
  51. if($data['block_client'] == true) {
  52. $schedule = Schedule::find($data['schedule_id']);
  53. $provider_client_block = new ProviderClientBlock();
  54. $provider_client_block->provider_id = $schedule->provider_id;
  55. $provider_client_block->client_id = $schedule->client_id;
  56. $provider_client_block->save();
  57. }
  58. DB::commit();
  59. return $review;
  60. } catch (Exception $e) {
  61. DB::rollBack();
  62. Log::error('Error creating review: ' . $e->getMessage());
  63. throw $e;
  64. }
  65. }
  66. public function update(int $id, array $data): Review
  67. {
  68. $review = Review::findOrFail($id);
  69. $review->update($data);
  70. return $review->fresh();
  71. }
  72. public function delete(int $id): bool
  73. {
  74. $review = Review::findOrFail($id);
  75. return $review->delete();
  76. }
  77. }