server: seed first company and inline startup log fields
This commit is contained in:
@@ -210,6 +210,28 @@ async function ensureLocalTrustedBoardPrincipal(db: any): Promise<void> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function ensureInitialCompanySeed(db: any): Promise<{ id: string; name: string; issuePrefix: string } | null> {
|
||||||
|
const existingCompany = await db
|
||||||
|
.select({ id: companies.id })
|
||||||
|
.from(companies)
|
||||||
|
.limit(1)
|
||||||
|
.then((rows: Array<{ id: string }>) => rows[0] ?? null);
|
||||||
|
if (existingCompany) return null;
|
||||||
|
|
||||||
|
return db
|
||||||
|
.insert(companies)
|
||||||
|
.values({
|
||||||
|
name: "Paperclip",
|
||||||
|
description: "Default company created on first startup",
|
||||||
|
})
|
||||||
|
.returning({
|
||||||
|
id: companies.id,
|
||||||
|
name: companies.name,
|
||||||
|
issuePrefix: companies.issuePrefix,
|
||||||
|
})
|
||||||
|
.then((rows: Array<{ id: string; name: string; issuePrefix: string }>) => rows[0] ?? null);
|
||||||
|
}
|
||||||
|
|
||||||
let db;
|
let db;
|
||||||
let embeddedPostgres: EmbeddedPostgresInstance | null = null;
|
let embeddedPostgres: EmbeddedPostgresInstance | null = null;
|
||||||
let embeddedPostgresStartedByThisProcess = false;
|
let embeddedPostgresStartedByThisProcess = false;
|
||||||
@@ -299,17 +321,14 @@ if (config.databaseUrl) {
|
|||||||
|
|
||||||
const runningPid = getRunningPid();
|
const runningPid = getRunningPid();
|
||||||
if (runningPid) {
|
if (runningPid) {
|
||||||
logger.warn({ pid: runningPid, port }, "Embedded PostgreSQL already running; reusing existing process");
|
logger.warn(`Embedded PostgreSQL already running; reusing existing process (pid=${runningPid}, port=${port})`);
|
||||||
} else {
|
} else {
|
||||||
const detectedPort = await detectPort(configuredPort);
|
const detectedPort = await detectPort(configuredPort);
|
||||||
if (detectedPort !== configuredPort) {
|
if (detectedPort !== configuredPort) {
|
||||||
logger.warn(
|
logger.warn(`Embedded PostgreSQL port is in use; using next free port (requestedPort=${configuredPort}, selectedPort=${detectedPort})`);
|
||||||
{ requestedPort: configuredPort, selectedPort: detectedPort },
|
|
||||||
"Embedded PostgreSQL port is in use; using next free port",
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
port = detectedPort;
|
port = detectedPort;
|
||||||
logger.info({ dataDir, port }, "Using embedded PostgreSQL because no DATABASE_URL set");
|
logger.info(`Using embedded PostgreSQL because no DATABASE_URL set (dataDir=${dataDir}, port=${port})`);
|
||||||
embeddedPostgres = new EmbeddedPostgres({
|
embeddedPostgres = new EmbeddedPostgres({
|
||||||
databaseDir: dataDir,
|
databaseDir: dataDir,
|
||||||
user: "paperclip",
|
user: "paperclip",
|
||||||
@@ -364,6 +383,11 @@ if (config.databaseUrl) {
|
|||||||
startupDbInfo = { mode: "embedded-postgres", dataDir, port };
|
startupDbInfo = { mode: "embedded-postgres", dataDir, port };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const seededCompany = await ensureInitialCompanySeed(db as any);
|
||||||
|
if (seededCompany) {
|
||||||
|
logger.info(`Seeded initial company: ${seededCompany.name} (${seededCompany.issuePrefix})`);
|
||||||
|
}
|
||||||
|
|
||||||
if (config.deploymentMode === "local_trusted" && !isLoopbackHost(config.host)) {
|
if (config.deploymentMode === "local_trusted" && !isLoopbackHost(config.host)) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`local_trusted mode requires loopback host binding (received: ${config.host}). ` +
|
`local_trusted mode requires loopback host binding (received: ${config.host}). ` +
|
||||||
@@ -434,7 +458,7 @@ const server = createServer(app);
|
|||||||
const listenPort = await detectPort(config.port);
|
const listenPort = await detectPort(config.port);
|
||||||
|
|
||||||
if (listenPort !== config.port) {
|
if (listenPort !== config.port) {
|
||||||
logger.warn({ requestedPort: config.port, selectedPort: listenPort }, "Requested port is busy; using next free port");
|
logger.warn(`Requested port is busy; using next free port (requestedPort=${config.port}, selectedPort=${listenPort})`);
|
||||||
}
|
}
|
||||||
|
|
||||||
setupLiveEventsWebSocketServer(server, db as any, {
|
setupLiveEventsWebSocketServer(server, db as any, {
|
||||||
|
|||||||
Reference in New Issue
Block a user