lisa-box
Version:
Home automation system L.I.S.A.
325 lines (321 loc) • 7.69 kB
JavaScript
'use strict'
const footprintsConfig = require('./footprints')
const Joi = require('joi')
/**
* Routes Configuration
* (trails.config.routes)
*
* Configure how routes map to views and controllers.
*
* @see http://trailsjs.io/doc/config/routes.js
*/
module.exports = [
{
method: 'GET',
path: '/images',
handler: {
directory: {
path: 'web/assets/assets/images'
}
}
},
{
method: 'GET',
path: '/avatar',
handler: {
directory: {
path: 'uploads'
}
}
},
{
method: 'POST',
path: `${footprintsConfig.prefix}/{model}`,
handler: 'FootprintController.create'
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/{model}/{id?}`,
handler: 'FootprintController.find'
},
{
method: ['PUT', 'PATCH'],
path: `${footprintsConfig.prefix}/{model}/{id?}`,
handler: 'FootprintController.update'
},
{
method: 'DELETE',
path: `${footprintsConfig.prefix}/{model}/{id?}`,
handler: 'FootprintController.destroy'
},
{
method: 'POST',
path: `${footprintsConfig.prefix}/{parentModel}/{parentId}/{childAttribute}`,
handler: 'FootprintController.createAssociation'
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/{parentModel}/{parentId}/{childAttribute}/{childId?}`,
handler: 'FootprintController.findAssociation'
},
{
method: 'PUT',
path: `${footprintsConfig.prefix}/{parentModel}/{parentId}/{childAttribute}/{childId?}`,
handler: 'FootprintController.updateAssociation'
},
{
method: 'DELETE',
path: `${footprintsConfig.prefix}/{parentModel}/{parentId}/{childAttribute}/{childId?}`,
handler: 'FootprintController.destroyAssociation'
},
{
method: 'POST',
path: `${footprintsConfig.prefix}/user`,
handler: 'UserController.updateProfile'
},
{
method: 'POST',
path: `${footprintsConfig.prefix}/setup/voice_commands`,
handler: 'VoiceCommandsController.setupVoiceCommands'
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/user`,
handler: 'UserController.getProfile'
},
{
method: 'GET',
path: '/isAlive',
handler: 'DefaultController.isAlive'
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/initialized`,
handler: 'DefaultController.isInitialized'
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/favorite`,
handler: 'FavoritesController.getFavorite'
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/room/{id}/devices`,
handler: 'RoomController.findAssociation'
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/device`,
handler: 'DeviceController.find'
},
{
method: 'POST',
path: `${footprintsConfig.prefix}/device`,
handler: 'DeviceController.createOrUpdateFromFront'
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/plugin`,
handler: 'PluginController.find'
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/plugin/search`,
handler: 'PluginController.search'
},
{
method: 'POST',
path: `${footprintsConfig.prefix}/plugin/{id}/drivers/{driver}/pairing`,
handler: 'PluginController.pairing'
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/plugin/{id}/drivers/{driver}/devices`,
handler: 'PluginController.getDevicesForPairing'
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/plugin/{id}/images/{name}/{subname?}`,
handler: 'PluginController.image',
config: {
validate: {
params: Joi.object({
id: Joi.string().required(),
name: Joi.string().required(),
subname: Joi.string()
})
}
}
},
{
method: 'PUT',
path: `${footprintsConfig.prefix}/favorite/{id}`,
handler: 'FavoritesController.putFavorite',
config: {
validate: {
params: Joi.object({
id: Joi.string().required()
})
}
}
},
{
method: 'DELETE',
path: `${footprintsConfig.prefix}/favorite/{id}`,
handler: 'FavoritesController.destroyFavorite',
config: {
validate: {
params: Joi.object({
id: Joi.string().required()
})
}
}
},
{
method: 'POST',
path: `${footprintsConfig.prefix}/plugins/{plugin}/{device}`,
handler: 'PluginController.setValue',
config: {
validate: {
params: Joi.object({
plugin: Joi.string().required(),
device: Joi.string().required()
}),
payload: Joi.object({
key: Joi.string().required(),
value: Joi.any().required()
})
}
}
},
{
method: 'POST',
path: `${footprintsConfig.prefix}/devices/group/{roomId}/{type}`,
handler: 'PluginController.setGroupValue',
config: {
validate: {
params: Joi.object({
roomId: Joi.string().required(),
type: Joi.string().required()
}),
payload: Joi.object({
key: Joi.string().required(),
value: Joi.any().required()
})
}
}
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/dashboard/room/{roomId?}`,
handler: 'DashboardController.getOrderedDeviceForRoom',
config: {
validate: {
params: Joi.object({
roomId: Joi.string()
})
}
}
},
{
method: 'POST',
path: `${footprintsConfig.prefix}/dashboard/room/{roomId?}`,
handler: 'DashboardController.saveDevicesOrderForRoom',
config: {
validate: {
params: Joi.object({
roomId: Joi.string()
}),
payload: Joi.array()
}
}
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/ir/start`,
handler: 'IRController.start'
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/ir/stop`,
handler: 'IRController.stop'
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/ir/quit`,
handler: 'IRController.quit'
},
{
method: 'POST',
path: `${footprintsConfig.prefix}/ir/button`,
handler: 'IRController.quit',
config: {
validate: {
payload: Joi.object({
button: Joi.string().required()
})
}
}
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/camera/snapshot`,
handler: 'CameraController.snapshot',
config: {
validate: {
query: Joi.object({
url: Joi.string().required(),
token: Joi.string().required()
})
}
}
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/chatbot/userbot`,
handler: 'ChatBotController.userBot'
},
{
method: 'DELETE',
path: `${footprintsConfig.prefix}/chatbot/userbot/{id}`,
handler: 'ChatBotController.deleteUserBot',
config: {
validate: {
params: Joi.object({
id: Joi.string().required()
})
}
}
},
{
method: 'POST',
path: `${footprintsConfig.prefix}/chatbot/userbot`,
handler: 'ChatBotController.saveUserBot',
config: {
validate: {
payload: Joi.object({
name: Joi.string().allow(''),
displayName: Joi.string().required(),
data: Joi.object({
sentences: Joi.array().required(),
responses: Joi.array().required(),
commands: Joi.array().required()
}).required()
})
}
}
},
{
method: 'GET',
path: `${footprintsConfig.prefix}/camera/stream`,
handler: 'CameraController.stream',
config: {
validate: {
query: Joi.object({
url: Joi.string().required(),
token: Joi.string().required()
})
}
}
}
]