mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-10-09 07:25:44 +02:00
added support for PostgreSQL migration
This commit is contained in:
@@ -673,7 +673,10 @@ async def run_migrations(conn):
|
||||
await _safe_execute(conn, "ALTER TABLE print_archives ADD COLUMN is_favorite BOOLEAN DEFAULT 0")
|
||||
|
||||
# Migration: Add wallet_charge_skipped column to print_archives so deleted print charges stay deleted
|
||||
await _safe_execute(conn, "ALTER TABLE print_archives ADD COLUMN wallet_charge_skipped BOOLEAN DEFAULT 0")
|
||||
if is_sqlite():
|
||||
await _safe_execute(conn, "ALTER TABLE print_archives ADD COLUMN wallet_charge_skipped BOOLEAN DEFAULT 0")
|
||||
else:
|
||||
await _safe_execute(conn, "ALTER TABLE print_archives ADD COLUMN wallet_charge_skipped BOOLEAN DEFAULT FALSE")
|
||||
|
||||
# Migration: Add content_hash column to print_archives for duplicate detection
|
||||
await _safe_execute(conn, "ALTER TABLE print_archives ADD COLUMN content_hash VARCHAR(64)")
|
||||
@@ -957,6 +960,17 @@ async def run_migrations(conn):
|
||||
# Migration: Add manual_start column to print_queue for staged prints
|
||||
await _safe_execute(conn, "ALTER TABLE print_queue ADD COLUMN manual_start BOOLEAN DEFAULT 0")
|
||||
|
||||
# Migration: Add cost_center_id column to print_queue for billing metadata
|
||||
try:
|
||||
async with conn.begin_nested():
|
||||
await conn.execute(
|
||||
text(
|
||||
"ALTER TABLE print_queue ADD COLUMN cost_center_id INTEGER REFERENCES cost_centers(id) ON DELETE SET NULL"
|
||||
)
|
||||
)
|
||||
except (OperationalError, ProgrammingError):
|
||||
pass # Already applied
|
||||
|
||||
# Migration: Add wiki_url column to maintenance_types for documentation links
|
||||
await _safe_execute(conn, "ALTER TABLE maintenance_types ADD COLUMN wiki_url VARCHAR(500)")
|
||||
|
||||
@@ -1050,12 +1064,16 @@ async def run_migrations(conn):
|
||||
result = await conn.execute(text("SELECT sql FROM sqlite_master WHERE type='table' AND name='print_queue'"))
|
||||
row = result.fetchone()
|
||||
if row and "printer_id INTEGER NOT NULL" in (row[0] or ""):
|
||||
cols_result = await conn.execute(text("PRAGMA table_info(print_queue)"))
|
||||
col_names = {col[1] for col in cols_result.fetchall()}
|
||||
cost_center_select = "cost_center_id" if "cost_center_id" in col_names else "NULL"
|
||||
await conn.execute(
|
||||
text("""
|
||||
CREATE TABLE print_queue_new (
|
||||
id INTEGER PRIMARY KEY,
|
||||
printer_id INTEGER REFERENCES printers(id) ON DELETE CASCADE,
|
||||
archive_id INTEGER NOT NULL REFERENCES print_archives(id) ON DELETE CASCADE,
|
||||
cost_center_id INTEGER REFERENCES cost_centers(id) ON DELETE SET NULL,
|
||||
project_id INTEGER REFERENCES projects(id) ON DELETE SET NULL,
|
||||
position INTEGER DEFAULT 0,
|
||||
scheduled_time DATETIME,
|
||||
@@ -1072,13 +1090,15 @@ async def run_migrations(conn):
|
||||
""")
|
||||
)
|
||||
await conn.execute(
|
||||
text("""
|
||||
text(
|
||||
f"""
|
||||
INSERT INTO print_queue_new
|
||||
SELECT id, printer_id, archive_id, project_id, position, scheduled_time,
|
||||
SELECT id, printer_id, archive_id, {cost_center_select}, project_id, position, scheduled_time,
|
||||
manual_start, require_previous_success, auto_off_after, ams_mapping,
|
||||
status, started_at, completed_at, error_message, created_at
|
||||
FROM print_queue
|
||||
""")
|
||||
"""
|
||||
)
|
||||
)
|
||||
await conn.execute(text("DROP TABLE print_queue"))
|
||||
await conn.execute(text("ALTER TABLE print_queue_new RENAME TO print_queue"))
|
||||
@@ -1211,6 +1231,9 @@ async def run_migrations(conn):
|
||||
result = await conn.execute(text("SELECT sql FROM sqlite_master WHERE type='table' AND name='print_queue'"))
|
||||
row = result.fetchone()
|
||||
if row and "archive_id INTEGER NOT NULL" in (row[0] or ""):
|
||||
cols_result = await conn.execute(text("PRAGMA table_info(print_queue)"))
|
||||
col_names = {col[1] for col in cols_result.fetchall()}
|
||||
cost_center_select = "cost_center_id" if "cost_center_id" in col_names else "NULL"
|
||||
await conn.execute(
|
||||
text("""
|
||||
CREATE TABLE print_queue_new2 (
|
||||
@@ -1218,6 +1241,7 @@ async def run_migrations(conn):
|
||||
printer_id INTEGER REFERENCES printers(id) ON DELETE CASCADE,
|
||||
archive_id INTEGER REFERENCES print_archives(id) ON DELETE CASCADE,
|
||||
library_file_id INTEGER REFERENCES library_files(id) ON DELETE CASCADE,
|
||||
cost_center_id INTEGER REFERENCES cost_centers(id) ON DELETE SET NULL,
|
||||
project_id INTEGER REFERENCES projects(id) ON DELETE SET NULL,
|
||||
position INTEGER DEFAULT 0,
|
||||
scheduled_time DATETIME,
|
||||
@@ -1241,15 +1265,17 @@ async def run_migrations(conn):
|
||||
""")
|
||||
)
|
||||
await conn.execute(
|
||||
text("""
|
||||
text(
|
||||
f"""
|
||||
INSERT INTO print_queue_new2
|
||||
SELECT id, printer_id, archive_id, NULL, project_id, position, scheduled_time,
|
||||
SELECT id, printer_id, archive_id, NULL, {cost_center_select}, project_id, position, scheduled_time,
|
||||
manual_start, require_previous_success, auto_off_after, ams_mapping, plate_id,
|
||||
COALESCE(bed_levelling, 1), COALESCE(flow_cali, 0), COALESCE(vibration_cali, 1),
|
||||
COALESCE(layer_inspect, 0), COALESCE(timelapse, 0), COALESCE(use_ams, 1),
|
||||
status, started_at, completed_at, error_message, created_at
|
||||
FROM print_queue
|
||||
""")
|
||||
"""
|
||||
)
|
||||
)
|
||||
await conn.execute(text("DROP TABLE print_queue"))
|
||||
await conn.execute(text("ALTER TABLE print_queue_new2 RENAME TO print_queue"))
|
||||
|
||||
Reference in New Issue
Block a user