feat: adds server management API

This commit is contained in:
2025-05-12 12:37:35 +07:00
parent 952928ffcb
commit 13068b6066
6 changed files with 753 additions and 410 deletions

View File

@@ -4,73 +4,126 @@ import crypto from "node:crypto";
export namespace ServerService {
export async function getAllServers(omitSensitive = false) {
return await prisma.server.findMany({
omit: {
api_key: omitSensitive,
},
});
if (omitSensitive) {
return await prisma.server.findMany({
select: {
id: true,
type: true,
description: true,
listen_port: true,
memory: true,
created_at: true,
updated_at: true,
env_variables: true,
},
});
} else {
return await prisma.server.findMany({
include: {
env_variables: true,
},
});
}
}
export async function getAllReverseProxyServers(omitSensitive = false) {
return await prisma.reverseProxyServer.findMany({
omit: {
api_key: omitSensitive,
},
});
if (omitSensitive) {
return await prisma.reverseProxyServer.findMany({
select: {
id: true,
type: true,
description: true,
external_address: true,
external_port: true,
listen_port: true,
memory: true,
created_at: true,
updated_at: true,
env_variables: true,
},
});
} else {
return await prisma.reverseProxyServer.findMany({
include: {
env_variables: true,
},
});
}
}
export async function getServerById(id: string, omitSensitive = false) {
return await prisma.server.findUnique({
where: { id },
omit: {
api_key: omitSensitive,
},
});
if (omitSensitive) {
return await prisma.server.findUnique({
where: { id },
select: {
id: true,
type: true,
description: true,
listen_port: true,
memory: true,
created_at: true,
updated_at: true,
env_variables: true,
},
});
} else {
return await prisma.server.findUnique({
where: { id },
include: {
env_variables: true,
},
});
}
}
export async function getReverseProxyServerById(
id: string,
omitSensitive = false
) {
return await prisma.reverseProxyServer.findUnique({
where: { id },
omit: {
api_key: omitSensitive,
},
});
}
export async function getServerByName(name: string, omitSensitive = false) {
return await prisma.server.findUnique({
where: { name },
omit: {
api_key: omitSensitive,
},
});
}
export async function getReverseProxyServerByName(
name: string,
omitSensitive = false
) {
return await prisma.reverseProxyServer.findUnique({
where: { name },
omit: {
api_key: omitSensitive,
},
});
if (omitSensitive) {
return await prisma.reverseProxyServer.findUnique({
where: { id },
select: {
id: true,
type: true,
description: true,
external_address: true,
external_port: true,
listen_port: true,
memory: true,
created_at: true,
updated_at: true,
env_variables: true,
},
});
} else {
return await prisma.reverseProxyServer.findUnique({
where: { id },
include: {
env_variables: true,
},
});
}
}
export async function createReverseProxyServer({
name,
id,
description,
address,
port,
external_address,
external_port,
listen_port,
type,
env_variables,
memory,
}: {
name: string;
id: string;
description: string | null;
address: string;
port: number;
external_address: string;
external_port: number;
listen_port?: number;
type?: "VELOCITY" | "BUNGEECORD";
env_variables?: { key: string; value: string }[];
memory?: string;
}) {
let token = crypto.randomBytes(64).toString("hex");
token = token
@@ -81,29 +134,41 @@ export namespace ServerService {
return await prisma.reverseProxyServer.create({
data: {
name,
id,
description,
address,
port,
external_address,
external_port,
listen_port: listen_port || 25565,
type: type || "VELOCITY",
api_key: token,
memory: memory || "512M",
env_variables: env_variables ? {
create: env_variables.map(ev => ({
key: ev.key,
value: ev.value
}))
} : undefined,
},
include: {
env_variables: true,
}
});
}
export async function createServer({
name,
id,
description,
address,
port,
type,
join_priority,
listen_port,
env_variables,
memory,
}: {
name: string;
id: string;
description: string | null;
address: string;
port: number;
type: ServerType;
join_priority: number | null;
listen_port: number;
env_variables?: { key: string; value: string }[];
memory?: string;
}) {
let token = crypto.randomBytes(64).toString("hex");
token = token
@@ -114,13 +179,97 @@ export namespace ServerService {
return await prisma.server.create({
data: {
name,
id,
description,
address,
port,
type,
listen_port,
api_key: token,
join_priority,
memory: memory || "1G",
env_variables: env_variables ? {
create: env_variables.map(ev => ({
key: ev.key,
value: ev.value
}))
} : undefined,
},
include: {
env_variables: true,
}
});
}
export async function setServerEnvironmentVariable(
serverId: string,
key: string,
value: string
) {
// Upsert pattern - create if doesn't exist, update if it does
return await prisma.customEnvironmentVariable.upsert({
where: {
key_server_id: {
key,
server_id: serverId,
},
},
update: {
value,
},
create: {
key,
value,
server_id: serverId,
},
});
}
export async function setReverseProxyEnvironmentVariable(
proxyId: string,
key: string,
value: string
) {
// Upsert pattern - create if doesn't exist, update if it does
return await prisma.customEnvironmentVariable.upsert({
where: {
key_reverse_proxy_id: {
key,
reverse_proxy_id: proxyId,
},
},
update: {
value,
},
create: {
key,
value,
reverse_proxy_id: proxyId,
},
});
}
export async function deleteServerEnvironmentVariable(
serverId: string,
key: string
) {
return await prisma.customEnvironmentVariable.delete({
where: {
key_server_id: {
key,
server_id: serverId,
},
},
});
}
export async function deleteReverseProxyEnvironmentVariable(
proxyId: string,
key: string
) {
return await prisma.customEnvironmentVariable.delete({
where: {
key_reverse_proxy_id: {
key,
reverse_proxy_id: proxyId,
},
},
});
}