Files
Baradb/clients/nim/ormin/examples/tweeter/src/database.nim
T
dimgigov 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
Add Ormin ORM support for BaraDB (Nim client)
2026-05-15 21:49:08 +03:00

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]))