Last active
January 5, 2024 19:16
-
-
Save solisoft/b534055a1f5832f56520c18ed739a6aa to your computer and use it in GitHub Desktop.
Redbean Redis Client
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package.path = package.path .. ";.lua/?.lua" | |
local db_config = { | |
db_name = "db_delupay", | |
url = "http://localhost:8529", | |
username = "root", | |
password = "3fe2003d-6f42-474f-aa43-1dde7a2a2bf1" | |
} | |
redis = require 'redis' | |
Redis_client = null | |
-- ProgramMaxWorkers(2) | |
Jwt = "" | |
local last_db_connect = GetTime() | |
function Table_merge(t1, t2) | |
for k, v in ipairs(t2) do | |
table.insert(t1, v) | |
end | |
return t1 | |
end | |
function Api_url(path) | |
return db_config.url .. "/_db/" .. db_config.db_name .. "/_api" .. path | |
end | |
function Api_run(path, method, params, headers) | |
params = params or {} | |
headers = headers or {} | |
local ok, h, body = Fetch( | |
Api_url(path), { | |
method = method, | |
body = EncodeJson(params), | |
headers = Table_merge({ ["Authorization"] = "bearer " .. Jwt }, headers) | |
} | |
) | |
return DecodeJson(body), ok, h | |
end | |
function Auth(db_config) | |
local ok, headers, body = Fetch( | |
db_config.url .. "/_open/auth", { | |
method = "POST", | |
body = "{ \"username\": \"" .. db_config.username .. "\", \"password\": \"" .. db_config.password .. "\" }" | |
} | |
) | |
if ok == 200 then | |
Jwt = DecodeJson(body)['jwt'] | |
end | |
return Jwt | |
end | |
function Raw_aql(stm) | |
local body, status_code = Api_run('/cursor', 'POST', stm) | |
local result = body['result'] | |
local has_more = body['hasMore'] | |
local extra = body['extra'] | |
if body['error'] then | |
print(status_code) | |
print(EncodeJson(stm)) | |
print(EncodeJson(body)) | |
end | |
while has_more do | |
body = Api_run("/cursor/" .. body["id"], 'PUT') | |
result = Table_merge(result, body['result']) | |
has_more = body['hasMore'] | |
end | |
if result == nil then | |
result = {} | |
end | |
return EncodeJson({ result = result, extra = extra }) | |
end | |
function Aql(str, bindvars, options) | |
bindvars = bindvars or {} | |
options = options or {} | |
return Raw_aql({ query = str, cache = true, bindVars = bindvars, options = options }) | |
end | |
Auth(db_config) | |
--Redis_client = redis.connect('127.0.0.1', 6379) | |
function OnWorkerStart() | |
print("Creating worker") | |
Redis_client = redis.connect('127.0.0.1', 6379) | |
end | |
function OnWorkerStop() | |
print("Closing worker") | |
Redis_client.quit(Redis_client) | |
end | |
function OnServerStart() | |
-- ProgramMaxWorkers(5) | |
end | |
function OnHttpRequest() | |
if GetTime() - last_db_connect > 60 then | |
Auth(db_config) | |
last_db_connect = GetTime() | |
end | |
-- Route() | |
if GetMethod() == "GET" then | |
params = {} | |
-- GET /demo/:id | |
local parser = re.compile([[^/demo/([0-9]{1,3})$]]) | |
local matcher, id = parser:search(GetPath()) | |
if(matcher) then | |
params["id"] = id | |
RoutePath("/demo2.lua") | |
else | |
Route() | |
end | |
elseif GetMethod() == "POST" then | |
Route() | |
else | |
Route() | |
end | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment