v1.2.0: planes.owner_id + ownership checks + per-player onboarding (ISS-108, ISS-109)
CI / build + unit + e2e (pull_request) Successful in 13m46s
CI / build + unit + e2e (pull_request) Successful in 13m46s
This commit is contained in:
+11
-1
@@ -23,6 +23,9 @@ export interface GameDb {
|
||||
const DDL = `
|
||||
CREATE TABLE IF NOT EXISTS planes (
|
||||
id TEXT PRIMARY KEY NOT NULL,
|
||||
-- v1.2.0 (ISS-109): owner's players.id — ownership checks in lib/game/actions.ts; legacy rows
|
||||
-- backfill to 'local' via the guarded ALTER below (migrateColumns).
|
||||
owner_id TEXT NOT NULL,
|
||||
model TEXT NOT NULL,
|
||||
status TEXT NOT NULL,
|
||||
fuel REAL NOT NULL,
|
||||
@@ -159,6 +162,12 @@ function migrateColumns(raw: RawSqlJsDatabase): void {
|
||||
raw.exec('ALTER TABLE sim_state ADD COLUMN last_selected_time_scale REAL NOT NULL DEFAULT 1');
|
||||
raw.exec('UPDATE sim_state SET last_selected_time_scale = time_scale');
|
||||
}
|
||||
// v1.2.0 (ISS-109): plane ownership — pre-v1.2.0 rows backfill to the seeded local player, so a
|
||||
// migrated world's planes all belong to 'local' exactly as before (the column is NOT NULL with a
|
||||
// constant default, which SQLite applies to every existing row at ALTER time).
|
||||
if (!cols('planes').has('owner_id')) {
|
||||
raw.exec(`ALTER TABLE planes ADD COLUMN owner_id TEXT NOT NULL DEFAULT 'local'`);
|
||||
}
|
||||
}
|
||||
|
||||
// v0.12.0 one-time migration: contracts world → packages world. Detected by the
|
||||
@@ -267,7 +276,8 @@ async function seedEmpty(instance: GameDb): Promise<void> {
|
||||
|
||||
// SeedPlane.queue is a string[]; the column stores it as JSON text.
|
||||
const { queue, ...planeCols } = data.plane;
|
||||
await instance.db.insert(schema.planes).values({ ...planeCols, queue: JSON.stringify(queue ?? []) });
|
||||
// v1.2.0 (ISS-109): the fresh-install starter plane belongs to the seeded local player.
|
||||
await instance.db.insert(schema.planes).values({ ...planeCols, ownerId: LOCAL_PLAYER.id, queue: JSON.stringify(queue ?? []) });
|
||||
await instance.db.insert(schema.packages).values(data.packages);
|
||||
// v1.0.0 (ISS-105): the singleton economy now lives in a seeded local player row.
|
||||
await instance.db.insert(schema.players).values({ ...LOCAL_PLAYER, cash: data.account.cash, reputation: data.account.reputation });
|
||||
|
||||
Reference in New Issue
Block a user