habitica/src/app/index.coffee

87 lines
2.4 KiB
CoffeeScript
Raw Normal View History

derby = require 'derby'
2012-12-31 21:09:36 +00:00
{get, view, ready} = derby.createApp module
derby.use require 'derby-ui-boot'
derby.use require('../../ui')
derby.use require('derby-auth/components');
2012-07-28 21:02:09 +00:00
# Custom requires
character = require './character'
tasks = require './tasks'
scoring = require './scoring'
helpers = require './helpers'
browser = require './browser'
party = require './party'
items = require './items'
helpers.viewHelpers view
character.view view
tasks.view view
items.view view
_ = require('underscore')
2012-06-20 21:30:10 +00:00
# ========== ROUTES ==========
2013-01-18 22:11:45 +00:00
get '/', (page, model, next) ->
# temporary view variables, so we don't call model.set() too fast
_view = model.get '_view' || {}
2013-01-17 21:30:09 +00:00
# Force SSL # NOTE handled by ngix now
#req = page._res.req
#if req.headers['x-forwarded-proto']!='https' and process.env.NODE_ENV=='production'
# return page.redirect 'https://' + req.headers.host + req.url
2013-02-05 21:11:28 +00:00
# This used to be in party.server(model, cb), but was getting `TypeError: Object #<Model> has no method 'server'`
# on the second load for some reason
selfQ = model.query('users').withId(model.get('_userId') or model.session.userId)
model.subscribe selfQ, (err, users) ->
throw err if err
user = users.at(0)
model.ref '_user', user
batch = new character.BatchUpdate(model)
batch.startTransaction()
obj = batch.obj()
2013-02-07 03:55:34 +00:00
obj = user.get() unless obj.items? #why is this happening?
model.set '_view', _view
items.server(model)
character.updateUser(batch)
batch.commit()
# refLists
_.each ['habit', 'daily', 'todo', 'reward'], (type) ->
model.refList "_#{type}List", "_user.tasks", "_user.idLists.#{type}"
# tnl function
model.fn '_tnl', '_user.stats.lvl', (lvl) ->
# see https://github.com/lefnire/habitrpg/issues/4
# also update in scoring.coffee. TODO create a function accessible in both locations
(lvl*100)/5
2013-02-08 00:13:14 +00:00
party.partySubscribe model, -> page.render()
# ========== CONTROLLER FUNCTIONS ==========
ready (model) ->
user = model.at('_user')
scoring.setModel(model)
2013-01-29 05:02:30 +00:00
#set cron immediately
lastCron = user.get('lastCron')
user.set('lastCron', +new Date) if (!lastCron? or lastCron == 'new')
scoring.cron()
browser.app(exports, model)
character.app(exports, model)
tasks.app(exports, model)
items.app(exports, model)
party.app(exports, model)
2013-01-15 19:35:10 +00:00
require('../server/private').app(exports, model)
require('./debug').app(exports, model) if model.get('_view.nodeEnv') != 'production'