login

<     >

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()