2023-07-17 15:47:11 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
first commit: define schema
diff --git a/data.lua b/data.lua new file mode 100644 index 0000000..aaff818 --- /dev/null +++ b/data.lua @@ -0,0 +1,74 @@ +local lud = require "ludweb" + +local schema = { +[[ +CREATE TABLE IF NOT EXISTS User ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + nick TEXT NOT NULL, + name TEXT NOT NULL, + salt TEXT NOT NULL, + hash TEXT NOT NULL +);]], [[ +CREATE TABLE IF NOT EXISTS Project ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + desc TEXT +);]], [[ +CREATE TABLE IF NOT EXISTS Membership ( + proj_id INTEGER REFERENCES Project(id), + user_id INTEGER REFERENCES User(id), + PRIMARY KEY(proj_id, user_id) +);]], [[ +CREATE TABLE IF NOT EXISTS State ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + proj_id INTEGER NOT NULL REFERENCES Project(id), + name TEXT NOT NULL, + desc TEXT +);]], [[ +CREATE TABLE IF NOT EXISTS Ticket ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + proj_id INTEGER NOT NULL REFERENCES Project(id), + user_id INTEGER NOT NULL REFERENCES User(id), + time INTEGER NOT NULL, + code INTEGER NOT NULL, + name TEXT NOT NULL, + desc TEXT +);]], [[ +CREATE TABLE IF NOT EXISTS Shift ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + ticket_id INTEGER NOT NULL REFERENCES Ticket(id), + old_stt_id INTEGER NOT NULL REFERENCES State(id), + new_stt_id INTEGER NOT NULL REFERENCES State(id), + user_id INTEGER NOT NULL REFERENCES User(id), + time INTEGER NOT NULL +);]], [[ +CREATE TABLE IF NOT EXISTS Comment ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + ticket_id INTEGER NOT NULL REFERENCES Ticket(id), + user_id INTEGER NOT NULL REFERENCES User(id), + time INTEGER NOT NULL, + text TEXT NOT NULL +);]] +} + +local Model = {} +Model.__index = Model + +function Model:create_tables() + for i, sql in ipairs(schema) do + self.db:execute(sql) + end +end + +function Model:close() + self.db:close() +end + +local function open_model(path) + local self = setmetatable({}, Model) + path = path or ":memory:" + self.db = lud.sqlite.open(path) + return self +end + +return {open_model=open_model} diff --git a/skopos.lua b/skopos.lua new file mode 100644 index 0000000..cc8aa6a --- /dev/null +++ b/skopos.lua @@ -0,0 +1,5 @@ +local data = require "data" + +local model = data.open_model() +model:create_tables() +model:close()