123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- const asyncWrapper = require('../middleware/asyncWrapper');
- const ErrorResponse = require('../utils/ErrorResponse');
- const Config = require('../models/Config');
- const { Op } = require('sequelize');
- // @desc Insert new key:value pair
- // @route POST /api/config
- // @access Public
- exports.createPair = asyncWrapper(async (req, res, next) => {
- const pair = await Config.create(req.body);
- res.status(201).json({
- success: true,
- data: pair
- })
- })
- // @desc Get all key:value pairs
- // @route GET /api/config
- // @route GET /api/config?keys=foo,bar,baz
- // @access Public
- exports.getAllPairs = asyncWrapper(async (req, res, next) => {
- let pairs;
- if (req.query.keys) {
- // Check for specific keys to get in a single query
- const keys = req.query.keys
- .split(',')
- .map((key) => { return { key } });
- pairs = await Config.findAll({
- where: {
- [Op.or]: keys
- }
- });
- } else {
- // Else get all
- pairs = await Config.findAll();
- }
- res.status(200).json({
- success: true,
- data: pairs
- })
- })
- // @desc Get single key:value pair
- // @route GET /api/config/:key
- // @access Public
- exports.getSinglePair = asyncWrapper(async (req, res, next) => {
- const pair = await Config.findOne({
- where: { key: req.params.key }
- });
- if (!pair) {
- return next(new ErrorResponse(`Key ${req.params.key} was not found`, 404));
- }
- res.status(200).json({
- success: true,
- data: pair
- })
- })
- // @desc Update value
- // @route PUT /api/config/:key
- // @access Public
- exports.updateValue = asyncWrapper(async (req, res, next) => {
- let pair = await Config.findOne({
- where: { key: req.params.key }
- });
- if (!pair) {
- return next(new ErrorResponse(`Key ${req.params.key} was not found`, 404));
- }
- if (pair.isLocked) {
- return next(new ErrorResponse(`Value of key ${req.params.key} is locked and can not be changed`, 400));
- }
- pair = await pair.update({ ...req.body });
- res.status(200).json({
- success: true,
- data: pair
- })
- })
- // @desc Update multiple values
- // @route PUT /api/config/
- // @access Public
- exports.updateValues = asyncWrapper(async (req, res, next) => {
- Object.entries(req.body).forEach(async ([key, value]) => {
- await Config.update({ value }, {
- where: { key }
- })
- })
-
- const config = await Config.findAll();
- res.status(200).send({
- success: true,
- data: config
- })
- })
- // @desc Delete key:value pair
- // @route DELETE /api/config/:key
- // @access Public
- exports.deletePair = asyncWrapper(async (req, res, next) => {
- const pair = await Config.findOne({
- where: { key: req.params.key }
- });
- if (!pair) {
- return next(new ErrorResponse(`Key ${req.params.key} was not found`, 404));
- }
- if (pair.isLocked) {
- return next(new ErrorResponse(`Value of key ${req.params.key} is locked and can not be deleted`, 400));
- }
- await pair.destroy();
- res.status(200).json({
- success: true,
- data: {}
- })
- })
|