2018-09-09 23:29:56 +00:00
|
|
|
lapis = require "lapis"
|
|
|
|
|
|
|
|
import Sessions, Deltas from require "models"
|
|
|
|
import api, abort from require "helpers"
|
|
|
|
|
2018-09-16 19:03:56 +00:00
|
|
|
-- returns a Session (creating if needed) and list of Deltas
|
2018-09-09 23:29:56 +00:00
|
|
|
get = (id="") ->
|
|
|
|
if session = Sessions\find(:id) or Sessions\create(:id)
|
|
|
|
return session, Deltas\select "WHERE session_id = ?", session.id
|
|
|
|
else
|
|
|
|
abort "Invalid session ID."
|
|
|
|
|
2018-09-16 19:03:56 +00:00
|
|
|
-- returns a hash table of accumulated time from a list of Deltas
|
|
|
|
types = (deltas={}) ->
|
2018-09-09 23:29:56 +00:00
|
|
|
tab = {}
|
|
|
|
for delta in *deltas
|
2018-09-16 19:03:56 +00:00
|
|
|
if tab[delta.type]
|
|
|
|
tab[delta.type] += delta.time
|
|
|
|
else
|
|
|
|
tab[delta.type] = delta.time
|
2018-09-09 23:29:56 +00:00
|
|
|
return tab if #tab > 0
|
|
|
|
|
2018-09-16 19:03:56 +00:00
|
|
|
-- converts Session and Deltas list into a returnable result
|
2018-09-09 23:29:56 +00:00
|
|
|
result = (session, deltas) ->
|
|
|
|
{
|
|
|
|
id: session.id, time: session.updated_at - session.started_at,
|
|
|
|
types: types deltas
|
|
|
|
}
|
|
|
|
|
2018-09-16 19:03:56 +00:00
|
|
|
-- core function of an update (POST or PUT) request
|
2018-09-09 23:29:56 +00:00
|
|
|
update = =>
|
|
|
|
session, deltas = get(@params.id)
|
|
|
|
session, delta = session\update(@params)
|
|
|
|
table.insert deltas, delta if delta
|
|
|
|
return result session, deltas
|
|
|
|
|
2018-09-16 19:03:56 +00:00
|
|
|
-- core function of a DELETE request
|
2018-09-09 23:29:56 +00:00
|
|
|
delete = =>
|
|
|
|
session = get(@params.id)
|
|
|
|
ok, err = session\delete!
|
|
|
|
abort err unless ok
|
|
|
|
return deleted: true
|
|
|
|
|
2018-09-16 19:03:56 +00:00
|
|
|
-- all request methods are technically usable (not not neccessarily useful) on both routes
|
2018-09-09 23:29:56 +00:00
|
|
|
fns = {
|
2018-09-16 19:03:56 +00:00
|
|
|
GET: api(=> result get(@params.id))
|
|
|
|
POST: api(=> update(@))
|
|
|
|
PUT: api(=> update(@))
|
|
|
|
DELETE: api(=> delete(@))
|
2018-09-09 23:29:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
class extends lapis.Application
|
2018-09-16 19:03:56 +00:00
|
|
|
-- can access a session by its id in the URL, or generate one with /0/new
|
|
|
|
[session: "/0/:id[a-fA-F%d]"]: fns
|
|
|
|
[new_session: "/0/new"]: fns
|