@@ -26,15 +26,19 @@ module.exports = function (req, res, next, cb) {
2626 JOIN macrostrat.refs ON snm.ref_id = refs.id
2727 */
2828 } ) ,
29- params = { } ;
29+ params = { } ,
30+ where = [ ] ;
3031
3132 if ( "all" in req . query ) {
3233 // do nothing
34+ } else if ( req . query . concept_like ) {
35+ where . push ( "lower(name) ILIKE lower(:name)" ) ;
36+ params [ "name" ] = req . query . concept_like + "%" ;
3337 } else if ( "concept_name" in req . query ) {
34- sql += " WHERE name = ANY(:concept_name)";
38+ where . push ( " name = ANY(:concept_name)") ;
3539 params [ "concept_name" ] = req . query . concept_name ;
3640 } else if ( req . query . concept_id || req . query . strat_name_concept_id ) {
37- sql += " WHERE concept_id = ANY(:concept_id)";
41+ where . push ( " concept_id = ANY(:concept_id)") ;
3842 if ( req . query . concept_id ) {
3943 params [ "concept_id" ] = larkin . parseMultipleIds ( req . query . concept_id ) ;
4044 } else {
@@ -43,15 +47,28 @@ module.exports = function (req, res, next, cb) {
4347 ) ;
4448 }
4549 } else if ( req . query . strat_name_id ) {
46- sql +=
47- " WHERE concept_id IN (SELECT concept_id FROM macrostrat.lookup_strat_names WHERE strat_name_id IN (:strat_name_ids))" ;
50+ where . push ( "concept_id IN (SELECT concept_id FROM macrostrat.lookup_strat_names WHERE strat_name_id IN (:strat_name_ids))" ) ;
4851 params [ "strat_name_ids" ] = larkin . parseMultipleIds ( req . query . strat_name_id ) ;
4952 }
5053
54+ // pagination
55+ const lastId = req . query . last_id ? parseInt ( req . query . last_id , 10 ) : null ;
56+ const pageSize = req . query . page_size ? parseInt ( req . query . page_size , 10 ) : 5 ; // defaults to 5
57+
58+ if ( req . query . last_id ) {
59+ where . push ( "concept_id > :last_id" ) ;
60+ params [ "last_id" ] = lastId ;
61+ }
62+
63+ if ( where . length > 0 ) {
64+ sql += " WHERE " + where . join ( " AND " ) ;
65+ }
66+
5167 sql += " GROUP BY concept_id, author ORDER BY concept_id" ;
5268
53- if ( "sample" in req . query ) {
54- sql += " LIMIT 5" ;
69+ if ( "sample" in req . query || req . query . last_id ) {
70+ sql += " LIMIT :page_size" ;
71+ params [ "page_size" ] = pageSize ;
5572 }
5673
5774 larkin . queryPg ( "burwell" , sql , params , function ( error , result ) {
0 commit comments