fix: logs bug where it was repeating due to flaw in most recent id query

This commit is contained in:
HRG @ SCExC 2025-01-09 15:59:21 -05:00
parent 7a5a1a5e9d
commit 38b9c0e538
4 changed files with 36 additions and 31 deletions

55
db.js
View file

@ -54,7 +54,6 @@ function getUser(db, username) {
return db.prepare("SELECT * from users where username = ?").get(username);
}
// _ _ _______ ______ ___ _ _______ __ __ _______ _______
// | | _ | || || _ | | | | || || | | || || |
// | || || || _ || | || | |_| || _____|| |_| || _ || _ |
@ -63,7 +62,6 @@ function getUser(db, username) {
// | _ || || | | || _ | _____| || _ || || |
// |__| |__||_______||___| |_||___| |_||_______||__| |__||_______||___|
const dbCache = new LRUCache({ max: 25 });
function getDbInstance(dbId) {
@ -86,7 +84,7 @@ function getAllRoutes(db) {
FROM routes
JOIN structures ON routes.structure_id = structures.id
ORDER BY routes.updated_at DESC;
`
`,
)
.all();
}
@ -110,8 +108,6 @@ function getTemplater(structId) {
return etaInstance;
}
function getStructures(db) {
return db.prepare("SELECT * from structures").all();
}
@ -122,17 +118,17 @@ function getStructure(db, id) {
function createStructure(db, name, userId) {
const stmt = db.prepare(
"INSERT INTO structures (name, user_id) VALUES (?, ?)"
"INSERT INTO structures (name, user_id) VALUES (?, ?)",
);
const info = stmt.run(name, userId);
return info.lastInsertRowid; // Returns the structure_id of the newly created structure
}
function createRoute(db, verb, path, structureId, handler) {
path = encodeURI(path)
path = encodeURI(path);
// add default handler here
const stmt = db.prepare(
"INSERT INTO routes (verb, path, structure_id, handler) VALUES (?, ?, ?, ?)"
"INSERT INTO routes (verb, path, structure_id, handler) VALUES (?, ?, ?, ?)",
);
const info = stmt.run(verb, path, structureId, handler);
return info.lastInsertRowid; // Returns the route_id of the newly created route
@ -208,7 +204,7 @@ function getTemplate(db, templateId) {
function getTemplateContentByName(db, structId, name) {
return db
.prepare(
"SELECT content from templates where structure_id = ? AND name = ?"
"SELECT content from templates where structure_id = ? AND name = ?",
)
.get(structId, name);
}
@ -216,7 +212,7 @@ function getTemplateContentByName(db, structId, name) {
function createTemplate(db, structureId, name, content, testObjectString) {
return db
.prepare(
"INSERT INTO templates (structure_id, name, content, test_object) VALUES (?, ?, ?, ?)"
"INSERT INTO templates (structure_id, name, content, test_object) VALUES (?, ?, ?, ?)",
)
.run(structureId, name, content, testObjectString).lastInsertRowid;
}
@ -236,7 +232,7 @@ function getDbsForStructure(db, structureId) {
INNER JOIN dbs ON structure_dbs.db_id = dbs.id
WHERE structure_dbs.structure_id = ?
ORDER BY structure_dbs.created_at, is_aliased ASC;
`
`,
)
.all(structureId);
}
@ -247,7 +243,7 @@ function getDb(db, dbId) {
`SELECT *
FROM dbs
WHERE id = ?;
`
`,
)
.get(dbId);
}
@ -260,7 +256,7 @@ function getDbForStructure(db, structureId, dbId) {
INNER JOIN dbs ON structure_dbs.db_id = dbs.id
WHERE structure_dbs.structure_id = ?
AND structure_dbs.db_id = ?;
`
`,
)
.get(structureId, dbId);
}
@ -312,7 +308,7 @@ function getFile(db, fileId) {
function createFile(db, structure_id, name, filePath, mime_type, mime_subtype) {
return db
.prepare(
"INSERT INTO files (structure_id, name, path, mime_type, mime_subtype) VALUES (?, ?, ?, ?, ?)"
"INSERT INTO files (structure_id, name, path, mime_type, mime_subtype) VALUES (?, ?, ?, ?, ?)",
)
.run(structure_id, name, filePath, mime_type, mime_subtype).lastInsertRowid;
}
@ -322,7 +318,7 @@ function cloneStructure(
newStructureName,
userId,
routePrefix = "",
cloneDbs = []
cloneDbs = [],
) {
const transaction = db.transaction(() => {
const cloneStructure = db.prepare(`
@ -334,7 +330,7 @@ function cloneStructure(
newStructureName,
userId,
routePrefix,
structId
structId,
).lastInsertRowid;
const dbIds = db
@ -356,7 +352,7 @@ function cloneStructure(
`
INSERT INTO dbs (name, structure_id, library)
SELECT name, ?, library FROM dbs WHERE id = ?;
`
`,
)
.run(newStructId, db_id).lastInsertRowid;
@ -364,7 +360,7 @@ function cloneStructure(
`
INSERT INTO structure_dbs (db_id, structure_id, alias)
SELECT ?, ?, alias FROM structure_dbs WHERE db_id = ? AND structure_id = ?;
`
`,
).run(newDb, newStructId, db_id, structId);
db.prepare(`select id from dbs where structure_id = ?`)
@ -382,7 +378,7 @@ function cloneStructure(
`
INSERT INTO structure_dbs (db_id, structure_id, alias)
SELECT db_id, ?, alias FROM structure_dbs WHERE structure_id = ? AND db_id = ?;
`
`,
).run(newStructId, structId, db_id);
}
@ -406,23 +402,32 @@ function cloneStructure(
function createLog(db, structureId, routeId, content, error = false) {
const stmt = db.prepare(
"INSERT INTO logs (error, structure_id, route_id, content) VALUES (?, ?, ?, ?)"
"INSERT INTO logs (error, structure_id, route_id, content) VALUES (?, ?, ?, ?)",
);
const info = stmt.run(error ? 1 : 0, structureId, routeId, content);
return info.lastInsertRowid; // Returns the log_id of the newly created log
}
function getLogsByRoute(db, routeId) {
return db.prepare("SELECT * FROM logs WHERE route_id = ? ORDER BY created_at DESC LIMIT 50").all(routeId).reverse();
return db
.prepare(
"SELECT * FROM logs WHERE route_id = ? ORDER BY created_at DESC LIMIT 50",
)
.all(routeId)
.reverse();
}
function getNewLogsByRoute(db, routeId, since) {
return db.prepare("SELECT * FROM logs WHERE route_id = ? AND id > ? ORDER BY created_at DESC").all(routeId, since);
return db
.prepare(
"SELECT * FROM logs WHERE route_id = ? AND id > ? ORDER BY created_at DESC",
)
.all(routeId, since);
}
function getMostRecentLogIdByRoute(db, routeId) {
const result = db
.prepare("SELECT id FROM logs WHERE route_id = ? ORDER BY created_at DESC LIMIT 1")
.prepare("SELECT MAX(id) AS id FROM logs WHERE route_id = ?")
.get(routeId);
return result ? result.id : 0;
}
@ -461,5 +466,5 @@ module.exports = {
createLog,
getLogsByRoute,
getNewLogsByRoute,
getMostRecentLogIdByRoute
}
getMostRecentLogIdByRoute,
};

View file

@ -571,10 +571,11 @@ app.get("/workshop/:structure_id/route/:route_id/logs", (req, res) => {
const lastId = model.getMostRecentLogIdByRoute(db, req.params.route_id);
console.log(since, logs, lastId)
return res.send(
bootstrapTemplateWithHTMXetc(
eta.render("workshop/logs", {
logs: logs.reverse(),
logs: logs,
structId: req.params.structure_id,
routeId: req.params.route_id,
since: lastId,

View file

@ -1,6 +1,6 @@
<div hx-swap="outerHTML" hx-get="/workshop/<%= it.structId %>/route/<%= it.routeId %>/logs?since=<%= it.since || 0 %>" hx-trigger="every 2s" class="hidden"></div>
<% it.logs.forEach((log) => { %>
<div class="<% if (log.error) { %>bg-red-800 text-white <% } %>">
<!-- <div class="<% if (log.error) { %>bg-red-800 text-white <% } %>"> -->
<%= log.content %>
</div>
<!-- </div> -->
<% }) %>
<div hx-swap="outerHTML" hx-get="/workshop/<%= it.structId %>/route/<%= it.routeId %>/logs?since=<%= it.since || 0 %>" hx-trigger="every 5s" class="hidden"></div>

View file

@ -22,8 +22,7 @@
<button id="save-btn" type="submit">Save</button>
<button id="save-btn" type="submit" _="on click toggle .hidden on #logs">Logs</button>
</div>
<pre id="logs" class="max-h-[50vh] overflow-scroll hidden">
<ul hx-get="/workshop/<%= it.structure.id %>/route/<%= it.route.id %>/logs" hx-trigger="load" class="flex flex-col-reverse"></ul>
<pre id="logs" class="max-h-[50vh] overflow-scroll flex hidden" hx-get="/workshop/<%= it.structure.id %>/route/<%= it.route.id %>/logs" hx-trigger="load">
</pre>
</div>
<div id="preview-area" class="w-1/2 h-full flex flex-col">