# @lfk/backend

Backend Server

## Quickstart 🐳
> Use this to run the backend with a postgresql db in docker

1. Clone the repo or copy the docker-compose 
2. Run in toe folder that contains the docker-compose file: `docker-compose up -d`
3. Visit http://127.0.0.1:4010/api/docs to check if the server is running
4. You can now use the default admin user (`demo:demo`)

## Dev Setup 🛠
> Local dev setup utilizing sqlite3 as the database.

1. Rename the .env.example file to .env (you can adjust app port and other settings, if needed)
2. Install Dependencies
   ```bash
   yarn
   ```
3. Start the server
   ```bash
   yarn dev
   ```

### Run Tests
```bash
# Run tests once (server has to run)
yarn test

# Run test in watch mode (reruns on change)
yarn test:watch

# Run test in ci mode (automaticly starts the dev server)
yarn test:ci
```

### Use your own mail templates
> You use your own mail templates by replacing the default ones we provided (either in-code or by mounting them into the /app/static/mail_templates folder).

The mail templates always come in a .html and a .txt variant to provide compatability with legacy mail clients.
Currently the following templates exist:
* pw-reset.(html/txt)

### Generate Docs
```bash
yarn docs
```

## ENV Vars
> You can provide them via .env file or docker env vars.
> You can use the `test:ci:generate_env` package script to generate a example env (uses bs data as test server and ignores the errors).

| Name                   | Type               | Default              | Description                                                                                                    |
| ---------------------- | ------------------ | -------------------- | -------------------------------------------------------------------------------------------------------------- |
| APP_PORT               | Number             | 4010                 | The port the backend server listens on. Is optional.                                                           |
| DB_TYPE                | String             | N/A                  | The type of the db u want to use. It has to be supported by typeorm. Possible: `sqlite`, `mysql`, `postgresql` |
| DB_HOST                | String             | N/A                  | The db's host's ip-address/fqdn or file path for sqlite                                                        |
| DB_PORT                | String             | N/A                  | The db's port                                                                                                  |
| DB_USER                | String             | N/A                  | The user for accessing the db                                                                                  |
| DB_PASSWORD            | String             | N/A                  | The user's password for accessing the db                                                                       |
| DB_NAME                | String             | N/A                  | The db's name                                                                                                  |
| NODE_ENV               | String             | dev                  | The apps env - influences debug info. Also when the env is set to "test", mailing errors get ignored.          |
| POSTALCODE_COUNTRYCODE | String/CountryCode | N/A                  | The countrycode used to validate address's postal codes                                                        |
| PHONE_COUNTRYCODE      | String/CountryCode | null (international) | The countrycode used to validate phone numers                                                                  |
| SEED_TEST_DATA         | Boolean            | False                | If you want the app to seed some example data set this to true                                                 |
| MAILER_URL             | String(Url)        | N/A                  | The mailer's base url (no trailing slash)                                                                      |
| MAILER_KEY             | String             | N/A                  | The mailer's api key.                                                                                          |
| IMPRINT_URL            | String(Url)        | /imprint             | The link to a imprint page for the system (Defaults to the frontend's imprint)                                 |
| PRIVACY_URL            | String(Url)        | /privacy             | The link to a privacy page for the system (Defaults to the frontend's privacy page)                            |


## Recommended Editor

[Visual Studio Code](https://code.visualstudio.com/)

### Recommended Extensions

* will be automatically recommended via ./vscode/extensions.json

## Staging
### Branches & Tags
* vX.Y.Z: Release tags created from the main branch
   * The version numbers follow the semver standard
   * A new release tag automaticly triggers the release ci pipeline
* main: Protected "release" branch
   * The latest tag of the docker image get's build from this
* dev: Current dev branch for merging the different feature branches and bugfixes
   * New releases get created as tags from this   
   * The dev tag of the docker image get's build from this
   * Only push minor changes to this branch!
   * To merge a feature branch into this please create a pull request
* feature/xyz: Feature branches - nameing scheme: `feature/issueid-title`
* bugfix/xyz: Branches for bugfixes - nameing scheme:`bugfix/issueid-title`