add support for mounting existing dbs by id
This commit is contained in:
parent
7aac7aabdd
commit
365b297397
3 changed files with 65 additions and 19 deletions
22
index.js
22
index.js
|
|
@ -23,7 +23,7 @@ app.use(bodyParser.urlencoded({ extended: true }));
|
||||||
app.use(express.static("public"));
|
app.use(express.static("public"));
|
||||||
app.use(fileUpload());
|
app.use(fileUpload());
|
||||||
|
|
||||||
const db = betterSqlite3("./prime.db");
|
const db = betterSqlite3("./dbs/0.sqlite");
|
||||||
|
|
||||||
db.pragma("journal_mode = WAL");
|
db.pragma("journal_mode = WAL");
|
||||||
|
|
||||||
|
|
@ -297,11 +297,7 @@ function createDb(db, structId, name) {
|
||||||
`);
|
`);
|
||||||
insertStructureDbStmt.run(dbId, structId, name);
|
insertStructureDbStmt.run(dbId, structId, name);
|
||||||
|
|
||||||
const dbDir = path.join("dbs", dbId.toString());
|
const newDbPath = path.join("dbs", `${dbId}.sqlite`);
|
||||||
if (!fs.existsSync(dbDir)) {
|
|
||||||
fs.mkdirSync(dbDir, { recursive: true });
|
|
||||||
}
|
|
||||||
const newDbPath = path.join(dbDir, `${name}.sqlite`);
|
|
||||||
const newDb = betterSqlite3(newDbPath);
|
const newDb = betterSqlite3(newDbPath);
|
||||||
newDb.close();
|
newDb.close();
|
||||||
|
|
||||||
|
|
@ -311,6 +307,14 @@ function createDb(db, structId, name) {
|
||||||
return transaction();
|
return transaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function attachDb(db, structId, dbId, alias) {
|
||||||
|
const insertStructureDbStmt = db.prepare(`
|
||||||
|
INSERT INTO structure_dbs (db_id, structure_id, alias)
|
||||||
|
VALUES (?, ?, ?)
|
||||||
|
`);
|
||||||
|
insertStructureDbStmt.run(dbId, structId, alias);
|
||||||
|
}
|
||||||
|
|
||||||
function getFilesForStruct(db, structureId) {
|
function getFilesForStruct(db, structureId) {
|
||||||
let test = db
|
let test = db
|
||||||
.prepare("SELECT * FROM files WHERE structure_id = ? ORDER BY id DESC")
|
.prepare("SELECT * FROM files WHERE structure_id = ? ORDER BY id DESC")
|
||||||
|
|
@ -446,6 +450,12 @@ app.post("/workshop/:structure_id/db", (req, res) => {
|
||||||
return smartRedirect(req, res, redirectUrl);
|
return smartRedirect(req, res, redirectUrl);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.post("/workshop/:structure_id/db/attach", (req, res) => {
|
||||||
|
attachDb(db, req.params.structure_id, req.body.db_id, req.body.alias);
|
||||||
|
const redirectUrl = `/workshop/${req.params.structure_id}/db/${req.body.db_id}`;
|
||||||
|
return smartRedirect(req, res, redirectUrl);
|
||||||
|
});
|
||||||
|
|
||||||
app.get("/workshop/:structure_id/db/:db_id", (req, res) => {
|
app.get("/workshop/:structure_id/db/:db_id", (req, res) => {
|
||||||
const structdb = getDbForStructure(
|
const structdb = getDbForStructure(
|
||||||
db,
|
db,
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ CREATE TABLE structures (
|
||||||
CREATE TABLE dbs (
|
CREATE TABLE dbs (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
name TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
structure_id INTEGER,
|
structure_id INTEGER NOT NULL,
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
library TEXT NOT NULL DEFAULT "",
|
library TEXT NOT NULL DEFAULT "",
|
||||||
|
|
@ -75,6 +75,16 @@ CREATE TABLE files (
|
||||||
UNIQUE(path, structure_id)
|
UNIQUE(path, structure_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
INSERT INTO
|
||||||
|
structures (id, name, user_id)
|
||||||
|
VALUES
|
||||||
|
(0, 'prime', NULL);
|
||||||
|
|
||||||
|
INSERT INTO
|
||||||
|
dbs (id, name, structure_id, library)
|
||||||
|
VALUES
|
||||||
|
(0, 'prime', 0, '');
|
||||||
|
|
||||||
-- ===========================
|
-- ===========================
|
||||||
-- TRIGGERS
|
-- TRIGGERS
|
||||||
-- ===========================
|
-- ===========================
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,12 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="window-body">
|
<div class="window-body">
|
||||||
|
<section class="tabs" style="max-width: 500px">
|
||||||
|
<menu role="tablist" aria-label="Sample Tabs">
|
||||||
|
<button role="tab" aria-selected="true" aria-controls="new" _="on click add .hidden to #existing then remove .hidden from #new then setAttribute('aria-selected', 'true')">New</button>
|
||||||
|
<button role="tab" aria-controls="existing" _="on click add .hidden to #new then remove .hidden from #existing then setAttribute('aria-selected', 'true') to me">Existing</button>
|
||||||
|
</menu>
|
||||||
|
<article role="tabpanel" id="new">
|
||||||
<form hx-post="/workshop/<%= it.structure.id %>/db" hx-target="#response">
|
<form hx-post="/workshop/<%= it.structure.id %>/db" hx-target="#response">
|
||||||
<div class="field-row-stacked" style="width: 200px">
|
<div class="field-row-stacked" style="width: 200px">
|
||||||
<label for="name">Name</label>
|
<label for="name">Name</label>
|
||||||
|
|
@ -18,5 +24,25 @@
|
||||||
</section>
|
</section>
|
||||||
</form>
|
</form>
|
||||||
<div id="response"></div>
|
<div id="response"></div>
|
||||||
|
</article>
|
||||||
|
<article role="tabpanel" class="hidden" id="existing">
|
||||||
|
<form hx-post="/workshop/<%= it.structure.id %>/db/attach" hx-target="#response">
|
||||||
|
<div class="field-row-stacked" style="width: 200px">
|
||||||
|
<label for="alias">Alias</label>
|
||||||
|
<input name="alias" id="alias" type="text" />
|
||||||
|
</div>
|
||||||
|
<div class="field-row-stacked" style="width: 200px">
|
||||||
|
<label for="db_id">DB ID</label>
|
||||||
|
<input name="db_id" id="db_id" type="text" />
|
||||||
|
</div>
|
||||||
|
<section class="field-row" style="justify-content: flex-end">
|
||||||
|
<button type="submit">OK</button>
|
||||||
|
<button type="button" _="on click trigger closeModal">Cancel</button>
|
||||||
|
</section>
|
||||||
|
</form>
|
||||||
|
<div id="response"></div>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue