BerniWittmann/spielplanismaning

View on GitHub
src/routes/ansprechpartner.js

Summary

Maintainability
A
1 hr
Test Coverage
module.exports = function () {
    const logger = require('winston').loggers.get('apiAnsprechpartner');
    const express = require('express');
    const router = express.Router();

    const mongoose = require('mongoose');
    const Ansprechpartner = mongoose.model('Ansprechpartner');

    const messages = require('./messages/messages.js')();
    const helpers = require('./helpers.js');
    const handler = require('./handler.js');

    /**
     * @api {get} /ansprechpartner Get Ansprechpartner
     * @apiName GetAnsprechpartner
     * @apiDescription Lädt Ansprechpartner
     * @apiGroup Ansprechpartner
     *
     * @apiParam {String} [id]  Optionale ID des Ansprechpartners.
     *
     * @apiSuccess {String} _id ID des Ansprechpartners
     * @apiSuccess {String} name Name des Ansprechpartners
     * @apiSuccess {String} email Email des Ansprechpartners
     * @apiSuccess {String} turnier zuständiges Turnier des Ansprechpartners
     * @apiUse vResponse
     *
     * @apiUse ErrorAnsprechpartnerNotFoundMessage
     *
     * @apiSuccessExample Success-Response:
     *     HTTP/1.1 200 OK
     *     [{
     *         _id: '57cffb4055a8d45fc084c107',
     *         name: 'Hans Meyer',
     *         email: 'email@test.de',
     *         turnier: 'Kinderbeach',
     *         __v: 4
     *     }]
     *
     **/
    router.get('/', function (req, res) {
        return helpers.getEntity(Ansprechpartner, '', messages.ErrorAnsprechpartnerNotFound, res, req);
    });

    /**
     * @api {Post} /ansprechpartner Create Ansprechpartner
     * @apiName PostAnsprechpartner
     * @apiDescription Speichert einen neuen Ansprechpartner
     * @apiGroup Ansprechpartner
     *
     * @apiSuccess {String} _id ID des Ansprechpartners
     * @apiSuccess {String} name Name des Ansprechpartners
     * @apiSuccess {String} email Email des Ansprechpartners
     * @apiSuccess {String} turnier zuständiges Turnier des Ansprechpartners
     * @apiUse vResponse
     *
     * @apiPermission Admin
     *
     * @apiUse ErrorBadRequest
     * @apiUse AuthHeader
     * @apiParam {String} name Name des Ansprechpartners.
     * @apiParam {String} turnier Zuständiges Turnier des Ansprechpartners.
     * @apiParam {String} email E-Mail-Adresse des Ansprechpartners.
     *
     * @apiSuccessExample Success-Response:
     *      HTTP/1.1 200 OK
     *     [{
     *         _id: '57cffb4055a8d45fc084c107',
     *         name: 'Hans Meyer',
     *         email: 'email@test.de',
     *         turnier: 'Kinderbeach',
     *         __v: 4
     *     }]
     *
     **/
    router.post('/', function (req, res) {
        helpers.addEntity(Ansprechpartner, req, res);
    });

    /**
     * @api {del} /ansprechpartner Delete Ansprechpartner
     * @apiName DeleteAnsprechpartner
     * @apiDescription Löscht einen Ansprechpartner
     * @apiGroup Ansprechpartner
     * @apiPermission Admin
     *
     * @apiUse ErrorBadRequest
     * @apiUse AuthHeader
     *
     * @apiParam {String} id ID des Ansprechpartners.
     *
     * @apiUse SuccessDeleteMessage
     **/
    router.delete('/', function (req, res) {
        return helpers.removeEntityBy(Ansprechpartner, '_id', req.query.id, function (err) {
            return handler.handleErrorAndDeleted(err, res);
        });
    });

    /**
     * @api {put} /ansprechpartner Update Ansprechpartner
     * @apiName UpdateAnsprechpartner
     * @apiDescription Speichert Ansprechpartner
     * @apiGroup Ansprechpartner
     * @apiPermission Admin
     *
     * @apiUse ErrorBadRequest
     * @apiUse AuthHeader
     *
     * @apiParam {String} id ID des Ansprechpartners.
     *
     * @apiUse SuccessDeleteMessage
     * @apiUse ErrorAnsprechpartnerNotFoundMessage
     **/
    router.put('/', function (req, res) {
        Ansprechpartner.findById(req.query.id, function (err, ansprechpartner) {
            if (!ansprechpartner) {
                return messages.ErrorAnsprechpartnerNotFound(res, err);
            }

            if (err) {
                return messages.Error(res, err);
            }

            logger.verbose('Updating Ansprechpartner', req.body);

            ansprechpartner = helpers.updateDocByKeys(ansprechpartner, ['name', 'email', 'turnier'], req.body);

            logger.silly('Save', ansprechpartner);
            ansprechpartner.save(function (err, ansprechpartner) {
                return handler.handleErrorAndResponse(err, res, ansprechpartner);
            });
        });
    });

    return router;
};