vid-queue/app/Data/DataPipes/StructureData.php

56 lines
1.8 KiB
PHP
Raw Normal View History

<?php
namespace App\Data\DataPipes;
use App\Data\FileData;
use Illuminate\Support\Collection;
use Spatie\LaravelData\DataPipes\DataPipe;
use Spatie\LaravelData\Lazy;
use Spatie\LaravelData\Optional;
use Spatie\LaravelData\Support\DataClass;
use Spatie\LaravelData\Support\DataConfig;
use Spatie\LaravelData\Support\DataProperty;
class StructureData implements DataPipe
{
public function handle(mixed $payload, DataClass $class, Collection $properties): Collection
{
if (!$properties->has('rawData') || !count($properties->get('rawData'))) {
return $properties;
}
$data = [];
foreach ($properties->get('rawData') as $watch) {
$showTmdb = $watch['showTmdb'];
$season = $watch['season'];
$episode = $watch['episode'];
$watched = $watch['watched'];
if (!array_key_exists($showTmdb, $data)) {
$data[$showTmdb] = [];
$data[$showTmdb]['ids'] = ['tmdb' => $showTmdb];
$data[$showTmdb]['seasons'] = [];
}
if (!array_key_exists($season, $data[$showTmdb]['seasons'])) {
$data[$showTmdb]['seasons'][$season] = [];
$data[$showTmdb]['seasons'][$season]['number'] = $season;
$data[$showTmdb]['seasons'][$season]['episodes'] = [];
}
$data[$showTmdb]['seasons'][$season]['episodes'][] = [
'number' => $episode,
'watched_at' => $watched,
];
}
$flat = [];
foreach ($data as $show) {
$show['seasons'] = array_values($show['seasons']);
$flat[] = $show;
}
$properties['structuredData'] = ['shows' => $flat];
return $properties;
}
}