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:
parent
28589d505d
commit
3f9e613e77
34 changed files with 287 additions and 309 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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([
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue