user/README.md

128 lines
2.8 KiB
Markdown
Raw Permalink Normal View History

2022-12-13 14:27:28 +00:00
# Mobicoop V3 - User Service
2022-12-13 12:31:25 +00:00
2022-12-15 09:37:18 +00:00
User-related data management.
2022-12-13 12:31:25 +00:00
2022-12-22 13:42:47 +00:00
## Requirements
2022-12-13 12:31:25 +00:00
2023-01-04 12:51:23 +00:00
You need [Docker](https://docs.docker.com/engine/) and its [compose](https://docs.docker.com/compose/) plugin.
2022-12-13 12:31:25 +00:00
2023-01-05 15:17:37 +00:00
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...).
2022-12-23 15:10:59 +00:00
A RabbitMQ instance is also required to send / receive messages when data has been inserted/updated/deleted.
2022-12-22 13:42:47 +00:00
## Installation
2023-03-30 08:57:22 +00:00
- copy `.env.dist` to `.env` :
2022-12-13 12:31:25 +00:00
2023-01-05 15:17:37 +00:00
```bash
cp .env.dist .env
```
2022-12-15 08:51:08 +00:00
2023-01-05 15:17:37 +00:00
Modify it if needed.
2022-12-13 12:31:25 +00:00
2023-03-30 08:57:22 +00:00
- install the dependencies :
2023-01-06 14:10:35 +00:00
```bash
npm install
```
2023-03-30 08:57:22 +00:00
- start the containers :
2022-12-13 12:31:25 +00:00
2023-01-05 15:17:37 +00:00
```bash
docker compose up -d
```
2022-12-13 12:31:25 +00:00
2023-01-05 15:31:27 +00:00
The app runs automatically on port **5001**.
2023-01-05 15:17:37 +00:00
2022-12-15 09:46:02 +00:00
## Database migration
2023-01-06 14:07:06 +00:00
Before using the app, you need to launch the database migration (it will be launched inside the container) :
2022-12-15 09:46:02 +00:00
```bash
2023-01-06 14:07:06 +00:00
npm run migrate
2022-12-15 09:46:02 +00:00
```
2022-12-15 09:36:37 +00:00
## Usage
The app exposes the following [gRPC](https://grpc.io/) services :
2023-07-24 13:48:03 +00:00
- **FindById** : find a user by its id
2022-12-15 09:36:37 +00:00
```json
{
2023-07-24 13:48:03 +00:00
"id": "80126a61-d128-4f96-afdb-92e33c75a3e1"
2022-12-15 09:36:37 +00:00
}
```
2023-07-24 13:48:03 +00:00
- **Create** : create a user
2022-12-15 09:36:37 +00:00
```json
{
"email": "jezabel.doe@email.com",
"firstName": "Jezabel",
2022-12-23 15:16:09 +00:00
"lastName": "Doe",
"phone": "+33611223344"
2022-12-15 09:36:37 +00:00
}
```
- **Update** : update a user
```json
{
"firstName": "Jezabel-Katarina",
"email": "jezabel-katarina.doe@email.com",
2023-07-24 13:48:03 +00:00
"id": "30f49838-3f24-42bb-a489-8ffb480173ae"
2022-12-15 09:36:37 +00:00
}
```
2023-07-24 13:48:03 +00:00
- **Delete** : delete a user by its id
2022-12-15 09:36:37 +00:00
```json
{
2023-07-24 13:48:03 +00:00
"id": "80126a61-d128-4f96-afdb-92e33c75a3e1"
2022-12-15 09:36:37 +00:00
}
```
2022-12-22 13:42:47 +00:00
## Messages
2022-12-23 15:17:35 +00:00
As mentionned earlier, RabbitMQ messages are sent after these events :
2022-12-22 13:42:47 +00:00
- **Create** (message : the created user informations)
- **Update** (message : the updated user informations)
2023-07-24 13:48:03 +00:00
- **Delete** (message : the id of the deleted user)
2022-12-22 13:42:47 +00:00
2022-12-23 15:10:59 +00:00
Various messages are also sent for logging purpose.
2023-03-30 08:57:22 +00:00
## Tests / ESLint / Prettier
2023-01-05 15:17:37 +00:00
Tests are run outside the container for ease of use (switching between different environments inside containers using prisma is complicated and error prone).
2023-03-30 08:57:22 +00:00
The integration tests use a dedicated database (see _db-test_ section of _docker-compose.yml_).
2022-12-13 12:31:25 +00:00
2022-12-13 12:39:06 +00:00
```bash
2023-01-05 15:17:37 +00:00
# run all tests (unit + integration)
npm run test
2022-12-13 12:31:25 +00:00
2023-01-05 15:17:37 +00:00
# unit tests only
npm run test:unit
2022-12-13 12:31:25 +00:00
2023-01-05 15:17:37 +00:00
# integration tests only
npm run test:integration
# coverage
npm run test:cov
2023-03-30 08:57:22 +00:00
# ESLint
npm run lint
# Prettier
npm run pretty
2023-01-05 15:17:37 +00:00
```
2022-12-15 08:51:08 +00:00
2022-12-13 12:31:25 +00:00
## License
2022-12-13 14:27:28 +00:00
Mobicoop V3 - User Service is [AGPL licensed](LICENSE).