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

use userprovider to get uploader data

This commit is contained in:
Robin Appelman 2020-02-03 15:04:39 +01:00
commit 9bf9721190
8 changed files with 47 additions and 17 deletions

View file

@ -4,6 +4,8 @@ declare(strict_types=1);
namespace Demostf\API\Providers;
use Doctrine\DBAL\Connection;
use LessQL\Database;
use const DATE_ATOM;
use Demostf\API\Data\DemoPlayer;
use Demostf\API\Data\User;
@ -13,6 +15,14 @@ use PDO;
class DemoProvider extends BaseProvider {
const VERSION = 4;
private $userProvider;
public function __construct(Connection $connection, UserProvider $userProvider) {
parent::__construct($connection);
$this->userProvider = $userProvider;
}
public function get(int $id, bool $fetchDetails = true): ?Demo {
$demo = $this->db->demo()->where('id', $id);
@ -23,7 +33,7 @@ class DemoProvider extends BaseProvider {
(SELECT COUNT(*) FROM demokills WHERE assister_id=players.user_id) AS assists,
(SELECT COUNT(*) FROM demokills WHERE victim_id=players.user_id) AS deaths
FROM players
INNER JOIN users_named ON players.user_id = users.id
INNER JOIN users ON players.user_id = users.id
WHERE demo_id = ?';
$demoData = $demo->fetch();
@ -33,16 +43,11 @@ class DemoProvider extends BaseProvider {
$formattedDemo = Demo::fromRow($demoData);
if ($fetchDetails) {
$uploader = $demo->user()->via('uploader')->fetch();
$uploader = $this->userProvider->getById($demoData['uploader']);
$playerQuery = $this->query($sql, [$formattedDemo->getId(), $formattedDemo->getId()]);
$players = $playerQuery->fetchAll(PDO::FETCH_ASSOC);
$formattedDemo->setUploaderUser(User::fromRow([
'id' => $uploader['id'],
'steamid' => $uploader['steamid'],
'name' => $uploader['name'],
'avatar' => $uploader['avatar'],
]));
$formattedDemo->setUploaderUser($uploader);
$uniquePlayers = [];
foreach ($players as $player) {
$key = $player['steamid'] . $player['team'];

View file

@ -70,6 +70,30 @@ class UserProvider extends BaseProvider {
return $row ? User::fromRow($row) : null;
}
public function getById(int $userId): ?User {
// first search in the view which contains the most used name for the users
$query = $this->getQueryBuilder();
$query->select(['id', 'steamid', 'name', 'avatar', 'token'])
->from('users_named')
->where($query->expr()->eq('id', $query->createNamedParameter($userId, \PDO::PARAM_INT)));
$row = $query->execute()->fetch();
if (!$row) {
// if the user is newly inserted it wont be in our view yet
$query = $this->getQueryBuilder();
$query->select(['id', 'steamid', 'name', 'avatar', 'token'])
->from('users')
->where($query->expr()->eq('id', $query->createNamedParameter($userId, \PDO::PARAM_INT)));
$row = $query->execute()->fetch();
}
return $row ? User::fromRow($row) : null;
}
private function searchBySteamId(string $steamId): ?array {
$query = $this->getQueryBuilder();
$query->select('u.id', 'p.name', 'count(demo_id) as count', 'steamid')