# Mobicoop V3 - Configuration Service Configuration items management. Used to configure and store configuration items for all Mobicoop V3 services using redis as database. 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 Domains are set in the [configuration package](https://gitlab.mobicoop.io/v3/packages/configuration). ## 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 Redis database is automatically populated at the start of the service. If keys already exists in the database, items are preserved. ## Usage The app exposes the following [gRPC](https://grpc.io/) services : - **Get** : get a configuration item by its domain and key ```json { "domain": "CARPOOL", "key": "seatsProposed" } ``` - **Set** : update a configuration item ```json { "domain": "CARPOOL", "key": "seatsProposed", "value": "3" } ``` ## Tests / ESLint / Prettier Tests are run outside the container for ease of use. ```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 # ESLint npm run lint # Prettier npm run pretty ``` ## License Mobicoop V3 - Configuration Service is [AGPL licensed](LICENSE).