db: add incoming_leg_transport_mode to day_assignments

This commit is contained in:
Ida Rogalska
2026-08-11 18:45:56 +02:00
committed by Maurice
parent ac42cc941b
commit a17bfdb1a1
2 changed files with 41 additions and 0 deletions
+11
View File
@@ -3772,6 +3772,17 @@ function runMigrations(db: Database.Database): void {
if (!err.message?.includes('duplicate column name')) throw err;
}
},
// Per-segment travel mode for boundary legs: a leg whose ORIGIN is not a place
// (booking arrival, morning hotel) stores its mode on the DESTINATION stop.
// NULL = inherit the day default. INERT whenever the previous timeline element
// is itself a place (that place's outgoing leg_transport_mode wins).
() => {
try {
db.exec('ALTER TABLE day_assignments ADD COLUMN incoming_leg_transport_mode TEXT');
} catch (err: any) {
if (!err.message?.includes('duplicate column name')) throw err;
}
},
// School holidays are a visual Vacay calendar layer. Keep them separate from
// public holidays so applyHolidayCalendars never removes vacation entries for
// school-break dates. Appended LAST: this branch was cut before #1435/#1281
@@ -0,0 +1,30 @@
/**
* Migration test for incoming_leg_transport_mode on day_assignments.
*/
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
const Database = require('better-sqlite3');
import { createTables } from '../../src/db/schema';
import { runMigrations } from '../../src/db/migrations';
let testDb: any;
beforeAll(() => {
testDb = new Database(':memory:');
testDb.exec('PRAGMA journal_mode = WAL');
testDb.exec('PRAGMA foreign_keys = ON');
createTables(testDb);
runMigrations(testDb);
});
afterAll(() => {
testDb.close();
});
describe('incoming_leg_transport_mode migration', () => {
it('adds a nullable incoming_leg_transport_mode column to day_assignments', () => {
const cols = testDb.prepare(`PRAGMA table_info(day_assignments)`).all() as { name: string }[];
expect(cols.map(c => c.name)).toContain('incoming_leg_transport_mode');
});
});