mirror of
https://github.com/NNTmux/newznab-tmux.git
synced 2026-08-28 17:01:16 +00:00
72 lines
2.3 KiB
PHP
72 lines
2.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Services\Api\V2;
|
|
|
|
use App\Data\Api\DetailsData;
|
|
use App\Data\Api\ReleaseData;
|
|
use App\Models\Release;
|
|
use App\Models\User;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Support\Carbon;
|
|
|
|
final class ApiV2Presenter
|
|
{
|
|
private const JSON_ENCODING_OPTIONS = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE;
|
|
|
|
/** @param array<string, mixed> $data */
|
|
public function json(array $data, int $status = 200): JsonResponse
|
|
{
|
|
return response()->json($data, $status, [], self::JSON_ENCODING_OPTIONS);
|
|
}
|
|
|
|
/**
|
|
* @param iterable<int, Release|\stdClass> $rows
|
|
* @param array<string, mixed> $usage
|
|
* @param array{next_cursor: string|null, has_more: bool}|null $pagination
|
|
*/
|
|
public function search(iterable $rows, User $user, array $usage, ?array $pagination = null): JsonResponse
|
|
{
|
|
$rows = is_array($rows) ? $rows : iterator_to_array($rows, false);
|
|
$results = [];
|
|
foreach ($rows as $row) {
|
|
$results[] = ReleaseData::toArrayFromRelease($row, $user, url('/details').'/', url('/getnzb'));
|
|
}
|
|
|
|
$payload = array_merge(
|
|
['Total' => (int) ($rows[0]->_totalrows ?? 0)],
|
|
$usage,
|
|
['results' => $results],
|
|
);
|
|
if ($pagination !== null) {
|
|
$payload['pagination'] = $pagination;
|
|
}
|
|
|
|
return $this->json($payload);
|
|
}
|
|
|
|
public function details(Release|\stdClass $release, User $user): JsonResponse
|
|
{
|
|
return $this->json(DetailsData::toArrayFromRelease(
|
|
$release,
|
|
$user,
|
|
url('/details').'/',
|
|
url('/getnzb')
|
|
));
|
|
}
|
|
|
|
/** @return array<string, mixed> */
|
|
public function usage(User $user, object $statistics): array
|
|
{
|
|
return [
|
|
'apiCurrent' => (int) ($statistics->api_count ?? 0),
|
|
'apiMax' => $user->role->apirequests,
|
|
'grabCurrent' => (int) ($statistics->grab_count ?? 0),
|
|
'grabMax' => $user->role->downloadrequests,
|
|
'apiOldestTime' => $statistics->api_time ? Carbon::parse($statistics->api_time)->toRfc2822String() : '',
|
|
'grabOldestTime' => $statistics->grab_time ? Carbon::parse($statistics->grab_time)->toRfc2822String() : '',
|
|
];
|
|
}
|
|
}
|