unicef/magicbox-open-api

View on GitHub

Showing 22 of 22 total issues

File general.js has 478 lines of code (exceeds 250 allowed). Consider refactoring.
Open

import config from '../../config'
import bluebird from 'bluebird'
import PostgresHelper from './postgres'
import * as data_access from '../../utils/data_access'
import fs from 'fs'
Severity: Minor
Found in api/helpers/general.js - About 7 hrs to fix

    Function getProperties has 87 lines of code (exceeds 25 allowed). Consider refactoring.
    Open

    export const getProperties = (queryString) => {
      return new Promise((resolve, reject) => {
        let queryParts = queryString.split('_')
        let key = queryParts[0]
        let path = ''
    Severity: Major
    Found in api/helpers/general.js - About 3 hrs to fix

      Function getProperties has a Cognitive Complexity of 19 (exceeds 5 allowed). Consider refactoring.
      Open

      export const getProperties = (queryString) => {
        return new Promise((resolve, reject) => {
          let queryParts = queryString.split('_')
          let key = queryParts[0]
          let path = ''
      Severity: Minor
      Found in api/helpers/general.js - About 2 hrs to fix

      Cognitive Complexity

      Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

      A method's cognitive complexity is based on a few simple rules:

      • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
      • Code is considered more complex for each "break in the linear flow of the code"
      • Code is considered more complex when "flow breaking structures are nested"

      Further reading

      Function getUserInfo has a Cognitive Complexity of 16 (exceeds 5 allowed). Consider refactoring.
      Open

      export const getUserInfo = (token) => {
        return new Promise((resolve, reject) => {
          console.log('Check if user has been seen')
          if (user_seen(token)) {
            console.log('No need to hit Auth0')
      Severity: Minor
      Found in api/helpers/auth.js - About 2 hrs to fix

      Cognitive Complexity

      Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

      A method's cognitive complexity is based on a few simple rules:

      • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
      • Code is considered more complex for each "break in the linear flow of the code"
      • Code is considered more complex when "flow breaking structures are nested"

      Further reading

      Function verifyToken has 51 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

      export const verifyToken = (req, authOrSecDef, token, callback) => {
        let errorObject = {message: 'Access Denied. Please check your token'}
      
        if (token && token.indexOf(tokenPrefix) !== -1) {
          let accessToken = token.substring(
      Severity: Major
      Found in api/helpers/auth.js - About 2 hrs to fix

        Function buildWhere has 50 lines of code (exceeds 25 allowed). Consider refactoring.
        Open

          buildWhere(params) {
            let group_by = null;
            if (params.group_by) {
              group_by = params.group_by;
              delete params.group_by
        Severity: Minor
        Found in api/helpers/postgres.js - About 2 hrs to fix

          Function mergePropertiesWithShapefile has 45 lines of code (exceeds 25 allowed). Consider refactoring.
          Open

          const mergePropertiesWithShapefile = (shapefileSet) => {
            return new Promise((resolve, reject) => {
              let {
                kind,
                source: dir,
          Severity: Minor
          Found in api/helpers/general.js - About 1 hr to fix

            Line 52 exceeds the maximum line length of 80.
            Open

              app.use(swaggerExpress.runner.swaggerTools.swaggerSecurity(config.swaggerSecurityHandlers))
            Severity: Minor
            Found in server.js by eslint

            enforce a maximum line length (max-len)

            Very long lines of code in any language can be difficult to read. In order to aid in readability and maintainability many coders have developed a convention to limit lines of code to X number of characters (traditionally 80 characters).

            var foo = { "bar": "This is a bar.", "baz": { "qux": "This is a qux" }, "difficult": "to read" }; // very long

            Rule Details

            This rule enforces a maximum line length to increase code readability and maintainability. The length of a line is defined as the number of Unicode characters in the line.

            Options

            This rule has a number or object option:

            • "code" (default 80) enforces a maximum line length
            • "tabWidth" (default 4) specifies the character width for tab characters
            • "comments" enforces a maximum line length for comments; defaults to value of code
            • "ignorePattern" ignores lines matching a regular expression; can only match a single line and need to be double escaped when written in YAML or JSON
            • "ignoreComments": true ignores all trailing comments and comments on their own line
            • "ignoreTrailingComments": true ignores only trailing comments
            • "ignoreUrls": true ignores lines that contain a URL
            • "ignoreStrings": true ignores lines that contain a double-quoted or single-quoted string
            • "ignoreTemplateLiterals": true ignores lines that contain a template literal
            • "ignoreRegExpLiterals": true ignores lines that contain a RegExp literal

            code

            Examples of incorrect code for this rule with the default { "code": 80 } option:

            /*eslint max-len: ["error", 80]*/
            
            var foo = { "bar": "This is a bar.", "baz": { "qux": "This is a qux" }, "difficult": "to read" };

            Examples of correct code for this rule with the default { "code": 80 } option:

            /*eslint max-len: ["error", 80]*/
            
            var foo = {
              "bar": "This is a bar.",
              "baz": { "qux": "This is a qux" },
              "easier": "to read"
            };

            tabWidth

            Examples of incorrect code for this rule with the default { "tabWidth": 4 } option:

            /*eslint max-len: ["error", 80, 4]*/
            
            \t  \t  var foo = { "bar": "This is a bar.", "baz": { "qux": "This is a qux" } };

            Examples of correct code for this rule with the default { "tabWidth": 4 } option:

            /*eslint max-len: ["error", 80, 4]*/
            
            \t  \t  var foo = {
            \t  \t  \t  \t  "bar": "This is a bar.",
            \t  \t  \t  \t  "baz": { "qux": "This is a qux" }
            \t  \t  };

            comments

            Examples of incorrect code for this rule with the { "comments": 65 } option:

            /*eslint max-len: ["error", { "comments": 65 }]*/
            
            /**
             * This is a comment that violates the maximum line length we have specified
            **/

            ignoreComments

            Examples of correct code for this rule with the { "ignoreComments": true } option:

            /*eslint max-len: ["error", { "ignoreComments": true }]*/
            
            /**
             * This is a really really really really really really really really really long comment
            **/

            ignoreTrailingComments

            Examples of correct code for this rule with the { "ignoreTrailingComments": true } option:

            /*eslint max-len: ["error", { "ignoreTrailingComments": true }]*/
            
            var foo = 'bar'; // This is a really really really really really really really long comment

            ignoreUrls

            Examples of correct code for this rule with the { "ignoreUrls": true } option:

            /*eslint max-len: ["error", { "ignoreUrls": true }]*/
            
            var url = 'https://www.example.com/really/really/really/really/really/really/really/long';

            ignoreStrings

            Examples of correct code for this rule with the { "ignoreStrings": true } option:

            /*eslint max-len: ["error", { "ignoreStrings": true }]*/
            
            var longString = 'this is a really really really really really long string!';

            ignoreTemplateLiterals

            Examples of correct code for this rule with the { "ignoreTemplateLiterals": true } option:

            /*eslint max-len: ["error", { "ignoreTemplateLiterals": true }]*/
            
            var longTemplateLiteral = `this is a really really really really really long template literal!`;

            ignoreRegExpLiterals

            Examples of correct code for this rule with the { "ignoreRegExpLiterals": true } option:

            /*eslint max-len: ["error", { "ignoreRegExpLiterals": true }]*/
            
            var longRegExpLiteral = /this is a really really really really really long regular expression!/;

            ignorePattern

            Examples of correct code for this rule with the { "ignorePattern": true } option:

            /*eslint max-len: ["error", { "ignorePattern": "^\\s*var\\s.+=\\s*require\\s*\\(/" }]*/
            
            var dep = require('really/really/really/really/really/really/really/really/long/module');

            Related Rules

            • [complexity](complexity.md)
            • [max-depth](max-depth.md)
            • [max-nested-callbacks](max-nested-callbacks.md)
            • [max-params](max-params.md)
            • [max-statements](max-statements.md) Source: http://eslint.org/docs/rules/

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

            function cachePopulationProperties(req) {
              let key = 'population'
              key += getKeyForRequest(req.swagger.params)
              if (debug.enabled) { debug('Cache Key: '+ key + '_properties'); }
              return key;
            Severity: Major
            Found in api/helpers/volos.js and 1 other location - About 1 hr to fix
            api/helpers/volos.js on lines 74..79

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 64.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

            function cacheCasesProperties(req) {
              let key = 'cases'
              key += getKeyForRequest(req.swagger.params)
              if (debug.enabled) { debug('Cache Key: '+ key + '_properties'); }
              return key;
            Severity: Major
            Found in api/helpers/volos.js and 1 other location - About 1 hr to fix
            api/helpers/volos.js on lines 67..72

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 64.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Function getUserInfo has 32 lines of code (exceeds 25 allowed). Consider refactoring.
            Open

            export const getUserInfo = (token) => {
              return new Promise((resolve, reject) => {
                console.log('Check if user has been seen')
                if (user_seen(token)) {
                  console.log('No need to hit Auth0')
            Severity: Minor
            Found in api/helpers/auth.js - About 1 hr to fix

              Function getProperties has 28 lines of code (exceeds 25 allowed). Consider refactoring.
              Open

              export function getProperties(request, response) {
                // key was request._key before
                // key is type of data user is querying
                // ex: mobility, population...
                let key = request.swagger.apiPath.split('/')[2]
              Severity: Minor
              Found in api/controllers/general.js - About 1 hr to fix

                Similar blocks of code found in 3 locations. Consider refactoring.
                Open

                function cacheCases(req) {
                  var key = 'cases' + getKeyForRequest(req.swagger.params);
                  if (debug.enabled) { debug('Cache Key: '+ key); }
                  return key;
                }
                Severity: Major
                Found in api/helpers/volos.js and 2 other locations - About 1 hr to fix
                api/helpers/volos.js on lines 35..39
                api/helpers/volos.js on lines 55..59

                Duplicated Code

                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                Tuning

                This issue has a mass of 57.

                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                Refactorings

                Further Reading

                Similar blocks of code found in 3 locations. Consider refactoring.
                Open

                function cacheMosquito(req) {
                  let key = 'mosquito' + getKeyForRequest(req.swagger.params)
                  if (debug.enabled) { debug('Cache Key: '+key); }
                  return key;
                }
                Severity: Major
                Found in api/helpers/volos.js and 2 other locations - About 1 hr to fix
                api/helpers/volos.js on lines 35..39
                api/helpers/volos.js on lines 61..65

                Duplicated Code

                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                Tuning

                This issue has a mass of 57.

                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                Refactorings

                Further Reading

                Similar blocks of code found in 4 locations. Consider refactoring.
                Open

                          fetchProperty(key, path, '_', 0)
                          .then(propertyList => {
                            let properties = {
                              key: queryParts.join('_'),
                              properties: propertyList
                Severity: Major
                Found in api/helpers/general.js and 3 other locations - About 1 hr to fix
                api/helpers/general.js on lines 450..457
                api/helpers/general.js on lines 487..494
                api/helpers/general.js on lines 503..510

                Duplicated Code

                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                Tuning

                This issue has a mass of 57.

                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                Refactorings

                Further Reading

                Similar blocks of code found in 4 locations. Consider refactoring.
                Open

                          fetchProperty(key, path, '.', 0)
                          .then(propertyList => {
                            let properties = {
                              key: queryParts.join('_'),
                              properties: propertyList
                Severity: Major
                Found in api/helpers/general.js and 3 other locations - About 1 hr to fix
                api/helpers/general.js on lines 450..457
                api/helpers/general.js on lines 470..477
                api/helpers/general.js on lines 487..494

                Duplicated Code

                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                Tuning

                This issue has a mass of 57.

                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                Refactorings

                Further Reading

                Similar blocks of code found in 4 locations. Consider refactoring.
                Open

                          fetchProperty(key, path, '_', 0)
                          .then(propertyList => {
                            let properties = {
                              key: queryParts.join('_'),
                              properties: propertyList
                Severity: Major
                Found in api/helpers/general.js and 3 other locations - About 1 hr to fix
                api/helpers/general.js on lines 450..457
                api/helpers/general.js on lines 470..477
                api/helpers/general.js on lines 503..510

                Duplicated Code

                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                Tuning

                This issue has a mass of 57.

                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                Refactorings

                Further Reading

                Similar blocks of code found in 4 locations. Consider refactoring.
                Open

                          fetchProperty(key, path, '_', 0)
                          .then(propertyList => {
                            let properties = {
                              key: queryParts.join('_'),
                              properties: propertyList
                Severity: Major
                Found in api/helpers/general.js and 3 other locations - About 1 hr to fix
                api/helpers/general.js on lines 470..477
                api/helpers/general.js on lines 487..494
                api/helpers/general.js on lines 503..510

                Duplicated Code

                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                Tuning

                This issue has a mass of 57.

                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                Refactorings

                Further Reading

                Similar blocks of code found in 3 locations. Consider refactoring.
                Open

                function cachePopulation(req) {
                  let key = 'population' + getKeyForRequest(req.swagger.params)
                  if (debug.enabled) { debug('Cache Key: '+key); }
                  return key;
                }
                Severity: Major
                Found in api/helpers/volos.js and 2 other locations - About 1 hr to fix
                api/helpers/volos.js on lines 55..59
                api/helpers/volos.js on lines 61..65

                Duplicated Code

                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                Tuning

                This issue has a mass of 57.

                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                Refactorings

                Further Reading

                Function buildWhere has a Cognitive Complexity of 10 (exceeds 5 allowed). Consider refactoring.
                Open

                  buildWhere(params) {
                    let group_by = null;
                    if (params.group_by) {
                      group_by = params.group_by;
                      delete params.group_by
                Severity: Minor
                Found in api/helpers/postgres.js - About 1 hr to fix

                Cognitive Complexity

                Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

                A method's cognitive complexity is based on a few simple rules:

                • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
                • Code is considered more complex for each "break in the linear flow of the code"
                • Code is considered more complex when "flow breaking structures are nested"

                Further reading

                Severity
                Category
                Status
                Source
                Language