Ver código fonte

Add settings route

sbkwgh 8 anos atrás
pai
commit
27d4d029c6
3 arquivos alterados com 91 adições e 0 exclusões
  1. 18 0
      models/settings.js
  2. 72 0
      routes/settings.js
  3. 1 0
      server.js

+ 18 - 0
models/settings.js

@@ -0,0 +1,18 @@
+module.exports = (sequelize, DataTypes) => {
+	let Settings = sequelize.define('Settings', {
+		forumName: DataTypes.STRING,
+		forumDescription: DataTypes.STRING
+	}, {
+		classMethods: {
+			set (values) {
+				values.id = 1
+				return Settings.upsert(values)
+			},
+			get () {
+				return Settings.findById(1)
+			}
+		}
+	})
+
+	return Settings
+}

+ 72 - 0
routes/settings.js

@@ -0,0 +1,72 @@
+let express = require('express')
+let router = express.Router()
+
+const Errors = require('../lib/errors')
+let { Settings } = require('../models')
+
+router.get('/', async (req, res) => {
+	try {
+		let settings = await Settings.get()
+
+		res.json(settings.toJSON())
+	} catch (e) {
+		res.status(500)
+		res.json({
+			errors: [Errors.unknown]
+		})
+	}
+	
+})
+
+router.all('*', (req, res, next) => {
+	if(req.session.admin) {
+		next()
+	} else {
+		res.status(401)
+		res.json({
+			errors: [Errors.requestNotAuthorized]
+		})
+	}
+})
+
+router.put('/', async (req, res) => {
+	let validationErrors = []
+	let params = {}
+
+	try {
+		if(req.body.forumName !== undefined) {
+			if(typeof req.body.forumName !== 'string') {
+				validationErrors.push(Errors.invalidParameterType('forumName', 'string'))
+			} else {
+				params.forumName = req.body.forumName
+			}
+		}
+		if(req.body.forumDescription !== undefined) {
+			if(typeof req.body.forumDescription !== 'string') {
+				validationErrors.push(Errors.invalidParameterType('forumDescription', 'string'))
+			} else {
+				params.forumDescription = req.body.forumDescription
+			}
+		}
+		
+		if(validationErrors.length) throw Errors.VALIDAITON_ERROR
+
+		let updatedSettings = await Settings.set(params)
+		res.json(updatedSettings.toJSON())
+		
+	} catch (e) {
+		if(e === Errors.VALIDAITON_ERROR) {
+			res.status(400)
+			res.json({
+				errors: [validationErrors]
+			})
+		} else {
+			res.status(500)
+			res.json({
+				errors: [Errors.unknown]
+			})
+		}
+	}
+})
+
+module.exports = router

+ 1 - 0
server.js

@@ -32,6 +32,7 @@ app.use('/api/v1/admin_token', require('./routes/admin_token'))
 app.use('/api/v1/category', require('./routes/category'))
 app.use('/api/v1/thread', require('./routes/thread'))
 app.use('/api/v1/post', require('./routes/post'))
+app.use('/api/v1/settings', require('./routes/settings'))
 
 sequelize
 	.sync({ force: true })