Skip to content

DigitalCommons/land-explorer-back-end

Repository files navigation

Land Explorer Back End

This application provides the back-end functionality for Land Explorer. It has 4 main features:

  • Basic user account management: Authentication, registration, user details
  • Maps: Managing access to maps, creating/updating map data
  • Data groups: Creating/updating data group data
  • Polygons: Accessing external INSPIRE dataset of property boundary polygons

Note: The polygon database is on a separate server from the application because the old provider does not support large memory for the database. With the server migration, we may merge the two database.

Requirements

  • Nodejs
  • MySQL

Installation

  • Run npm install
  • Copy .env.example and rename the copy to .env
  • If in development, create a MySql schema for testing
  • Fill in the .env with database credentials
  • Run migration npx sequelize-cli db:migrate
  • Run seeder npx sequelize-cli db:seed:all
  • Run npm run dev:serve
  • Access 0.0.0.0:4000

Note: current setup does not support polygon database. With this migration and seed, running the api/ownership/ endpoint will error.

Dev command cheat sheets

  • Reset migration npx sequelize-cli db:seed:undo:all && npx sequelize-cli db:migrate:undo:all

Unit tests

  • Run npm test to run all UTs
  • We use the Mocha testing framework for our tests, with Chai for assertions and Sinon for mocks, spies, stubs, etc.

Writing a unit test

  • See the Testing wiki for general advice on writing UTs
  • Add UTs to a .test.ts file in the same directory as the code you are testing.
  • The files routes/database.test.ts and routes/maps.test.ts contain good examples of UTs
  • In VS Code, install the extensions:
    • ES6 Mocha Snippets to make writing test boilerplate code faster
    • Mocha Test Explorer to run individual tests from sidebar. Note, this extension sometimes doesn't catch exceptions that occur between tests, so you should also occasionally run npm test manually.

APIs

See the full list of APIs and their purpose by looking at the bottom of each file in the src/routes/ directory.

TODOs

  • General rafactor for best practices.
  • Graceful exceptions handling.
  • Use DB transactions.
  • Persistent error log (notification would be nice too).
  • Await is currently being used for all async calls. Things like email API doesnt have to be blocking.
  • API calls (e.g., email) should have a retry. Or even better, be a queued job that can be retried.
  • Migration and seed for polygon database.
  • Tests (unit, system, etc)
  • Better typing (instead of "any" type).
  • Reset password process should not be auto-generating and emailing plain text password to user.
  • Polygon database may be moved to the server as the application.
  • Dont use both import* & require(*)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published