MediaService.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace App\Services;
  3. use App\Models\Media;
  4. use App\Traits\RemoveArchiveS3;
  5. use App\Traits\UploadsFile;
  6. use Illuminate\Database\Eloquent\Collection;
  7. use Illuminate\Http\UploadedFile;
  8. class MediaService
  9. {
  10. use RemoveArchiveS3, UploadsFile;
  11. public function getAll(): Collection
  12. {
  13. return Media::query()
  14. ->with(['user'])
  15. ->orderBy('created_at', 'desc')
  16. ->get();
  17. }
  18. public function findById(int $id): ?Media
  19. {
  20. return Media::with(['user'])->find($id);
  21. }
  22. public function create(array $data): Media
  23. {
  24. return Media::create($data);
  25. }
  26. public function update(int $id, array $data): ?Media
  27. {
  28. $model = $this->findById($id);
  29. if (! $model) {
  30. return null;
  31. }
  32. $model->update($data);
  33. return $model->fresh(['user']);
  34. }
  35. public function delete(int $id): bool
  36. {
  37. $model = $this->findById($id);
  38. if (! $model) {
  39. return false;
  40. }
  41. return $model->delete();
  42. }
  43. public function createFromFile(UploadedFile $file, string $folder, string $source, int $sourceId, ?string $filename = null): Media
  44. {
  45. $path = $this->uploadFile($file, $folder, $filename);
  46. return Media::create([
  47. 'source' => $source,
  48. 'source_id' => $sourceId,
  49. 'name' => $file->getClientOriginalName(),
  50. 'path' => $path,
  51. ]);
  52. }
  53. public function replaceFile(UploadedFile $newFile, string $folder, string $source, int $sourceId, ?Media $old = null, ?string $filename = null): Media
  54. {
  55. if ($old) {
  56. $this->removeArchiveByPath($old->path);
  57. $old->delete();
  58. }
  59. return $this->createFromFile($newFile, $folder, $source, $sourceId, $filename);
  60. }
  61. }