require! {
  \../ : N
  \prelude-ls
}

global import prelude-ls

Users = N \user schema:
  opened: ->
    | it.Tasks? => it.Tasks |> filter (-> !it.done) |> (.length)
    | _         => 0


class Tasks extends N \task schema: done: type: 'bool', default: false

  Done: @_WrapPromise (done) ->
    @done = true
    @Save done

class TaskRoute extends N.Route.MultiRoute

  Config: ->
    super!
    @Put '/:id/done' ~> it.instance.Done!

Users.AttachRoute N.Route.MultiRoute
Tasks.AttachRoute TaskRoute

Users.BelongsToMany Tasks
#
#
# err, task <- Tasks.Create done: false
# err, user <- Users.Create taskIds: [1]
# # console.log err, user
#
# user.Watch console.log << (.ToJSON!)
#
# err, task2 <- Tasks.Create done: false
#
# user.taskIds.push task2.id
# user.Save!

# Tasks.Create {done: false}
#   .then -> Users.Create {taskIds: [it.id]}
#   .then -> Tasks.Create {done: false}
#   .then console.log
#   .then -> Users.Fetch 1
#   .then -> it.taskIds.push 2; it.Save!
#   .then console.log
#   .fail console.error
