minecluster/lib/database/queries/server-queries.js

107 lines
2.5 KiB
JavaScript
Raw Normal View History

import pg from "../postgres.js";
import { deleteQuery, insertQuery, selectWhereQuery } from "../pg-query.js";
import ExpressClientError from "../../util/ExpressClientError.js";
const table = "servers";
const asExpressClientError = (e) => {
throw new ExpressClientError({ m: e.message, c: 409 });
};
2023-12-22 20:06:01 -07:00
const getMclName = (host, id) => `${host.replaceAll(".", "-")}-${id}`;
export async function createServerEntry(serverSpec) {
2024-01-11 11:21:12 -07:00
const {
name,
host,
version,
serverType: server_type,
memory,
backupHost: backup_host,
backupBucket: backup_bucket_path,
backupId: backup_id,
backupKey: backup_key,
2024-01-13 11:58:12 -07:00
backupInterval: backup_interval,
2024-01-11 11:21:12 -07:00
} = serverSpec;
var q = insertQuery(table, {
name,
host,
version,
server_type,
memory,
backup_host,
backup_bucket_path,
backup_id,
backup_key,
2024-01-13 11:58:12 -07:00
backup_interval,
2024-01-11 11:21:12 -07:00
});
q += "\n RETURNING *";
try {
const entries = await pg.query(q);
const {
id,
name,
host,
version,
server_type: serverType,
memory,
} = entries[0];
2023-12-22 20:06:01 -07:00
const mclName = getMclName(host, id);
return { name, mclName, id, host, version, serverType, memory };
} catch (e) {
asExpressClientError(e);
}
}
export async function deleteServerEntry(serverId) {
if (!serverId) asExpressClientError({ message: "Server ID Required!" });
const q = deleteQuery(table, { id: serverId });
return pg.query(q).catch(asExpressClientError);
}
export async function getServerEntry(serverId) {
if (!serverId) asExpressClientError({ message: "Server ID Required!" });
const q = selectWhereQuery(table, { id: serverId });
try {
const serverSpecs = await pg.query(q);
if (serverSpecs.length === 0) return [];
if (!serverSpecs.length === 1)
throw Error("Multiple servers found with the same name!");
const {
id,
name,
host,
version,
server_type: serverType,
memory,
2024-01-13 11:58:12 -07:00
backup_host: backupHost,
backup_bucket_path: backupPath,
backup_id: backupId,
backup_key: backupKey,
backup_interval: backupInterval,
} = serverSpecs[0];
2023-12-22 20:06:01 -07:00
const mclName = getMclName(host, id);
2024-01-13 11:58:12 -07:00
return {
name,
mclName,
id,
host,
version,
serverType,
memory,
backupHost,
backupPath,
backupId,
backupKey,
backupInterval
};
} catch (e) {
asExpressClientError(e);
}
}
2023-12-22 20:06:01 -07:00
export async function getServerEntries() {
const q = `SELECT * FROM ${table}`;
return pg.query(q);
}