33namespace Pterodactyl \Services \Servers ;
44
55use Psr \Log \LoggerInterface ;
6- use InvalidArgumentException ;
6+ use Webmozart \ Assert \ Assert ;
77use Pterodactyl \Models \Server ;
8- use GuzzleHttp \Exception \RequestException ;
98use Illuminate \Database \ConnectionInterface ;
10- use Pterodactyl \Exceptions \DisplayException ;
119use Pterodactyl \Repositories \Wings \DaemonServerRepository ;
1210use Pterodactyl \Contracts \Repository \ServerRepositoryInterface ;
1311
@@ -19,7 +17,7 @@ class SuspensionService
1917 /**
2018 * @var \Illuminate\Database\ConnectionInterface
2119 */
22- private $ database ;
20+ private $ connection ;
2321
2422 /**
2523 * @var \Pterodactyl\Contracts\Repository\ServerRepositoryInterface
@@ -39,18 +37,18 @@ class SuspensionService
3937 /**
4038 * SuspensionService constructor.
4139 *
42- * @param \Illuminate\Database\ConnectionInterface $database
40+ * @param \Illuminate\Database\ConnectionInterface $connection
4341 * @param \Pterodactyl\Repositories\Wings\DaemonServerRepository $daemonServerRepository
4442 * @param \Pterodactyl\Contracts\Repository\ServerRepositoryInterface $repository
4543 * @param \Psr\Log\LoggerInterface $writer
4644 */
4745 public function __construct (
48- ConnectionInterface $ database ,
46+ ConnectionInterface $ connection ,
4947 DaemonServerRepository $ daemonServerRepository ,
5048 ServerRepositoryInterface $ repository ,
5149 LoggerInterface $ writer
5250 ) {
53- $ this ->database = $ database ;
51+ $ this ->connection = $ connection ;
5452 $ this ->repository = $ repository ;
5553 $ this ->writer = $ writer ;
5654 $ this ->daemonServerRepository = $ daemonServerRepository ;
@@ -61,49 +59,26 @@ public function __construct(
6159 *
6260 * @param int|\Pterodactyl\Models\Server $server
6361 * @param string $action
64- * @return bool
6562 *
66- * @throws \Pterodactyl\Exceptions\DisplayException
67- * @throws \Pterodactyl\Exceptions\Model\DataValidationException
68- * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
63+ * @throws \Throwable
6964 */
70- public function toggle ($ server , $ action = self ::ACTION_SUSPEND )
65+ public function toggle (Server $ server , $ action = self ::ACTION_SUSPEND )
7166 {
72- if (! $ server instanceof Server) {
73- $ server = $ this ->repository ->find ($ server );
74- }
75-
76- if (! in_array ($ action , [self ::ACTION_SUSPEND , self ::ACTION_UNSUSPEND ])) {
77- throw new InvalidArgumentException (sprintf (
78- 'Action must be either ' . self ::ACTION_SUSPEND . ' or ' . self ::ACTION_UNSUSPEND . ', %s passed. ' ,
79- $ action
80- ));
81- }
67+ Assert::oneOf ($ action , [self ::ACTION_SUSPEND , self ::ACTION_UNSUSPEND ]);
8268
8369 if (
8470 $ action === self ::ACTION_SUSPEND && $ server ->suspended ||
8571 $ action === self ::ACTION_UNSUSPEND && ! $ server ->suspended
8672 ) {
87- return true ;
73+ return ;
8874 }
8975
90- $ this ->database -> beginTransaction ();
91- $ this ->repository ->withoutFreshModel ()->update ($ server ->id , [
92- 'suspended ' => $ action === self ::ACTION_SUSPEND ,
93- ]);
76+ $ this ->connection -> transaction ( function () use ( $ action , $ server ) {
77+ $ this ->repository ->withoutFreshModel ()->update ($ server ->id , [
78+ 'suspended ' => $ action === self ::ACTION_SUSPEND ,
79+ ]);
9480
95- try {
96- $ this ->daemonServerRepository ->setServer ($ server )->$ action ();
97- $ this ->database ->commit ();
98-
99- return true ;
100- } catch (RequestException $ exception ) {
101- $ response = $ exception ->getResponse ();
102- $ this ->writer ->warning ($ exception );
103-
104- throw new DisplayException (trans ('admin/server.exceptions.daemon_exception ' , [
105- 'code ' => is_null ($ response ) ? 'E_CONN_REFUSED ' : $ response ->getStatusCode (),
106- ]));
107- }
81+ $ this ->daemonServerRepository ->setServer ($ server )->suspend ($ action === self ::ACTION_UNSUSPEND );
82+ });
10883 }
10984}
0 commit comments