Skip to content

Commit

Permalink
refactor: prefer invokeable controllers
Browse files Browse the repository at this point in the history
  • Loading branch information
phanan committed Jan 2, 2024
1 parent d828255 commit 1ab8d75
Show file tree
Hide file tree
Showing 30 changed files with 325 additions and 336 deletions.
30 changes: 0 additions & 30 deletions app/Http/Controllers/API/AlbumCoverController.php

This file was deleted.

20 changes: 0 additions & 20 deletions app/Http/Controllers/API/AlbumThumbnailController.php

This file was deleted.

30 changes: 0 additions & 30 deletions app/Http/Controllers/API/ArtistImageController.php

This file was deleted.

19 changes: 19 additions & 0 deletions app/Http/Controllers/API/DisconnectFromLastfmController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use App\Models\User;
use App\Services\LastfmService;
use Illuminate\Contracts\Auth\Authenticatable;

class DisconnectFromLastfmController extends Controller
{
/** @param User $user */
public function __invoke(LastfmService $lastfm, Authenticatable $user)
{
$lastfm->setUserSessionKey($user, null);

return response()->noContent();
}
}
22 changes: 0 additions & 22 deletions app/Http/Controllers/API/FavoriteSongController.php

This file was deleted.

15 changes: 15 additions & 0 deletions app/Http/Controllers/API/FetchAlbumThumbnailController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use App\Models\Album;
use App\Services\MediaMetadataService;

class FetchAlbumThumbnailController extends Controller
{
public function __invoke(Album $album, MediaMetadataService $mediaMetadataService)
{
return response()->json(['thumbnailUrl' => $mediaMetadataService->getAlbumThumbnailUrl($album)]);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
use App\Http\Controllers\Controller;
use Throwable;

class DemoCreditController extends Controller
class FetchDemoCreditController extends Controller
{
public function index()
public function __invoke()
{
try {
return response()->json(json_decode(file_get_contents(resource_path('demo-credits.json')), true));
} catch (Throwable) {
return response()->json([]);
return response()->json();
}
}
}
18 changes: 18 additions & 0 deletions app/Http/Controllers/API/FetchFavoriteSongsController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use App\Http\Resources\SongResource;
use App\Models\User;
use App\Repositories\SongRepository;
use Illuminate\Contracts\Auth\Authenticatable;

class FetchFavoriteSongsController extends Controller
{
/** @param User $user */
public function __invoke(SongRepository $repository, Authenticatable $user)
{
return SongResource::collection($repository->getFavorites($user));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,41 +18,37 @@
use App\Services\YouTubeService;
use Illuminate\Contracts\Auth\Authenticatable;

class DataController extends Controller
class FetchInitialDataController extends Controller
{
/** @param User $user */
public function __construct(
private ITunesService $iTunesService,
private SettingRepository $settingRepository,
private SongRepository $songRepository,
private ApplicationInformationService $applicationInformationService,
private QueueService $queueService,
private ?Authenticatable $user
public function __invoke(
ITunesService $iTunesService,
SettingRepository $settingRepository,
SongRepository $songRepository,
ApplicationInformationService $applicationInformationService,
QueueService $queueService,
?Authenticatable $user
) {
}

public function index()
{
return response()->json([
'settings' => $this->user->is_admin ? $this->settingRepository->getAllAsKeyValueArray() : [],
'playlists' => PlaylistResource::collection($this->user->playlists),
'playlist_folders' => PlaylistFolderResource::collection($this->user->playlist_folders),
'current_user' => UserResource::make($this->user, true),
'settings' => $user->is_admin ? $settingRepository->getAllAsKeyValueArray() : [],
'playlists' => PlaylistResource::collection($user->playlists),
'playlist_folders' => PlaylistFolderResource::collection($user->playlist_folders),
'current_user' => UserResource::make($user, true),
'use_last_fm' => LastfmService::used(),
'use_spotify' => SpotifyService::enabled(),
'use_you_tube' => YouTubeService::enabled(),
'use_i_tunes' => $this->iTunesService->used(),
'use_i_tunes' => $iTunesService->used(),
'allow_download' => config('koel.download.allow'),
'supports_transcoding' => config('koel.streaming.ffmpeg_path')
&& is_executable(config('koel.streaming.ffmpeg_path')),
'cdn_url' => static_url(),
'current_version' => koel_version(),
'latest_version' => $this->user->is_admin
? $this->applicationInformationService->getLatestVersionNumber()
'latest_version' => $user->is_admin
? $applicationInformationService->getLatestVersionNumber()
: koel_version(),
'song_count' => $this->songRepository->count(),
'song_length' => $this->songRepository->getTotalLength(),
'queue_state' => QueueStateResource::make($this->queueService->getQueueState($this->user)),
'song_count' => $songRepository->count(),
'song_length' => $songRepository->getTotalLength(),
'queue_state' => QueueStateResource::make($queueService->getQueueState($user)),
]);
}
}
30 changes: 30 additions & 0 deletions app/Http/Controllers/API/FetchOverviewController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use App\Http\Resources\AlbumResource;
use App\Http\Resources\ArtistResource;
use App\Http\Resources\SongResource;
use App\Repositories\AlbumRepository;
use App\Repositories\ArtistRepository;
use App\Repositories\SongRepository;

class FetchOverviewController extends Controller
{
public function __invoke(
SongRepository $songRepository,
AlbumRepository $albumRepository,
ArtistRepository $artistRepository
) {

return response()->json([
'most_played_songs' => SongResource::collection($songRepository->getMostPlayed()),
'recently_played_songs' => SongResource::collection($songRepository->getRecentlyPlayed()),
'recently_added_albums' => AlbumResource::collection($albumRepository->getRecentlyAdded()),
'recently_added_songs' => SongResource::collection($songRepository->getRecentlyAdded()),
'most_played_artists' => ArtistResource::collection($artistRepository->getMostPlayed()),
'most_played_albums' => AlbumResource::collection($albumRepository->getMostPlayed()),
]);
}
}
20 changes: 20 additions & 0 deletions app/Http/Controllers/API/FetchRecentlyPlayedSongController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use App\Http\Resources\SongResource;
use App\Models\User;
use App\Repositories\SongRepository;
use Illuminate\Contracts\Auth\Authenticatable;

class FetchRecentlyPlayedSongController extends Controller
{
private const MAX_ITEM_COUNT = 128;

/** @param User $user */
public function __invoke(SongRepository $repository, ?Authenticatable $user)
{
return SongResource::collection($repository->getRecentlyPlayed(self::MAX_ITEM_COUNT, $user));
}
}
23 changes: 23 additions & 0 deletions app/Http/Controllers/API/FetchSongsForQueueController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use App\Http\Requests\API\FetchSongsForQueueRequest;
use App\Http\Resources\SongResource;
use App\Models\User;
use App\Repositories\SongRepository;
use Illuminate\Contracts\Auth\Authenticatable;

class FetchSongsForQueueController extends Controller
{
/** @param User $user */
public function __invoke(FetchSongsForQueueRequest $request, SongRepository $repository, Authenticatable $user)
{
return SongResource::collection(
$request->order === 'rand'
? $repository->getRandom($request->limit, $user)
: $repository->getForQueue($request->sort, $request->order, $request->limit, $user)
);
}
}
31 changes: 0 additions & 31 deletions app/Http/Controllers/API/LastfmController.php

This file was deleted.

33 changes: 0 additions & 33 deletions app/Http/Controllers/API/OverviewController.php

This file was deleted.

Loading

0 comments on commit 1ab8d75

Please sign in to comment.