feat(servers): use the server a tier below if it does not exist

If a server does not exist in a tier, use the tier below it.
For example, if a user is in the test access level, but a server for that game only exists on prod, use that server.
Same for the dev access level, but it goes dev --> test --> prod
This commit is contained in:
Andrea Toska 2025-01-31 09:29:12 +01:00
parent 6802d39bed
commit ed780efb1e

View File

@ -22,6 +22,12 @@ const discordConnectionSchema = joi.object({
id: joi.string()
});
const accessModeOrder: Record<string, string[]> = {
prod: ['prod'],
test: ['test', 'prod'],
dev: ['dev', 'test', 'prod']
};
let _connection: mongoose.Connection;
export async function connect(): Promise<void> {
@ -206,24 +212,48 @@ export async function getPNIDProfileJSONByPID(pid: number): Promise<PNIDProfile
}
export async function getServerByGameServerID(gameServerID: string, accessMode: string): Promise<HydratedServerDocument | null> {
return await Server.findOne({
game_server_id: gameServerID,
access_mode: accessMode
});
const searchModes = accessModeOrder[accessMode] || ['prod'];
for (const mode of searchModes) {
const server = await Server.findOne({
game_server_id: gameServerID,
access_mode: mode
});
if (server) return server;
}
return null;
}
export async function getServerByTitleID(titleID: string, accessMode: string): Promise<HydratedServerDocument | null> {
return await Server.findOne({
title_ids: titleID,
access_mode: accessMode
});
const searchModes = accessModeOrder[accessMode] || ['prod'];
for (const mode of searchModes) {
const server = await Server.findOne({
title_ids: titleID,
access_mode: mode
});
if (server) return server;
}
return null;
}
export async function getServerByClientID(clientID: string, accessMode: string): Promise<HydratedServerDocument | null> {
return await Server.findOne({
client_id: clientID,
access_mode: accessMode
});
const searchModes = accessModeOrder[accessMode] || ['prod'];
for (const mode of searchModes) {
const server = await Server.findOne({
client_id: clientID,
access_mode: mode
});
if (server) return server;
}
return null;
}