feat: SQLite 数据库初始化及模板 CRUD
This commit is contained in:
parent
68f90f4e4c
commit
d92e39c936
41
electron/db/init.js
Normal file
41
electron/db/init.js
Normal file
@ -0,0 +1,41 @@
|
||||
const Database = require("better-sqlite3");
|
||||
const path = require("path");
|
||||
const { app } = require("electron");
|
||||
const fs = require("fs");
|
||||
|
||||
const DB_DIR = path.join(app.getPath("userData"), "excel-batch-editor");
|
||||
fs.mkdirSync(DB_DIR, { recursive: true });
|
||||
const DB_PATH = path.join(DB_DIR, "app.db");
|
||||
|
||||
const db = new Database(DB_PATH);
|
||||
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS templates (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
grp TEXT DEFAULT '',
|
||||
file_path TEXT NOT NULL,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS fields (
|
||||
id TEXT PRIMARY KEY,
|
||||
template_id TEXT NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
type TEXT NOT NULL,
|
||||
sheet TEXT NOT NULL,
|
||||
cell TEXT NOT NULL,
|
||||
FOREIGN KEY (template_id) REFERENCES templates(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS generation_records (
|
||||
id TEXT PRIMARY KEY,
|
||||
template_id TEXT NOT NULL,
|
||||
created_at TEXT NOT NULL,
|
||||
output_dir TEXT NOT NULL,
|
||||
row_count INTEGER NOT NULL
|
||||
);
|
||||
`);
|
||||
|
||||
module.exports = db;
|
||||
47
electron/db/templateDb.js
Normal file
47
electron/db/templateDb.js
Normal file
@ -0,0 +1,47 @@
|
||||
const db = require("./init");
|
||||
const { randomUUID } = require("crypto");
|
||||
|
||||
function listTemplates() {
|
||||
const templates = db.prepare("SELECT * FROM templates ORDER BY updated_at DESC").all();
|
||||
return templates.map((t) => ({
|
||||
...t,
|
||||
fields: db.prepare("SELECT * FROM fields WHERE template_id = ?").all(t.id),
|
||||
}));
|
||||
}
|
||||
|
||||
function saveTemplate({ name, grp = "", file_path, fields = [] }) {
|
||||
const id = randomUUID();
|
||||
const now = new Date().toISOString();
|
||||
db.prepare(
|
||||
"INSERT INTO templates (id, name, grp, file_path, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)"
|
||||
).run(id, name, grp, file_path, now, now);
|
||||
_saveFields(id, fields);
|
||||
return id;
|
||||
}
|
||||
|
||||
function updateTemplate(id, { name, grp, fields }) {
|
||||
const now = new Date().toISOString();
|
||||
if (name !== undefined || grp !== undefined) {
|
||||
db.prepare("UPDATE templates SET name = COALESCE(?, name), grp = COALESCE(?, grp), updated_at = ? WHERE id = ?")
|
||||
.run(name ?? null, grp ?? null, now, id);
|
||||
}
|
||||
if (fields !== undefined) {
|
||||
db.prepare("DELETE FROM fields WHERE template_id = ?").run(id);
|
||||
_saveFields(id, fields);
|
||||
}
|
||||
}
|
||||
|
||||
function deleteTemplate(id) {
|
||||
db.prepare("DELETE FROM templates WHERE id = ?").run(id);
|
||||
}
|
||||
|
||||
function _saveFields(templateId, fields) {
|
||||
const stmt = db.prepare(
|
||||
"INSERT INTO fields (id, template_id, name, type, sheet, cell) VALUES (?, ?, ?, ?, ?, ?)"
|
||||
);
|
||||
for (const f of fields) {
|
||||
stmt.run(randomUUID(), templateId, f.name, f.type, f.sheet, f.cell);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { listTemplates, saveTemplate, updateTemplate, deleteTemplate };
|
||||
Loading…
x
Reference in New Issue
Block a user