mirror of
https://github.com/YuzuZensai/Minikura.git
synced 2026-01-31 14:57:49 +00:00
✨ feat: adds server management API
This commit is contained in:
@@ -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,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user