mirror of
https://github.com/NNTmux/newznab-tmux.git
synced 2026-08-29 01:01:24 +00:00
155 lines
4.2 KiB
PHP
155 lines
4.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Support;
|
|
|
|
use App\Models\AnidbInfo;
|
|
use App\Models\AnidbTitle;
|
|
use App\Models\BookInfo;
|
|
use App\Models\ConsoleInfo;
|
|
use App\Models\GamesInfo;
|
|
use App\Models\MusicInfo;
|
|
use App\Models\SteamApp;
|
|
use Carbon\Carbon;
|
|
|
|
/**
|
|
* Map Eloquent models / rows to search-engine documents for secondary indexes.
|
|
*/
|
|
final class SecondaryIndexDocuments
|
|
{
|
|
/**
|
|
* @param array<string, mixed> $row
|
|
* @return array<string, mixed>
|
|
*/
|
|
public static function musicFromArray(array $row): array
|
|
{
|
|
return [
|
|
'title' => (string) ($row['title'] ?? ''),
|
|
'artist' => (string) ($row['artist'] ?? ''),
|
|
'year' => (string) ($row['year'] ?? ''),
|
|
'genres_id' => (int) ($row['genres_id'] ?? 0),
|
|
'cover' => (int) ($row['cover'] ?? 0),
|
|
];
|
|
}
|
|
|
|
public static function music(MusicInfo $m): array
|
|
{
|
|
return self::musicFromArray($m->getAttributes());
|
|
}
|
|
|
|
/**
|
|
* @param array<string, mixed> $row
|
|
* @return array<string, mixed>
|
|
*/
|
|
public static function bookFromArray(array $row): array
|
|
{
|
|
return [
|
|
'title' => (string) ($row['title'] ?? ''),
|
|
'author' => (string) ($row['author'] ?? ''),
|
|
'publishdate' => (string) ($row['publishdate'] ?? ''),
|
|
'cover' => (int) ($row['cover'] ?? 0),
|
|
];
|
|
}
|
|
|
|
public static function book(BookInfo $b): array
|
|
{
|
|
return self::bookFromArray($b->getAttributes());
|
|
}
|
|
|
|
/**
|
|
* @param array<string, mixed> $row
|
|
* @return array<string, mixed>
|
|
*/
|
|
public static function gamesFromArray(array $row): array
|
|
{
|
|
$ts = self::releasedateToTimestamp($row['releasedate'] ?? null);
|
|
|
|
return [
|
|
'title' => (string) ($row['title'] ?? ''),
|
|
'genres_id' => (int) ($row['genres_id'] ?? 0),
|
|
'releasedate_ts' => $ts,
|
|
'cover' => (int) ($row['cover'] ?? 0),
|
|
];
|
|
}
|
|
|
|
public static function games(GamesInfo $g): array
|
|
{
|
|
return self::gamesFromArray($g->getAttributes());
|
|
}
|
|
|
|
/**
|
|
* @param array<string, mixed> $row
|
|
* @return array<string, mixed>
|
|
*/
|
|
public static function consoleFromArray(array $row): array
|
|
{
|
|
$ts = self::releasedateToTimestamp($row['releasedate'] ?? null);
|
|
|
|
return [
|
|
'title' => (string) ($row['title'] ?? ''),
|
|
'platform' => (string) ($row['platform'] ?? ''),
|
|
'genres_id' => (int) ($row['genres_id'] ?? 0),
|
|
'releasedate_ts' => $ts,
|
|
'cover' => (int) ($row['cover'] ?? 0),
|
|
];
|
|
}
|
|
|
|
public static function console(ConsoleInfo $c): array
|
|
{
|
|
return self::consoleFromArray($c->getAttributes());
|
|
}
|
|
|
|
/**
|
|
* @param array<string, mixed> $row
|
|
* @return array<string, mixed>
|
|
*/
|
|
public static function steamFromArray(array $row): array
|
|
{
|
|
return [
|
|
'name' => (string) ($row['name'] ?? ''),
|
|
'appid' => (int) ($row['appid'] ?? 0),
|
|
];
|
|
}
|
|
|
|
public static function steam(SteamApp $s): array
|
|
{
|
|
return self::steamFromArray($s->getAttributes());
|
|
}
|
|
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
public static function animeTitle(AnidbTitle $t, ?AnidbInfo $info = null): array
|
|
{
|
|
$info ??= AnidbInfo::query()->where('anidbid', $t->anidbid)->first();
|
|
|
|
return [
|
|
'title' => (string) $t->title,
|
|
'anidbid' => (int) $t->anidbid,
|
|
'anilist_id' => (int) ($info?->anilist_id ?? 0),
|
|
'mal_id' => (int) ($info?->mal_id ?? 0),
|
|
'lang' => (string) $t->lang,
|
|
'title_type' => (string) $t->type,
|
|
'media_type' => (string) ($info?->media_type ?? ''),
|
|
'status' => (string) ($info?->status ?? ''),
|
|
];
|
|
}
|
|
|
|
private static function releasedateToTimestamp(mixed $rd): int
|
|
{
|
|
if ($rd instanceof Carbon) {
|
|
return $rd->getTimestamp();
|
|
}
|
|
if ($rd !== null && $rd !== '') {
|
|
try {
|
|
return Carbon::parse((string) $rd)->getTimestamp();
|
|
} catch (\Throwable) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
}
|