2023-01-25 09:50:05 +00:00
# Mobicoop V3 - Configuration Service
2023-10-25 14:03:17 +00:00
Configuration items management. Used to configure and store configuration items for all Mobicoop V3 services using redis as database.
2023-10-20 10:16:02 +00:00
2023-01-26 10:14:29 +00:00
Each item consists in :
- a **domain** : each service is associated with one or more domains, represented by an uppercase string (eg. _USER_ )
- a **key** : the key of the configuration item (a string)
- a **value** : the value of the configuration item (always a string, each service must cast the value if needed)
## Available domains
2023-10-26 15:18:11 +00:00
Domains are set in the [configuration package ](https://gitlab.mobicoop.io/v3/packages/configuration ).
2023-01-26 10:14:29 +00:00
## Requirements
You need [Docker ](https://docs.docker.com/engine/ ) and its [compose ](https://docs.docker.com/compose/ ) plugin.
You also need NodeJS installed locally : we **strongly** advise to install [Node Version Manager ](https://github.com/nvm-sh/nvm ) and use the latest LTS version of Node (check that your local version matches with the one used in the Dockerfile).
The API will run inside a docker container, **but** the install itself is made outside the container, because during development we need tools that need to be available locally (eg. ESLint, Prettier...).
## Installation
- copy `.env.dist` to `.env` :
```bash
cp .env.dist .env
```
Modify it if needed.
- install the dependencies :
```bash
npm install
```
- start the containers :
```bash
docker compose up -d
```
The app runs automatically on port **5003** .
## Database migration
2023-10-25 07:18:16 +00:00
Redis database is automatically populated at the start of the service. If keys already exists in the database, items are preserved.
2023-01-26 10:14:29 +00:00
## Usage
The app exposes the following [gRPC ](https://grpc.io/ ) services :
2023-10-20 10:16:02 +00:00
- **Get** : get a configuration item by its domain and key
2023-01-26 10:14:29 +00:00
```json
{
2023-10-25 07:18:16 +00:00
"domain": "CARPOOL",
2023-10-20 10:16:02 +00:00
"key": "seatsProposed"
2023-01-26 10:14:29 +00:00
}
```
2023-10-25 07:18:16 +00:00
- **Set** : update a configuration item
2023-01-26 10:14:29 +00:00
```json
{
2023-10-25 07:18:16 +00:00
"domain": "CARPOOL",
"key": "seatsProposed",
"value": "3"
2023-01-26 10:14:29 +00:00
}
```
2023-03-30 08:42:38 +00:00
## Tests / ESLint / Prettier
2023-01-26 10:14:29 +00:00
2023-10-25 07:18:16 +00:00
Tests are run outside the container for ease of use.
2023-01-26 10:14:29 +00:00
```bash
# run all tests (unit + integration)
npm run test
# unit tests only
npm run test:unit
# integration tests only
npm run test:integration
# coverage
npm run test:cov
2023-03-30 08:42:38 +00:00
# ESLint
npm run lint
# Prettier
npm run pretty
2023-01-26 10:14:29 +00:00
```
## License
Mobicoop V3 - Configuration Service is [AGPL licensed ](LICENSE ).