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

use transaction

This commit is contained in:
Robin Appelman 2019-03-05 23:39:18 +01:00
commit 8f82097d93
2 changed files with 17 additions and 2 deletions

View file

@ -109,7 +109,8 @@ class Container {
$this->getPlayerProvider(), $this->getPlayerProvider(),
$this->getChatProvider(), $this->getChatProvider(),
$this->getUserProvider(), $this->getUserProvider(),
$this->getDemoProvider() $this->getDemoProvider(),
$this->getConnection()
), ),
$this->getUploadKey() $this->getUploadKey()
); );

View file

@ -14,6 +14,7 @@ use Demostf\API\Providers\DemoProvider;
use Demostf\API\Providers\KillProvider; use Demostf\API\Providers\KillProvider;
use Demostf\API\Providers\PlayerProvider; use Demostf\API\Providers\PlayerProvider;
use Demostf\API\Providers\UserProvider; use Demostf\API\Providers\UserProvider;
use Doctrine\DBAL\Connection;
class DemoSaver { class DemoSaver {
/** @var KillProvider */ /** @var KillProvider */
@ -26,19 +27,30 @@ class DemoSaver {
private $userProvider; private $userProvider;
/** @var DemoProvider */ /** @var DemoProvider */
private $demoProvider; private $demoProvider;
private $connection;
public function __construct(KillProvider $killProvider, PlayerProvider $playerProvider, ChatProvider $chatProvider, UserProvider $userProvider, DemoProvider $demoProvider) { public function __construct(
KillProvider $killProvider,
PlayerProvider $playerProvider,
ChatProvider $chatProvider,
UserProvider $userProvider,
DemoProvider $demoProvider,
Connection $connection
) {
$this->killProvider = $killProvider; $this->killProvider = $killProvider;
$this->playerProvider = $playerProvider; $this->playerProvider = $playerProvider;
$this->chatProvider = $chatProvider; $this->chatProvider = $chatProvider;
$this->userProvider = $userProvider; $this->userProvider = $userProvider;
$this->demoProvider = $demoProvider; $this->demoProvider = $demoProvider;
$this->connection = $connection;
} }
public function saveDemo(ParsedDemo $demo, Header $header, StoredDemo $storedDemo, Upload $upload): int { public function saveDemo(ParsedDemo $demo, Header $header, StoredDemo $storedDemo, Upload $upload): int {
/** @var int[] $userMap [$demoUserId => $dbUserId] */ /** @var int[] $userMap [$demoUserId => $dbUserId] */
$userMap = [0 => 0]; $userMap = [0 => 0];
$this->connection->beginTransaction();
$demoId = $this->demoProvider->storeDemo(new Demo( $demoId = $this->demoProvider->storeDemo(new Demo(
0, 0,
$storedDemo->getUrl(), $storedDemo->getUrl(),
@ -89,6 +101,8 @@ class DemoSaver {
$this->chatProvider->storeChatMessage($demoId, $chat); $this->chatProvider->storeChatMessage($demoId, $chat);
} }
$this->connection->commit();
return $demoId; return $demoId;
} }
} }