diff --git a/app/Models/Server.php b/app/Models/Server.php index a849f637c..305e8a157 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -19,6 +19,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphToMany; use App\Exceptions\Http\Server\ServerStateConflictException; +use App\Services\Subusers\SubuserDeletionService; /** * \App\Models\Server. @@ -203,6 +204,17 @@ class Server extends Model ]; } + protected static function booted(): void + { + static::saved(function (self $server) { + $subuser = $server->subusers()->where('user_id', $server->owner_id)->first(); + if ($subuser) { + // @phpstan-ignore-next-line + app(SubuserDeletionService::class)->handle($subuser, $server); + } + }); + } + /** * Returns the format for server allocations when communicating with the Daemon. */ diff --git a/database/migrations/2024_12_02_013000_remove_illegal_subusers.php b/database/migrations/2024_12_02_013000_remove_illegal_subusers.php new file mode 100644 index 000000000..35e638119 --- /dev/null +++ b/database/migrations/2024_12_02_013000_remove_illegal_subusers.php @@ -0,0 +1,29 @@ +whereIn('user_id', function ($query) { + $query->select('id') + ->from('servers') + ->whereColumn('owner_id', 'subusers.server_id'); + }) + ->delete(); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // Not needed + } +};