mirror of
https://codeberg.org/demostf/api.git
synced 2026-06-03 18:04:08 +02:00
upload wip
This commit is contained in:
parent
3061dda018
commit
fca5d7b0a6
15 changed files with 2146 additions and 164 deletions
|
|
@ -1,5 +1,6 @@
|
|||
<?php namespace Providers;
|
||||
|
||||
use Doctrine\DBAL\Connection;
|
||||
use RandomLib\Generator;
|
||||
|
||||
class AuthProvider extends BaseProvider {
|
||||
|
|
@ -8,7 +9,7 @@ class AuthProvider extends BaseProvider {
|
|||
*/
|
||||
private $generator;
|
||||
|
||||
public function __construct(\PDO $db, Generator $generator) {
|
||||
public function __construct(Connection $db, Generator $generator) {
|
||||
parent::__construct($db);
|
||||
$this->generator = $generator;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,27 +1,31 @@
|
|||
<?php namespace Providers;
|
||||
|
||||
use Doctrine\DBAL\Connection;
|
||||
use Doctrine\DBAL\Platforms\MySqlPlatform;
|
||||
use Doctrine\DBAL\Platforms\PostgreSqlPlatform;
|
||||
use Doctrine\DBAL\Query\QueryBuilder;
|
||||
use LessQL\Database;
|
||||
|
||||
class BaseProvider {
|
||||
/**
|
||||
* @var \PDO
|
||||
* @var Connection
|
||||
*/
|
||||
protected $pdo;
|
||||
protected $connection;
|
||||
|
||||
/**
|
||||
* @var \LessQL\Database
|
||||
*/
|
||||
protected $db;
|
||||
|
||||
public function __construct(\PDO $pdo) {
|
||||
$this->pdo = $pdo;
|
||||
$this->db = new Database($pdo);
|
||||
public function __construct(Connection $connection) {
|
||||
$this->connection = $connection;
|
||||
$this->db = new Database($connection->getWrappedConnection());
|
||||
$this->dbConfig();
|
||||
}
|
||||
|
||||
private function dbConfig() {
|
||||
$driver = $this->pdo->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||
if ($driver === 'mysql') {
|
||||
$platform = $this->connection->getDatabasePlatform();
|
||||
if ($platform instanceof MySqlPlatform) {
|
||||
$this->db->setIdentifierDelimiter("`");
|
||||
} else {
|
||||
$this->db->setIdentifierDelimiter('"');
|
||||
|
|
@ -44,16 +48,23 @@ class BaseProvider {
|
|||
|
||||
protected function query($sql, array $params = []) {
|
||||
$delimiter = $this->db->getIdentifierDelimiter();
|
||||
$driver = $this->pdo->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||
$platform = $this->connection->getDatabasePlatform();
|
||||
$sql = str_replace('`', $delimiter, $sql);
|
||||
|
||||
if ($driver === 'pgsql') {
|
||||
if ($platform instanceof PostgreSqlPlatform) {
|
||||
$sql = str_replace('FROM_UNIXTIME(', 'to_timestamp(', $sql);
|
||||
}
|
||||
|
||||
$query = $this->pdo->prepare($sql, $params);
|
||||
$query = $this->connection->prepare($sql);
|
||||
$query->execute($params);
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return QueryBuilder
|
||||
*/
|
||||
protected function getQueryBuilder() {
|
||||
return new QueryBuilder($this->connection);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,23 @@
|
|||
<?php namespace Providers;
|
||||
|
||||
use Demo\Header;
|
||||
use Demo\IDemoStore;
|
||||
use Demo\StoredDemo;
|
||||
use Doctrine\DBAL\Connection;
|
||||
|
||||
class DemoProvider extends BaseProvider {
|
||||
const VERSION = 4;
|
||||
|
||||
/**
|
||||
* @var IDemoStore
|
||||
*/
|
||||
private $demoStore;
|
||||
|
||||
public function __construct(Connection $connection, IDemoStore $demoStore) {
|
||||
parent::__construct($connection);
|
||||
$this->demoStore = $demoStore;
|
||||
}
|
||||
|
||||
public function get($id) {
|
||||
$demo = $this->db->demo()->where('id', $id);
|
||||
|
||||
|
|
@ -67,23 +84,23 @@ class DemoProvider extends BaseProvider {
|
|||
}
|
||||
|
||||
$offset = ($page - 1) * 50;
|
||||
$params = [];
|
||||
$sql = 'SELECT demos.* FROM demos LEFT OUTER JOIN upload_blacklist ON demos.uploader = uploader_id
|
||||
WHERE upload_blacklist.id IS null';
|
||||
|
||||
$query = $this->getQueryBuilder();
|
||||
$query->select('demos.*')
|
||||
->from('demos', 'd')
|
||||
->leftJoin('d', 'upload_blacklist', 'b', $query->expr()->eq('uploader_id', 'uploader'))
|
||||
->where($query->expr()->isNull('b.id'));
|
||||
if (isset($where['map'])) {
|
||||
$sql .= ' AND demos.map = ?';
|
||||
$params[] = $where['map'];
|
||||
$query->where($query->expr()->eq('map', $query->createNamedParameter($where['map'])));
|
||||
}
|
||||
if (isset($where['playerCount'])) {
|
||||
$placeholder = implode(', ', array_fill(0, count($where['playerCount']), '?'));
|
||||
$sql .= ' AND "playerCount" IN (' . $placeholder . ')';
|
||||
foreach ($where['playerCount'] as $playerCount) {
|
||||
$params[] = $playerCount;
|
||||
}
|
||||
$query->where($query->expr()->in('playerCount', $query->createNamedParameter($where['playerCount'], Connection::PARAM_INT_ARRAY)));
|
||||
}
|
||||
$sql .= ' ORDER BY demos.id DESC LIMIT 50 OFFSET ' . $offset;
|
||||
$result = $this->query($sql, $params);
|
||||
$demos = $result->fetchAll();
|
||||
$query->orderBy('demos.tf', 'DESC')
|
||||
->setMaxResults(50)
|
||||
->setFirstResult($offset);
|
||||
|
||||
$demos = $query->execute()->fetchAll();
|
||||
return $this->formatList($demos);
|
||||
}
|
||||
|
||||
|
|
@ -162,4 +179,43 @@ class DemoProvider extends BaseProvider {
|
|||
'uploaders' => $result->fetchColumn()
|
||||
];
|
||||
}
|
||||
|
||||
public function demoIdByHash($hash) {
|
||||
$query = $this->getQueryBuilder();
|
||||
$query->select('hash')
|
||||
->from('demos')
|
||||
->where($query->expr()->eq('hash', $query->createNamedParameter($hash)));
|
||||
|
||||
return $query->execute()->fetchColumn();
|
||||
}
|
||||
|
||||
public function storeDemo($handle, $name) {
|
||||
$this->demoStore->store($handle, $name);
|
||||
}
|
||||
|
||||
public function save($name, Header $header, StoredDemo $storedDemo, $red, $blu, $uploaderId, $hash) {
|
||||
$query = $this->getQueryBuilder();
|
||||
$query->insert('demos')
|
||||
->values([
|
||||
'name' => $name,
|
||||
'url' => $storedDemo->getUrl(),
|
||||
'map' => $header->getMap(),
|
||||
'red' => $red,
|
||||
'blu' => $blu,
|
||||
'uploader' => $uploaderId,
|
||||
'duration' => floor($header->getDuration()),
|
||||
'backend' => $storedDemo->getBackend(),
|
||||
'path' => $storedDemo->getPath(),
|
||||
'server' => $header->getServer(),
|
||||
'nick' => $header->getNick(),
|
||||
'hash' => $hash,
|
||||
'version' => 0
|
||||
|
||||
]);
|
||||
|
||||
$query->execute();
|
||||
return $this->connection->lastInsertId('demos');
|
||||
}
|
||||
|
||||
// public function analyse()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
<?php namespace Providers;
|
||||
|
||||
use Doctrine\DBAL\Connection;
|
||||
use RandomLib\Generator;
|
||||
|
||||
class UserProvider extends BaseProvider {
|
||||
|
|
@ -8,7 +9,7 @@ class UserProvider extends BaseProvider {
|
|||
*/
|
||||
private $generator;
|
||||
|
||||
public function __construct(\PDO $db, Generator $generator) {
|
||||
public function __construct(Connection $db, Generator $generator) {
|
||||
parent::__construct($db);
|
||||
$this->generator = $generator;
|
||||
}
|
||||
|
|
@ -29,17 +30,14 @@ class UserProvider extends BaseProvider {
|
|||
}
|
||||
|
||||
public function get($steamid) {
|
||||
$user = $this->db->user()->where('steamid', $steamid)->fetch();
|
||||
if (count($user) < 1) {
|
||||
return null;
|
||||
}
|
||||
return [
|
||||
'id' => $user['id'],
|
||||
'steamid' => $user['steamid'],
|
||||
'name' => $user['name'],
|
||||
'avatar' => $user['avatar']
|
||||
];
|
||||
$query = $this->getQueryBuilder();
|
||||
$query->select(['id', 'steamid', 'name', 'avatar'])
|
||||
->from('user')
|
||||
->where($query->expr()->eq('steamid', $query->createNamedParameter($steamid)));
|
||||
|
||||
return $query->execute()->fetch();
|
||||
}
|
||||
|
||||
public function search($query) {
|
||||
$sql = 'SELECT user_id, players.name, count(demo_id) AS count, steamid,
|
||||
1-(players.name <-> ?) AS sim FROM players
|
||||
|
|
@ -78,4 +76,13 @@ class UserProvider extends BaseProvider {
|
|||
|
||||
return $players;
|
||||
}
|
||||
|
||||
public function byKey($key) {
|
||||
$query = $this->getQueryBuilder();
|
||||
$query->select(['id', 'steamid', 'name', 'avatar'])
|
||||
->from('user')
|
||||
->where($query->expr()->eq('token', $query->createNamedParameter($key)));
|
||||
|
||||
return $query->execute()->fetch();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue