diff --git a/app/Console/Commands/UpdateArtistImages.php b/app/Console/Commands/UpdateArtistImages.php new file mode 100644 index 0000000..c95fa69 --- /dev/null +++ b/app/Console/Commands/UpdateArtistImages.php @@ -0,0 +1,62 @@ +handle($user); + + /* Loop through every artist in chunks of 50 and attempt to update their image. */ + Media::query() + ->where('type_id', MediaType::ARTIST->value) + ->get() + ->chunk(50) + ->each(function ($chunk) use ($user) { + $ids = $chunk->pluck('media_id')->implode(','); + + $response = (new Client)->request( + 'GET', + "https://api.spotify.com/v1/artists?ids={$ids}", [ + 'headers' => [ + 'Authorization' => 'Bearer '. $user->connections->firstWhere('type_id', ConnectionType::SPOTIFY->value)->token, + ], + ] + ); + + $artists = collect(collect(json_decode($response->getBody()))->get('artists')) + ->filter(fn ($artist) => $artist !== null); + + if (count($artists)) { + $artists = collect($artists->map(fn ($artist) => [ + 'media_id' => $artist->id, + 'cover' => data_get($artist, 'images.0.url'), + ])); + + foreach ($artists as $artist) { + Media::query() + ->where('media_id', $artist['media_id']) + ->first() + ?->update(['cover' => $artist['cover']]); + } + } + }); + + return Command::SUCCESS; + } +} \ No newline at end of file diff --git a/app/Enums/MediaType.php b/app/Enums/MediaType.php new file mode 100644 index 0000000..5e49776 --- /dev/null +++ b/app/Enums/MediaType.php @@ -0,0 +1,23 @@ + 'Movie', + self::TV => 'Tv', + self::ARTIST => 'Artist', + self::TRACK => 'Track', + self::VIDEO_GAME => 'Video Game', + }; + } +} diff --git a/app/Livewire/Actions/Api/SearchMedia.php b/app/Livewire/Actions/Api/SearchMedia.php index 4c02436..87f51cc 100644 --- a/app/Livewire/Actions/Api/SearchMedia.php +++ b/app/Livewire/Actions/Api/SearchMedia.php @@ -2,16 +2,16 @@ namespace App\Livewire\Actions\Api; +use App\Enums\MediaType; use App\Models\Media; -use App\Models\MediaType; use App\Models\User; use Illuminate\Support\Facades\Http; final class SearchMedia { - public function search(User $user, string $phrase, int $mediaType) + public function search(User $user, string $phrase, MediaType $mediaType) { - $type = $mediaType == MediaType::MOVIE ? 'movie' : 'tv'; + $type = $mediaType->value == MediaType::MOVIE->value ? 'movie' : 'tv'; $response = Http::withHeaders([ 'Authorization' => 'Bearer '.config('services.movie_db.access_token'), @@ -34,7 +34,7 @@ public function search(User $user, string $phrase, int $mediaType) return [ 'type_id' => $mediaType, 'media_id' => $media['id'], - 'name' => $mediaType == MediaType::MOVIE ? $media['original_title'] : $media['original_name'], + 'name' => $mediaType->value == MediaType::MOVIE->value ? $media['original_title'] : $media['original_name'], 'cover' => 'https://image.tmdb.org/t/p/original'.$media['poster_path'], ]; })->filter(); diff --git a/app/Livewire/Actions/Api/SearchSpotify.php b/app/Livewire/Actions/Api/SearchSpotify.php deleted file mode 100644 index 8eb8165..0000000 --- a/app/Livewire/Actions/Api/SearchSpotify.php +++ /dev/null @@ -1,106 +0,0 @@ -refreshToken($user); - - $type = $mediaType->isArtist() ? 'artist' : 'track'; - - $response = Http::withHeaders([ - 'Authorization' => 'Bearer '.$user->connections->firstWhere('type_id', ConnectionType::SPOTIFY->value)->token, - 'Content-Type' => 'application/json', - 'Client-Id' => config('services.spotify.client_id'), - ])->get('https://api.spotify.com/v1/search', [ - 'q' => $phrase, - 'type' => $type, - 'limit' => 10, - ]); - - if ($response->successful()) { - $collection = null; - - if ($mediaType->isArtist()) { - $artists = Media::where('type_id', MediaType::ARTIST)->pluck('media_id')->toArray(); - - $collection = collect($response->json('artists.items'))->map(function ($artist) use ($artists) { - $cover = data_get($artist, 'images.0.url'); - - if (in_array($artist['id'], $artists) || is_null($cover)) { - return; - } - - return [ - 'type_id' => MediaType::ARTIST, - 'media_id' => $artist['id'], - 'name' => $artist['name'], - 'cover' => $cover, - 'data' => null, - ]; - })->filter(); - } else { - $tracks = Media::where('type_id', MediaType::TRACK)->pluck('media_id')->toArray(); - - $collection = collect($response->json('tracks.items'))->map(function ($track) use ($tracks) { - $cover = data_get($track, 'album.images.0.url'); - - if (in_array($track['id'], $tracks) || is_null($cover)) { - return; - } - - return [ - 'type_id' => MediaType::TRACK, - 'media_id' => $track['id'], - 'name' => $track['name'], - 'cover' => $cover, - 'data' => [ - 'artist_name' => data_get($track, 'artists.0.name'), - 'album_name' => data_get($track, 'album.name'), - ], - ]; - })->filter(); - } - - return $collection; - } - - return collect(); - } - - public function refreshToken(User $user): bool - { - try { - $spotifyConnection = $user->connections->firstWhere('type_id', ConnectionType::SPOTIFY->value); - - $response = Http::asForm()->post('https://accounts.spotify.com/api/token', [ - 'grant_type' => 'refresh_token', - 'refresh_token' => $spotifyConnection->refresh_token, - 'client_id' => config('services.spotify.client_id'), - 'client_secret' => config('services.spotify.client_secret'), - ]); - - if (! $response->successful()) { - return false; - } - - $spotifyConnection->update(['token' => $response->json()['access_token']]); - - return true; - } catch (Exception $e) { - Log::error("Could not refresh user: {$user->name} token: {$e->getMessage()}"); - - return false; - } - } -} diff --git a/app/Livewire/Actions/Api/Spotify/RefreshToken.php b/app/Livewire/Actions/Api/Spotify/RefreshToken.php new file mode 100644 index 0000000..0b031b8 --- /dev/null +++ b/app/Livewire/Actions/Api/Spotify/RefreshToken.php @@ -0,0 +1,38 @@ +connections->firstWhere('type_id', ConnectionType::SPOTIFY->value); + + $response = Http::asForm()->post('https://accounts.spotify.com/api/token', [ + 'grant_type' => 'refresh_token', + 'refresh_token' => $spotifyConnection->refresh_token, + 'client_id' => config('services.spotify.client_id'), + 'client_secret' => config('services.spotify.client_secret'), + ]); + + if (! $response->successful()) { + return false; + } + + $spotifyConnection->update(['token' => $response->json()['access_token']]); + + return true; + } catch (Exception $e) { + Log::error("Could not refresh user: {$user->name} token: {$e->getMessage()}"); + + return false; + } + } +} diff --git a/app/Livewire/Actions/Api/Spotify/SearchArtist.php b/app/Livewire/Actions/Api/Spotify/SearchArtist.php new file mode 100644 index 0000000..cff92d8 --- /dev/null +++ b/app/Livewire/Actions/Api/Spotify/SearchArtist.php @@ -0,0 +1,52 @@ +handle($user); + + $response = Http::withHeaders([ + 'Authorization' => 'Bearer '.$user->connections->firstWhere('type_id', ConnectionType::SPOTIFY->value)->token, + 'Content-Type' => 'application/json', + 'Client-Id' => config('services.spotify.client_id'), + ])->get('https://api.spotify.com/v1/search', [ + 'q' => $phrase, + 'type' => 'artist', + 'limit' => 10, + ]); + + if ($response->successful()) { + $artists = Media::query() + ->where('type_id', MediaType::ARTIST->value) + ->pluck('media_id') + ->toArray(); + + return collect($response->json('artists.items'))->map(function ($artist) use ($artists) { + $cover = data_get($artist, 'images.0.url'); + + if (in_array($artist['id'], $artists) || is_null($cover)) { + return; + } + + return [ + 'type_id' => MediaType::ARTIST->value, + 'media_id' => $artist['id'], + 'name' => $artist['name'], + 'cover' => $cover, + 'data' => null, + ]; + })->filter(); + } + + return collect(); + } +} diff --git a/app/Livewire/Actions/Api/Spotify/SearchTrack.php b/app/Livewire/Actions/Api/Spotify/SearchTrack.php new file mode 100644 index 0000000..61cd79a --- /dev/null +++ b/app/Livewire/Actions/Api/Spotify/SearchTrack.php @@ -0,0 +1,56 @@ +handle($user); + + $response = Http::withHeaders([ + 'Authorization' => 'Bearer '.$user->connections->firstWhere('type_id', ConnectionType::SPOTIFY->value)->token, + 'Content-Type' => 'application/json', + 'Client-Id' => config('services.spotify.client_id'), + ])->get('https://api.spotify.com/v1/search', [ + 'q' => $phrase, + 'type' => 'track', + 'limit' => 10, + ]); + + if ($response->successful()) { + $tracks = Media::query() + ->where('type_id', MediaType::TRACK->value) + ->pluck('media_id') + ->toArray(); + + return collect($response->json('tracks.items'))->map(function ($track) use ($tracks) { + $cover = data_get($track, 'album.images.0.url'); + + if (in_array($track['id'], $tracks) || is_null($cover)) { + return; + } + + return [ + 'type_id' => MediaType::TRACK->value, + 'media_id' => $track['id'], + 'name' => $track['name'], + 'cover' => $cover, + 'data' => [ + 'artist_name' => data_get($track, 'artists.0.name'), + 'album_name' => data_get($track, 'album.name'), + ], + ]; + })->filter(); + } + + return collect(); + } +} diff --git a/app/Livewire/Actions/Api/Twitch/SearchCategories.php b/app/Livewire/Actions/Api/Twitch/SearchCategories.php index a7f9e79..168994f 100644 --- a/app/Livewire/Actions/Api/Twitch/SearchCategories.php +++ b/app/Livewire/Actions/Api/Twitch/SearchCategories.php @@ -3,15 +3,14 @@ namespace App\Livewire\Actions\Api\Twitch; use App\Enums\ConnectionType; +use App\Enums\MediaType; use App\Models\Media; use App\Models\User; -use Exception; use Illuminate\Support\Facades\Http; -use Illuminate\Support\Facades\Log; final class SearchCategories { - public function search(User $user, string $phrase, int $mediaType) + public function search(User $user, string $phrase, MediaType $mediaType) { (new RefreshToken)->handle($user); @@ -25,7 +24,7 @@ public function search(User $user, string $phrase, int $mediaType) ]); if ($response->successful()) { - $games = Media::where('type_id', $mediaType)->pluck('media_id')->toArray(); + $games = Media::where('type_id', $mediaType->value)->pluck('media_id')->toArray(); return collect($response->json('data'))->map(function ($game) use ($games, $mediaType) { if (in_array($game['id'], $games)) { @@ -33,7 +32,7 @@ public function search(User $user, string $phrase, int $mediaType) } return [ - 'type_id' => $mediaType, + 'type_id' => $mediaType->value, 'media_id' => $game['id'], 'name' => $game['name'], 'cover' => $this->fix_box_art($game['box_art_url']), diff --git a/app/Livewire/Forms/LoginForm.php b/app/Livewire/Forms/LoginForm.php index 9f5220b..ddab874 100644 --- a/app/Livewire/Forms/LoginForm.php +++ b/app/Livewire/Forms/LoginForm.php @@ -2,8 +2,8 @@ namespace App\Livewire\Forms; -use App\Livewire\Actions\Api\SearchSpotify; -use App\Livewire\Actions\Api\Twitch\RefreshToken; +use App\Livewire\Actions\Api\Spotify\RefreshToken as SpotifyRefreshToken; +use App\Livewire\Actions\Api\Twitch\RefreshToken as TwitchRefreshToken; use Illuminate\Auth\Events\Lockout; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\RateLimiter; @@ -44,8 +44,8 @@ public function authenticate(): void auth()->user()->update(['timezone' => timezone()]); - (new SearchSpotify)->refreshToken(auth()->user()); - (new RefreshToken)->handle(auth()->user()); + (new SpotifyRefreshToken)->handle(auth()->user()); + (new TwitchRefreshToken)->handle(auth()->user()); } /** diff --git a/app/Livewire/Media/Games/Edit.php b/app/Livewire/Media/Games/Edit.php index 44e4806..258f5ed 100644 --- a/app/Livewire/Media/Games/Edit.php +++ b/app/Livewire/Media/Games/Edit.php @@ -2,11 +2,11 @@ namespace App\Livewire\Media\Games; -use App\Livewire\Actions\Api\SearchCategories; +use App\Enums\MediaType; +use App\Livewire\Actions\Api\Twitch\SearchCategories; use App\Livewire\Forms\MediaForm; use App\Livewire\Traits\TableHelpers; use App\Models\Media; -use App\Models\MediaType; use Flux\Flux; use Illuminate\Database\Eloquent\Builder; use Livewire\Attributes\Computed; @@ -37,7 +37,7 @@ public function render() public function games() { return Media::query() - ->where('type_id', MediaType::VIDEO_GAME) + ->where('type_id', MediaType::VIDEO_GAME->value) ->when($this->search != '', fn (Builder $query) => $query->where('name', 'LIKE', "%$this->search%")) ->paginate(10); } diff --git a/app/Livewire/Media/Games/Show.php b/app/Livewire/Media/Games/Show.php index 0c54d31..a570947 100644 --- a/app/Livewire/Media/Games/Show.php +++ b/app/Livewire/Media/Games/Show.php @@ -2,8 +2,8 @@ namespace App\Livewire\Media\Games; +use App\Enums\MediaType; use App\Models\Media; -use App\Models\MediaType; use App\Models\Panel; use Livewire\Component; use Livewire\WithoutUrlPagination; @@ -28,23 +28,23 @@ public function render() { return view('livewire.pages.media.games.show', [ 'favorites' => Media::query() - ->where('type_id', MediaType::VIDEO_GAME) + ->where('type_id', MediaType::VIDEO_GAME->value) ->where('is_favorite', true) ->paginate(18, ['*'], 'favorites', $this->favoritesPage), 'current' => Media::query() - ->where('type_id', MediaType::VIDEO_GAME) + ->where('type_id', MediaType::VIDEO_GAME->value) ->where('is_active', true) ->paginate(18, ['*'], 'currentlyPlaying', $this->activePage), 'backlog' => Media::query() - ->where('type_id', MediaType::VIDEO_GAME) + ->where('type_id', MediaType::VIDEO_GAME->value) ->where('in_backlog', true) ->paginate(18, ['*'], 'backlog', $this->backlogPage), 'playedBefore' => Media::query() - ->where('type_id', MediaType::VIDEO_GAME) + ->where('type_id', MediaType::VIDEO_GAME->value) ->where('is_completed', true) ->paginate(18, ['*'], 'completed', $this->playedBeforePage), 'completed' => Media::query() - ->where('type_id', MediaType::VIDEO_GAME) + ->where('type_id', MediaType::VIDEO_GAME->value) ->where('data->total_completion', true) ->paginate(18, ['*'], 'total_completion', $this->totalCompletionPage), 'panel' => Panel::where('name', 'video_games')->first()->content, diff --git a/app/Livewire/Media/Movies/Edit.php b/app/Livewire/Media/Movies/Edit.php index bb8898b..4590181 100644 --- a/app/Livewire/Media/Movies/Edit.php +++ b/app/Livewire/Media/Movies/Edit.php @@ -2,11 +2,11 @@ namespace App\Livewire\Media\Movies; +use App\Enums\MediaType; use App\Livewire\Actions\Api\SearchMedia; use App\Livewire\Forms\MediaForm; use App\Livewire\Traits\TableHelpers; use App\Models\Media; -use App\Models\MediaType; use Flux\Flux; use Illuminate\Database\Eloquent\Builder; use Livewire\Attributes\Computed; @@ -35,7 +35,7 @@ public function render() public function medias() { return Media::query() - ->where('type_id', MediaType::MOVIE) + ->where('type_id', MediaType::MOVIE->value) ->when($this->search != '', fn (Builder $query) => $query->where('name', 'LIKE', "%$this->search%")) ->paginate(10); } diff --git a/app/Livewire/Media/Movies/Show.php b/app/Livewire/Media/Movies/Show.php index 833c589..c97467b 100644 --- a/app/Livewire/Media/Movies/Show.php +++ b/app/Livewire/Media/Movies/Show.php @@ -2,8 +2,8 @@ namespace App\Livewire\Media\Movies; +use App\Enums\MediaType; use App\Models\Media; -use App\Models\MediaType; use App\Models\Panel; use Livewire\Component; use Livewire\WithoutUrlPagination; @@ -24,15 +24,15 @@ public function render() { return view('livewire.pages.media.movies.show', [ 'favorites' => Media::query() - ->where('type_id', MediaType::MOVIE) + ->where('type_id', MediaType::MOVIE->value) ->where('is_favorite', true) ->paginate(9, ['*'], 'favorites', $this->favoritesPage), 'backlog' => Media::query() - ->where('type_id', MediaType::MOVIE) + ->where('type_id', MediaType::MOVIE->value) ->where('in_backlog', true) ->paginate(9, ['*'], 'backlog', $this->backlogPage), 'completed' => Media::query() - ->where('type_id', MediaType::MOVIE) + ->where('type_id', MediaType::MOVIE->value) ->where('is_completed', true) ->paginate(9, ['*'], 'completed', $this->completedPage), 'panel' => Panel::where('name', 'movies')->first()->content, diff --git a/app/Livewire/Media/Music/Edit.php b/app/Livewire/Media/Music/Edit.php index 9e4e912..b4e704a 100644 --- a/app/Livewire/Media/Music/Edit.php +++ b/app/Livewire/Media/Music/Edit.php @@ -2,10 +2,11 @@ namespace App\Livewire\Media\Music; -use App\Livewire\Actions\Api\SearchSpotify; +use App\Enums\MediaType; +use App\Livewire\Actions\Api\Spotify\SearchArtist; +use App\Livewire\Actions\Api\Spotify\SearchTrack; use App\Livewire\Traits\TableHelpers; use App\Models\Media; -use App\Models\MediaType; use Flux\Flux; use Illuminate\Database\Eloquent\Builder; use Livewire\Attributes\Computed; @@ -23,13 +24,11 @@ class Edit extends Component public string $searchTracks = ''; - public $searchedMedia = []; + public ?array $searchedMedia = []; public function render() { - return view('livewire.pages.media.music.edit', [ - 'mediaTypes' => MediaType::all(), - ]); + return view('livewire.pages.media.music.edit'); } #[Computed] @@ -52,11 +51,9 @@ public function tracks() public function searchSpotify(MediaType $mediaType) { - $media = (new SearchSpotify)->search( - auth()->user(), - $this->phrase, - $mediaType - ); + $media = $mediaType->value == MediaType::ARTIST->value + ? (new SearchArtist)->handle(auth()->user(), $this->phrase) + : (new SearchTrack)->handle(auth()->user(), $this->phrase); if ($media->isEmpty()) { Flux::toast(variant: 'danger', text: "No records found for search term: {$this->phrase}.", duration: 3000); @@ -64,7 +61,7 @@ public function searchSpotify(MediaType $mediaType) $this->phrase = ''; } - $this->searchedMedia = $media; + $this->searchedMedia = $media->toArray(); } public function store($mediaId) @@ -93,4 +90,10 @@ public function destroy($id) Flux::toast(variant: 'success', text: "{$media->type->name} deleted.", duration: 3000); } + + public function resetSearch() + { + $this->searchedMedia = []; + $this->phrase = ''; + } } diff --git a/app/Livewire/Media/Music/Show.php b/app/Livewire/Media/Music/Show.php index c470110..97e34f6 100644 --- a/app/Livewire/Media/Music/Show.php +++ b/app/Livewire/Media/Music/Show.php @@ -2,8 +2,8 @@ namespace App\Livewire\Media\Music; +use App\Enums\MediaType; use App\Models\Media; -use App\Models\MediaType; use App\Models\Panel; use Livewire\Component; use Livewire\WithoutUrlPagination; @@ -22,10 +22,10 @@ public function render() { return view('livewire.pages.media.music.show', [ 'favoriteArtists' => Media::query() - ->where('type_id', MediaType::ARTIST) + ->where('type_id', MediaType::ARTIST->value) ->paginate(10, ['*'], 'artists', $this->artistsPage), 'favoriteTracks' => Media::query() - ->where('type_id', MediaType::TRACK) + ->where('type_id', MediaType::TRACK->value) ->paginate(6, ['*'], 'tracks', $this->tracksPage), 'panel' => Panel::where('name', 'music')->first()->content, ]); diff --git a/app/Livewire/Media/Tv/Edit.php b/app/Livewire/Media/Tv/Edit.php index c1f4603..d780635 100644 --- a/app/Livewire/Media/Tv/Edit.php +++ b/app/Livewire/Media/Tv/Edit.php @@ -2,11 +2,11 @@ namespace App\Livewire\Media\Tv; +use App\Enums\MediaType; use App\Livewire\Actions\Api\SearchMedia; use App\Livewire\Forms\MediaForm; use App\Livewire\Traits\TableHelpers; use App\Models\Media; -use App\Models\MediaType; use Flux\Flux; use Illuminate\Database\Eloquent\Builder; use Livewire\Attributes\Computed; @@ -35,7 +35,7 @@ public function render() public function medias() { return Media::query() - ->where('type_id', MediaType::TV) + ->where('type_id', MediaType::TV->value) ->when($this->search != '', fn (Builder $query) => $query->where('name', 'LIKE', "%$this->search%")) ->paginate(10); } diff --git a/app/Livewire/Media/Tv/Show.php b/app/Livewire/Media/Tv/Show.php index 42b94e4..876c3e6 100644 --- a/app/Livewire/Media/Tv/Show.php +++ b/app/Livewire/Media/Tv/Show.php @@ -2,8 +2,8 @@ namespace App\Livewire\Media\Tv; +use App\Enums\MediaType; use App\Models\Media; -use App\Models\MediaType; use App\Models\Panel; use Livewire\Component; use Livewire\WithoutUrlPagination; @@ -26,19 +26,19 @@ public function render() { return view('livewire.pages.media.tv.show', [ 'favorites' => Media::query() - ->where('type_id', MediaType::TV) + ->where('type_id', MediaType::TV->value) ->where('is_favorite', true) ->paginate(9, ['*'], 'favorites', $this->favoritesPage), 'current' => Media::query() - ->where('type_id', MediaType::TV) + ->where('type_id', MediaType::TV->value) ->where('is_active', true) ->paginate(9, ['*'], 'currentlyWatching', $this->activePage), 'backlog' => Media::query() - ->where('type_id', MediaType::TV) + ->where('type_id', MediaType::TV->value) ->where('in_backlog', true) ->paginate(9, ['*'], 'backlog', $this->backlogPage), 'completed' => Media::query() - ->where('type_id', MediaType::TV) + ->where('type_id', MediaType::TV->value) ->where('is_completed', true) ->paginate(9, ['*'], 'completed', $this->completedPage), 'panel' => Panel::where('name', 'tv')->first()->content, diff --git a/app/Models/Media.php b/app/Models/Media.php index c46a194..edf06bf 100644 --- a/app/Models/Media.php +++ b/app/Models/Media.php @@ -2,8 +2,8 @@ namespace App\Models; +use App\Models\Model; use Illuminate\Contracts\Database\Query\Builder; -use Illuminate\Database\Eloquent\Relations\HasOne; class Media extends Model { @@ -36,9 +36,4 @@ public function casts(): array 'data' => 'array', ]; } - - public function type(): HasOne - { - return $this->hasOne(MediaType::class, 'id', 'type_id'); - } } diff --git a/app/Models/MediaType.php b/app/Models/MediaType.php deleted file mode 100644 index ef4336d..0000000 --- a/app/Models/MediaType.php +++ /dev/null @@ -1,35 +0,0 @@ -getKey() == self::MOVIE; - } - - public function isTV(): bool - { - return $this->getKey() == self::TV; - } - - public function isArtist(): bool - { - return $this->getKey() == self::ARTIST; - } -} diff --git a/composer.json b/composer.json index e40734f..bef3da8 100644 --- a/composer.json +++ b/composer.json @@ -35,8 +35,8 @@ "laravel/sail": "^1.26", "mockery/mockery": "^1.6", "nunomaduro/collision": "^8.1", - "pestphp/pest": "^3.6", - "pestphp/pest-plugin-laravel": "^3.0" + "pestphp/pest": "^3.8", + "pestphp/pest-plugin-laravel": "^3.2" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index b930f3e..95b6758 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6c7f886b65e6cd864fd19779c6288d21", + "content-hash": "7b7444b541a66ad356ea57ab82d255cf", "packages": [ { "name": "aws/aws-crt-php", @@ -62,16 +62,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.369.8", + "version": "3.369.21", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "2fa2011e2adc8e70b15b17c50d598fc44fc3106a" + "reference": "7076af00534135cbbf6cc19eb2521124a3549f0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/2fa2011e2adc8e70b15b17c50d598fc44fc3106a", - "reference": "2fa2011e2adc8e70b15b17c50d598fc44fc3106a", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/7076af00534135cbbf6cc19eb2521124a3549f0d", + "reference": "7076af00534135cbbf6cc19eb2521124a3549f0d", "shasum": "" }, "require": { @@ -153,9 +153,9 @@ "support": { "forum": "https://github.com/aws/aws-sdk-php/discussions", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.369.8" + "source": "https://github.com/aws/aws-sdk-php/tree/3.369.21" }, - "time": "2026-01-06T19:10:11+00:00" + "time": "2026-01-27T19:14:48+00:00" }, { "name": "benbjurstrom/laravel-sitemap-lite", @@ -1557,16 +1557,16 @@ }, { "name": "laravel/framework", - "version": "v12.45.1", + "version": "v12.48.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "1ca7e2a2ee17ae5bc435af7cb52d2f130148e2fa" + "reference": "0f0974a9769378ccd9c9935c09b9927f3a606830" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/1ca7e2a2ee17ae5bc435af7cb52d2f130148e2fa", - "reference": "1ca7e2a2ee17ae5bc435af7cb52d2f130148e2fa", + "url": "https://api.github.com/repos/laravel/framework/zipball/0f0974a9769378ccd9c9935c09b9927f3a606830", + "reference": "0f0974a9769378ccd9c9935c09b9927f3a606830", "shasum": "" }, "require": { @@ -1679,7 +1679,7 @@ "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", "opis/json-schema": "^2.4.1", - "orchestra/testbench-core": "^10.8.1", + "orchestra/testbench-core": "^10.9.0", "pda/pheanstalk": "^5.0.6|^7.0.0", "php-http/discovery": "^1.15", "phpstan/phpstan": "^2.0", @@ -1775,20 +1775,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-01-07T00:50:24+00:00" + "time": "2026-01-20T16:12:36+00:00" }, { "name": "laravel/nightwatch", - "version": "v1.21.1", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/laravel/nightwatch.git", - "reference": "c77c70b56802ff1fc743772a497eeea742ee2b38" + "reference": "a6ef3f6bccc81e69e17e4f67992c1a3ab6a85110" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/nightwatch/zipball/c77c70b56802ff1fc743772a497eeea742ee2b38", - "reference": "c77c70b56802ff1fc743772a497eeea742ee2b38", + "url": "https://api.github.com/repos/laravel/nightwatch/zipball/a6ef3f6bccc81e69e17e4f67992c1a3ab6a85110", + "reference": "a6ef3f6bccc81e69e17e4f67992c1a3ab6a85110", "shasum": "" }, "require": { @@ -1869,20 +1869,20 @@ "issues": "https://github.com/laravel/nightwatch/issues", "source": "https://github.com/laravel/nightwatch" }, - "time": "2025-12-18T04:19:39+00:00" + "time": "2026-01-15T04:53:20+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.8", + "version": "v0.3.10", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "096748cdfb81988f60090bbb839ce3205ace0d35" + "reference": "360ba095ef9f51017473505191fbd4ab73e1cab3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/096748cdfb81988f60090bbb839ce3205ace0d35", - "reference": "096748cdfb81988f60090bbb839ce3205ace0d35", + "url": "https://api.github.com/repos/laravel/prompts/zipball/360ba095ef9f51017473505191fbd4ab73e1cab3", + "reference": "360ba095ef9f51017473505191fbd4ab73e1cab3", "shasum": "" }, "require": { @@ -1926,22 +1926,22 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.8" + "source": "https://github.com/laravel/prompts/tree/v0.3.10" }, - "time": "2025-11-21T20:52:52+00:00" + "time": "2026-01-13T20:29:29+00:00" }, { "name": "laravel/serializable-closure", - "version": "v2.0.7", + "version": "v2.0.8", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd" + "reference": "7581a4407012f5f53365e11bafc520fd7f36bc9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/cb291e4c998ac50637c7eeb58189c14f5de5b9dd", - "reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/7581a4407012f5f53365e11bafc520fd7f36bc9b", + "reference": "7581a4407012f5f53365e11bafc520fd7f36bc9b", "shasum": "" }, "require": { @@ -1989,20 +1989,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2025-11-21T20:52:36+00:00" + "time": "2026-01-08T16:22:46+00:00" }, { "name": "laravel/socialite", - "version": "v5.24.1", + "version": "v5.24.2", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "25e28c14d55404886777af1d77cf030e0f633142" + "reference": "5cea2eebf11ca4bc6c2f20495c82a70a9b3d1613" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/25e28c14d55404886777af1d77cf030e0f633142", - "reference": "25e28c14d55404886777af1d77cf030e0f633142", + "url": "https://api.github.com/repos/laravel/socialite/zipball/5cea2eebf11ca4bc6c2f20495c82a70a9b3d1613", + "reference": "5cea2eebf11ca4bc6c2f20495c82a70a9b3d1613", "shasum": "" }, "require": { @@ -2061,7 +2061,7 @@ "issues": "https://github.com/laravel/socialite/issues", "source": "https://github.com/laravel/socialite" }, - "time": "2026-01-01T02:57:21+00:00" + "time": "2026-01-10T16:07:28+00:00" }, { "name": "laravel/tinker", @@ -2320,16 +2320,16 @@ }, { "name": "league/flysystem", - "version": "3.30.2", + "version": "3.31.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277" + "reference": "1717e0b3642b0df65ecb0cc89cdd99fa840672ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277", - "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1717e0b3642b0df65ecb0cc89cdd99fa840672ff", + "reference": "1717e0b3642b0df65ecb0cc89cdd99fa840672ff", "shasum": "" }, "require": { @@ -2397,22 +2397,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.30.2" + "source": "https://github.com/thephpleague/flysystem/tree/3.31.0" }, - "time": "2025-11-10T17:13:11+00:00" + "time": "2026-01-23T15:38:47+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "3.30.1", + "version": "3.31.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "d286e896083bed3190574b8b088b557b59eb66f5" + "reference": "e36a2bc60b06332c92e4435047797ded352b446f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/d286e896083bed3190574b8b088b557b59eb66f5", - "reference": "d286e896083bed3190574b8b088b557b59eb66f5", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/e36a2bc60b06332c92e4435047797ded352b446f", + "reference": "e36a2bc60b06332c92e4435047797ded352b446f", "shasum": "" }, "require": { @@ -2452,22 +2452,22 @@ "storage" ], "support": { - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.30.1" + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.31.0" }, - "time": "2025-10-20T15:27:33+00:00" + "time": "2026-01-23T15:30:45+00:00" }, { "name": "league/flysystem-local", - "version": "3.30.2", + "version": "3.31.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d" + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/ab4f9d0d672f601b102936aa728801dd1a11968d", - "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079", "shasum": "" }, "require": { @@ -2501,9 +2501,9 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.2" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0" }, - "time": "2025-11-10T11:23:37+00:00" + "time": "2026-01-23T15:30:45+00:00" }, { "name": "league/mime-type-detection", @@ -2639,20 +2639,20 @@ }, { "name": "league/uri", - "version": "7.7.0", + "version": "7.8.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807" + "reference": "4436c6ec8d458e4244448b069cc572d088230b76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/8d587cddee53490f9b82bf203d3a9aa7ea4f9807", - "reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76", + "reference": "4436c6ec8d458e4244448b069cc572d088230b76", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.7", + "league/uri-interfaces": "^7.8", "php": "^8.1", "psr/http-factory": "^1" }, @@ -2666,11 +2666,11 @@ "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", "ext-uri": "to use the PHP native URI class", - "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", - "league/uri-components": "Needed to easily manipulate URI objects components", - "league/uri-polyfill": "Needed to backport the PHP URI extension for older versions of PHP", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-components": "to provide additional tools to manipulate URI objects components", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", "php-64bit": "to improve IPV4 host parsing", - "rowbot/url": "to handle WHATWG URL", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -2725,7 +2725,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.7.0" + "source": "https://github.com/thephpleague/uri/tree/7.8.0" }, "funding": [ { @@ -2733,20 +2733,20 @@ "type": "github" } ], - "time": "2025-12-07T16:02:06+00:00" + "time": "2026-01-14T17:24:56+00:00" }, { "name": "league/uri-interfaces", - "version": "7.7.0", + "version": "7.8.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c" + "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/62ccc1a0435e1c54e10ee6022df28d6c04c2946c", - "reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4", + "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4", "shasum": "" }, "require": { @@ -2759,7 +2759,7 @@ "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", "php-64bit": "to improve IPV4 host parsing", - "rowbot/url": "to handle WHATWG URL", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -2809,7 +2809,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.7.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.0" }, "funding": [ { @@ -2817,20 +2817,20 @@ "type": "github" } ], - "time": "2025-12-07T16:03:21+00:00" + "time": "2026-01-15T06:54:53+00:00" }, { "name": "livewire/flux", - "version": "v2.10.2", + "version": "v2.11.1", "source": { "type": "git", "url": "https://github.com/livewire/flux.git", - "reference": "e7a93989788429bb6c0a908a056d22ea3a6c7975" + "reference": "3ada3b2644215fd1ccb7003ce8e6bc185c22e70a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/flux/zipball/e7a93989788429bb6c0a908a056d22ea3a6c7975", - "reference": "e7a93989788429bb6c0a908a056d22ea3a6c7975", + "url": "https://api.github.com/repos/livewire/flux/zipball/3ada3b2644215fd1ccb7003ce8e6bc185c22e70a", + "reference": "3ada3b2644215fd1ccb7003ce8e6bc185c22e70a", "shasum": "" }, "require": { @@ -2838,7 +2838,7 @@ "illuminate/support": "^10.0|^11.0|^12.0", "illuminate/view": "^10.0|^11.0|^12.0", "laravel/prompts": "^0.1|^0.2|^0.3", - "livewire/livewire": "^3.7.3|^4.0", + "livewire/livewire": "^3.7.4|^4.0", "php": "^8.1", "symfony/console": "^6.0|^7.0" }, @@ -2881,26 +2881,26 @@ ], "support": { "issues": "https://github.com/livewire/flux/issues", - "source": "https://github.com/livewire/flux/tree/v2.10.2" + "source": "https://github.com/livewire/flux/tree/v2.11.1" }, - "time": "2025-12-19T02:11:45+00:00" + "time": "2026-01-21T17:09:56+00:00" }, { "name": "livewire/flux-pro", - "version": "2.10.2", + "version": "2.11.1", "dist": { "type": "zip", - "url": "https://composer.fluxui.dev/download/a0a0798f-1cf8-4999-8f57-8688c21f2d59/flux-pro-2.10.2.zip", - "reference": "9440435e467c4bb775efbc2c510ec7dea61e17d7", - "shasum": "177bf08ae75c628c96a1a3a4fd1e788b1b798e1d" + "url": "https://composer.fluxui.dev/download/a0e59879-7eab-483a-94eb-2e558792f25e/flux-pro-2.11.1.zip", + "reference": "6c7259941b0914b768f0cd024b126d102a375858", + "shasum": "d2cc2eabe94e94242a3e3f07a75bda2370c4fba0" }, "require": { "illuminate/console": "^10.0|^11.0|^12.0", "illuminate/support": "^10.0|^11.0|^12.0", "illuminate/view": "^10.0|^11.0|^12.0", "laravel/prompts": "^0.1.24|^0.2|^0.3", - "livewire/flux": "2.10.2|dev-main", - "livewire/livewire": "^3.7.3|^4.0", + "livewire/flux": "2.11.1|dev-main", + "livewire/livewire": "^3.7.4|^4.0", "php": "^8.1", "symfony/console": "^6.0|^7.0" }, @@ -2956,7 +2956,7 @@ "livewire", "ui" ], - "time": "2025-12-19T02:22:27+00:00" + "time": "2026-01-22T11:01:01+00:00" }, { "name": "livewire/livewire", @@ -3927,16 +3927,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.48", + "version": "3.0.49", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "64065a5679c50acb886e82c07aa139b0f757bb89" + "reference": "6233a1e12584754e6b5daa69fe1289b47775c1b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/64065a5679c50acb886e82c07aa139b0f757bb89", - "reference": "64065a5679c50acb886e82c07aa139b0f757bb89", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/6233a1e12584754e6b5daa69fe1289b47775c1b9", + "reference": "6233a1e12584754e6b5daa69fe1289b47775c1b9", "shasum": "" }, "require": { @@ -4017,7 +4017,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.48" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.49" }, "funding": [ { @@ -4033,7 +4033,7 @@ "type": "tidelift" } ], - "time": "2025-12-15T11:51:42+00:00" + "time": "2026-01-27T09:17:28+00:00" }, { "name": "prezet/prezet", @@ -5352,16 +5352,16 @@ }, { "name": "spatie/temporary-directory", - "version": "2.3.0", + "version": "2.3.1", "source": { "type": "git", "url": "https://github.com/spatie/temporary-directory.git", - "reference": "580eddfe9a0a41a902cac6eeb8f066b42e65a32b" + "reference": "662e481d6ec07ef29fd05010433428851a42cd07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/580eddfe9a0a41a902cac6eeb8f066b42e65a32b", - "reference": "580eddfe9a0a41a902cac6eeb8f066b42e65a32b", + "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/662e481d6ec07ef29fd05010433428851a42cd07", + "reference": "662e481d6ec07ef29fd05010433428851a42cd07", "shasum": "" }, "require": { @@ -5397,7 +5397,7 @@ ], "support": { "issues": "https://github.com/spatie/temporary-directory/issues", - "source": "https://github.com/spatie/temporary-directory/tree/2.3.0" + "source": "https://github.com/spatie/temporary-directory/tree/2.3.1" }, "funding": [ { @@ -5409,7 +5409,7 @@ "type": "github" } ], - "time": "2025-01-13T13:04:43+00:00" + "time": "2026-01-12T07:42:22+00:00" }, { "name": "symfony/clock", @@ -5490,16 +5490,16 @@ }, { "name": "symfony/console", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "732a9ca6cd9dfd940c639062d5edbde2f6727fb6" + "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/732a9ca6cd9dfd940c639062d5edbde2f6727fb6", - "reference": "732a9ca6cd9dfd940c639062d5edbde2f6727fb6", + "url": "https://api.github.com/repos/symfony/console/zipball/41e38717ac1dd7a46b6bda7d6a82af2d98a78894", + "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894", "shasum": "" }, "require": { @@ -5564,7 +5564,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.3" + "source": "https://github.com/symfony/console/tree/v7.4.4" }, "funding": [ { @@ -5584,7 +5584,7 @@ "type": "tidelift" } ], - "time": "2025-12-23T14:50:43+00:00" + "time": "2026-01-13T11:36:38+00:00" }, { "name": "symfony/css-selector", @@ -5724,16 +5724,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2" + "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/48be2b0653594eea32dcef130cca1c811dcf25c2", - "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/8da531f364ddfee53e36092a7eebbbd0b775f6b8", + "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8", "shasum": "" }, "require": { @@ -5782,7 +5782,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.4.0" + "source": "https://github.com/symfony/error-handler/tree/v7.4.4" }, "funding": [ { @@ -5802,20 +5802,20 @@ "type": "tidelift" } ], - "time": "2025-11-05T14:29:59+00:00" + "time": "2026-01-20T16:42:42+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v8.0.0", + "version": "v8.0.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "573f95783a2ec6e38752979db139f09fec033f03" + "reference": "99301401da182b6cfaa4700dbe9987bb75474b47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/573f95783a2ec6e38752979db139f09fec033f03", - "reference": "573f95783a2ec6e38752979db139f09fec033f03", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/99301401da182b6cfaa4700dbe9987bb75474b47", + "reference": "99301401da182b6cfaa4700dbe9987bb75474b47", "shasum": "" }, "require": { @@ -5867,7 +5867,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.4" }, "funding": [ { @@ -5887,7 +5887,7 @@ "type": "tidelift" } ], - "time": "2025-10-30T14:17:19+00:00" + "time": "2026-01-05T11:45:55+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -6037,16 +6037,16 @@ }, { "name": "symfony/finder", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "fffe05569336549b20a1be64250b40516d6e8d06" + "reference": "01b24a145bbeaa7141e75887ec904c34a6728a5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/fffe05569336549b20a1be64250b40516d6e8d06", - "reference": "fffe05569336549b20a1be64250b40516d6e8d06", + "url": "https://api.github.com/repos/symfony/finder/zipball/01b24a145bbeaa7141e75887ec904c34a6728a5f", + "reference": "01b24a145bbeaa7141e75887ec904c34a6728a5f", "shasum": "" }, "require": { @@ -6081,7 +6081,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.4.3" + "source": "https://github.com/symfony/finder/tree/v7.4.4" }, "funding": [ { @@ -6101,20 +6101,20 @@ "type": "tidelift" } ], - "time": "2025-12-23T14:50:43+00:00" + "time": "2026-01-12T12:19:02+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "a70c745d4cea48dbd609f4075e5f5cbce453bd52" + "reference": "977a554a34cf8edc95ca351fbecb1bb1ad05cc94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a70c745d4cea48dbd609f4075e5f5cbce453bd52", - "reference": "a70c745d4cea48dbd609f4075e5f5cbce453bd52", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/977a554a34cf8edc95ca351fbecb1bb1ad05cc94", + "reference": "977a554a34cf8edc95ca351fbecb1bb1ad05cc94", "shasum": "" }, "require": { @@ -6163,7 +6163,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.4.3" + "source": "https://github.com/symfony/http-foundation/tree/v7.4.4" }, "funding": [ { @@ -6183,20 +6183,20 @@ "type": "tidelift" } ], - "time": "2025-12-23T14:23:49+00:00" + "time": "2026-01-09T12:14:21+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "885211d4bed3f857b8c964011923528a55702aa5" + "reference": "48b067768859f7b68acf41dfb857a5a4be00acdd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/885211d4bed3f857b8c964011923528a55702aa5", - "reference": "885211d4bed3f857b8c964011923528a55702aa5", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/48b067768859f7b68acf41dfb857a5a4be00acdd", + "reference": "48b067768859f7b68acf41dfb857a5a4be00acdd", "shasum": "" }, "require": { @@ -6282,7 +6282,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.4.3" + "source": "https://github.com/symfony/http-kernel/tree/v7.4.4" }, "funding": [ { @@ -6302,20 +6302,20 @@ "type": "tidelift" } ], - "time": "2025-12-31T08:43:57+00:00" + "time": "2026-01-24T22:13:01+00:00" }, { "name": "symfony/mailer", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "e472d35e230108231ccb7f51eb6b2100cac02ee4" + "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/e472d35e230108231ccb7f51eb6b2100cac02ee4", - "reference": "e472d35e230108231ccb7f51eb6b2100cac02ee4", + "url": "https://api.github.com/repos/symfony/mailer/zipball/7b750074c40c694ceb34cb926d6dffee231c5cd6", + "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6", "shasum": "" }, "require": { @@ -6366,7 +6366,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.4.3" + "source": "https://github.com/symfony/mailer/tree/v7.4.4" }, "funding": [ { @@ -6386,20 +6386,20 @@ "type": "tidelift" } ], - "time": "2025-12-16T08:02:06+00:00" + "time": "2026-01-08T08:25:11+00:00" }, { "name": "symfony/mime", - "version": "v7.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "bdb02729471be5d047a3ac4a69068748f1a6be7a" + "reference": "40945014c0a9471ccfe19673c54738fa19367a3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/bdb02729471be5d047a3ac4a69068748f1a6be7a", - "reference": "bdb02729471be5d047a3ac4a69068748f1a6be7a", + "url": "https://api.github.com/repos/symfony/mime/zipball/40945014c0a9471ccfe19673c54738fa19367a3c", + "reference": "40945014c0a9471ccfe19673c54738fa19367a3c", "shasum": "" }, "require": { @@ -6455,7 +6455,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.4.0" + "source": "https://github.com/symfony/mime/tree/v7.4.4" }, "funding": [ { @@ -6475,7 +6475,7 @@ "type": "tidelift" } ], - "time": "2025-11-16T10:14:42+00:00" + "time": "2026-01-08T16:12:55+00:00" }, { "name": "symfony/polyfill-ctype", @@ -7308,16 +7308,16 @@ }, { "name": "symfony/process", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "2f8e1a6cdf590ca63715da4d3a7a3327404a523f" + "reference": "626f07a53f4b4e2f00e11824cc29f928d797783b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/2f8e1a6cdf590ca63715da4d3a7a3327404a523f", - "reference": "2f8e1a6cdf590ca63715da4d3a7a3327404a523f", + "url": "https://api.github.com/repos/symfony/process/zipball/626f07a53f4b4e2f00e11824cc29f928d797783b", + "reference": "626f07a53f4b4e2f00e11824cc29f928d797783b", "shasum": "" }, "require": { @@ -7349,7 +7349,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.4.3" + "source": "https://github.com/symfony/process/tree/v7.4.4" }, "funding": [ { @@ -7369,20 +7369,20 @@ "type": "tidelift" } ], - "time": "2025-12-19T10:00:43+00:00" + "time": "2026-01-20T09:23:51+00:00" }, { "name": "symfony/routing", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "5d3fd7adf8896c2fdb54e2f0f35b1bcbd9e45090" + "reference": "0798827fe2c79caeed41d70b680c2c3507d10147" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/5d3fd7adf8896c2fdb54e2f0f35b1bcbd9e45090", - "reference": "5d3fd7adf8896c2fdb54e2f0f35b1bcbd9e45090", + "url": "https://api.github.com/repos/symfony/routing/zipball/0798827fe2c79caeed41d70b680c2c3507d10147", + "reference": "0798827fe2c79caeed41d70b680c2c3507d10147", "shasum": "" }, "require": { @@ -7434,7 +7434,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.4.3" + "source": "https://github.com/symfony/routing/tree/v7.4.4" }, "funding": [ { @@ -7454,7 +7454,7 @@ "type": "tidelift" } ], - "time": "2025-12-19T10:00:43+00:00" + "time": "2026-01-12T12:19:02+00:00" }, { "name": "symfony/service-contracts", @@ -7545,16 +7545,16 @@ }, { "name": "symfony/string", - "version": "v8.0.1", + "version": "v8.0.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ba65a969ac918ce0cc3edfac6cdde847eba231dc" + "reference": "758b372d6882506821ed666032e43020c4f57194" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ba65a969ac918ce0cc3edfac6cdde847eba231dc", - "reference": "ba65a969ac918ce0cc3edfac6cdde847eba231dc", + "url": "https://api.github.com/repos/symfony/string/zipball/758b372d6882506821ed666032e43020c4f57194", + "reference": "758b372d6882506821ed666032e43020c4f57194", "shasum": "" }, "require": { @@ -7611,7 +7611,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v8.0.1" + "source": "https://github.com/symfony/string/tree/v8.0.4" }, "funding": [ { @@ -7631,20 +7631,20 @@ "type": "tidelift" } ], - "time": "2025-12-01T09:13:36+00:00" + "time": "2026-01-12T12:37:40+00:00" }, { "name": "symfony/translation", - "version": "v8.0.3", + "version": "v8.0.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "60a8f11f0e15c48f2cc47c4da53873bb5b62135d" + "reference": "db70c8ce7db74fd2da7b1d268db46b2a8ce32c10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/60a8f11f0e15c48f2cc47c4da53873bb5b62135d", - "reference": "60a8f11f0e15c48f2cc47c4da53873bb5b62135d", + "url": "https://api.github.com/repos/symfony/translation/zipball/db70c8ce7db74fd2da7b1d268db46b2a8ce32c10", + "reference": "db70c8ce7db74fd2da7b1d268db46b2a8ce32c10", "shasum": "" }, "require": { @@ -7704,7 +7704,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v8.0.3" + "source": "https://github.com/symfony/translation/tree/v8.0.4" }, "funding": [ { @@ -7724,7 +7724,7 @@ "type": "tidelift" } ], - "time": "2025-12-21T10:59:45+00:00" + "time": "2026-01-13T13:06:50+00:00" }, { "name": "symfony/translation-contracts", @@ -7810,16 +7810,16 @@ }, { "name": "symfony/uid", - "version": "v7.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "2498e9f81b7baa206f44de583f2f48350b90142c" + "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/2498e9f81b7baa206f44de583f2f48350b90142c", - "reference": "2498e9f81b7baa206f44de583f2f48350b90142c", + "url": "https://api.github.com/repos/symfony/uid/zipball/7719ce8aba76be93dfe249192f1fbfa52c588e36", + "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36", "shasum": "" }, "require": { @@ -7864,7 +7864,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.4.0" + "source": "https://github.com/symfony/uid/tree/v7.4.4" }, "funding": [ { @@ -7884,20 +7884,20 @@ "type": "tidelift" } ], - "time": "2025-09-25T11:02:55+00:00" + "time": "2026-01-03T23:30:35+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "7e99bebcb3f90d8721890f2963463280848cba92" + "reference": "0e4769b46a0c3c62390d124635ce59f66874b282" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7e99bebcb3f90d8721890f2963463280848cba92", - "reference": "7e99bebcb3f90d8721890f2963463280848cba92", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0e4769b46a0c3c62390d124635ce59f66874b282", + "reference": "0e4769b46a0c3c62390d124635ce59f66874b282", "shasum": "" }, "require": { @@ -7951,7 +7951,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.4.3" + "source": "https://github.com/symfony/var-dumper/tree/v7.4.4" }, "funding": [ { @@ -7971,7 +7971,7 @@ "type": "tidelift" } ], - "time": "2025-12-18T07:04:31+00:00" + "time": "2026-01-01T22:13:48+00:00" }, { "name": "symfony/yaml", @@ -8264,16 +8264,16 @@ }, { "name": "wendelladriel/laravel-validated-dto", - "version": "v4.4.0", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/WendellAdriel/laravel-validated-dto.git", - "reference": "091e7c9de5884bbef98755258f23ccfb87e316c5" + "reference": "3c97d385fad6170c3efbeec90df343249c613900" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WendellAdriel/laravel-validated-dto/zipball/091e7c9de5884bbef98755258f23ccfb87e316c5", - "reference": "091e7c9de5884bbef98755258f23ccfb87e316c5", + "url": "https://api.github.com/repos/WendellAdriel/laravel-validated-dto/zipball/3c97d385fad6170c3efbeec90df343249c613900", + "reference": "3c97d385fad6170c3efbeec90df343249c613900", "shasum": "" }, "require": { @@ -8335,22 +8335,22 @@ "type": "github" } ], - "time": "2025-12-15T13:31:42+00:00" + "time": "2026-01-16T18:37:23+00:00" } ], "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v3.16.3", + "version": "v3.16.5", "source": { "type": "git", - "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "c91e57ea113edd6526f5b8cd6b1c6ee02c67b28e" + "url": "https://github.com/fruitcake/laravel-debugbar.git", + "reference": "e85c0a8464da67e5b4a53a42796d46a43fc06c9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/c91e57ea113edd6526f5b8cd6b1c6ee02c67b28e", - "reference": "c91e57ea113edd6526f5b8cd6b1c6ee02c67b28e", + "url": "https://api.github.com/repos/fruitcake/laravel-debugbar/zipball/e85c0a8464da67e5b4a53a42796d46a43fc06c9a", + "reference": "e85c0a8464da67e5b4a53a42796d46a43fc06c9a", "shasum": "" }, "require": { @@ -8409,8 +8409,8 @@ "webprofiler" ], "support": { - "issues": "https://github.com/barryvdh/laravel-debugbar/issues", - "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.16.3" + "issues": "https://github.com/fruitcake/laravel-debugbar/issues", + "source": "https://github.com/fruitcake/laravel-debugbar/tree/v3.16.5" }, "funding": [ { @@ -8422,7 +8422,7 @@ "type": "github" } ], - "time": "2025-12-23T17:37:00+00:00" + "time": "2026-01-23T15:03:22+00:00" }, { "name": "brianium/paratest", @@ -10150,16 +10150,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.3.0", + "version": "2.3.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", - "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", "shasum": "" }, "require": { @@ -10191,9 +10191,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2" }, - "time": "2025-08-30T15:50:23+00:00" + "time": "2026-01-25T14:56:51+00:00" }, { "name": "phpunit/php-code-coverage", @@ -10811,16 +10811,16 @@ }, { "name": "sebastian/comparator", - "version": "6.3.2", + "version": "6.3.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8" + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8", - "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", "shasum": "" }, "require": { @@ -10879,7 +10879,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.3" }, "funding": [ { @@ -10899,7 +10899,7 @@ "type": "tidelift" } ], - "time": "2025-08-10T08:07:46+00:00" + "time": "2026-01-24T09:26:40+00:00" }, { "name": "sebastian/complexity", @@ -11788,16 +11788,16 @@ }, { "name": "webmozart/assert", - "version": "2.0.0", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "1b34b004e35a164bc5bb6ebd33c844b2d8069a54" + "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/1b34b004e35a164bc5bb6ebd33c844b2d8069a54", - "reference": "1b34b004e35a164bc5bb6ebd33c844b2d8069a54", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", + "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", "shasum": "" }, "require": { @@ -11844,9 +11844,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.0.0" + "source": "https://github.com/webmozarts/assert/tree/2.1.2" }, - "time": "2025-12-16T21:36:00+00:00" + "time": "2026-01-13T14:02:24+00:00" } ], "aliases": [], diff --git a/database/migrations/2025_03_28_221023_create_media_table.php b/database/migrations/2025_03_28_221023_create_media_table.php index 2478c79..3f233e6 100644 --- a/database/migrations/2025_03_28_221023_create_media_table.php +++ b/database/migrations/2025_03_28_221023_create_media_table.php @@ -9,17 +9,17 @@ { public function up(): void { - Schema::create('media_types', function (Blueprint $table) { + /* Schema::create('media_types', function (Blueprint $table) { $table->id(); $table->string('name'); $table->timestamps(); - }); + }); */ - MediaType::create(['name' => 'Movies']); + /* MediaType::create(['name' => 'Movies']); MediaType::create(['name' => 'TV Shows']); MediaType::create(['name' => 'Artist']); MediaType::create(['name' => 'Track']); - MediaType::create(['name' => 'Video Game']); + MediaType::create(['name' => 'Video Game']); */ Schema::create('media', function (Blueprint $table) { $table->id(); diff --git a/database/migrations/2026_01_28_004403_drop_media_types_table.php b/database/migrations/2026_01_28_004403_drop_media_types_table.php new file mode 100644 index 0000000..b7fcbe6 --- /dev/null +++ b/database/migrations/2026_01_28_004403_drop_media_types_table.php @@ -0,0 +1,16 @@ +
- +
diff --git a/resources/views/livewire/pages/media/music/edit.blade.php b/resources/views/livewire/pages/media/music/edit.blade.php index 1594339..8575d2e 100644 --- a/resources/views/livewire/pages/media/music/edit.blade.php +++ b/resources/views/livewire/pages/media/music/edit.blade.php @@ -1,4 +1,6 @@
+ @use(App\Enums\MediaType) +
@@ -145,7 +147,7 @@ class="my-2 w-full md:w-1/4"
- +
Search Spotify for an Artist
@@ -156,7 +158,7 @@ class="my-2 w-full md:w-1/4" @@ -188,7 +190,7 @@ class="rounded-xl"
- +
Search Spotify for a Track
@@ -196,7 +198,7 @@ class="rounded-xl" - +
diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php index 5032baf..4763214 100644 --- a/resources/views/welcome.blade.php +++ b/resources/views/welcome.blade.php @@ -17,7 +17,7 @@