1
0
Fork 0
mirror of https://codeberg.org/demostf/api.git synced 2026-06-04 02:14:06 +02:00

type hint all the things

This commit is contained in:
Robin Appelman 2020-11-28 23:37:02 +01:00
commit 3f9e613e77
34 changed files with 287 additions and 309 deletions

View file

@ -23,7 +23,7 @@ class AuthProvider extends BaseProvider {
return $this->generator->generateString(32, Generator::CHAR_ALNUM);
}
public function setUser(string $token, SteamId $steamid, string $key) {
public function setUser(string $token, SteamId $steamid, string $key): void {
apcu_store($token, [
'name' => $steamid->getNickname(),
'steamid' => $steamid->getSteamId64(),
@ -31,14 +31,17 @@ class AuthProvider extends BaseProvider {
]);
}
public function getUser(string $token) {
/**
* @return (string|null)[]
*/
public function getUser(string $token): array {
$found = true;
$result = apcu_fetch($token, $found);
return $found ? $result : ['name' => null, 'steamid' => null, 'key' => null];
}
public function logout($token) {
public function logout(string $token): void {
apcu_delete($token);
}
}

View file

@ -8,10 +8,7 @@ use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Query\QueryBuilder;
class BaseProvider {
/**
* @var Connection
*/
protected $connection;
protected Connection $connection;
/**
* BaseProvider constructor.
@ -27,13 +24,6 @@ class BaseProvider {
$this->connection = $connection;
}
protected function query(string $sql, array $params = []) {
$query = $this->connection->prepare($sql);
$query->execute($params);
return $query;
}
/**
* @return QueryBuilder
*/

View file

@ -8,7 +8,10 @@ use Demostf\API\Demo\ChatMessage;
use PDO;
class ChatProvider extends BaseProvider {
public function getChat(int $demoId) {
/**
* @return ChatMessage[]
*/
public function getChat(int $demoId): array {
$query = $this->getQueryBuilder();
$query->select('text', '"from"', 'time')
->from('chat')
@ -26,7 +29,7 @@ class ChatProvider extends BaseProvider {
}, $result->fetchAll());
}
public function storeChatMessage(int $demoId, ChatMessage $message) {
public function storeChatMessage(int $demoId, ChatMessage $message): void {
$query = $this->getQueryBuilder();
$query->insert('chat')
->values([

View file

@ -10,6 +10,13 @@ use Doctrine\DBAL\Query\QueryBuilder;
use PDO;
class DemoListProvider extends BaseProvider {
/**
* @param mixed[] $where
*
* @throws \Doctrine\DBAL\Exception
*
* @return Demo[]
*/
public function listUploads(string $steamId, int $page, array $where = []) {
$query = $this->getQueryBuilder();
$query->select('id')
@ -25,11 +32,19 @@ class DemoListProvider extends BaseProvider {
return $this->listDemos($page, $where);
}
public function listProfile(int $page, array $where = []) {
/**
* @param mixed[] $where
*
* @throws \Doctrine\DBAL\Exception
*
* @return Demo[]
*/
public function listProfile(int $page, array $where = []): array {
$query = $this->getQueryBuilder();
$query->select('id')
->from('users')
->where($query->expr()->in('steamid', $query->createNamedParameter($where['players'], Connection::PARAM_STR_ARRAY)));
->where($query->expr()->in('steamid',
$query->createNamedParameter($where['players'], Connection::PARAM_STR_ARRAY)));
unset($where['players']);
$result = $query->execute();
$userIds = $result->fetchAll(PDO::FETCH_COLUMN);
@ -73,7 +88,10 @@ class DemoListProvider extends BaseProvider {
return $this->formatList($query->execute()->fetchAll());
}
private function addWhere(QueryBuilder $query, array $where = []) {
/**
* @param mixed[] $where
*/
private function addWhere(QueryBuilder $query, array $where = []): void {
if (isset($where['map'])) {
$query->andWhere($query->expr()->orX(
$query->expr()->eq('clean_map_name(map)', $query->createNamedParameter($where['map'])),
@ -103,9 +121,13 @@ class DemoListProvider extends BaseProvider {
}
/**
* @param mixed[] $where
*
* @throws \Doctrine\DBAL\Exception
*
* @return Demo[]
*/
public function listDemos(int $page, array $where = [], string $order = 'DESC') {
public function listDemos(int $page, array $where = [], string $order = 'DESC'): array {
if (isset($where['players']) and \is_array($where['players']) and \count($where['players']) > 0) {
return $this->listProfile($page, $where);
}
@ -127,7 +149,12 @@ class DemoListProvider extends BaseProvider {
return $this->formatList($demos);
}
protected function formatList(array $rows) {
/**
* @param array[] $rows
*
* @return Demo[]
*/
protected function formatList(array $rows): array {
return array_map(function ($row) {
return Demo::fromRow($row);
}, $rows);

View file

@ -13,7 +13,7 @@ use PDO;
class DemoProvider extends BaseProvider {
const VERSION = 4;
private $userProvider;
private UserProvider $userProvider;
public function __construct(Connection $connection, UserProvider $userProvider) {
parent::__construct($connection);
@ -49,7 +49,7 @@ class DemoProvider extends BaseProvider {
if ($fetchDetails) {
$uploader = $this->userProvider->getById($demo->getUploader());
$playerQuery = $this->query($sql, [$demo->getId(), $demo->getId()]);
$playerQuery = $this->connection->executeQuery($sql, [$demo->getId(), $demo->getId()]);
$players = $playerQuery->fetchAll(PDO::FETCH_ASSOC);
$demo->setUploaderUser($uploader);
@ -105,7 +105,7 @@ class DemoProvider extends BaseProvider {
return (int) $this->connection->lastInsertId();
}
public function setDemoUrl(int $id, string $backend, string $url, string $path) {
public function setDemoUrl(int $id, string $backend, string $url, string $path): void {
$query = $this->getQueryBuilder();
$query->update('demos')
->set('backend', $query->createNamedParameter($backend))

View file

@ -7,7 +7,10 @@ namespace Demostf\API\Providers;
use PDO;
class InfoProvider extends BaseProvider {
public function listMaps() {
/**
* @return string[]
*/
public function listMaps(): array {
$query = $this->getQueryBuilder();
$query->select('map', 'count')
->from('map_list');
@ -24,7 +27,10 @@ class InfoProvider extends BaseProvider {
return $query->execute()->fetch(PDO::FETCH_COLUMN);
}
public function getStats() {
/**
* @return int[]
*/
public function getStats(): array {
$demoCount = $this->count('demos');
$playerCount = $this->count('users');

View file

@ -13,25 +13,16 @@ use Demostf\API\Demo\HeaderParser;
use Demostf\API\Demo\Parser;
use Demostf\API\Error\InvalidKeyException;
use Doctrine\DBAL\Connection;
use RandomLib\Generator;
class UploadProvider extends BaseProvider {
/** @var Generator */
private $generator;
/** @var HeaderParser */
private $headerParser;
/** @var Parser */
private $parser;
/** @var DemoStore */
private $store;
/** @var UserProvider */
private $userProvider;
/** @var DemoProvider */
private $demoProvider;
/** @var DemoSaver */
private $demoSaver;
private $baseUrl;
private $uploadKey;
private HeaderParser $headerParser;
private Parser $parser;
private DemoStore $store;
private UserProvider $userProvider;
private DemoProvider $demoProvider;
private DemoSaver $demoSaver;
private string $baseUrl;
private string $uploadKey;
public function __construct(
Connection $db,
@ -97,7 +88,7 @@ class UploadProvider extends BaseProvider {
return 'STV available at: ' . $this->baseUrl . '/' . $id;
}
public function validateHeader(int $size, Header $header) {
public function validateHeader(int $size, Header $header): ?string {
if ($size < 1024) {
return 'Demos needs to be at least 1KB is size';
}
@ -113,7 +104,7 @@ class UploadProvider extends BaseProvider {
return null;
}
public function validateParsed(Header $header, ParsedDemo $parsedDemo) {
public function validateParsed(Header $header, ParsedDemo $parsedDemo): ?string {
$rounds = $parsedDemo->getRedScore() + $parsedDemo->getBlueScore();
if (0 === $rounds && $header->getDuration() < (15 * 60)) {
return 'Demos must be at least 5 minutes long';

View file

@ -171,7 +171,7 @@ class UserProvider extends BaseProvider {
return $row ? User::fromRow($row) : null;
}
public function getUserId(string $steamId) {
public function getUserId(string $steamId): int {
$existing = $this->get($steamId);
if ($existing) {
return $existing->getId();