56 lines
1.8 KiB
PHP
56 lines
1.8 KiB
PHP
|
|
<?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;
|
||
|
|
}
|
||
|
|
}
|