UnitMediaService.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace App\Services;
  3. use App\Models\UnitMedia;
  4. use Illuminate\Database\Eloquent\Collection;
  5. use Illuminate\Support\Facades\Storage;
  6. class UnitMediaService
  7. {
  8. public function getByUnitId(int $unitId): Collection
  9. {
  10. return UnitMedia::where('unit_id', $unitId)
  11. ->orderBy('created_at', 'desc')
  12. ->get();
  13. }
  14. public function findById(int $id): ?UnitMedia
  15. {
  16. return UnitMedia::find($id);
  17. }
  18. public function create(array $data): UnitMedia
  19. {
  20. $file = $data['file'];
  21. $title = $data['title'];
  22. $fileUrl = $file->store('unit-media');
  23. $mimeType = $file->getMimeType();
  24. return UnitMedia::create([
  25. 'unit_id' => $data['unit_id'],
  26. 'title' => $title,
  27. 'file_url' => $fileUrl,
  28. 'mime_type' => $mimeType,
  29. 'visible_to_franchisee' => $data['visible_to_franchisee'] ?? false,
  30. ]);
  31. }
  32. public function update(int $id, array $data): ?UnitMedia
  33. {
  34. $model = $this->findById($id);
  35. if (!$model) {
  36. return null;
  37. }
  38. if (isset($data['file'])) {
  39. Storage::delete($model->file_url);
  40. $file = $data['file'];
  41. $data['file_url'] = $file->store('unit-media');
  42. $data['mime_type'] = $file->getMimeType();
  43. unset($data['file']);
  44. }
  45. $model->update($data);
  46. return $model->fresh();
  47. }
  48. public function delete(int $id): bool
  49. {
  50. $model = $this->findById($id);
  51. if (!$model) {
  52. return false;
  53. }
  54. Storage::delete($model->file_url);
  55. return $model->delete();
  56. }
  57. }