home.controller.js 6.03 KB
'use strict'

const console = process.console
const yamlConfig = require('node-yaml-config')
const path = require('path')
const async = require('async')
const config = yamlConfig.load(path.join(__dirname, '/../../config/config.yml'))

const lib = require('../lib')

// lib.authorize()
// lib.listEvents()
// lib.createEvent()

const url = config.server.url
const port = config.server.port

function responseJSON(code, description, data, status) {
    return {
        "code": code,
        "description": description,
        "result": {
            "data": data,
            "status": status
        }
    }
}

function strToTime(date) {
    var strDate = new Date(date)
    return strDate.getTime()
}

function ggToKendo(data) {
    var dataToArr = []
    try {
        for (var n = 0; n < data.items.length; n++) {
            dataToArr.push({
                "TaskID": data.items[n].id,
                "OwnerID": 2,
                "Title": data.items[n].summary,
                "Description": data.items[n].description,
                "StartTimezone": "Asia/Bangkok",
                "Start": new Date(data.items[n].start.dateTime),
                "End": new Date(data.items[n].end.dateTime),
                "EndTimezone": "Asia/Bangkok",
                "RecurrenceRule": null,
                "RecurrenceID": null,
                "RecurrenceException": null,
                "IsAllDay": false
            })
        }
    } catch (error) {
        console.error(error.message)
    } finally {
        return dataToArr
    }
}

function home(req, res) {
    res.render('index')
}

function index(req, res) {
    console.log(req.body)
    lib.getNewToken((err, authUrl) => {
        if (err) {
            console.error(err)
        } else {
            console.info(authUrl)
            res.send(authUrl)
        }
    })
}

function setToken(req, res) {
    console.log(req.body)
    var code = req.body.code
    lib.setNewToken(code, (err, token) => {
        if (err) {
            console.error(err)
            res.send(err)
            res.end()
        } else {
            console.info(token)
            res.send(token)
            res.end()
        }
    })
}

function events(req, res) {
    // console.log(req.body)
    lib.authorize((err, auth, authUrl) => {
        if (err) {
            console.error(err)
            res.send(err)
        } else {
            lib.listEvents(auth, (err, response) => {
                if (err) {
                    if (authUrl) {
                        console.info(authUrl)
                        res.json(responseJSON(res.code, "redirect to get auth code", authUrl, "redirect"))
                        res.end()
                    } else {
                        console.error(err)
                        res.json(responseJSON(res.code, "response error", err.message, "failed"))
                        res.end()
                    }
                } else {
                    // console.info(response)
                    res.jsonp(ggToKendo(response))
                    res.end
                }
            })
        }
    })
}

function eventCreate(req, res) {
    console.log(req.body)
    let payload = req.body
    if (typeof payload.models == "string") {
        payload.models = JSON.parse(req.body.models)
        payload = payload.models[0]
    }

    let summary = payload.summary
    let description = payload.description
    let email = payload.email
    let startDate = payload.startDate
    let startTimezone = payload.startTimezone
    let endDate = payload.endDate
    let endTimezone = payload.endTimezone
    let extendedProperties = payload.extendedProperties

    lib.authorize((err, auth) => {
        let options = lib.eventBuilder(payload)
        if (err) {
            res.send(err)
        } else {
            options.auth = auth
        }

        lib.createEvent(options, (err, result) => {
            if (err) {
                res.send(err)
            } else {
                res.send(result)
                res.end()
            }
        })
    })
}

function oauth2callback(req, res) {
    var code = req.query.code
    lib.setNewToken(code, (err, token) => {
        if (err) {
            res.send(err)
            res.end()
        } else {
            res.redirect('/home')
        }
    })
}

function eventDelete(req, res) {
    console.log(req.body)
    let payload = req.body
    if (typeof payload.models == "string") {
        payload.models = JSON.parse(req.body.models)
        payload = payload.models[0]
    }
    lib.authorize((err, auth) => {
        let options = lib.deleteBuilder(payload)
        if (err) {
            console.error(err.message)
            res.send(err)
        } else {
            console.info(auth)
            options.auth = auth
        }

        lib.deleteEvent(options, (err, result) => {
            if (err) {
                console.error(err.message)
                res.send(err)
            } else {
                console.info(result)
                res.send(result)
                res.end()
            }
        })
    })
}

function eventUpdate(req, res) {
    console.log(req.body)
    let payload = req.body
    if (typeof payload.models == "string") {
        payload.models = JSON.parse(req.body.models)
        payload = payload.models[0]
    }
    lib.authorize((err, auth) => {
        let options = lib.updateBuilder(payload)
        if (err) {
            console.error(err.message)
            res.send(err)
        } else {
            console.info(auth)
            options.auth = auth
        }

        lib.updateEvent(options, (err, result) => {
            if (err) {
                console.error(err)
                res.send(err)
            } else {
                console.info(result)
                res.send(result)
                res.end()
            }
        })
    })
}


module.exports.index = index
module.exports.events = events
module.exports.eventCreate = eventCreate
module.exports.eventUpdate = eventUpdate
module.exports.eventDelete = eventDelete
module.exports.home = home
module.exports.setToken = setToken
module.exports.oauth2callback = oauth2callback