ProviderBlockedDayService.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. namespace App\Services;
  3. use App\Models\ProviderBlockedDay;
  4. use Illuminate\Database\Eloquent\Collection;
  5. class ProviderBlockedDayService
  6. {
  7. public function getByProvider(int $providerId): Collection
  8. {
  9. return ProviderBlockedDay::where('provider_id', $providerId)
  10. ->orderBy('date', 'asc')
  11. ->orderBy('init_hour', 'asc')
  12. ->get();
  13. }
  14. public function findById(int $id): ?ProviderBlockedDay
  15. {
  16. return ProviderBlockedDay::find($id);
  17. }
  18. public function create(array $data): ProviderBlockedDay
  19. {
  20. return ProviderBlockedDay::create($data);
  21. }
  22. public function update(
  23. ProviderBlockedDay $blockedDay,
  24. array $data
  25. ): ProviderBlockedDay {
  26. $this->validateManualChange($blockedDay);
  27. $blockedDay->update($data);
  28. return $blockedDay->fresh();
  29. }
  30. public function delete(ProviderBlockedDay $blockedDay): bool
  31. {
  32. $this->validateManualChange($blockedDay);
  33. return $blockedDay->delete();
  34. }
  35. private function validateManualChange(
  36. ProviderBlockedDay $blockedDay
  37. ): void {
  38. if ($blockedDay->type === 'auto_cancel') {
  39. throw new \Exception(
  40. 'Este dia foi bloqueado como penalidade por falta do prestador e não pode ser alterado ou desbloqueado.'
  41. );
  42. }
  43. }
  44. }