66use Carbon \CarbonImmutable ;
77use Pterodactyl \Models \Backup ;
88use Pterodactyl \Models \Server ;
9+ use Illuminate \Database \ConnectionInterface ;
910use Pterodactyl \Repositories \Eloquent \BackupRepository ;
11+ use Pterodactyl \Repositories \Wings \DaemonBackupRepository ;
1012
1113class InitiateBackupService
1214{
@@ -20,14 +22,31 @@ class InitiateBackupService
2022 */
2123 private $ repository ;
2224
25+ /**
26+ * @var \Illuminate\Database\ConnectionInterface
27+ */
28+ private $ connection ;
29+
30+ /**
31+ * @var \Pterodactyl\Repositories\Wings\DaemonBackupRepository
32+ */
33+ private $ daemonBackupRepository ;
34+
2335 /**
2436 * InitiateBackupService constructor.
2537 *
2638 * @param \Pterodactyl\Repositories\Eloquent\BackupRepository $repository
39+ * @param \Illuminate\Database\ConnectionInterface $connection
40+ * @param \Pterodactyl\Repositories\Wings\DaemonBackupRepository $daemonBackupRepository
2741 */
28- public function __construct (BackupRepository $ repository )
29- {
42+ public function __construct (
43+ BackupRepository $ repository ,
44+ ConnectionInterface $ connection ,
45+ DaemonBackupRepository $ daemonBackupRepository
46+ ) {
3047 $ this ->repository = $ repository ;
48+ $ this ->connection = $ connection ;
49+ $ this ->daemonBackupRepository = $ daemonBackupRepository ;
3150 }
3251
3352 /**
@@ -50,19 +69,23 @@ public function setIgnoredFiles(?string $ignored)
5069 * @param string|null $name
5170 * @return \Pterodactyl\Models\Backup
5271 *
53- * @throws \Exception
72+ * @throws \Throwable
5473 */
5574 public function handle (Server $ server , string $ name = null ): Backup
5675 {
57- /** @var \Pterodactyl\Models\Backup $backup */
58- $ backup = $ this ->repository ->create ([
59- 'server_id ' => $ server ->id ,
60- 'uuid ' => Uuid::uuid4 ()->toString (),
61- 'name ' => trim ($ name ) ?: sprintf ('Backup at %s ' , CarbonImmutable::now ()->toDateTimeString ()),
62- 'ignored_files ' => $ this ->ignoredFiles ?? '' ,
63- 'disk ' => 'local ' ,
64- ], true , true );
76+ return $ this ->connection ->transaction (function () use ($ server , $ name ) {
77+ /** @var \Pterodactyl\Models\Backup $backup */
78+ $ backup = $ this ->repository ->create ([
79+ 'server_id ' => $ server ->id ,
80+ 'uuid ' => Uuid::uuid4 ()->toString (),
81+ 'name ' => trim ($ name ) ?: sprintf ('Backup at %s ' , CarbonImmutable::now ()->toDateTimeString ()),
82+ 'ignored_files ' => $ this ->ignoredFiles ?? '' ,
83+ 'disk ' => 'local ' ,
84+ ], true , true );
85+
86+ $ this ->daemonBackupRepository ->setServer ($ server )->backup ($ backup );
6587
66- return $ backup ;
88+ return $ backup ;
89+ });
6790 }
6891}
0 commit comments