fix: clean up server dependencies before deletion

This commit is contained in:
KodekaTeam committed 2026-06-19 02:39:57 +07:00
1 parent a39fa83b31
commit ff72c75002
3 files changed
+53

No files matched your search

+6
View File
@@ -366,6 +366,9 @@ export async function organizationsRoutes(app: FastifyInstance) {
await tx.container.deleteMany({
where: { serverId: { in: serverIds } },
});
await tx.environment.deleteMany({
where: { serverId: { in: serverIds } },
});
await tx.network.deleteMany({
where: { serverId: { in: serverIds } },
});
@@ -378,6 +381,9 @@ export async function organizationsRoutes(app: FastifyInstance) {
await tx.backup.deleteMany({
where: { serverId: { in: serverIds } },
});
await tx.userStorageDestination.deleteMany({
where: { serverId: { in: serverIds } },
});
await tx.server.deleteMany({ where: { id: { in: serverIds } } });
}
+2
View File
@@ -385,10 +385,12 @@ export async function serverRoutes(app: FastifyInstance) {
await tx.userServerAccess.deleteMany({ where: { serverId: id } });
await tx.serverMetric.deleteMany({ where: { serverId: id } });
await tx.container.deleteMany({ where: { serverId: id } });
await tx.environment.deleteMany({ where: { serverId: id } });
await tx.network.deleteMany({ where: { serverId: id } });
await tx.firewallRulePreset.deleteMany({ where: { serverId: id } });
await tx.appInstall.deleteMany({ where: { serverId: id } });
await tx.backup.deleteMany({ where: { serverId: id } });
await tx.userStorageDestination.deleteMany({ where: { serverId: id } });
const invitations = await tx.userInvitation.findMany({
where: {
@@ -0,0 +1,45 @@
import assert from "node:assert/strict";
import { readFileSync } from "node:fs";
import test from "node:test";
function readSource(path: string) {
return readFileSync(path, "utf8");
}
function assertEnvironmentCleanupBeforeServerDelete(source: string) {
const environmentCleanup = source.indexOf("tx.environment.deleteMany");
const serverDelete = source.indexOf("tx.server.delete");
assert.notEqual(environmentCleanup, -1);
assert.notEqual(serverDelete, -1);
assert.ok(
environmentCleanup < serverDelete,
"server deletion must remove environments before deleting servers",
);
}
function assertStorageDestinationCleanupBeforeServerDelete(source: string) {
const storageCleanup = source.indexOf("tx.userStorageDestination.deleteMany");
const serverDelete = source.indexOf("tx.server.delete");
assert.notEqual(storageCleanup, -1);
assert.notEqual(serverDelete, -1);
assert.ok(
storageCleanup < serverDelete,
"server deletion must remove server-specific storage destinations before deleting servers",
);
}
test("server deletion removes dependent records before deleting the server", () => {
const source = readSource("src/server/routes/servers.ts");
assertEnvironmentCleanupBeforeServerDelete(source);
assertStorageDestinationCleanupBeforeServerDelete(source);
});
test("organization deletion removes dependent records before deleting servers", () => {
const source = readSource("src/server/routes/organizations.ts");
assertEnvironmentCleanupBeforeServerDelete(source);
assertStorageDestinationCleanupBeforeServerDelete(source);
});