feat: persist authored mechanic revisions
This commit is contained in:
+51
-10
@@ -2216,6 +2216,17 @@ if (legacyProtocolEffects) {
|
||||
await database.exec('DROP TABLE os_protocol_attribute_effects');
|
||||
}
|
||||
|
||||
const assertProposalContributorNoteColumn = async () => {
|
||||
const columns = await (
|
||||
await database.prepare("PRAGMA table_info('data_change_proposals')")
|
||||
).all();
|
||||
if (!columns.some((column) => column.name === 'contributor_note')) {
|
||||
throw new Error(
|
||||
'Schema migration lost the contributor_note column from data_change_proposals.',
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
const proposalDefinition = await (
|
||||
await database.prepare(
|
||||
"SELECT sql FROM sqlite_master WHERE type='table' AND name='data_change_proposals'",
|
||||
@@ -2235,6 +2246,7 @@ if (
|
||||
draft_entity_id TEXT,
|
||||
applied_entity_id TEXT,
|
||||
summary TEXT NOT NULL,
|
||||
contributor_note TEXT,
|
||||
payload_json TEXT NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending','approved','rejected','failed')),
|
||||
proposed_by TEXT NOT NULL REFERENCES users(id),
|
||||
@@ -2244,14 +2256,20 @@ if (
|
||||
reviewed_at TEXT,
|
||||
applied_at TEXT
|
||||
)`);
|
||||
await database.exec(`INSERT INTO data_change_proposals_expanded
|
||||
SELECT id,CASE module WHEN 'stats' THEN 'attributes' ELSE module END,action,entity_id,draft_entity_id,applied_entity_id,summary,payload_json,status,proposed_by,reviewed_by,review_note,created_at,reviewed_at,applied_at
|
||||
await database.exec(`INSERT INTO data_change_proposals_expanded(
|
||||
id,module,action,entity_id,draft_entity_id,applied_entity_id,summary,contributor_note,
|
||||
payload_json,status,proposed_by,reviewed_by,review_note,created_at,reviewed_at,applied_at
|
||||
)
|
||||
SELECT id,CASE module WHEN 'stats' THEN 'attributes' ELSE module END,action,entity_id,
|
||||
draft_entity_id,applied_entity_id,summary,contributor_note,payload_json,status,
|
||||
proposed_by,reviewed_by,review_note,created_at,reviewed_at,applied_at
|
||||
FROM data_change_proposals`);
|
||||
await database.exec('DROP TABLE data_change_proposals');
|
||||
await database.exec(
|
||||
'ALTER TABLE data_change_proposals_expanded RENAME TO data_change_proposals',
|
||||
);
|
||||
await database.exec('PRAGMA foreign_keys=ON');
|
||||
await assertProposalContributorNoteColumn();
|
||||
}
|
||||
await database.exec(
|
||||
'CREATE INDEX IF NOT EXISTS data_change_proposals_status_created_idx ON data_change_proposals(status,created_at DESC)',
|
||||
@@ -2282,6 +2300,7 @@ if (
|
||||
draft_entity_id TEXT,
|
||||
applied_entity_id TEXT,
|
||||
summary TEXT NOT NULL,
|
||||
contributor_note TEXT,
|
||||
payload_json TEXT NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending','approved','rejected','failed')),
|
||||
proposed_by TEXT NOT NULL REFERENCES users(id),
|
||||
@@ -2291,14 +2310,19 @@ if (
|
||||
reviewed_at TEXT,
|
||||
applied_at TEXT
|
||||
)`);
|
||||
await database.exec(`INSERT INTO data_change_proposals_weaponmods
|
||||
SELECT id,module,action,entity_id,draft_entity_id,applied_entity_id,summary,payload_json,status,proposed_by,reviewed_by,review_note,created_at,reviewed_at,applied_at
|
||||
await database.exec(`INSERT INTO data_change_proposals_weaponmods(
|
||||
id,module,action,entity_id,draft_entity_id,applied_entity_id,summary,contributor_note,
|
||||
payload_json,status,proposed_by,reviewed_by,review_note,created_at,reviewed_at,applied_at
|
||||
)
|
||||
SELECT id,module,action,entity_id,draft_entity_id,applied_entity_id,summary,contributor_note,
|
||||
payload_json,status,proposed_by,reviewed_by,review_note,created_at,reviewed_at,applied_at
|
||||
FROM data_change_proposals`);
|
||||
await database.exec('DROP TABLE data_change_proposals');
|
||||
await database.exec(
|
||||
'ALTER TABLE data_change_proposals_weaponmods RENAME TO data_change_proposals',
|
||||
);
|
||||
await database.exec('PRAGMA foreign_keys=ON');
|
||||
await assertProposalContributorNoteColumn();
|
||||
await database.exec(
|
||||
'CREATE INDEX IF NOT EXISTS data_change_proposals_status_created_idx ON data_change_proposals(status,created_at DESC)',
|
||||
);
|
||||
@@ -2329,6 +2353,7 @@ if (
|
||||
draft_entity_id TEXT,
|
||||
applied_entity_id TEXT,
|
||||
summary TEXT NOT NULL,
|
||||
contributor_note TEXT,
|
||||
payload_json TEXT NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending','approved','rejected','failed')),
|
||||
proposed_by TEXT NOT NULL REFERENCES users(id),
|
||||
@@ -2338,14 +2363,19 @@ if (
|
||||
reviewed_at TEXT,
|
||||
applied_at TEXT
|
||||
)`);
|
||||
await database.exec(`INSERT INTO data_change_proposals_specializations
|
||||
SELECT id,module,action,entity_id,draft_entity_id,applied_entity_id,summary,payload_json,status,proposed_by,reviewed_by,review_note,created_at,reviewed_at,applied_at
|
||||
await database.exec(`INSERT INTO data_change_proposals_specializations(
|
||||
id,module,action,entity_id,draft_entity_id,applied_entity_id,summary,contributor_note,
|
||||
payload_json,status,proposed_by,reviewed_by,review_note,created_at,reviewed_at,applied_at
|
||||
)
|
||||
SELECT id,module,action,entity_id,draft_entity_id,applied_entity_id,summary,contributor_note,
|
||||
payload_json,status,proposed_by,reviewed_by,review_note,created_at,reviewed_at,applied_at
|
||||
FROM data_change_proposals`);
|
||||
await database.exec('DROP TABLE data_change_proposals');
|
||||
await database.exec(
|
||||
'ALTER TABLE data_change_proposals_specializations RENAME TO data_change_proposals',
|
||||
);
|
||||
await database.exec('PRAGMA foreign_keys=ON');
|
||||
await assertProposalContributorNoteColumn();
|
||||
await database.exec(
|
||||
'CREATE INDEX IF NOT EXISTS data_change_proposals_status_created_idx ON data_change_proposals(status,created_at DESC)',
|
||||
);
|
||||
@@ -2376,6 +2406,7 @@ if (
|
||||
draft_entity_id TEXT,
|
||||
applied_entity_id TEXT,
|
||||
summary TEXT NOT NULL,
|
||||
contributor_note TEXT,
|
||||
payload_json TEXT NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending','approved','rejected','failed')),
|
||||
proposed_by TEXT NOT NULL REFERENCES users(id),
|
||||
@@ -2385,14 +2416,19 @@ if (
|
||||
reviewed_at TEXT,
|
||||
applied_at TEXT
|
||||
)`);
|
||||
await database.exec(`INSERT INTO data_change_proposals_calculations
|
||||
SELECT id,module,action,entity_id,draft_entity_id,applied_entity_id,summary,payload_json,status,proposed_by,reviewed_by,review_note,created_at,reviewed_at,applied_at
|
||||
await database.exec(`INSERT INTO data_change_proposals_calculations(
|
||||
id,module,action,entity_id,draft_entity_id,applied_entity_id,summary,contributor_note,
|
||||
payload_json,status,proposed_by,reviewed_by,review_note,created_at,reviewed_at,applied_at
|
||||
)
|
||||
SELECT id,module,action,entity_id,draft_entity_id,applied_entity_id,summary,contributor_note,
|
||||
payload_json,status,proposed_by,reviewed_by,review_note,created_at,reviewed_at,applied_at
|
||||
FROM data_change_proposals`);
|
||||
await database.exec('DROP TABLE data_change_proposals');
|
||||
await database.exec(
|
||||
'ALTER TABLE data_change_proposals_calculations RENAME TO data_change_proposals',
|
||||
);
|
||||
await database.exec('PRAGMA foreign_keys=ON');
|
||||
await assertProposalContributorNoteColumn();
|
||||
await database.exec(
|
||||
'CREATE INDEX IF NOT EXISTS data_change_proposals_status_created_idx ON data_change_proposals(status,created_at DESC)',
|
||||
);
|
||||
@@ -2427,6 +2463,7 @@ if (
|
||||
draft_entity_id TEXT,
|
||||
applied_entity_id TEXT,
|
||||
summary TEXT NOT NULL,
|
||||
contributor_note TEXT,
|
||||
payload_json TEXT NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending','approved','rejected','failed')),
|
||||
proposed_by TEXT NOT NULL REFERENCES users(id),
|
||||
@@ -2436,11 +2473,14 @@ if (
|
||||
reviewed_at TEXT,
|
||||
applied_at TEXT
|
||||
)`);
|
||||
await database.exec(`INSERT INTO data_change_proposals_source_owned
|
||||
await database.exec(`INSERT INTO data_change_proposals_source_owned(
|
||||
id,module,action,entity_id,draft_entity_id,applied_entity_id,summary,contributor_note,
|
||||
payload_json,status,proposed_by,reviewed_by,review_note,created_at,reviewed_at,applied_at
|
||||
)
|
||||
SELECT id,
|
||||
CASE WHEN module='triggers' THEN 'talents' ELSE module END,
|
||||
CASE WHEN module='triggers' THEN 'legacyTrigger.'||action ELSE action END,
|
||||
entity_id,draft_entity_id,applied_entity_id,summary,payload_json,
|
||||
entity_id,draft_entity_id,applied_entity_id,summary,contributor_note,payload_json,
|
||||
CASE WHEN module='triggers' AND status='pending' THEN 'failed' ELSE status END,
|
||||
proposed_by,reviewed_by,
|
||||
CASE
|
||||
@@ -2466,6 +2506,7 @@ if (
|
||||
} finally {
|
||||
await database.exec('PRAGMA foreign_keys=ON');
|
||||
}
|
||||
await assertProposalContributorNoteColumn();
|
||||
await database.exec(
|
||||
'CREATE INDEX IF NOT EXISTS data_change_proposals_status_created_idx ON data_change_proposals(status,created_at DESC)',
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user