Files
void-genesis/dev/sector-dev/sector-backend/src/services/account.service.js
T
2026-06-15 21:35:25 +02:00

79 lines
2.7 KiB
JavaScript

import pool from '../db.js';
import { getSectorSettings } from './config.service.js';
import { findNextAvailableStarterCoordinates } from './planet.service.js';
import { generateStarterPlanetStats } from '../utils/planet.util.js';
/**
* Erstellt einen neuen Sektor-Account samt Heimatplanet in einer sicheren Datenbank-Transaktion.
*
* @param {string} lobby_uuid - Die UUID des Nutzers aus der Lobby.
* @param {string} username - Der Anzeigename.
* @param {string} gender - Das Geschlecht des Commanders.
*
* @returns {Promise<{local_uuid: string, triggerSectorClose: boolean}>}
*/
export const createLocalAccount = async (lobby_uuid, username, gender) => {
const client = await pool.connect();
try {
await client.query('BEGIN');
const { galaxy, system, position, triggerSectorClose } = await findNextAvailableStarterCoordinates();
const planetStats = generateStarterPlanetStats(position);
const settings = getSectorSettings();
const initialPremium = settings.account_registration_bonus.initial_res_premium;
const accountInsertQuery = `
INSERT INTO local_accounts (lobby_uuid, username, gender, res_premium)
VALUES ($1, $2, $3, $4)
RETURNING local_uuid
`;
const accountResult = await client.query(accountInsertQuery, [
lobby_uuid,
username,
gender,
initialPremium
]);
const local_uuid = accountResult.rows[0].local_uuid;
const planetName = "Unbekannter Planet";
const planetInsertQuery = `
INSERT INTO planets (
local_uuid, planet_name, galaxy, system, position,
temp_min, temp_max, diameter, fields_built, fields_explored, fields_max,
pop_idle, pop_injured, res_food_base
) VALUES (
$1, $2, $3, $4, $5,
$6, $7, $8, 0, 10, $9,
$10, $11, $12
)
`;
await client.query(planetInsertQuery, [
local_uuid,
planetName,
galaxy,
system,
position,
planetStats.temp_min,
planetStats.temp_max,
planetStats.diameter,
planetStats.fields_max,
planetStats.pop_idle,
planetStats.pop_injured,
planetStats.res_food_base
]);
await client.query('COMMIT');
return { local_uuid, triggerSectorClose };
} catch (error) {
await client.query('ROLLBACK');
console.error('[AccountService] Fehler bei der Account-Erstellung. Transaktion abgebrochen:', error);
throw error;
} finally {
client.release();
}
};