this.removePlayerFromRoster=function(playerId,seasonId){ var rostersDao = new universalDaoModule.UniversalDao( this.ctx.mongoDriver, {collectionName: 'rosters'} ); var qf=QueryFilter.create(); qf.addCriterium("baseData.season.oid",QueryFilter.operation.EQUAL,seasonId); qf.addCriterium("listOfPlayers.players",QueryFilter.operation.ALL,[{"registry" : "people","oid" : playerId}]); rostersDao.find(qf,function(err,rosters){ if (err) { log.error(err); } rosters.forEach(function(roster){ var filteredPlayers=[]; roster.listOfPlayers.players.forEach(function(playerLink){ if (playerLink && playerLink.oid!==playerId){ filteredPlayers.push(playerLink); } }); roster.listOfPlayers.players=filteredPlayers; roster.baseData.lastModification=new Date().getTime(); rostersDao.save(roster,function(err){ if (err){ log.error(err); return; } log.debug("player removed from roster",playerId,roster); }); }); }); };
it('Create - dao should create object', function(done) { // this is first test, there should be no user var cn = 'testCol'; var d = new universalDaoModule.UniversalDao( mongoDriver, {collectionName: cn} ); d.save(user1, function(err, data) { if (err) { throw new Error(err); } mongoDriver.getDb().collection(cn).find(function(err, cursor) { if (err) { throw new Error(err); } cursor.toArray(function(err, mongoData) { if (err) { throw new Error(err); } // we inserted single record into empty collection expect(mongoData.length).to.be.equal(1); expect(mongoData[0].name.firstName).to.be.equal(user1.name.firstName); expect(mongoData[0]._id).to.not.be.undefined(); expect(mongoData[0]._id.toHexString()).to.be.equal(data.id); savedId = user1.id; done(); }); }); }); });
it('Read - dao should return saved object', function(done) { var cn = 'testCol'; var d = new universalDaoModule.UniversalDao( mongoDriver, {collectionName: cn} ); d.get(user1.id, function(err, data) { if (err) { throw new Error(err); } mongoDriver.getDb().collection(cn).findOne({"_id": new ObjectID.createFromHexString(user1.id)}, function(err, mongoData) { if (err) { throw new Error(err); } expect(mongoData._id.toHexString()).to.be.equal(data.id); expect(data.id).to.be.equal(user1.id); expect(data).to.be.eql(user1); done(); }); }); });
this.handleFeeRecount=function(event){ var peopleDao = new universalDaoModule.UniversalDao( this.ctx.mongoDriver, {collectionName: 'people'} ); peopleDao.get(event.id,function(err,data){ self.handlePlayerChange({entity:data},true); }); };
it('Distinct - should return distinct values for a path', function(done) { // this is first test, there should be no user var cn = 'testCol'; var d = new universalDaoModule.UniversalDao( mongoDriver, {collectionName: cn} ); var a1 = { meta: { tags: ['orange', 'blue'] } }; var a2 = { meta: { tags: ['red'] } }; var a3 = { meta: { tags: ['orange'] } }; d.save(a1, function(err, data) { if (err) { throw new Error(err); } d.save(a2, function(err, data) { if (err) { throw new Error(err); } d.save(a2, function(err, data) { if (err) { throw new Error(err); } d.distinct('meta.tags', {}, function(err, data) { if (err) { throw new Error(err); } expect(data.length).to.be.equal(3); expect(data).to.include('red'); expect(data).to.include('orange'); expect(data).to.include('blue'); done(); }); }); }); }); });
this.handleHostingEnd=function (event){ var self=this; var transferDao = new universalDaoModule.UniversalDao( this.ctx.mongoDriver, {collectionName: 'transfersOfficer'} ); var peopleDao = new universalDaoModule.UniversalDao( this.ctx.mongoDriver, {collectionName: 'people'} ); transferDao.get(event.transferId,function (err,transfer){ if (err){log.error(err);return;} console.log(transfer); transfer.baseData.active='FALSE'; peopleDao.get(transfer.baseData.officer.oid,function(err,officer){ if (err){log.error(err);return;} if (!officer.officer){ self.ctx.eventRegistry.emitProcesingError('Osoba nie je funkcionár. Transfer nebol vykonaný.',event); return; } if (!officer.officer.club || !officer.officer.club.oid ){ self.ctx.eventRegistry.emitProcesingError('Funkcionár nemá definovaný klub. Transfer nebol vykonaný.',event); return; } if (officer.officer.club.oid!=transfer.baseData.clubTo.oid){ self.ctx.eventRegistry.emitProcesingError('Klub TO sa nezhoduje s aktuálnym klubom. Transfer nebol vykonaný.',event); return; } officer.officer.club=transfer.baseData.clubFrom; officer.officer.dateOfApplicationForId=null; officer.officer.dateOfExpiration=null; var playerId=officer.id; peopleDao.save(officer, function(err,data){ if (err){log.error(err);return;} transferDao.save(transfer,function(err,data){ if (err){log.error(err);return;} log.verbose('transfer updated'); self.removePlayerFromRoster(playerId,transfer.baseData.season.oid); }); }); }); }); };
it('Delete - dao should remove saved object', function(done) { var cn = 'testCol'; var d = new universalDaoModule.UniversalDao( mongoDriver, {collectionName: cn} ); d.remove(user1.id, function(err, count) { if (err) { throw new Error(err); } expect(count).to.be.equal(1); done(); }); });
peopleDao.get(transfer.baseData.officer.oid,function(err,officer){ if (err){log.error(err);return;} if (!officer.officer){ self.ctx.eventRegistry.emitProcesingError('Osoba nie je funkcionár. Transfer nebol vykonaný.',event); return; } if (!officer.officer.club || !officer.officer.club.oid ){ self.ctx.eventRegistry.emitProcesingError('Funkcionár nemá definovaný klub. Transfer nebol vykonaný.',event); return; } if (officer.officer.club.oid!=transfer.baseData.clubFrom.oid){ self.ctx.eventRegistry.emitProcesingError('Klub FROM sa nezhoduje s aktuálnym klubom. Transfer nebol vykonaný.',event); return; } officer.officer.club=transfer.baseData.clubTo; officer.officer.dateOfApplicationForId=null; officer.officer.dateOfExpiration=null; var playerId=officer.id; peopleDao.save(officer, function(err,data){ if (err){log.error(err);return;} transferDao.save(transfer,function(err,data){ if (err){log.error(err);return;} self.removePlayerFromRoster(playerId,transfer.baseData.season.oid); }); }); });
d.save(a2, function(err, data) { if (err) { throw new Error(err); } d.save(a2, function(err, data) { if (err) { throw new Error(err); } d.distinct('meta.tags', {}, function(err, data) { if (err) { throw new Error(err); } expect(data.length).to.be.equal(3); expect(data).to.include('red'); expect(data).to.include('orange'); expect(data).to.include('blue'); done(); }); }); });
setTimeout(updateObjectMangler.mangle(obj, compiledSchema, function(err, local) { if (err){ next(err); return; } if (local && local.length>0){ callback(null,convertLocalErrors(local)); return; } _dao.update(obj, function(err, data){ if (err) { next(err); return; } callback(null,null,data); if (compiledSchema[consts.FIRE_EVENTS] && compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_UPDATE] ){ log.silly('Firing event',compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_UPDATE]); eventRegistry.emitEvent(compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_UPDATE],{entity:obj,user:userCtx.user}); } var auditEntity={}; auditEntity.obj = obj; auditEntity.user = userCtx.user.id; auditEntity.action = "update"; auditEntity.timeStamp = new Date().getTime(); auditEntity.schemaName = schemaName; _daoAudit.save(auditEntity, function (data){}); }); }
peopleDao.save(officer, function(err,data){ if (err){log.error(err);return;} transferDao.save(transfer,function(err,data){ if (err){log.error(err);return;} self.removePlayerFromRoster(playerId,transfer.baseData.season.oid); }); });
this.getBySchema = function(schemaName,userCtx,id,callback) { var schema = schemaRegistry.getSchema(schemaName); if (!schema) { log.error('schema %s not found', schemaName); throw new Error('Schema not found'); } var compiledSchema = schema.compiled; if (!compiledSchema) { log.error('schema %s is not compiled', schemaName); throw new Error('Schema is not compiled'); } if (!securityService.hasRightForAction(compiledSchema,securityServiceModule.actions.READ,userCtx.perm)){ callback(null,securityService.missingPermissionMessage(securityService.requiredPermissions(compiledSchema,securityServiceModule.actions.READ))); log.verbose('Not authorized to get object ',schemaName); return; } _dao = new universalDaoModule.UniversalDao( mongoDriver, {collectionName: compiledSchema.table} ); if (!id){ log.error('Id is not defined for read from schema', schemaName); throw new Error ('Id is not defined.'); } _dao.get(id, function(err, data){ if (err) { log.error(err); next(err); return; } setTimeout(getObjectMangler.mangle(data, compiledSchema, function(err, cb) { if (err){next(err); return;} callback(null,null,data); }), 0); }); };
this.getArticleTagsDistinct = function(req, callback) { log.silly('searching tags distinct', req.params); var dao = new universalDaoModule.UniversalDao(mongoDriver, { collectionName: 'portalArticles' }); //db.portalArticles.distinct("meta.tags") var qf=QueryFilter.create(); dao.distinct('meta.tags',qf, function(err, data) { if (err) { callback(err); } else { callback(null,null,data); } }); };
eventScheduler.unscheduleEvents(entity.id,"event-player-recount-fees",function(err,data) { if (entity.hockeyPlayerInfo && entity.hockeyPlayerInfo.isActivePlayer ){ if (entity.hockeyPlayerInfo.clubName){ if (!entity.membershipFeeInfo){ entity.membershipFeeInfo={}; } if (!entity.membershipFeeInfo.paymentFrequency){ entity.membershipFeeInfo.paymentFrequency='12xročne'; } if (entity.baseData.birthDate){ organizationsDao.get(entity.hockeyPlayerInfo.clubName.oid,function(err,org){ var refDate=new Date(); refDate.setMonth(8);//september refDate.setDate(1); var age=dateUtils.ageOnDate(refDate,dateUtils.reverseToDate(entity.baseData.birthDate)); if ('Extraliga'==org.baseData.competitionCategory){ var willSave=false; if (!entity.membershipFeeInfo.membershipFee || force ){ willSave=true; } if (age<24){ entity.membershipFeeInfo.membershipFee=6000; entity.membershipFeeInfo.membershipType="Extraliga do 23r."; // scheduled on next years if (!force){ eventScheduler.scheduleEvent( new Date((refDate.getFullYear()+24-age),8,1).getTime(),'event-player-recount-fee-profile',{id:entity.id},[entity.id],function(err,data){ if (err){ log.err(err); return; } log.debug('Scheduled fee profile recount',entity.id); } ); } } else { entity.membershipFeeInfo.membershipFee=9600; entity.membershipFeeInfo.membershipType="Extraliga nad 23r."; } if (willSave){ peopleDao.save(entity,function(err,data){ if (err){ log.error(err); } log.info('Player fee profile updated ', entity.id ); }); } } }); } } } });
it('Update - dao should update saved object empty unset', function(done) { var cn = 'testCol'; var d = new universalDaoModule.UniversalDao( mongoDriver, {collectionName: cn} ); var updatedUser = { id: user1.id, name: { firstName: 'Jim' }, address: { city: 'notnullcity' } }; d.update(updatedUser, function(err, count){ if (err) { throw new Error(err); } expect(count).to.be.equal(1); mongoDriver.getDb().collection(cn).findOne({"_id": new ObjectID.createFromHexString(user1.id)}, function(err, mongoData) { if (err) { throw new Error(err); } expect(mongoData._id.toHexString()).to.be.equal(updatedUser.id); expect(mongoData.name.firstName).to.be.equal(updatedUser.name.firstName); expect(mongoData.name.lastName).to.be.equal(user1.name.lastName); expect(mongoData.address).to.include.key('city'); done(); }); }); });
function(err) { // async final callback if (err) { done(new Error('Failed to prepare test data')); } var opts = { crits: [{f: 'name', op: 'eq', v: 'fero'}] }; d.list(opts, function(err, result) { if (err) { done(err); } done(); }); });
rosters.forEach(function(roster){ var filteredPlayers=[]; roster.listOfPlayers.players.forEach(function(playerLink){ if (playerLink && playerLink.oid!==playerId){ filteredPlayers.push(playerLink); } }); roster.listOfPlayers.players=filteredPlayers; roster.baseData.lastModification=new Date().getTime(); rostersDao.save(roster,function(err){ if (err){ log.error(err); return; } log.debug("player removed from roster",playerId,roster); }); });
setTimeout(saveObjectMangler.mangle(obj, compiledSchema, function(err, local) { if (err){ log.error(err); next(err); return; } if (local && local.length>0){ res.status(400); next(convertLocalErrors(local)); return; } objectTools.removeNullProperties(obj); _dao.save(obj, function(err, data){ if (err) { log.error(err); next(err); return; } callback(null,null,data); if (compiledSchema[consts.FIRE_EVENTS] && compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE] ){ log.silly('Firing event',compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE]); eventRegistry.emitEvent(compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE],{entity:data,user:req.currentUser}); } var auditEntity={}; auditEntity.obj = obj; auditEntity.user = req.currentUser.id; auditEntity.action = "create"; auditEntity.timeStamp = new Date().getTime(); auditEntity.schemaName = schemaName; _daoAudit.save(auditEntity, function (data){ }); }); }
it('List with criteria - dao should find object by criteria', function(done) { var cn = 'testCol2'; var d = new universalDaoModule.UniversalDao( mongoDriver, {collectionName: cn} ); // prepare several objects async.parallel([function (callback) { mongoDriver.getDb().collection(cn).save({ name: 'fero', age: 15 }, callback); }, function(callback) { mongoDriver.getDb().collection(cn).save({ name: 'jozo', age: 17 }, callback); }], function(err) { // async final callback if (err) { done(new Error('Failed to prepare test data')); } var opts = { crits: [{f: 'name', op: 'eq', v: 'fero'}] }; d.list(opts, function(err, result) { if (err) { done(err); } done(); }); }); });
_dao.save(obj, function(err, data){ if (err) { log.error(err); next(err); return; } callback(null,null,data); if (compiledSchema[consts.FIRE_EVENTS] && compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE] ){ log.silly('Firing event',compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE]); eventRegistry.emitEvent(compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE],{entity:data,user:req.currentUser}); } var auditEntity={}; auditEntity.obj = obj; auditEntity.user = req.currentUser.id; auditEntity.action = "create"; auditEntity.timeStamp = new Date().getTime(); auditEntity.schemaName = schemaName; _daoAudit.save(auditEntity, function (data){ }); });
this.searchBySchema = function(schemaName,userCtx,query,callback) { log.silly('searching in ',schemaName,' for', query); var schema = schemaRegistry.getSchema(schemaName); var dao = new universalDaoModule.UniversalDao(mongoDriver, { collectionName: schema.compiled.table }); var compiledSchema = schema.compiled; if (!compiledSchema) { log.error('schema %s is not compiled', schemaName); throw new Error('Schema is not compiled'); } if (!securityService.hasRightForAction(compiledSchema,securityServiceModule.actions.READ,userCtx.perm)){ log.warn('user has not rights to search in schema',schemaName); callback(null,securityService.missingPermissionMessage(securityService.requiredPermissions(compiledSchema,securityServiceModule.actions.READ))); return; } //remap to QueryFiter var qf=QueryFilter.create(); if('sortBy' in query && query.sortBy){ qf.addSort(query.sortBy[0].f,query.sortBy[0].o); } if ('limit' in query){ qf.setLimit(query.limit); } if ('skip' in query){ qf.setSkip(query.skip); } for(var c in query.criteria){ qf.addCriterium(query.criteria[c].f,query.criteria[c].op,query.criteria[c].v); } enhanceQuery(qf,compiledSchema,schemaName,userCtx.profile,userCtx.user); log.silly('used crits', qf); dao.list(qf, function(err, data) { if (err) { next(err); } else { if (data) { var mangFuncs = []; for (var i = 0; i < data.length; i++) { mangFuncs.push((function(j) { return function(callback) { setTimeout(listObjectMangler.mangle(data[j], compiledSchema, function(err, cb) { callback(err, cb); }), 0); }; }(i))); } async.parallelLimit(mangFuncs, 3, function(err, cb) { if (err) { callback(err); return; } callback(null,null,data); }); } else { callback(null,null,data); } } }); };
this.saveBySchema = function(schemaName,userCtx,obj, callback) { var schema = schemaRegistry.getSchema(schemaName); if (!schema) { log.error('schema %s not found', schemaName); throw new Error('Schema not found'); } var compiledSchema = schema.compiled; if (!compiledSchema) { log.error('schema %s is not compiled', schemaName); throw new Error('Schema is not compiled'); } if (compiledSchema[consts.SAVE_BY_SCHEMA]){ schemaName=compiledSchema[consts.SAVE_BY_SCHEMA]; compiledSchema = schemaRegistry.getSchema(schemaName).compiled; if (!compiledSchema) { log.error('saveByschema %s is not compiled', schemaName); throw new Error('Schema is not compiled'); } } if (!securityService.hasRightForAction(compiledSchema,securityServiceModule.actions.MODIFY,userCtx.perm)){ callback(null,securityService.missingPermissionMessage(securityService.requiredPermissions(compiledSchema,securityServiceModule.actions.MODIFY))); log.verbose('Not authorized to save object',schemaName); return; } var _dao = new universalDaoModule.UniversalDao( mongoDriver, {collectionName: compiledSchema.table} ); var _daoAudit = new universalDaoModule.UniversalDao( mongoDriver, {collectionName: 'auditLogs'} ); log.verbose(" to save", obj); // var obj = req.body; if (obj.id){ //UPDATE setTimeout(updateObjectMangler.mangle(obj, compiledSchema, function(err, local) { if (err){ next(err); return; } if (local && local.length>0){ callback(null,convertLocalErrors(local)); return; } _dao.update(obj, function(err, data){ if (err) { next(err); return; } callback(null,null,data); if (compiledSchema[consts.FIRE_EVENTS] && compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_UPDATE] ){ log.silly('Firing event',compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_UPDATE]); eventRegistry.emitEvent(compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_UPDATE],{entity:obj,user:userCtx.user}); } var auditEntity={}; auditEntity.obj = obj; auditEntity.user = userCtx.user.id; auditEntity.action = "update"; auditEntity.timeStamp = new Date().getTime(); auditEntity.schemaName = schemaName; _daoAudit.save(auditEntity, function (data){}); }); } ), 0); } else { //CREATE setTimeout(saveObjectMangler.mangle(obj, compiledSchema, function(err, local) { if (err){ log.error(err); next(err); return; } if (local && local.length>0){ res.status(400); next(convertLocalErrors(local)); return; } objectTools.removeNullProperties(obj); _dao.save(obj, function(err, data){ if (err) { log.error(err); next(err); return; } callback(null,null,data); if (compiledSchema[consts.FIRE_EVENTS] && compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE] ){ log.silly('Firing event',compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE]); eventRegistry.emitEvent(compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE],{entity:data,user:req.currentUser}); } var auditEntity={}; auditEntity.obj = obj; auditEntity.user = req.currentUser.id; auditEntity.action = "create"; auditEntity.timeStamp = new Date().getTime(); auditEntity.schemaName = schemaName; _daoAudit.save(auditEntity, function (data){ }); }); } ), 0); } };
this.searchBySchemaCount = function(schemaName,query,callback) { log.silly('searching for', req.params); var schema = schemaRegistry.getSchema(schemaName); var dao = new universalDaoModule.UniversalDao(mongoDriver, { collectionName: schema.compiled.table }); var compiledSchema = schema.compiled; if (!compiledSchema) { log.error('schema %s is not compiled', schemaName); throw new Error('Schema is not compiled'); } if (!securityService.hasRightForAction(compiledSchema,securityServiceModule.actions.READ,req.perm)){ log.warn('user has not rights to search in schema',schemaName); callback(securityService.missingPermissionMessage(securityService.requiredPermissions(compiledSchema,securityServiceModule.actions.READ))); return; } //remap to QueryFiter var qf=QueryFilter.create(); for(var c in query.criteria){ qf.addCriterium(crits.criteria[c].f,crits.criteria[c].op,crits.criteria[c].v); } securityService.applySchemaForcedCrits(compiledSchema,qf); if (req.profile){ qf=securityService.applyProfileCrits(req.profile,schemaName,qf); } log.silly('used crits', crits); dao.count(qf, function(err, data) { if (err) { log.error(err); next(err); } else { if (data) { var mangFuncs = []; for (var i = 0; i < data.length; i++) { mangFuncs.push((function(j) { return function(callback) { setTimeout(listObjectMangler.mangle(data[j], compiledSchema, function(err, cb) { callback(err, cb); }), 0); }; }(i))); } async.parallelLimit(mangFuncs, 3, function(err, cb) { if (err) { next(err); } callback(null,null,data); }); } else { callback(null,null,data); } } }); };