Remove PostgreSQL and move to SQLite3

This commit is contained in:
2026-08-01 18:02:37 +02:00
parent 97ad77f2a4
commit 873627c757
12 changed files with 444 additions and 64 deletions
+54 -1
View File
@@ -30,6 +30,13 @@ export default function App() {
// Auth/Login UI state
const [me, setMe] = useState(null);
const [setupRequired, setSetupRequired] = useState(null);
const [setupEmail, setSetupEmail] = useState("");
const [setupDisplayName, setSetupDisplayName] = useState("");
const [setupPassword, setSetupPassword] = useState("");
const [setupPasswordConfirm, setSetupPasswordConfirm] = useState("");
const [setupError, setSetupError] = useState("");
const [setupSaving, setSetupSaving] = useState(false);
const [loginEmail, setLoginEmail] = useState("");
const [loginPassword, setLoginPassword] = useState("");
const [showPw, setShowPw] = useState(false);
@@ -182,8 +189,12 @@ export default function App() {
useEffect(() => {
(async () => {
try {
const status = await api("/setup/status");
setSetupRequired(!!status.setup_required);
await load();
} catch {}
} catch {
// The login/setup screen handles unauthenticated sessions.
}
})();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
@@ -278,6 +289,36 @@ export default function App() {
await load();
};
const doSetup = async () => {
setSetupError("");
if (setupPassword.length < 8) {
setSetupError("Password must be at least 8 characters long.");
return;
}
if (setupPassword !== setupPasswordConfirm) {
setSetupError("Passwords do not match.");
return;
}
setSetupSaving(true);
try {
await api("/setup/admin", {
method: "POST",
body: JSON.stringify({
email: setupEmail,
display_name: setupDisplayName,
password: setupPassword,
}),
});
setSetupRequired(false);
await load();
} catch (e) {
setSetupError(e?.message || "Setup failed.");
} finally {
setSetupSaving(false);
}
};
const doLogout = async () => {
await api("/auth/logout", { method: "POST" });
setMe(null);
@@ -540,6 +581,18 @@ export default function App() {
showPw={showPw}
setShowPw={setShowPw}
doLogin={doLogin}
setupRequired={setupRequired}
setupEmail={setupEmail}
setSetupEmail={setSetupEmail}
setupDisplayName={setupDisplayName}
setSetupDisplayName={setSetupDisplayName}
setupPassword={setupPassword}
setSetupPassword={setSetupPassword}
setupPasswordConfirm={setupPasswordConfirm}
setSetupPasswordConfirm={setSetupPasswordConfirm}
setupError={setupError}
setupSaving={setupSaving}
doSetup={doSetup}
/>
);
}