AppointmentService.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. namespace App\Services;
  3. use App\Models\Appointment;
  4. use Illuminate\Database\Eloquent\Collection;
  5. use Illuminate\Support\Str;
  6. class AppointmentService
  7. {
  8. public function getAll(): Collection
  9. {
  10. return Appointment::with(['user', 'partnerAgreement', 'partnerAgreementService'])
  11. ->orderBy('date', 'desc')
  12. ->get();
  13. }
  14. public function getAllByUser(int $userId): Collection
  15. {
  16. return Appointment::with(['partnerAgreement', 'partnerAgreementService'])
  17. ->where('user_id', $userId)
  18. ->orderBy('date', 'desc')
  19. ->get();
  20. }
  21. public function findById(int $id): ?Appointment
  22. {
  23. return Appointment::with(['user', 'partnerAgreement', 'partnerAgreementService'])->find($id);
  24. }
  25. public function create(array $data): Appointment
  26. {
  27. $data['order_number'] = $this->generateOrderNumber();
  28. $data['requested_at'] = now();
  29. return Appointment::create($data);
  30. }
  31. public function update(int $id, array $data): ?Appointment
  32. {
  33. $model = Appointment::find($id);
  34. if (!$model) {
  35. return null;
  36. }
  37. $model->update($data);
  38. return $model->fresh(['user', 'partnerAgreement', 'partnerAgreementService']);
  39. }
  40. public function delete(int $id): bool
  41. {
  42. $model = Appointment::find($id);
  43. if (!$model) {
  44. return false;
  45. }
  46. return $model->delete();
  47. }
  48. private function generateOrderNumber(): string
  49. {
  50. do {
  51. $number = 'AGD-' . strtoupper(Str::random(8));
  52. } while (Appointment::where('order_number', $number)->exists());
  53. return $number;
  54. }
  55. }