MediaService.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. namespace App\Services;
  3. use App\Models\Media;
  4. use Illuminate\Database\Eloquent\Collection;
  5. use Illuminate\Http\UploadedFile;
  6. use Illuminate\Support\Facades\Auth;
  7. use Illuminate\Support\Facades\Storage;
  8. class MediaService
  9. {
  10. public function getAllBySource(string $source, int $sourceId): Collection
  11. {
  12. return Media::where('source', $source)
  13. ->where('source_id', $sourceId)
  14. ->orderBy('created_at', 'desc')
  15. ->get();
  16. }
  17. public function findById(int $id): ?Media
  18. {
  19. return Media::find($id);
  20. }
  21. public function create(array $data): Media
  22. {
  23. $data['user_id'] = Auth::id();
  24. return Media::create($data);
  25. }
  26. public function upload(UploadedFile $file, string $source, int $sourceId, string $mediaType = 'imagem'): Media
  27. {
  28. $path = $file->store("media/{$source}/{$sourceId}", 'public');
  29. return $this->create([
  30. 'type' => $mediaType,
  31. 'source' => $source,
  32. 'source_id' => $sourceId,
  33. 'path' => $path,
  34. 'name' => $file->getClientOriginalName(),
  35. 'url' => Storage::url($path),
  36. ]);
  37. }
  38. public function uploadLogo(UploadedFile $file, int $sourceId): Media
  39. {
  40. Media::where('source', 'partner_agreement_logo')
  41. ->where('source_id', $sourceId)
  42. ->get()
  43. ->each(function (Media $m) {
  44. Storage::disk('public')->delete($m->path);
  45. $m->forceDelete();
  46. });
  47. return $this->upload($file, 'partner_agreement_logo', $sourceId, 'imagem');
  48. }
  49. public function delete(int $id): bool
  50. {
  51. $model = $this->findById($id);
  52. if (!$model) {
  53. return false;
  54. }
  55. Storage::disk('public')->delete($model->path);
  56. return $model->delete();
  57. }
  58. }