Source: controller/account.js

// dependency modules
const express = require('express')
const AccountRepository = require('../repository/account')

// controller
// using to define router in controller
// params
// - db <connection>: instance of mongoose connection
// - oauth <object>: contains information about oauth provider
//   see ./lib/derault-value.js fo more information
// return express router

/**
 * accountController module
 @module accountController
 */
module.exports = function (db, treant) {
  // create oauth provider connector
  var router = express.Router()
  var accountRepo = new AccountRepository(db)

  router.route('/me')
  .get(treant.check({getAcc: true}), function (req, res) {
    treant.gAccount(req.token.g_access_token, function (err, gAccount) {
      if (err) return res.status(500).json({message: err.message})

      var account = req.account
      res.json({
        language: account.language,
        name: account.name,
        groups: account.groups,
        avatar: gAccount.image.url
      })
    })
  })

  router.route('/me/language/:language')
  .put(function (req, res) {
    // verify language
    if (!req.params.language || req.params.language.length !== 2) {
      res.status(400).json({
        message: 'bad request',
        data: 'language code invalid, it must same as "en"'
      })
      return
    }

    accountRepo.authenticateEx(req, function (authErr, user) {
      if (authErr) {
        res.status(401).json({
          message: 'unauthorized',
          data: authErr
        })
        return
      }

      accountRepo.updateLanguage(user.id, req.params.language, function (repoErr) {
        if (repoErr) {
          res.status(500).json(repoErr)
          return
        }
        res.json({
          message: 'done'
        })
      })
    })
  })

  router.route('/me/scheduler/:id')
  .put(function (req, res) {
    accountRepo.authenticateEx(req, function (authErr, user) {
      if (authErr) {
        res.status(401).json({
          message: 'unauthorized',
          data: authErr
        })
        return
      }

      accountRepo.updateScheduler(user.id, req.params.id, function (repoErr) {
        if (repoErr) {
          res.status(500).json(repoErr)
          return
        }
        res.json({
          message: 'done'
        })
      })
    })
  })

  return router
}