# siimee backend API An API for the siimee application ## :white_check_mark: Prerequisites You will need... ### Node.js 14+ * OSX: `brew install node` using [Homebrew](http://brew.sh/) * Linux: `apt install nodejs` ([see Ubuntu/Debian specific instructions](https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions)) or `pacman -S nodejs` (Arch Linux) * Windows: [Install](https://nodejs.org/en/download/) ## :package: Installation 1. Install dependencies with `npm install` 2. Copy the environments sample file from `./server/.env.sample` and rename it to `./server/.env` 3. Fill out your database connection details in `./server/.env` 4. A test database container is provided and can be started with `docker-compose --env-file ./backend/server/.env up -d` 5. Populate some basic tables for your database using `npx knex migrate:latest` ## :package: Migrations We use Knex.js,which comes with a couple nice database migration and seeding tools. Migrating tracks changes in schema. Migration steps are contained in the `./db/migrations` folder. Seeding adds dummy data once our database tables have been created and schemas are set. Starting seed steps are contained in `./db/seeds` and use the `mock.js` file as the main dummy data source. ### Migrating * Run `npm run migrate` to run all migrations and establish the base schema * Run `npm run unmigrate` to roll back one migration ### Seeding * Run `npm run seed` to seed the database with dummy data ### Restarting Since we can't unseed the database, it's best to destroy the `dev` database and rebuild it. 1. Stop the database by navigating to the project root directory `cd ../` and running `docker-compose down` 2. Destroy the database volume `docker volume rm siimee_siimee_db`. BE CAREFUL. 3. Restart the database while still at the project root with `docker-compose --env-file ./backend/server/.env up -d` 4. Recreate schemas and tables but navigating to `./backend` and running `npm run migrate` 5. Reseed the dummy data with `npm run seed` ## :electric_plug: Run 1. Run `npm run start` to start up the server 2. Check `http://localhost:3001/documentation` to see the interactive `API` documentation ## :robot: Deployment TBD ## :pill: Tests & Code Quality Tests are run with AVA with code coverage reporting via nyc. Look at the example test for ideas, as well as the [ava documentation](https://github.com/avajs/ava/blob/main/docs/01-writing-tests.md) * Run tests with coverage report with `npm test` ## :heart: Built With * [Hapi](https://hapy.dev/) - Happy APIs * [Objection](https://vincit.github.io/objection.js/) - Light ORM * [Knex.js](https://knexjs.org/) - Query builder * [Schiwfty](https://hapipal.com/docs/schwifty) - Model layer * [Ava](https://github.com/avajs/ava) - Easy testing * [Nyc](https://github.com/istanbuljs/nyc) - Test coverage with Istanbul's CLI