123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- import std/algorithm
- import std/json
- import std/random
- import std/strutils
- import std/sequtils
- # framework
- import basolato/controller
- # databse
- import db_connector/db_postgres
- import allographer/query_builder
- import ../../../config/database
- # model
- import ../../models/fortune
- # view
- import ../views/pages/fortune_scf_view
- const range1_10000 = 1..10000
- let getFirstPrepare = stdRdb.prepare("getFirst", sql""" SELECT * FROM "World" WHERE id = $1 LIMIT 1 """, 1)
- let getFortunePrepare = stdRdb.prepare("getFortunes", sql""" SELECT * FROM "Fortune" ORDER BY message ASC """, 0)
- proc plaintext*(context:Context, params:Params):Future[Response] {.async.} =
- let headers = newHttpHeaders()
- headers.add("Content-Type", "text/plain; charset=UTF-8")
- return render("Hello, World!", headers)
- proc json*(context:Context, params:Params):Future[Response] {.async.} =
- return render(%*{"message":"Hello, World!"})
- proc db*(context:Context, params:Params):Future[Response] {.async.} =
- let i = rand(1..10000)
- let res = stdRdb.getRow(getFirstPrepare, i)
- return render(%*{"id": res[0].parseInt, "randomNumber": res[1].parseInt})
- proc query*(context:Context, params:Params):Future[Response] {.async.} =
- var countNum =
- try:
- params.getInt("queries")
- except:
- 1
- if countNum < 1:
- countNum = 1
- elif countNum > 500:
- countNum = 500
- var resp:seq[Row]
- for i in 1..countNum:
- let n = rand(range1_10000)
- resp.add(stdRdb.getRow(getFirstPrepare, n))
- let response = resp.map(
- proc(x:Row):JsonNode =
- %*{"id": x[0].parseInt, "randomNumber": x[1].parseInt}
- )
- return render(%response)
- proc fortune*(context:Context, params:Params):Future[Response] {.async.} =
- let results = stdRdb.getAllRows(getFortunePrepare)
- var rows = results.map(
- proc(x:seq[string]):Fortune =
- return Fortune(id: x[0].parseInt, message: x[1])
- )
- rows.add(
- Fortune(
- id: 0,
- message: "Additional fortune added at request time."
- )
- )
- rows = rows.sortedByIt(it.message)
- return render(fortuneScfView(rows).await)
- proc update*(context:Context, params:Params):Future[Response] {.async.} =
- var countNum =
- try:
- params.getInt("queries")
- except:
- 1
- if countNum < 1:
- countNum = 1
- elif countNum > 500:
- countNum = 500
- var response = newSeq[JsonNode](countNum)
- var futures = newSeq[Future[void]](countNum)
- for i in 1..countNum:
- let index = rand(range1_10000)
- let number = rand(range1_10000)
- response[i-1] = %*{"id": index, "randomNumber": number}
- futures[i-1] = (
- proc():Future[void] {.async.} =
- discard stdRdb.getRow(getFirstPrepare, i)
- rdb.raw(""" UPDATE "World" SET "randomnumber" = ? WHERE id = ? """, %*[number, index]).exec()
- )()
- all(futures).await
- return render(%response)
|