Просмотр исходного кода

refactor: add retorno do user (client ou provider) no retorno de fotos pendentes de aprovacao

Gustavo Mantovani 1 неделя назад
Родитель
Сommit
1f912724c6
1 измененных файлов с 32 добавлено и 1 удалено
  1. 32 1
      app/Services/MediaService.php

+ 32 - 1
app/Services/MediaService.php

@@ -65,7 +65,7 @@ class MediaService
 
     public function getPendingProfileMedia(int $page = 1, int $perPage = 10): LengthAwarePaginator
     {
-        return Media::query()
+        $paginated = Media::query()
             ->where(function ($query) {
                 $query->where(function ($query) {
                     $query->where('media.source', 'provider')
@@ -92,6 +92,37 @@ class MediaService
             })
             ->orderBy('media.created_at')
             ->paginate($perPage, ['media.*'], 'page', $page);
+
+        $media       = $paginated->getCollection();
+        $providerIds = $media->where('source', 'provider')->pluck('source_id');
+        $clientIds   = $media->where('source', 'client')->pluck('source_id');
+
+        $providers = $providerIds->isEmpty()
+            ? collect()
+            : Provider::query()
+                ->with('user:id,name,email')
+                ->whereIn('id', $providerIds)
+                ->get()
+                ->keyBy('id');
+
+        $clients = $clientIds->isEmpty()
+            ? collect()
+            : Client::query()
+                ->with('user:id,name,email')
+                ->whereIn('id', $clientIds)
+                ->get()
+                ->keyBy('id');
+
+        $media->each(function (Media $item) use ($clients, $providers) {
+            $profile = match ($item->source) {
+                'client'   => $clients->get($item->source_id),
+                'provider' => $providers->get($item->source_id),
+            };
+
+            $item->setRelation('user', $profile?->user);
+        });
+
+        return $paginated;
     }
 
     public function approveProfileMedia(string $source, int $sourceId): Media