4e54075078
CI / test (push) Has been cancelled
CI / verify (push) Has been cancelled
Clients CI / build-server (push) Has been cancelled
Clients CI / test-python (push) Has been cancelled
Clients CI / test-javascript (push) Has been cancelled
Clients CI / test-nim (push) Has been cancelled
Clients CI / test-rust (push) Has been cancelled
52 lines
1.6 KiB
Nim
52 lines
1.6 KiB
Nim
import times, strutils, strformat, sequtils
|
|
from db_connector/db_sqlite import instantRows, `[]`
|
|
import ../../../ormin
|
|
import model
|
|
|
|
importModel(DbBackend.sqlite, "tweeter_model")
|
|
var db {.global.} = open("tweeter.db", "", "", "")
|
|
|
|
proc findUser*(username: string, user: var User): bool =
|
|
let res = query:
|
|
select user(username)
|
|
where username == ?username
|
|
echo res
|
|
if res.len == 0: return false
|
|
else: user.username = res[0]
|
|
|
|
let following = query:
|
|
select following(followed_user)
|
|
where follower == ?username
|
|
user.following = following.filterIt(it.len != 0)
|
|
|
|
return true
|
|
|
|
proc create*(user: User) =
|
|
query:
|
|
insert user(username = ?user.username)
|
|
|
|
proc post*(message: Message) =
|
|
if message.msg.len > 140:
|
|
raise newException(ValueError, "Message has to be less than 140 characters.")
|
|
query:
|
|
insert message(username = ?message.username,
|
|
time = ?message.time,
|
|
msg = ?message.msg)
|
|
|
|
proc follow*(follower, user: User) =
|
|
query:
|
|
insert following(follower = ?follower.username, followed_user = ?user.username)
|
|
|
|
proc findMessage*(usernames: openArray[string], limit = 10): seq[Message] =
|
|
result = @[]
|
|
if usernames.len == 0: return
|
|
var whereClause = "WHERE "
|
|
for i in 0 ..< usernames.len:
|
|
whereClause.add("trim(username) = ?")
|
|
if i < usernames.len - 1:
|
|
whereClause.add(" or ")
|
|
|
|
let s = &"SELECT username, time, msg FROM Message {whereClause} ORDER BY time DESC LIMIT {limit}"
|
|
for row in db.instantRows(sql(s), usernames):
|
|
result.add((username: row[0], time: row[1].parseInt, msg: row[2]))
|