orderBy('created_at', 'desc') ->get(); } public function getByScheduleId(int $scheduleId) { return Review::with(['schedule.client.user', 'schedule.provider.user']) ->where('schedule_id', $scheduleId) ->orderBy('created_at', 'desc') ->get(); } public function getByOrigin(string $origin, int $originId) { return Review::with(['schedule.client.user', 'schedule.provider.user']) ->where('origin', $origin) ->where('origin_id', $originId) ->orderBy('created_at', 'desc') ->get(); } public function create(array $data): Review { try { DB::beginTransaction(); $review = new Review(); $review->fill($data); $review->save(); $review->refresh(); if (isset($data['improvements_ids'])) { $review->improvements()->sync($data['improvements_ids']); } if($data['block_provider'] == true) { $schedule = Schedule::find($data['schedule_id']); $client_provider_block = new ClientProviderBlock(); $client_provider_block->client_id = $schedule->client_id; $client_provider_block->provider_id = $schedule->provider_id; $client_provider_block->save(); } if($data['block_client'] == true) { $schedule = Schedule::find($data['schedule_id']); $provider_client_block = new ProviderClientBlock(); $provider_client_block->provider_id = $schedule->provider_id; $provider_client_block->client_id = $schedule->client_id; $provider_client_block->save(); } DB::commit(); return $review; } catch (Exception $e) { DB::rollBack(); Log::error('Error creating review: ' . $e->getMessage()); throw $e; } } public function update(int $id, array $data): Review { $review = Review::findOrFail($id); $review->update($data); return $review->fresh(); } public function delete(int $id): bool { $review = Review::findOrFail($id); return $review->delete(); } }