comparison src/lib/User.luan @ 4:2da10ece826f

add Chat
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 27 Oct 2024 20:39:18 -0600
parents 2c63b10781e1
children b8b12fd8be22
comparison
equal deleted inserted replaced
3:2c63b10781e1 4:2da10ece826f
14 local Lucene = require "luan:lucene/Lucene.luan" 14 local Lucene = require "luan:lucene/Lucene.luan"
15 local lucene_quote = Lucene.quote or error() 15 local lucene_quote = Lucene.quote or error()
16 local Http = require "luan:http/Http.luan" 16 local Http = require "luan:http/Http.luan"
17 local Db = require "site:/lib/Db.luan" 17 local Db = require "site:/lib/Db.luan"
18 local run_in_transaction = Db.run_in_transaction or error() 18 local run_in_transaction = Db.run_in_transaction or error()
19 local Chat = require "site:/lib/Chat.luan"
19 local Logging = require "luan:logging/Logging.luan" 20 local Logging = require "luan:logging/Logging.luan"
20 local logger = Logging.logger "User" 21 local logger = Logging.logger "User"
21 22
22 23
23 local User = {} 24 local User = {}
46 local doc = to_doc(user) 47 local doc = to_doc(user)
47 Db.save(doc) 48 Db.save(doc)
48 user.id = doc.id 49 user.id = doc.id
49 end 50 end
50 51
51 function user.reload() 52 function user.delete()
52 return User.get_by_id(user.id) or error(user.id) 53 run_in_transaction( function()
54 local id = user.id
55 local chats = Chat.search("chat_user_ids:"..id)
56 for _, chat in ipairs(chats) do
57 chat.delete()
58 end
59 Db.delete("id:"..id)
60 end )
53 end 61 end
54 62
55 function user.login() 63 function user.login()
56 local id = to_string(user.id) 64 local id = to_string(user.id)
57 Http.response.set_persistent_cookie("user",id) 65 Http.response.set_persistent_cookie("user",id)
58 Http.response.set_persistent_cookie("password",user.password) 66 Http.response.set_persistent_cookie("password",user.password)
59 Http.request.cookies.user = id 67 Http.request.cookies.user = id
60 Http.request.cookies.password = user.password or error() 68 Http.request.cookies.password = user.password or error()
69 end
70
71 function user.get_chats()
72 return Chat.search("chat_user_ids:"..user.id)
73 end
74
75 function user.get_or_create_chat_with(emails)
61 end 76 end
62 77
63 return user 78 return user
64 end 79 end
65 80
85 t[#t+1] = password_chars[random(n)] 100 t[#t+1] = password_chars[random(n)]
86 end 101 end
87 return concat(t) 102 return concat(t)
88 end 103 end
89 104
105 local function get_by_email(email)
106 local doc = Db.get_document("user_email:"..lucene_quote(email))
107 return doc and from_doc(doc)
108 end
109 User.get_by_email = get_by_email
110
90 function User.get_or_create_by_email(email) 111 function User.get_or_create_by_email(email)
91 return run_in_transaction( function() 112 return run_in_transaction( function()
92 local doc = Db.get_document("user_email:"..lucene_quote(email)) 113 local user = get_by_email(email)
93 if doc ~= nil then 114 if user == nil then
94 return from_doc(doc) 115 user = User.new{
95 else
96 local user = User.new{
97 email = email 116 email = email
98 password = new_password() 117 password = new_password()
99 } 118 }
100 user.save() 119 user.save()
101 return user
102 end 120 end
121 return user
103 end ) 122 end )
104 end 123 end
105 124
106 function User.search(query,sort,rows) 125 function User.search(query,sort,rows)
107 rows = rows or 1000000 126 rows = rows or 1000000