Skip to content

server.tj

Mike B! edited this page Jul 27, 2021 · 3 revisions

this file defines the routes, it basically maps routes to generic handlers. This is done in a way to allow basic CRUD requests to be added without new js files, yet still have more complex transactions be done with custom code.

<server>{
  "port":8420,
  "routes":[
    {
      "method":"post",
      "path":"/ingredient",
      
      "handler":<async_chain>{
        "steps": [ 
          <dml_step>{
            "pool":<global>"db_pool",
            "schema":<flat_schema>[
              {
                "name":"name",
                "type":"string"
              },
              {
                "name":"serving_size",
                "type":"number"
              },
              {
                "name":"calories",
                "type":"number"
              },
              {
                "name":"protien",
                "type":"number"
              },
              {
                "name":"carbs",
                "type":"number"
              },
              {
                "name":"fat",
                "type":"number"
              }
            ],
            "table":"food_item",
            "fields":["name","serving_size_grams","calories","protien","carbs","fat"]
          }
        ]
      }
    },
    {
      "method":"post",
      "path":"/meal",
      "handler":<async_chain>{
        "steps": [ 
          <req>{
          "path":"./lib/log_meal.js",

          "dependencies":{
            "logger":<con_logger>,
            "pg_pool":<global>"db_pool",

            "meal_field":"meal",

            "components_field":"components",

            "meal_schema":<flat_schema>[
              {
                "name":"name",
                "type":"string"
              }
            ],

            "component_schema":<flat_schema>[
              {
                "name":"food_id",
                "type":"string"
              },
              {
                "name":"servings",
                "type":"number"
              }
            ]
          }
        }
      ]
    }
    },
    {
      "method":"get",
      "path":"/meals_by_date",
      "handler":<async_chain>{
        "steps":[
          <query_step>{
            "pool":<global>"db_pool",
            "param_extractor":<param_extractor>[
              {
                "name":"start_date",
                "source":"query",
                "type":"number"
              },
              {
                "name":"end_date",
                "source":"query",
                "type":"number"
              }
            ],

            "query":"SELECT meal.id,meal.name,to_char(meal.date,'MM/DD HH:MI') as date, json_agg(comp) as ingredients,SUM (comp.calories) as calories,SUM (comp.protien) as protien, SUM (comp.carbs) as carbs,SUM (comp.fat) as fat FROM full_component AS comp JOIN meal on comp.meal_id = meal.id WHERE meal.date >= to_timestamp($1) and meal.date <= to_timestamp($2) GROUP BY meal.id ORDER BY meal.date asc"
          }
        ]
      }
    },
    {
      "method":"get",
      "path":"/ingredients",
      "handler":<async_chain>{
        "steps":[
          <query_step>{
            "pool":<global>"db_pool",
            "query":"SELECT * FROM food_item"
          }
        ]
      }
    },
    {
      "method":"get",
      "path":"/:file",
      "handler":<static_handler>{
        "root":"./dist",
        "cache":false
      }
    }
  ]
}

Clone this wiki locally