ire4ever1190 / mike

The new and improved mikero web framework
35 stars 1 forks source link

Make CtxHook rewritable #36

Closed blackmius closed 5 months ago

blackmius commented 5 months ago

Can i somehow make user changeable in such code? adding var modifier is not working. and i am still getting this error Error: 'user.username' cannot be assigned to


import pkg/mike
import pkg/ponairi

type
  User = object
    id {.primary, autoIncrement.}: int64
    username: string
    password: string
    token: string
  UpdateUser = object
    password: Option[string]

let dbConn = newConn(":memory:")
dbConn.create(User)

proc fromRequest*[T: User](ctx: Context, name: string, _: typedesc[T]): T =
  ## recieve current user from Authorization header
  let auth = ctx.getHeader("Authorization")
  let existed = dbConn.find(Option[User],
    sql"SELECT * FROM User WHERE token = ?", auth)
  if existed.isNone:
    raise (ref BadRequestError)(msg: "bad token", status: Http401)
  return existed.get()

"/user" -> put(user: var User, data: Json[UpdateUser]):
  ## Updated user information for current user
  if  data.password.isSome:
    user.password = data.password.get()
  dbConn.upsert(user)
  ctx.send(user)

I know the workaround can be adding a new line

  "/user" -> put(u: User, data: Json[UpdateUser]):
    var user = u # hack
ire4ever1190 commented 5 months ago

Seems like an easy fix, working on it now 👍