Mercurial Hosting > lang
diff src/lib/Chat.luan @ 4:b1adec083e44
chat work
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 08 Jul 2025 22:15:41 -0600 |
parents | |
children | a970b7a01a74 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lib/Chat.luan Tue Jul 08 22:15:41 2025 -0600 @@ -0,0 +1,72 @@ +local Luan = require "luan:Luan.luan" +local error = Luan.error +local ipairs = Luan.ipairs or error() +local Number = require "luan:Number.luan" +local long = Number.long or error() +local Time = require "luan:Time.luan" +local time_now = Time.now or error() +local Html = require "luan:Html.luan" +local html_encode = Html.encode or error() +local Db = require "site:/lib/Db.luan" + + +local Chat = {} + +local function from_doc(doc) + doc.type == "chat" or error "wrong type" + return Chat.new { + id = doc.id + user_id = doc.chat_user_id + updated = doc.chat_updated + name = doc.name + ai_key = doc.ai_key + } +end + +local function to_doc(chat) + return { + type = "chat" + id = chat.id + chat_user_id = long(chat.user_id) + chat_updated = long(chat.updated) + name = chat.name or error() + ai_key = chat.ai_key -- or error() + } +end + +function Chat.new(chat) + chat.updated = chat.updated or time_now() + + function chat.save() + local doc = to_doc(chat) + Db.save(doc) + chat.id = doc.id + end + + function chat.delete() + Db.delete("id:"..chat.id) + end + + function chat.name_html() + return html_encode(chat.name) + end + + return chat +end + +function Chat.search(query,sort,rows) + rows = rows or 1000000 + local chats = {} + local docs = Db.search(query,1,rows,{sort=sort}) + for _, doc in ipairs(docs) do + chats[#chats+1] = from_doc(doc) + end + return chats +end + +function Chat.get_by_id(id) + local doc = Db.get_document("id:"..id) + return doc and doc.type=="chat" and from_doc(doc) or nil +end + +return Chat