Skip to content

Commit

Permalink
added faves to obs detail response
Browse files Browse the repository at this point in the history
  • Loading branch information
pleary committed Mar 7, 2016
1 parent 1abc7a3 commit d459a8e
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 5 deletions.
17 changes: 17 additions & 0 deletions lib/models/fave.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
var _ = require( "underscore" ),
Fave = { };

Fave = function( attrs ) {
var that = this;
_.each( attrs, function( value, attr ) {
that[ attr ] = value;
});
};

Fave.modelName = "fave";
Fave.modelNamePlural = "faves";
Fave.tableName = "votes";
Fave.returnFields = [
"id", "voter_id user_id", "votable_id", "created_at" ];

module.exports = Fave;
6 changes: 5 additions & 1 deletion lib/models/model.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,18 @@ Model.belongsToIDs = function( objects, model ) {
};

Model.injectHasMany = function( objects, model, resultsHash ) {
var assoc = model.modelNamePlural || model.tableName;
// Example: for each obs (where results are identifications)
_.each( objects, function( o ) {
// obs has an ID and we have identifications for that obs
if( o.id && !_.isEmpty( resultsHash[ o.id ] ) ) {
// add the identifications to obs as an array
o[ model.tableName ] = _.map( _.values( resultsHash[ o.id ] ), function( v ) {
o[ assoc ] = _.map( _.values( resultsHash[ o.id ] ), function( v ) {
return new model( v );
});
} else {
// there were no identifications for the obs, set to empty array
o[ assoc ] = [ ];
}
});
};
Expand Down
20 changes: 16 additions & 4 deletions lib/models/observation.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
var _ = require( "underscore" ),
Identification = require( "./identification" ),
DBModel = require( "./db_model" ),
ESModel = require( "./es_model" ),
Fave = require( "./fave" ),
Identification = require( "./identification" ),
Taxon = require( "./taxon" ),
User = require( "./user" ),
Observation = { };
Expand Down Expand Up @@ -31,10 +32,17 @@ Observation.preloadIdentifications = function( obs, callback ) {
DBModel.fetchHasMany( obs, Identification, "observation_id", callback );
};

Observation.preloadFaves = function( obs, callback ) {
DBModel.fetchHasMany( obs, Fave, "votable_id", callback );
};

Observation.preloadAllAssociations = function( obs, localeOpts, callback ) {
Observation.preloadIdentifications( obs, function( err ) {
if( err ) { return callback( err ); }
Observation.preloadTaxaAndUsers( obs, localeOpts, callback );
Observation.preloadFaves( obs, function( err ) {
if( err ) { return callback( err ); }
Observation.preloadTaxaAndUsers( obs, localeOpts, callback );
});
});
};

Expand All @@ -43,10 +51,14 @@ Observation.preloadTaxaAndUsers = function( obs, localeOpts, callback ) {
t.prepareForResponse( localeOpts );
}
var obsAndIDs = _.filter(
_.flatten( [ obs, _.pluck( obs, "identifications" ) ] ), _.identity );
_.flatten( [ obs, _.pluck( obs, "identifications" ) ] ), _.identity
);
var obsFavesAndIDs = _.filter(
_.flatten( [ obsAndIDs, _.pluck( obs, "faves" ) ] ), _.identity
);
ESModel.fetchBelongsTo( obsAndIDs, Taxon, prepareTaxon, function( err ) {
if( err ) { return callback( err ); }
DBModel.fetchBelongsTo( obsAndIDs, User, callback );
DBModel.fetchBelongsTo( obsFavesAndIDs, User, callback );
});
};

Expand Down

0 comments on commit d459a8e

Please sign in to comment.