Mercurial Hosting > lang
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 3:eee6d4f59811 | 4:b1adec083e44 |
|---|---|
| 1 local Luan = require "luan:Luan.luan" | |
| 2 local error = Luan.error | |
| 3 local ipairs = Luan.ipairs or error() | |
| 4 local Number = require "luan:Number.luan" | |
| 5 local long = Number.long or error() | |
| 6 local Time = require "luan:Time.luan" | |
| 7 local time_now = Time.now or error() | |
| 8 local Html = require "luan:Html.luan" | |
| 9 local html_encode = Html.encode or error() | |
| 10 local Db = require "site:/lib/Db.luan" | |
| 11 | |
| 12 | |
| 13 local Chat = {} | |
| 14 | |
| 15 local function from_doc(doc) | |
| 16 doc.type == "chat" or error "wrong type" | |
| 17 return Chat.new { | |
| 18 id = doc.id | |
| 19 user_id = doc.chat_user_id | |
| 20 updated = doc.chat_updated | |
| 21 name = doc.name | |
| 22 ai_key = doc.ai_key | |
| 23 } | |
| 24 end | |
| 25 | |
| 26 local function to_doc(chat) | |
| 27 return { | |
| 28 type = "chat" | |
| 29 id = chat.id | |
| 30 chat_user_id = long(chat.user_id) | |
| 31 chat_updated = long(chat.updated) | |
| 32 name = chat.name or error() | |
| 33 ai_key = chat.ai_key -- or error() | |
| 34 } | |
| 35 end | |
| 36 | |
| 37 function Chat.new(chat) | |
| 38 chat.updated = chat.updated or time_now() | |
| 39 | |
| 40 function chat.save() | |
| 41 local doc = to_doc(chat) | |
| 42 Db.save(doc) | |
| 43 chat.id = doc.id | |
| 44 end | |
| 45 | |
| 46 function chat.delete() | |
| 47 Db.delete("id:"..chat.id) | |
| 48 end | |
| 49 | |
| 50 function chat.name_html() | |
| 51 return html_encode(chat.name) | |
| 52 end | |
| 53 | |
| 54 return chat | |
| 55 end | |
| 56 | |
| 57 function Chat.search(query,sort,rows) | |
| 58 rows = rows or 1000000 | |
| 59 local chats = {} | |
| 60 local docs = Db.search(query,1,rows,{sort=sort}) | |
| 61 for _, doc in ipairs(docs) do | |
| 62 chats[#chats+1] = from_doc(doc) | |
| 63 end | |
| 64 return chats | |
| 65 end | |
| 66 | |
| 67 function Chat.get_by_id(id) | |
| 68 local doc = Db.get_document("id:"..id) | |
| 69 return doc and doc.type=="chat" and from_doc(doc) or nil | |
| 70 end | |
| 71 | |
| 72 return Chat |
