# 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 `./backend/.env.sample` and rename it to `./backend/.env` 3. Fill out your database connection details in `./backend/.env` 4. A test database container is provided and can be started with `docker-compose up -d` 5. Populate some basic tables for your database using `npm run generate && npm run reseed` ## :package: Installing Brevo This note is added in case Brevo fails to install correctly, as it requires some extra configuration: 1. Should brevo fail to work upon spinning up, ensure that brevo is installed: ``` npm install @getbrevo/brevo --save ``` 2. Then run 'npm install' again. 3. Link the brevo package globally by running 'npm link'. 4. You'll also need to link it directly within the backend directory (here): ``` npm link . ``` Transactional emails using the Brevo api should now be working. ## :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 generate` to generate dummy data - Run `npm run seed` to seed the database with generated 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 up -d` 4. Recreate schemas,tables and dummy data by navigating to `./backend` and running `npm run reseed` ## :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 ## TRUNCATE TABLES IN PRODUCTION users, responses, profiles, authentication TRUNCATE TABLE users; TRUNCATE TABLE responses; TRUNCATE TABLE profiles; TRUNCATE TABLE authentication;