mirror of
https://codeberg.org/demostf/api.git
synced 2026-06-03 09:54:17 +02:00
extract chat handling
This commit is contained in:
parent
66d177e23a
commit
9c963fd3af
7 changed files with 149 additions and 29 deletions
|
|
@ -1,17 +1,18 @@
|
|||
<?php namespace Demostf\API\Controllers;
|
||||
|
||||
use Demostf\API\Providers\ChatProvider;
|
||||
use Demostf\API\Providers\DemoProvider;
|
||||
use Demostf\API\Providers\MatchProvider;
|
||||
|
||||
class DemoController extends BaseController {
|
||||
|
||||
/**
|
||||
* @var \Providers\DemoProvider
|
||||
*/
|
||||
/** @var DemoProvider */
|
||||
private $demoProvider;
|
||||
|
||||
public function __construct(DemoProvider $demoProvider) {
|
||||
/** @var ChatProvider */
|
||||
private $chatProvider;
|
||||
|
||||
public function __construct(DemoProvider $demoProvider, ChatProvider $chatProvider) {
|
||||
$this->demoProvider = $demoProvider;
|
||||
$this->chatProvider = $chatProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -68,6 +69,6 @@ class DemoController extends BaseController {
|
|||
}
|
||||
|
||||
public function chat($demoId) {
|
||||
\Flight::json($this->demoProvider->getChat($demoId));
|
||||
\Flight::json($this->chatProvider->getChat($demoId));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
46
src/Demo/ChatMessage.php
Normal file
46
src/Demo/ChatMessage.php
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<?php namespace Demostf\API\Demo;
|
||||
|
||||
class ChatMessage {
|
||||
/** @var string */
|
||||
private $user;
|
||||
|
||||
/** @var integer */
|
||||
private $time;
|
||||
|
||||
/** @var string */
|
||||
private $message;
|
||||
|
||||
/**
|
||||
* ChatMessage constructor.
|
||||
*
|
||||
* @param string $user
|
||||
* @param int $time
|
||||
* @param string $message
|
||||
*/
|
||||
public function __construct(string $user, int $time, string $message) {
|
||||
$this->user = $user;
|
||||
$this->time = $time;
|
||||
$this->message = $message;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getUser(): string {
|
||||
return $this->user;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getTime(): int {
|
||||
return $this->time;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getMessage(): string {
|
||||
return $this->message;
|
||||
}
|
||||
}
|
||||
35
src/Providers/ChatProvider.php
Normal file
35
src/Providers/ChatProvider.php
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
<?php namespace Demostf\API\Providers;
|
||||
|
||||
use Demostf\API\Demo\ChatMessage;
|
||||
|
||||
class ChatProvider extends BaseProvider {
|
||||
public function getChat(int $demoId) {
|
||||
$query = $this->getQueryBuilder();
|
||||
$query->select('text', '"from"', 'time')
|
||||
->from('chat')
|
||||
->where($query->expr()->eq('demo_id', $query->createNamedParameter($demoId, \PDO::PARAM_INT)));
|
||||
|
||||
$result = $query->execute();
|
||||
return array_map(function (array $row) {
|
||||
return new ChatMessage(
|
||||
$row['from'],
|
||||
(int)$row['time'],
|
||||
$row['text']
|
||||
);
|
||||
}, $result->fetchAll());
|
||||
}
|
||||
|
||||
public function storeChatMessage(int $demoId, ChatMessage $message) {
|
||||
$query = $this->getQueryBuilder();
|
||||
$query->insert('chat')
|
||||
->values([
|
||||
'demo_id' => $query->createNamedParameter($demoId, \PDO::PARAM_INT),
|
||||
'text' => $query->createNamedParameter($message->getMessage()),
|
||||
'"from"' => $query->createNamedParameter($message->getUser()),
|
||||
'time' => $query->createNamedParameter($message->getTime(), \PDO::PARAM_INT),
|
||||
'created_at' => 'now()',
|
||||
'updated_at' => 'now()',
|
||||
]);
|
||||
$query->execute();
|
||||
}
|
||||
}
|
||||
|
|
@ -5,11 +5,6 @@ use Doctrine\DBAL\Connection;
|
|||
class DemoProvider extends BaseProvider {
|
||||
const VERSION = 4;
|
||||
|
||||
|
||||
public function __construct(Connection $connection) {
|
||||
parent::__construct($connection);
|
||||
}
|
||||
|
||||
public function get($id) {
|
||||
$demo = $this->db->demo()->where('id', $id);
|
||||
|
||||
|
|
@ -40,13 +35,13 @@ class DemoProvider extends BaseProvider {
|
|||
return $formattedDemo;
|
||||
}
|
||||
|
||||
public function listUploads($steamid, $page, $where = []) {
|
||||
public function listUploads(string $steamid, int $page, array $where = []) {
|
||||
$user = $this->db->user()->where('steamid', $steamid);
|
||||
$where['uploader'] = $user->fetch()->id;
|
||||
return $this->listDemos($page, $where);
|
||||
}
|
||||
|
||||
public function listProfile($page, $where = []) {
|
||||
public function listProfile(int $page, array $where = []) {
|
||||
$users = $this->db->user()->where('steamid', $where['players']);
|
||||
unset($where['players']);
|
||||
$userIds = [];
|
||||
|
|
@ -70,7 +65,7 @@ class DemoProvider extends BaseProvider {
|
|||
return $this->formatList($demos);
|
||||
}
|
||||
|
||||
public function listDemos($page, $where = []) {
|
||||
public function listDemos(int $page, $where = []) {
|
||||
if (isset($where['players']) and is_array($where['players']) and count($where['players']) > 0) {
|
||||
return $this->listProfile($page, $where);
|
||||
}
|
||||
|
|
@ -96,19 +91,6 @@ class DemoProvider extends BaseProvider {
|
|||
return $this->formatList($demos);
|
||||
}
|
||||
|
||||
public function getChat($demoId) {
|
||||
$chat = $this->db->chat()->where('demo_id', $demoId);
|
||||
$result = [];
|
||||
foreach ($chat as $message) {
|
||||
$result[] = [
|
||||
'message' => $message['text'],
|
||||
'user' => $message['from'],
|
||||
'time' => $message['time']
|
||||
];
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function formatList($demos) {
|
||||
$result = [];
|
||||
foreach ($demos as $demo) {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ $generator = $factory->getMediumStrengthGenerator();
|
|||
$authProvider = new Providers\AuthProvider($db, $generator);
|
||||
$userProvider = new Providers\UserProvider($db, $generator);
|
||||
$infoProvider = new Providers\InfoProvider($db);
|
||||
$demoController = new Controllers\DemoController($demoProvider);
|
||||
$chatProvider = new Providers\ChatProvider($db);
|
||||
$demoController = new Controllers\DemoController($demoProvider, $chatProvider);
|
||||
$authController = new Controllers\AuthController($userProvider, $authProvider, $host);
|
||||
$userController = new Controllers\UserController($userProvider);
|
||||
$infoController = new Controllers\InfoController($infoProvider);
|
||||
|
|
|
|||
37
tests/Providers/ChatProviderTest.php
Normal file
37
tests/Providers/ChatProviderTest.php
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<?php namespace Demostf\API\Test\Providers;
|
||||
|
||||
use Demostf\API\Demo\ChatMessage;
|
||||
use Demostf\API\Providers\ChatProvider;
|
||||
use Demostf\API\Test\TestCase;
|
||||
|
||||
class ChatProviderTest extends TestCase {
|
||||
/** @var ChatProvider */
|
||||
private $provider;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->provider = new ChatProvider($this->getDatabaseConnection());
|
||||
}
|
||||
|
||||
public function testGetEmptyChat() {
|
||||
$this->assertCount(0, $this->provider->getChat(1));
|
||||
}
|
||||
|
||||
public function testStoreRetrieve() {
|
||||
$message1 = new ChatMessage('foo', 2, 'bar');
|
||||
$message2 = new ChatMessage('foo2', 2, 'bar2');
|
||||
$message3 = new ChatMessage('foo2', 2, 'bar2');
|
||||
|
||||
$this->provider->storeChatMessage(1, $message1);
|
||||
$this->provider->storeChatMessage(1, $message2);
|
||||
$this->provider->storeChatMessage(2, $message3);
|
||||
|
||||
$result = $this->provider->getChat(1);
|
||||
sort($result);
|
||||
|
||||
$this->assertCount(2, $result);
|
||||
$this->assertEquals($message1, $result[0]);
|
||||
$this->assertEquals($message2, $result[1]);
|
||||
}
|
||||
}
|
||||
18
tests/Providers/InfoProviderTest.php
Normal file
18
tests/Providers/InfoProviderTest.php
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?php namespace Demostf\API\Test\Providers;
|
||||
|
||||
use Demostf\API\Providers\InfoProvider;
|
||||
use Demostf\API\Test\TestCase;
|
||||
|
||||
class InfoProviderTest extends TestCase {
|
||||
/** @var InfoProvider */
|
||||
private $provider;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
$this->provider = new InfoProvider($this->getDatabaseConnection());
|
||||
}
|
||||
|
||||
public function testGetStats() {
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue