mirror of
https://github.com/lxsang/antd-web-apps
synced 2024-11-20 10:18:21 +01:00
131 lines
3.7 KiB
Lua
131 lines
3.7 KiB
Lua
BaseController:subclass(
|
|
"VDBController",
|
|
{
|
|
registry = {},
|
|
models = {}
|
|
}
|
|
)
|
|
|
|
function VDBController:actionnotfound(...)
|
|
return self:index(table.unpack({...}))
|
|
end
|
|
|
|
function VDBController:index(...)
|
|
local api = {
|
|
description = "This api handle database operation",
|
|
actions = {
|
|
["/save"] = "Save a record to a table",
|
|
["/get"] = "Get all records or Get a record by id",
|
|
["/select"] = "Select records by a condition",
|
|
["/delete"] = "Delete record(s) by condition or by id"
|
|
}
|
|
}
|
|
result(api)
|
|
return false
|
|
end
|
|
|
|
function VDBController:save(...)
|
|
auth_or_die("User unauthorized. Please login")
|
|
local rq = (JSON.decodeString(REQUEST.json))
|
|
if (rq ~= nil and rq.table ~= nil) then
|
|
local model = require("dbmodel").get(SESSION.user, rq.table, rq.data)
|
|
local ret
|
|
if model == nil then
|
|
fail("Cannot get table metadata:" .. rq.table)
|
|
else
|
|
if (rq.data.id ~= nil) then
|
|
rq.data.id = tonumber(rq.data.id)
|
|
ret = model:update(rq.data)
|
|
else
|
|
ret = model:insert(rq.data)
|
|
end
|
|
model:close()
|
|
if ret == true then
|
|
result(ret)
|
|
else
|
|
fail("Cannot modify/update table " .. rq.table)
|
|
end
|
|
end
|
|
else
|
|
fail("Unknown database request")
|
|
end
|
|
return false
|
|
end
|
|
|
|
function VDBController:get(...)
|
|
auth_or_die("User unauthorized. Please login")
|
|
local rq = (JSON.decodeString(REQUEST.json))
|
|
if (rq ~= nil and rq.table ~= nil) then
|
|
local model = require("dbmodel").get(SESSION.user, rq.table, nil)
|
|
local ret
|
|
if model == nil then
|
|
fail("Cannot get table metadata:" .. rq.table)
|
|
else
|
|
if (rq.id == nil) then
|
|
ret = model:getAll()
|
|
else
|
|
ret = model:get(rq.id)
|
|
end
|
|
model:close()
|
|
result(ret)
|
|
end
|
|
else
|
|
fail("Unknown database request")
|
|
end
|
|
end
|
|
|
|
function VDBController:select(...)
|
|
auth_or_die("User unauthorized. Please login")
|
|
local rq = (JSON.decodeString(REQUEST.json))
|
|
if (rq ~= nil and rq.table ~= nil) then
|
|
local model = require("dbmodel").get(SESSION.user, rq.table, nil)
|
|
local ret
|
|
if model == nil then
|
|
fail("Cannot get table metadata:" .. rq.table)
|
|
else
|
|
if (rq.cond == nil) then
|
|
model:close()
|
|
return fail("Unknow condition")
|
|
else
|
|
ret = model:find(rq.cond)
|
|
end
|
|
model:close()
|
|
result(ret)
|
|
end
|
|
else
|
|
fail("Unknown database request")
|
|
end
|
|
end
|
|
|
|
function VDBController:delete(...)
|
|
auth_or_die("User unauthorized. Please login")
|
|
local rq = (JSON.decodeString(REQUEST.json))
|
|
if (rq ~= nil and rq.table ~= nil) then
|
|
local model = require("dbmodel").get(SESSION.user, rq.table, nil)
|
|
local ret
|
|
if model == nil then
|
|
fail("Cannot get table metadata:" .. rq.table)
|
|
else
|
|
if (rq.id == nil) then
|
|
if (rq.cond) then
|
|
ret = model:delete(rq.cond)
|
|
model:close()
|
|
else
|
|
model:close()
|
|
return fail("Unknow element to delete")
|
|
end
|
|
else
|
|
ret = model:deleteByID(rq.id)
|
|
model:close()
|
|
end
|
|
if ret then
|
|
result(ret)
|
|
else
|
|
fail("Querry error or database is locked")
|
|
end
|
|
end
|
|
else
|
|
fail("Unknown database request")
|
|
end
|
|
end
|