Skip to content

Commit

Permalink
mapRelations
Browse files Browse the repository at this point in the history
  • Loading branch information
Felipe Klerk Signorini committed Aug 18, 2017
1 parent e38338b commit a0a6d3e
Show file tree
Hide file tree
Showing 11 changed files with 139 additions and 66 deletions.
2 changes: 2 additions & 0 deletions app/core/applications/persistenceApplication.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const Access = require('core/entities/accessRole');

const aclRoles = require('./transforms/aclRoles');
const jsonParser = require('./transforms/jsonParser');
const strIDtoObjectID = require('./transforms/strIDtoObjectID');


const PersistenceApp = (Entity, PersistenceServices = DPersistenceServices) => {
Expand All @@ -21,6 +22,7 @@ const PersistenceApp = (Entity, PersistenceServices = DPersistenceServices) => {
find (req, res, next) {

let {query, user} = req;
query = strIDtoObjectID(query, Entity.mapRelations)
query = _.defaults(query, {limit: 20}, {page: 1});
query = jsonParser(query, 'query');

Expand Down
16 changes: 16 additions & 0 deletions app/core/applications/transforms/strIDtoObjectID.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
'use strict';

const _ = require('lodash');
const {ObjectId} = require('mongorito');

module.exports = function (query, keys) {

if(!_.isEmpty(keys)) {
_.each(keys, (e) => {
if (query.hasOwnProperty(e)) {
query[e] = ObjectId(query[e]);
}
});
}
return query;
};
5 changes: 3 additions & 2 deletions app/core/repositories/daos/DBConnector.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,9 @@ class Dao extends Model {
return this[opp](filter, '$addToSet', options);
}

updateByPull(filter, options, many = '') {
const opp = `update${many}Factory`;
updateByPull(filter, options) {
const {oUpdater} = options;
const opp = `update${oUpdater||''}Factory`;

return this[opp](filter, '$pull', options);
}
Expand Down
48 changes: 33 additions & 15 deletions app/inventory/applications/persistenceSystem.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,43 @@ const _ = require('lodash');
const PersistenceServices = require('core/services/PersistenceServices');
const PersistenceSystem = require('../services/PersistenceServices');
const notExist = require('core/applications/validator/validNotExist');
const hateaosTransform = require('core/applications/transforms/hateoasTransform');

const persistenceSystem = (Entity) => (IEntity) => {

return {
insertApp(req, res, next) {

PersistenceServices(Entity)
.findOne(req.params.id, req.user)
.then(notExist)
.then((e) => {
const ids = _.isArray(_.get(req, 'body.id')) ? req.body.id : [];
const system = _.pick(e, 'name', '_id');

PersistenceSystem(IEntity)
.addList(ids, {system}, req.user);
})
.then(e => res.json(e))
.catch(next);
}
insertApp(req, res, next) {

PersistenceServices(Entity)
.findOne(req.params.id, req.user)
.then(notExist)
.then((e) => {
const ids = _.isArray(_.get(req, 'body.id')) ? req.body.id : [];
const system = _.pick(e, 'name', '_id');

return PersistenceSystem(IEntity)
.addList(ids, {system}, req.user);
})
.then(hateaosTransform(Entity).singleTransform)
.then(e => res.status(202).json(e))
.catch(next);
},

removeApp(req, res, next) {

PersistenceServices(Entity)
.findOne(req.params.id, req.user)
.then(notExist)
.then((e) => {
const ids = _.isArray(_.get(req, 'body.id')) ? req.body.id : [];
const system = _.pick(e, 'name', '_id');

return PersistenceSystem(IEntity)
.removeList(ids, {system}, req.user);
})
.then(e => res.status(204).json(e))
.catch(next);
}
};
};

Expand Down
18 changes: 10 additions & 8 deletions app/inventory/entities/Application.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,21 @@ const app = () => {
const filled = [..._.slice(singleFilled, 3)]; // delete id

return {
name: "applications",
name: "applications",

access: 'roles',
access: 'roles',

validators: require('../validators/applications'),
validators: require('../validators/applications'),

dao: Applications,
dao: Applications,

defaults: {family: 'Application'},
defaults: {family: 'Application'},

filled,
singleFilled,
resFilled
mapRelations: ['system._id'],

filled,
singleFilled,
resFilled
};
};

Expand Down
18 changes: 11 additions & 7 deletions app/inventory/entities/Clients.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,21 @@ const clients = () => {
const filled = [..._.slice(singleFilled, 3)]; // delete id

return {
name: "clients",
name: "clients",

access: 'roles',
access: 'roles',

validators: require('../validators/clients'),
validators: require('../validators/clients'),

dao: Clients,
dao: Clients,

filled,
singleFilled,
resFilled
defaults: {},

mapRelations: [],

filled,
singleFilled,
resFilled
};
};

Expand Down
18 changes: 11 additions & 7 deletions app/inventory/entities/Datacenter.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,21 @@ const app = () => {
const filled = [..._.slice(singleFilled, 3)]; // delete id

return {
name: "datacenters",
name: "datacenters",

access: 'roles',
access: 'roles',

validators: require('../validators/datacenters'),
validators: require('../validators/datacenters'),

dao: Datacenters,
dao: Datacenters,

filled,
singleFilled,
resFilled
defaults: {},

mapRelations: [],

filled,
singleFilled,
resFilled
};
};

Expand Down
20 changes: 12 additions & 8 deletions app/inventory/entities/Servers.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,26 @@ const servers = () => {
const resFilled = ['_id', 'updated_at', 'created_at', 'hostname', 'ipv4_private', 'ipv4_public', 'os.base', 'os.dist', 'dc.name', 'dc.zone', 'role', 'environment', 'auth.name', 'auth.username', 'auth.type', 'tags'];

const singleFilled = [...resFilled, 'cpu', 'memory', 'storage', 'services', 'dc', 'os', 'auth', 'role', 'environment',
'roles', 'owner', 'active', 'status'];
'roles', 'owner', 'active', 'status'];

const filled = [..._.slice(singleFilled, 3)]; // delete id

return {
name: "servers",
name: "servers",

access: 'roles',
access: 'roles',

validators: require('../validators/servers'),
validators: require('../validators/servers'),

dao: Servers,
dao: Servers,

filled,
singleFilled,
resFilled
defaults: {},

mapRelations: [],

filled,
singleFilled,
resFilled
};
};

Expand Down
18 changes: 11 additions & 7 deletions app/inventory/entities/System.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,21 @@ const system = () => {
const filled = [..._.slice(singleFilled, 3)]; // delete id

return {
name: "systems",
name: "systems",

access: 'roles',
access: 'roles',

validators: require('../validators/system'),
validators: require('../validators/system'),

dao: System,
dao: System,

filled,
singleFilled,
resFilled
defaults: {},

mapRelations: ['clients._id'],

filled,
singleFilled,
resFilled
};
};

Expand Down
4 changes: 3 additions & 1 deletion app/inventory/routers/system/system.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,7 @@ module.exports = function (router) {
/**
* Applications
*/
.patch('/:id/applications', authenticate(), PersistenceSystem.insertApp);
.patch('/:id/applications', authenticate(), PersistenceSystem.insertApp)

.delete('/:id/applications', authenticate(), PersistenceSystem.removeApp);
};
38 changes: 27 additions & 11 deletions app/inventory/services/PersistenceServices.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,37 @@ const Persistence = (Entity, FactoryDBRepository = DFactoryDBRepository) => {
const DBRepository = FactoryDBRepository(Entity, {oUpdater: 'Many'});

return {
addList (_id, post, owner, access = Access.ROLE_WRITER) {
addList(_id, post, owner, access = Access.ROLE_WRITER) {

return new Promise((resolve, reject) => {
return new Promise((resolve, reject) => {

const prepared = _.assign({},
accessMergeTransform(owner, Entity.access, {_id}, access)
);
const prepared = _.assign({},
accessMergeTransform(owner, Entity.access, {_id}, access)
);

return DBRepository
.updateByPushUnique(prepared, post)
.then(resolve)
.catch(reject);
});
return DBRepository
.updateByPushUnique(prepared, post)
.then(resolve)
.catch(reject);
});

},
},

removeList(_id, post, owner, access = Access.ROLE_WRITER) {

return new Promise((resolve, reject) => {

const prepared = _.assign({},
accessMergeTransform(owner, Entity.access, {_id}, access)
);

return DBRepository
.updateByPull(prepared, post)
.then(resolve)
.catch(reject);
});

}


};
Expand Down

0 comments on commit a0a6d3e

Please sign in to comment.