RackHD/on-http

View on GitHub
lib/api/2.0/tags.js

Summary

Maintainability
A
2 hrs
Test Coverage
// Copyright © 2017 Dell Inc. or its subsidiaries. All Rights Reserved.

'use strict';

var injector = require('../../../index.js').injector;
var controller = injector.get('Http.Services.Swagger').controller;
var getTagName = injector.get('Http.Services.Swagger').getTagName;
var nodes = injector.get('Http.Services.Api.Nodes');
var tags = injector.get('Http.Services.Api.Tags');
var _ = injector.get('_'); // jshint ignore:line
var Errors = injector.get('Errors');

var getAllTags = controller(function(req) {
    return tags.findTags(req.query);
});

var createTag = controller({success: 201}, function(req) {
    return tags.findTags({name: req.swagger.params.body.value.name}).then(function(tag) {
        if(_.isEmpty(tag)) {
            return tags.createTag(req.swagger.params.body.value).then(function() {
                return tags.regenerateTags();
            });
        } else {
            // TODO: Replace with HttpError after errors are refactored
            var err = new Errors.BaseError('tag name already exists');
            err.status = 409;
            throw err;
        }
    }).then(function() {
        return tags.getTag(req.swagger.params.body.value.name);
    });
});

var getTag = controller(function(req) {
    return tags.getTag(getTagName(req));
});

var deleteTag = controller({success: 204}, function(req) {
    return tags.destroyTag(getTagName(req));
});

var getNodesByTag = controller(function(req) {
    return nodes.getNodesByTag(getTagName(req));
});

var postWorkflowById = controller({success: 202}, function(req) {
    return nodes.getNodesByTag(getTagName(req)).map(function(node) {
        var config = _.defaults(
            req.swagger.params.name.value ? { name: req.swagger.params.name.value } : {},
            req.swagger.params.body.value || {}
        );
        return nodes.setNodeWorkflow(config, node.id);
    });
});

module.exports = {
    getAllTags: getAllTags,
    createTag: createTag,
    getTag: getTag,
    deleteTag: deleteTag,
    getNodesByTag: getNodesByTag,
    postWorkflowById: postWorkflowById
};