fix: improve import error handling and add refill_history table migration (#42)

- Add CREATE TABLE IF NOT EXISTS for refill_history in ALTER migrations
- Improve frontend import error handling to show server errors properly
- Parse response as text first to handle non-JSON error responses
This commit is contained in:
Daniel Volz
2026-01-18 08:55:48 +01:00
committed by GitHub
parent cfdca04df9
commit a190667320
2 changed files with 40 additions and 7 deletions
+24
View File
@@ -88,6 +88,30 @@ export async function runAlterMigrations(client: Client): Promise<{ success: boo
}
}
// Create tables that might be missing (silently fail if already exists)
const createTableMigrations = [
// Added in v1.3.x - refill history tracking
`CREATE TABLE IF NOT EXISTS refill_history (
id INTEGER PRIMARY KEY AUTOINCREMENT,
medication_id INTEGER NOT NULL REFERENCES medications(id) ON DELETE CASCADE,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
packs_added INTEGER NOT NULL DEFAULT 0,
loose_pills_added INTEGER NOT NULL DEFAULT 0,
refill_date INTEGER NOT NULL DEFAULT (strftime('%s','now'))
)`,
];
for (const sql of createTableMigrations) {
try {
await client.execute(sql);
} catch (e: any) {
// Silently ignore "table already exists" errors
if (!e.message?.includes("already exists")) {
errors.push(e.message);
}
}
}
return { success: errors.length === 0, errors };
}
+16 -7
View File
@@ -1151,17 +1151,26 @@ function AppContent() {
body: JSON.stringify(pendingImportData),
});
if (!res.ok) {
const err = await res.json();
alert(t('exportImport.importError') + ": " + (err.error || "Unknown error"));
// Get the response text first to handle non-JSON responses
const text = await res.text();
let data;
try {
data = text ? JSON.parse(text) : {};
} catch {
console.error("Import response parse error:", text);
alert(t('exportImport.importError') + ": Server returned invalid response");
return;
}
if (!res.ok) {
alert(t('exportImport.importError') + ": " + (data.error || `HTTP ${res.status}`));
return;
}
const result = await res.json();
alert(t('exportImport.importSuccess') + "\n" + t('exportImport.importSuccessDetails', {
medications: result.imported.medications,
doses: result.imported.doseHistory,
shares: result.imported.shareLinks,
medications: data.imported?.medications || 0,
doses: data.imported?.doseHistory || 0,
shares: data.imported?.shareLinks || 0,
}));
// Reload all data