Introduces a custom migration system for SQLite, allowing incremental and safe schema evolution. Adds a new 'Projects' section to the CV, including database tables, public UI, and full management in the admin dashboard with live editing, drag-and-drop reordering, and collapsible forms. Updates: - and for schema management. - with script. - to use migrations. - to rely on migrations. - and for new project data operations. - and for Projects UI. - and to integrate the Projects section. Also updates: - to automatically import Keycloak realm on startup. - for the Elysia app build. - with refined print styles (omitting socials and about).
51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
import { Database } from "bun:sqlite";
|
|
|
|
export function up(db: Database) {
|
|
// Experience
|
|
db.run(`
|
|
CREATE TABLE IF NOT EXISTS experience (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
start_date TEXT NOT NULL,
|
|
end_date TEXT,
|
|
company_url TEXT
|
|
);
|
|
`);
|
|
|
|
db.run(`
|
|
CREATE TABLE IF NOT EXISTS experience_translations (
|
|
experience_id INTEGER NOT NULL,
|
|
language_code TEXT NOT NULL,
|
|
company_name TEXT NOT NULL,
|
|
role TEXT NOT NULL,
|
|
description TEXT,
|
|
location TEXT,
|
|
PRIMARY KEY (experience_id, language_code),
|
|
FOREIGN KEY (experience_id) REFERENCES experience(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (language_code) REFERENCES languages(code)
|
|
);
|
|
`);
|
|
|
|
// Education
|
|
db.run(`
|
|
CREATE TABLE IF NOT EXISTS education (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
start_date TEXT NOT NULL,
|
|
end_date TEXT,
|
|
institution_url TEXT
|
|
);
|
|
`);
|
|
|
|
db.run(`
|
|
CREATE TABLE IF NOT EXISTS education_translations (
|
|
education_id INTEGER NOT NULL,
|
|
language_code TEXT NOT NULL,
|
|
institution TEXT NOT NULL,
|
|
degree TEXT NOT NULL,
|
|
description TEXT,
|
|
PRIMARY KEY (education_id, language_code),
|
|
FOREIGN KEY (education_id) REFERENCES education(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (language_code) REFERENCES languages(code)
|
|
);
|
|
`);
|
|
}
|