safeLoad(); } $pdo = ConnectionFactory::create(); $pdo->beginTransaction(); try { $stmt = $pdo->prepare("INSERT INTO roles (key, name) VALUES (:key, :name) ON CONFLICT (key) DO NOTHING"); $stmt->execute(['key' => 'player', 'name' => 'Spieler']); $stmt->execute(['key' => 'admin', 'name' => 'Admin']); $permStmt = $pdo->prepare( 'INSERT INTO permissions (key, module, description) VALUES (:key, :module, :description) ON CONFLICT (key) DO NOTHING' ); foreach (Permissions::definitions() as $perm) { $permStmt->execute($perm); } $pdo->exec("INSERT INTO role_permissions (role_id, permission_id) SELECT r.id, p.id FROM roles r JOIN permissions p ON p.key = 'planet.public.view' WHERE r.key = 'player' ON CONFLICT DO NOTHING"); $pdo->exec("INSERT INTO role_permissions (role_id, permission_id) SELECT r.id, p.id FROM roles r JOIN permissions p ON p.key = 'planet.admin.generate' WHERE r.key = 'admin' ON CONFLICT DO NOTHING"); $stmt = $pdo->prepare("INSERT INTO users (username, race_key) VALUES (:username, :race_key) ON CONFLICT (username) DO NOTHING"); $stmt->execute(['username' => 'dev', 'race_key' => 'human']); $userId = (int)$pdo->query("SELECT id FROM users WHERE username = 'dev'")->fetchColumn(); $pdo->exec("INSERT INTO user_roles (user_id, role_id) SELECT {$userId}, r.id FROM roles r WHERE r.key = 'player' ON CONFLICT DO NOTHING"); $planetExists = $pdo->prepare('SELECT id FROM planets WHERE user_id = :user_id LIMIT 1'); $planetExists->execute(['user_id' => $userId]); $planetId = $planetExists->fetchColumn(); if (!$planetId) { $configLoader = new ConfigLoader(new ConfigValidator(), $repoRoot . '/config'); $generator = new PlanetGenerator($configLoader); $generated = $generator->generate('temperate', 'normal', 42); $resources = []; foreach ($configLoader->planetClasses()['resources'] as $res) { $resources[$res] = 500.0; } $stmt = $pdo->prepare( 'INSERT INTO planets (user_id, name, class_key, planet_seed, temperature_c, modifiers, resources, last_resource_update_at) VALUES (:user_id, :name, :class_key, :planet_seed, :temperature_c, :modifiers, :resources, :last_update) RETURNING id' ); $stmt->execute([ 'user_id' => $userId, 'name' => 'Earth Prime', 'class_key' => $generated['class_key'], 'planet_seed' => 42, 'temperature_c' => (int)$generated['temperature_c'], 'modifiers' => json_encode($generated['modifiers'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), 'resources' => json_encode($resources, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), 'last_update' => (new DateTimeImmutable('now'))->format('Y-m-d H:i:s'), ]); $planetId = (int)$stmt->fetchColumn(); $stmt = $pdo->prepare( 'INSERT INTO planet_buildings (planet_id, building_key, count, level) VALUES (:planet_id, :building_key, :count, 0) ON CONFLICT (planet_id, building_key) DO NOTHING' ); $stmt->execute([ 'planet_id' => $planetId, 'building_key' => 'build_center', 'count' => 1, ]); } $pdo->commit(); echo "Seed abgeschlossen.\n"; } catch (Throwable $e) { $pdo->rollBack(); throw $e; }