# Mobicoop V3 - Ad Ad service for Mobicoop V3. ## 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 or Prettier with fix-on-save). A RabbitMQ instance is also required to send / receive messages when data has been inserted/updated/deleted. ## 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 **5006**. ## Database migration Before using the app, you need to launch the database migration (it will be launched inside the container) : ```bash npm run migrate ``` ## Usage The app exposes the following [gRPC](https://grpc.io/) services : - **FindByUuid** : find an ad by its uuid ```json { "uuid": "80126a61-d128-4f96-afdb-92e33c75a3e1" } ``` - **Create** : create an ad (note that uuid is optional, a uuid will be automatically attributed if it is not provided) ```json { "userUuid": "113e0000-0000-4000-a000-000000000000", "driver": true, "passenger": false, "frequency": "PUNCTUAL", "departure": "2023-01-15", "toDate": "2023-08-01", "marginDurations": { "mon": 800 }, "seatsPassenger": 0, "seatsDriver": 3, "addresses": [ { "lon": 48.68944505415954, "lat": 6.176510296462267, "houseNumber": "5", "street": "Avenue Foch", "locality": "Nancy", "postalCode": "54000", "country": "France" }, { "lon": 48.8566, "lat": 2.3522, "locality": "Paris", "postalCode": "75000", "country": "France" } ] } ``` ## Messages As mentionned earlier, RabbitMQ messages are sent after these events : - **Create** (message : the created ad informations) ## Tests / ESLint / Prettier Tests are run outside the container for ease of use (switching between different environments inside containers using prisma is complicated and error prone). The integration tests use a dedicated database (see _db-test_ section of _docker-compose.yml_). ```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 - Ad Service is [AGPL licensed](LICENSE).