Backend for frontend is a series of backend services and libraries that enhance user experience for the frontend.
Install dependencies:
yarn
Create the .env
file:
# If you are not using docker
cp .env.example .env
# If you are using docker (handy to launch a service directly using NX)
cp .env.example .env.docker
Start docker:
yarn compose:up
Make sure your .env
file is defined, if not create one using .env.example
as a template.
# Start RabbitMQ
docker-compose up -d queue
# Start DB
docker-compose up -d db
# Start the notification producer
yarn producer
The application will start the notification producer for the networks, but you can run it for a specific network or networks by setting the NOTIFICATIONS_PRODUCER_CHAINS
environment variable.
# Run producer only on networks 1 and 100
NOTIFICATIONS_PRODUCER_CHAINS=1,100
To add a new app or library, you can run the following command;
# New API
yarn new:fastify
# New Library
yarn new:lib
# New Node app
yarn new:node
For APIs and apps, it will create a Dockerfile. Please, remember to update:
- The
docker-compose.yml
file to include the new service. - The github actions to include the new service (
.github/workflows/ci.yml
)
For more info, see:
- @nx/node:application: Generator for Applications
- @nx/node:application (Fastify): Generator for API Applications using Fastify
- @nx/node:setup-docker: Generator for NodeJS Libraries
- @nx/node:setup-docker: Docker Generator
# Run all tests
yarn test
# Run test for repositories (in watch mode)
nx run repositories:test --watch
# Run test on specific file (in watch mode)
nx run repositories:test --watch --testFile=libs/repositories/src/UsdRepository/UsdRepositoryRedis.spec.ts
Build docker containers and publish to a local registry:
yarn docker-build:affected
There's some API types that are generated automatically from their swagger definitions. To generate them, run:
yarn gen:types
{"type":"DriverPackageNotInstalledError","message":"Postgres package has not been found installed. Try to install it: npm install pg --save","stack":"DriverPackageNotInstalledError: Postgres package has not been found installed. Try to install it: npm install pg
If you have faced the error above - check this fix and its description: #101
To run locally the notifications, you will need to run:
- RabbitMQ locally:
docker-compose up -d queue
- DB locally:
docker-compose up -d db
- Telegram consumer:
yarn telegram
- Notification producer:
yarn producer
You need to make sure you have the relevant environment variables set.
There's a unit test used as a convenient way to do a quick test of the PUSH notifications.
If you have a subscription to any of the channels (i.e. Telegram), you can use the following command to send a test notification:
# Replace the POST_TO_QUEUE_ACCOUNT with your account address
POST_TO_QUEUE_ACCOUNT=0x79063d9173C09887d536924E2F6eADbaBAc099f5 nx test notification-producer --testFile=src/sendPush.test.ts --skip-nx-cache
The database access, and therefore the migrations is handled in libs/repositories
.
To create a new migration, run:
# Create a new migration with "your-migration-name" as name
yarn typeorm migration:create src/migrations/your-migration-name
# Alternatively, you could define the entities in `libs/repositories/src/database` and then run:
yarn migration:generate
This will create a new migration file in the libs/repositories/src/migrations
directory. For example 1745364046891-initial-migration.ts
.
Inside this file, you will need to edit the migration logic, where:
up
is the logic to execute the migrationdown
is the logic to revert the migration
Once you have added the migration logic, you can run the migration with:
yarn migration:run
To revert the last migration, run:
yarn migration:revert