<?php
namespace App\Pipelines\Encyclopedia;
use App\Http\Integrations\MusicBrainz\MusicBrainzConnector;
use App\Http\Integrations\MusicBrainz\Requests\GetRecordingsRequest;
use Closure;
use Illuminate\Support\Arr;
class GetAlbumTracksUsingMbid
{
use TriesRemember;
public function __construct(private readonly MusicBrainzConnector $connector)
{
}
public function __invoke(?string $mbid, Closure $next): mixed
{
if (!$mbid) {
return $next(null);
}
$tracks = $this->tryRememberForever(
key: cache_key('album tracks', $mbid),
callback: function () use ($mbid): array {
$tracks = [];
foreach ($this->connector->send(new GetRecordingsRequest($mbid))->json('media', []) as $media) {
array_push($tracks, ...Arr::get($media, 'tracks', []));
}
return $tracks;
},
);
return $next($tracks);
}
}