diff --git a/.gitignore b/.gitignore index 46eb891b..cab47bdd 100644 --- a/.gitignore +++ b/.gitignore @@ -145,4 +145,5 @@ public/images/avatars/** public/images/manga/** public/images/characters/** public/images/people/** -public/mal_mappings.json \ No newline at end of file +public/mal_mappings.json +.phpunit.result.cache \ No newline at end of file diff --git a/app/bootstrap.php b/app/bootstrap.php index 71e2363f..1b97793e 100644 --- a/app/bootstrap.php +++ b/app/bootstrap.php @@ -44,10 +44,13 @@ return static function ($configArray = []) { $appLogger = new Logger('animeclient'); $appLogger->pushHandler(new RotatingFileHandler(__DIR__ . '/logs/app.log', Logger::NOTICE)); + $anilistRequestLogger = new Logger('anilist-request'); $anilistRequestLogger->pushHandler(new RotatingFileHandler(__DIR__ . '/logs/anilist_request.log', Logger::NOTICE)); + $kitsuRequestLogger = new Logger('kitsu-request'); $kitsuRequestLogger->pushHandler(new RotatingFileHandler(__DIR__ . '/logs/kitsu_request.log', Logger::NOTICE)); + $container->setLogger($appLogger); $container->setLogger($anilistRequestLogger, 'anilist-request'); $container->setLogger($kitsuRequestLogger, 'kitsu-request'); @@ -62,7 +65,7 @@ return static function ($configArray = []) { }); // Create Cache Object - $container->set('cache', static function($container) { + $container->set('cache', static function($container): Pool { $logger = $container->getLogger(); $config = $container->get('config')->get('cache'); return new Pool($config, $logger); @@ -117,12 +120,12 @@ return static function ($configArray = []) { }); // Miscellaneous helper methods - $container->set('util', static function($container) { + $container->set('util', static function($container): Util { return new Util($container); }); // Models - $container->set('kitsu-model', static function($container) { + $container->set('kitsu-model', static function($container): Kitsu\Model { $requestBuilder = new KitsuRequestBuilder(); $requestBuilder->setLogger($container->getLogger('kitsu-request')); @@ -138,7 +141,7 @@ return static function ($configArray = []) { $model->setCache($cache); return $model; }); - $container->set('anilist-model', static function($container) { + $container->set('anilist-model', static function($container): Anilist\Model { $requestBuilder = new Anilist\AnilistRequestBuilder(); $requestBuilder->setLogger($container->getLogger('anilist-request')); @@ -153,9 +156,6 @@ return static function ($configArray = []) { return $model; }); - $container->set('api-model', static function($container) { - return new Model\API($container); - }); $container->set('anime-model', static function($container) { return new Model\Anime($container); }); diff --git a/psalm.xml b/psalm.xml index 42f355b2..e2cedae2 100644 --- a/psalm.xml +++ b/psalm.xml @@ -15,41 +15,5 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/API/Kitsu/Transformer/AnimeListTransformer.php b/src/API/Kitsu/Transformer/AnimeListTransformer.php index bb6602ac..b6de80f4 100644 --- a/src/API/Kitsu/Transformer/AnimeListTransformer.php +++ b/src/API/Kitsu/Transformer/AnimeListTransformer.php @@ -100,7 +100,7 @@ final class AnimeListTransformer extends AbstractTransformer { 'title' => $title, 'titles' => $titles, 'slug' => $anime['slug'], - 'show_type' => $this->string($anime['subtype'])->upperCaseFirst()->__toString(), + 'show_type' => (string)$this->string($anime['subtype'])->upperCaseFirst(), 'cover_image' => $anime['posterImage']['small'], 'genres' => $genres, 'streaming_links' => $streamingLinks, diff --git a/src/API/Kitsu/Transformer/AnimeTransformer.php b/src/API/Kitsu/Transformer/AnimeTransformer.php index d3e92cf0..0f5f0811 100644 --- a/src/API/Kitsu/Transformer/AnimeTransformer.php +++ b/src/API/Kitsu/Transformer/AnimeTransformer.php @@ -89,14 +89,14 @@ final class AnimeTransformer extends AbstractTransformer { if ( ! empty($characters['main'])) { - uasort($characters['main'], function ($a, $b) { + uasort($characters['main'], static function ($a, $b) { return $a['name'] <=> $b['name']; }); } if ( ! empty($characters['supporting'])) { - uasort($characters['supporting'], function ($a, $b) { + uasort($characters['supporting'], static function ($a, $b) { return $a['name'] <=> $b['name']; }); } @@ -114,7 +114,7 @@ final class AnimeTransformer extends AbstractTransformer { 'genres' => $item['genres'], 'id' => $item['id'], 'included' => $item['included'], - 'show_type' => $this->string($item['showType'])->upperCaseFirst()->__toString(), + 'show_type' => (string)$this->string($item['showType'])->upperCaseFirst(), 'slug' => $item['slug'], 'staff' => $staff, 'status' => Kitsu::getAiringStatus($item['startDate'], $item['endDate']), diff --git a/src/Command/BaseCommand.php b/src/Command/BaseCommand.php index d02ec569..dc137bd4 100644 --- a/src/Command/BaseCommand.php +++ b/src/Command/BaseCommand.php @@ -46,7 +46,7 @@ class BaseCommand extends Command { * @param string $message * @return void */ - protected function echoBox($message) + protected function echoBox($message): void { try { @@ -82,7 +82,7 @@ class BaseCommand extends Command { $configArray = array_replace_recursive($baseConfig, $config, $overrideConfig); - $di = static function ($configArray) use ($APP_DIR) { + $di = static function ($configArray) use ($APP_DIR): Container { $container = new Container(); // ------------------------------------------------------------------------- @@ -91,16 +91,19 @@ class BaseCommand extends Command { $app_logger = new Logger('animeclient'); $app_logger->pushHandler(new RotatingFileHandler($APP_DIR . '/logs/app-cli.log', Logger::NOTICE)); + $kitsu_request_logger = new Logger('kitsu-request'); $kitsu_request_logger->pushHandler(new RotatingFileHandler($APP_DIR . '/logs/kitsu_request-cli.log', Logger::NOTICE)); + $anilistRequestLogger = new Logger('anilist-request'); $anilistRequestLogger->pushHandler(new RotatingFileHandler($APP_DIR . '/logs/anilist_request-cli.log', Logger::NOTICE)); + $container->setLogger($app_logger); $container->setLogger($anilistRequestLogger, 'anilist-request'); $container->setLogger($kitsu_request_logger, 'kitsu-request'); // Create Config Object - $container->set('config', static function() use ($configArray) { + $container->set('config', static function() use ($configArray): Config { return new Config($configArray); }); @@ -126,7 +129,7 @@ class BaseCommand extends Command { $_FILES ); }); - $container->set('response', static function() { + $container->set('response', static function(): Response { return new Response; }); @@ -136,7 +139,7 @@ class BaseCommand extends Command { }); // Models - $container->set('kitsu-model', static function($container) { + $container->set('kitsu-model', static function($container): Kitsu\Model { $requestBuilder = new KitsuRequestBuilder(); $requestBuilder->setLogger($container->getLogger('kitsu-request')); @@ -152,7 +155,7 @@ class BaseCommand extends Command { $model->setCache($cache); return $model; }); - $container->set('anilist-model', static function ($container) { + $container->set('anilist-model', static function ($container): Anilist\Model { $requestBuilder = new Anilist\AnilistRequestBuilder(); $requestBuilder->setLogger($container->getLogger('anilist-request')); @@ -166,21 +169,21 @@ class BaseCommand extends Command { return $model; }); - $container->set('settings-model', static function($container) { + $container->set('settings-model', static function($container): Model\Settings { $model = new Model\Settings($container->get('config')); $model->setContainer($container); return $model; }); - $container->set('auth', static function($container) { + $container->set('auth', static function($container): Kitsu\Auth { return new Kitsu\Auth($container); }); - $container->set('url-generator', static function($container) { + $container->set('url-generator', static function($container): UrlGenerator { return new UrlGenerator($container); }); - $container->set('util', static function($container) { + $container->set('util', static function($container): Util { return new Util($container); }); diff --git a/src/Command/CacheClear.php b/src/Command/CacheClear.php index a059f4bb..3f7c3692 100644 --- a/src/Command/CacheClear.php +++ b/src/Command/CacheClear.php @@ -16,6 +16,9 @@ namespace Aviat\AnimeClient\Command; +use Aviat\Ion\Di\Exception\ContainerException; +use Aviat\Ion\Di\Exception\NotFoundException; + /** * Clears the API Cache */ @@ -25,15 +28,15 @@ final class CacheClear extends BaseCommand { * * @param array $args * @param array $options - * @throws \Aviat\Ion\Di\ContainerException - * @throws \Aviat\Ion\Di\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @return void */ public function execute(array $args, array $options = []): void { $this->setContainer($this->setupContainer()); - $cache = $this->container->get('cache'); - $cache->clear(); + + $this->container->get('cache')->clear(); $this->echoBox('API Cache has been cleared.'); } diff --git a/src/Command/CachePrime.php b/src/Command/CachePrime.php index 960a0b66..006b0e19 100644 --- a/src/Command/CachePrime.php +++ b/src/Command/CachePrime.php @@ -16,6 +16,9 @@ namespace Aviat\AnimeClient\Command; +use Aviat\Ion\Di\Exception\ContainerException; +use Aviat\Ion\Di\Exception\NotFoundException; + /** * Clears the API Cache */ @@ -25,8 +28,8 @@ final class CachePrime extends BaseCommand { * * @param array $args * @param array $options - * @throws \Aviat\Ion\Di\ContainerException - * @throws \Aviat\Ion\Di\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @return void */ public function execute(array $args, array $options = []): void @@ -50,8 +53,9 @@ final class CachePrime extends BaseCommand { $userIdItem->save(); } - // Prime anime list cache $kitsuModel = $this->container->get('kitsu-model'); + + // Prime anime list cache $kitsuModel->getFullOrganizedAnimeList(); // Prime manga list cache diff --git a/src/Command/SyncLists.php b/src/Command/SyncLists.php index 8fe1ddd8..fef73798 100644 --- a/src/Command/SyncLists.php +++ b/src/Command/SyncLists.php @@ -16,8 +16,12 @@ namespace Aviat\AnimeClient\Command; -use Aviat\AnimeClient\API\ -{Anilist\MissingIdException, FailedResponseException, JsonAPI, ParallelAPIRequest}; +use Aviat\AnimeClient\API\{ + Anilist\MissingIdException, + FailedResponseException, + JsonAPI, + ParallelAPIRequest +}; use Aviat\AnimeClient\API\Anilist\Transformer\{ AnimeListTransformer as AALT, MangaListTransformer as AMLT diff --git a/src/Controller.php b/src/Controller.php index 2ca641df..c2808f92 100644 --- a/src/Controller.php +++ b/src/Controller.php @@ -18,9 +18,19 @@ namespace Aviat\AnimeClient; use function Aviat\Ion\_dir; +use Aura\Router\Generator; +use Aura\Session\Segment; +use Aviat\AnimeClient\API\Kitsu\Auth; +use Aviat\Ion\ConfigInterface; +use Psr\Cache\CacheItemPoolInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + use Aviat\Ion\Di\{ ContainerAware, - ContainerInterface + ContainerInterface, + Exception\ContainerException, + Exception\NotFoundException }; use Aviat\Ion\Exception\DoubleRenderException; use Aviat\Ion\View\{HtmlView, HttpView, JsonView}; @@ -35,31 +45,31 @@ class Controller { /** * The authentication object - * @var \Aviat\AnimeClient\API\Kitsu\Auth $auth ; + * @var Auth $auth ; */ protected $auth; /** * Cache manager - * @var \Psr\Cache\CacheItemPoolInterface + * @var CacheItemPoolInterface */ protected $cache; /** * The global configuration object - * @var \Aviat\Ion\ConfigInterface $config + * @var ConfigInterface $config */ public $config; /** * Request object - * @var \Psr\Http\Message\ServerRequestInterface $request + * @var ServerRequestInterface $request */ protected $request; /** * Response object - * @var \Psr\Http\Message\ResponseInterface $response + * @var ResponseInterface $response */ public $response; @@ -71,13 +81,13 @@ class Controller { /** * Aura url generator - * @var \Aura\Router\Generator + * @var Generator */ protected $url; /** * Session segment - * @var \Aura\Session\Segment + * @var Segment */ protected $session; @@ -91,8 +101,8 @@ class Controller { * Controller constructor. * * @param ContainerInterface $container - * @throws \Aviat\Ion\Di\Exception\ContainerException - * @throws \Aviat\Ion\Di\Exception\NotFoundException + * @throws ContainerException + * @throws NotFoundException */ public function __construct(ContainerInterface $container) { @@ -127,8 +137,8 @@ class Controller { * Set the current url in the session as the target of a future redirect * * @param string|NULL $url - * @throws \Aviat\Ion\Di\Exception\ContainerException - * @throws \Aviat\Ion\Di\Exception\NotFoundException + * @throws ContainerException + * @throws NotFoundException */ public function setSessionRedirect(string $url = NULL): void { @@ -167,8 +177,8 @@ class Controller { * If one is not set, redirect to default url * * @throws InvalidArgumentException - * @throws \Aviat\Ion\Di\Exception\ContainerException - * @throws \Aviat\Ion\Di\Exception\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @return void */ public function sessionRedirect(): void @@ -202,8 +212,8 @@ class Controller { * @param string $template * @param array $data * @throws InvalidArgumentException - * @throws \Aviat\Ion\Di\Exception\ContainerException - * @throws \Aviat\Ion\Di\Exception\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @return string */ protected function loadPartial($view, string $template, array $data = []): string @@ -236,8 +246,8 @@ class Controller { * @param string $template * @param array $data * @throws InvalidArgumentException - * @throws \Aviat\Ion\Di\Exception\ContainerException - * @throws \Aviat\Ion\Di\Exception\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @return void */ protected function renderFullPage($view, string $template, array $data): void @@ -266,8 +276,8 @@ class Controller { * @param string $title * @param string $message * @throws InvalidArgumentException - * @throws \Aviat\Ion\Di\Exception\ContainerException - * @throws \Aviat\Ion\Di\Exception\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @return void */ public function notFound( @@ -289,8 +299,8 @@ class Controller { * @param string $message * @param string $long_message * @throws InvalidArgumentException - * @throws \Aviat\Ion\Di\Exception\ContainerException - * @throws \Aviat\Ion\Di\Exception\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @return void */ public function errorPage(int $httpCode, string $title, string $message, string $long_message = ''): void @@ -342,7 +352,7 @@ class Controller { /** * Helper for consistent page titles * - * @param string[] $parts Title segments + * @param string ...$parts Title segments * @return string */ public function formatTitle(string ...$parts) : string @@ -357,8 +367,8 @@ class Controller { * @param string $type * @param string $message * @throws InvalidArgumentException - * @throws \Aviat\Ion\Di\Exception\ContainerException - * @throws \Aviat\Ion\Di\Exception\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @return string */ protected function showMessage($view, string $type, string $message): string @@ -377,8 +387,8 @@ class Controller { * @param HtmlView|null $view * @param int $code * @throws InvalidArgumentException - * @throws \Aviat\Ion\Di\Exception\ContainerException - * @throws \Aviat\Ion\Di\Exception\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @return void */ protected function outputHTML(string $template, array $data = [], $view = NULL, int $code = 200): void diff --git a/src/Controller/Anime.php b/src/Controller/Anime.php index 6ec6878a..87deaca4 100644 --- a/src/Controller/Anime.php +++ b/src/Controller/Anime.php @@ -16,12 +16,15 @@ namespace Aviat\AnimeClient\Controller; +use Aura\Router\Exception\RouteNotFound; use Aviat\AnimeClient\Controller as BaseController; use Aviat\AnimeClient\API\Kitsu\Transformer\AnimeListTransformer; use Aviat\AnimeClient\API\Enum\AnimeWatchingStatus\Kitsu as KitsuWatchingStatus; use Aviat\AnimeClient\API\Mapping\AnimeWatchingStatus; use Aviat\AnimeClient\Types\FormItem; use Aviat\Ion\Di\ContainerInterface; +use Aviat\Ion\Di\Exception\ContainerException; +use Aviat\Ion\Di\Exception\NotFoundException; use Aviat\Ion\Json; /** @@ -39,8 +42,8 @@ final class Anime extends BaseController { * Constructor * * @param ContainerInterface $container - * @throws \Aviat\Ion\Di\ContainerException - * @throws \Aviat\Ion\Di\NotFoundException + * @throws ContainerException + * @throws NotFoundException */ public function __construct(ContainerInterface $container) { @@ -60,8 +63,8 @@ final class Anime extends BaseController { * * @param string|int $type - The section of the list * @param string $view - List or cover view - * @throws \Aviat\Ion\Di\ContainerException - * @throws \Aviat\Ion\Di\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @throws \InvalidArgumentException * @return void */ @@ -104,9 +107,9 @@ final class Anime extends BaseController { /** * Form to add an anime * - * @throws \Aviat\Ion\Di\ContainerException - * @throws \Aviat\Ion\Di\NotFoundException - * @throws \Aura\Router\Exception\RouteNotFound + * @throws ContainerException + * @throws NotFoundException + * @throws RouteNotFound * @throws \InvalidArgumentException * @return void */ @@ -128,8 +131,8 @@ final class Anime extends BaseController { /** * Add an anime to the list * - * @throws \Aviat\Ion\Di\ContainerException - * @throws \Aviat\Ion\Di\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @return void */ public function add(): void @@ -204,8 +207,8 @@ final class Anime extends BaseController { /** * Update an anime item via a form submission * - * @throws \Aviat\Ion\Di\ContainerException - * @throws \Aviat\Ion\Di\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @return void */ public function formUpdate(): void @@ -292,8 +295,8 @@ final class Anime extends BaseController { * View details of an anime * * @param string $animeId - * @throws \Aviat\Ion\Di\ContainerException - * @throws \Aviat\Ion\Di\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @throws \InvalidArgumentException * @return void */ diff --git a/src/Controller/AnimeCollection.php b/src/Controller/AnimeCollection.php index 41dae1d8..6eab1013 100644 --- a/src/Controller/AnimeCollection.php +++ b/src/Controller/AnimeCollection.php @@ -16,12 +16,16 @@ namespace Aviat\AnimeClient\Controller; +use Aura\Router\Exception\RouteNotFound; use Aviat\AnimeClient\Controller as BaseController; use Aviat\AnimeClient\Model\{ Anime as AnimeModel, AnimeCollection as AnimeCollectionModel }; use Aviat\Ion\Di\ContainerInterface; +use Aviat\Ion\Di\Exception\ContainerException; +use Aviat\Ion\Di\Exception\NotFoundException; +use Aviat\Ion\Exception\DoubleRenderException; /** * Controller for Anime collection pages @@ -44,8 +48,8 @@ final class AnimeCollection extends BaseController { * Constructor * * @param ContainerInterface $container - * @throws \Aviat\Ion\Di\ContainerException - * @throws \Aviat\Ion\Di\NotFoundException + * @throws ContainerException + * @throws NotFoundException */ public function __construct(ContainerInterface $container) { @@ -69,7 +73,7 @@ final class AnimeCollection extends BaseController { /** * Search for anime * - * @throws \Aviat\Ion\Exception\DoubleRenderException + * @throws DoubleRenderException * @return void */ public function search(): void @@ -83,8 +87,8 @@ final class AnimeCollection extends BaseController { * Show the anime collection page * * @param string $view - * @throws \Aviat\Ion\Di\ContainerException - * @throws \Aviat\Ion\Di\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @throws \InvalidArgumentException * @return void */ @@ -108,9 +112,9 @@ final class AnimeCollection extends BaseController { * Show the anime collection add/edit form * * @param integer|null $id - * @throws \Aviat\Ion\Di\ContainerException - * @throws \Aviat\Ion\Di\NotFoundException - * @throws \Aura\Router\Exception\RouteNotFound + * @throws ContainerException + * @throws NotFoundException + * @throws RouteNotFound * @throws \InvalidArgumentException * @return void */ @@ -138,8 +142,8 @@ final class AnimeCollection extends BaseController { /** * Update a collection item * - * @throws \Aviat\Ion\Di\ContainerException - * @throws \Aviat\Ion\Di\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @throws \InvalidArgumentException * @return void */ @@ -173,8 +177,8 @@ final class AnimeCollection extends BaseController { /** * Add a collection item * - * @throws \Aviat\Ion\Di\ContainerException - * @throws \Aviat\Ion\Di\NotFoundException + * @throws ContainerException + * @throws NotFoundException * @throws \InvalidArgumentException * @return void */ diff --git a/src/Model/API.php b/src/Model/API.php index c4e21999..8a5ae401 100644 --- a/src/Model/API.php +++ b/src/Model/API.php @@ -19,7 +19,7 @@ namespace Aviat\AnimeClient\Model; /** * Base model for api interaction */ -class API { +abstract class API { /** * Sort the list entries by their title * diff --git a/src/Model/Anime.php b/src/Model/Anime.php index 40a1f081..741fd988 100644 --- a/src/Model/Anime.php +++ b/src/Model/Anime.php @@ -16,6 +16,8 @@ namespace Aviat\AnimeClient\Model; +use Aviat\AnimeClient\API\Anilist\Model as AnilistModel; +use Aviat\AnimeClient\API\Kitsu\Model as KitsuModel; use Aviat\AnimeClient\API\ParallelAPIRequest; use Aviat\AnimeClient\API\Mapping\AnimeWatchingStatus; use Aviat\AnimeClient\Types\{ @@ -41,14 +43,14 @@ class Anime extends API { /** * Model for making requests to Anilist API * - * @var \Aviat\AnimeClient\API\Anilist\Model + * @var AnilistModel */ protected $anilistModel; /** * Model for making requests to Kitsu API * - * @var \Aviat\AnimeClient\API\Kitsu\Model + * @var KitsuModel */ protected $kitsuModel; diff --git a/src/Types/Anime.php b/src/Types/Anime.php index 585af4a6..f49af8e4 100644 --- a/src/Types/Anime.php +++ b/src/Types/Anime.php @@ -16,25 +16,94 @@ namespace Aviat\AnimeClient\Types; +use Aviat\AnimeClient\API\Kitsu\Enum\AnimeAiringStatus; + /** * Type representing an anime within a watch list */ class Anime extends AbstractType { + /** + * @var string + */ public $age_rating; + + /** + * @var string + */ public $age_rating_guide; + + /** + * @var string + */ public $cover_image; + + /** + * @var string|number + */ public $episode_count; + + /** + * @var string|number + */ public $episode_length; + + /** + * @var array + */ public $genres; + + /** + * @var string + */ public $id; + + /** + * @var array + */ public $included; + + /** + * @var string + */ public $show_type; + + /** + * @var string + */ public $slug; + + /** + * @var AnimeAiringStatus::NOT_YET_AIRED | AnimeAiringStatus::AIRING | AnimeAiringStatus::FINISHED_AIRING + */ public $status; + + /** + * @var array + */ public $streaming_links; + + /** + * @var string + */ public $synopsis; + + /** + * @var string + */ public $title; + + /** + * @var array + */ public $titles; + + /** + * @var string + */ public $trailer_id; + + /** + * @var string + */ public $url; } \ No newline at end of file diff --git a/src/Types/Config.php b/src/Types/Config.php index 2f45dd55..975364fa 100644 --- a/src/Types/Config.php +++ b/src/Types/Config.php @@ -17,35 +17,147 @@ namespace Aviat\AnimeClient\Types; class Config extends AbstractType { + + // ------------------------------------------------------------------------ // Config files/namespaces + // ------------------------------------------------------------------------ + + /** + * @var Config\Anilist + */ public $anilist; + + /** + * @var Config\Cache + */ public $cache; + + /** + * @var Config\Database + */ public $database; + // ------------------------------------------------------------------------ // Settings in config.toml + // ------------------------------------------------------------------------ + + /** + * @var string + */ public $asset_path; // Path to public folder for urls + + /** + * @deprecated Use 'theme' instead + * @var bool + */ public $dark_theme; /* Deprecated */ + + /** + * Default Anime list status page, values are listed in + * Aviat\AnimeClient\API\Enum\AnimeWatchingStatus\Title + * + * @var string + */ public $default_anime_list_path; + + /** + * The list to redirect to from the root url + * + * @var 'anime' | 'manga' + */ public $default_list; + + /** + * Default Manga list status page, values are listed in + * Aviat\AnimeClient\API\Enum\MangaReadingStatus\Title + * + * @var string + */ public $default_manga_list_path; + + /** + * @var 'cover_view' | 'list_view' + */ public $default_view_type; + + /** + * @var string + */ public $kitsu_username; + + /** + * @var bool + */ public $secure_urls = TRUE; + + /** + * @var bool + */ public $show_anime_collection; - public $show_manga_collection; + + /** + * @var bool + */ + public $show_manga_collection = FALSE; + + /** + * CSS theme: light, dark, or auto-switching + * + * @var 'auto' | 'light' | 'dark' + */ public $theme; + + /** + * @var string + */ public $whose_list; + // ------------------------------------------------------------------------ // Application config + // ------------------------------------------------------------------------ + + /** + * @var array + */ public $menus; + + /** + * @var array + */ public $routes; + // ------------------------------------------------------------------------ // Generated config values + // ------------------------------------------------------------------------ + + /** + * @var string + */ public $asset_dir; // Path to public folder for local files + + /** + * @var string + */ public $base_config_dir; + + /** + * @var string + */ public $config_dir; + + /** + * @var string + */ public $data_cache_path; + + /** + * @var string + */ public $img_cache_path; + + /** + * @var string + */ public $view_path; public function setAnilist ($data): void diff --git a/src/Types/Config/Anilist.php b/src/Types/Config/Anilist.php index 555927ec..e1876329 100644 --- a/src/Types/Config/Anilist.php +++ b/src/Types/Config/Anilist.php @@ -19,14 +19,38 @@ namespace Aviat\AnimeClient\Types\Config; use Aviat\AnimeClient\Types\AbstractType; class Anilist extends AbstractType { + /** + * @var bool + */ public $enabled = FALSE; + /** + * @var string + */ public $client_id; + + /** + * @var string + */ public $client_secret; + /** + * @var string + */ public $access_token; + + /** + * @var string + */ public $access_token_expires; + + /** + * @var string + */ public $refresh_token; + /** + * @var string + */ public $username; } \ No newline at end of file diff --git a/src/Types/Config/Cache.php b/src/Types/Config/Cache.php index 21349c2e..da312db3 100644 --- a/src/Types/Config/Cache.php +++ b/src/Types/Config/Cache.php @@ -19,8 +19,19 @@ namespace Aviat\AnimeClient\Types\Config; use Aviat\AnimeClient\Types\AbstractType; class Cache extends AbstractType { + /** + * @var string + */ public $driver; + + /** + * @var array + */ public $connection = []; + + /** + * @var array + */ public $options = []; /* public function setConnection($data): void diff --git a/src/Types/Config/Database.php b/src/Types/Config/Database.php index 6aac24ed..3f761ead 100644 --- a/src/Types/Config/Database.php +++ b/src/Types/Config/Database.php @@ -19,11 +19,38 @@ namespace Aviat\AnimeClient\Types\Config; use Aviat\AnimeClient\Types\AbstractType; class Database extends AbstractType { + /** + * @var string + */ public $type; + + /** + * @var string + */ public $host; + + /** + * @var string + */ public $user; + + /** + * @var string + */ public $pass; + + /** + * @var string|number + */ public $port; + + /** + * @var string + */ public $database; + + /** + * @var string + */ public $file; } \ No newline at end of file diff --git a/tests/AnimeClientTestCase.php b/tests/AnimeClientTestCase.php index 33c0d973..e3092f01 100644 --- a/tests/AnimeClientTestCase.php +++ b/tests/AnimeClientTestCase.php @@ -20,7 +20,6 @@ use const Aviat\AnimeClient\SRC_DIR; use function Aviat\Ion\_dir; -use Aura\Web\WebFactory; use Aviat\Ion\Json; use PHPUnit\Framework\TestCase; use Spatie\Snapshots\MatchesSnapshots; @@ -39,7 +38,6 @@ use Zend\Diactoros\{ class AnimeClientTestCase extends TestCase { use MatchesSnapshots; - // Test directory constants const ROOT_DIR = ROOT_DIR; const SRC_DIR = SRC_DIR;