/contract-manager

Prometheus-X Contract Manager

Primary LanguageTypeScriptMIT LicenseMIT

contract-manager

Prerequisites

Before you begin, ensure you have met the following requirements:

Setup

  1. Make sure to fill your .env (see .env.sample):
cat .env.sample
  1. Use the required Node.js version using nvm:
nvm use

On Windows, you can use the following command:

nvm use $(Get-Content .nvmrc)

This ensures that the project uses the specified Node.js version.

  1. Install project dependencies using pnpm:
pnpm install

This will install all the necessary dependencies for your project.

Usage for development

  1. Watch for changes and automatically restart the server in development:
pnpm dev

This command will use nodemon to watch for changes and restart your application when changes are detected.

Generators

  1. Generate TypeScript types for Mongoose using mongoose-tsgen:
pnpm gen-types

This command will generate TypeScript types based on your Mongoose models.

  1. Generate Swagger API doc with:
pnpm gen-swagger

This command will generate Swagger documentation, accessible at http://localhost:{port}/api-docs/#/

  1. Generate Source Code documentation with:
pnpm gen-docs

This command will generate documentation using TypeDoc for the source code and save it in a "docs" folder.

Building the project for production

  1. Build the project:
pnpm build

This command will clean the build/ directory and compile your TypeScript code.

  1. Start your Node.js application:
pnpm start

This command will start your application using the compiled code.

Docker

  1. Clone the repository from GitHub: git clone https://github.com/prometheus-x/contract-manager.git
  2. Navigate to the project directory: cd contract-manager
  3. Configure the application by setting up the necessary environment variables. You will need to specify database connection details and other relevant settings.
  4. Create a docker network using docker network create ptx
  5. Start the application: docker-compose up -d
  6. If you need to rebuild the image docker-compose build and restart with: docker-compose up -d
  7. If you don't want to use the mongodb container from the docker compose you can use the command docker run -d -p your-port:your-port --name contract-manager contract-manager after running docker-compose build

Terraform

  1. Install Terraform: Ensure Terraform is installed on your machine.
  2. Configure Kubernetes: Ensure you have access to your Kubernetes cluster and kubectl is configured.
  3. Initialize Terraform: Run the following commands from the terraform directory.
cd terraform
terraform init
  1. Apply the Configuration: Apply the Terraform configuration to create the resources.
terraform apply
  1. Retrieve Service IP: After applying the configuration, retrieve the service IP.
terraform output contract_manager_service_ip
  • Replace placeholder values in the kubernetes_secret resource with actual values from your .env.
  • Ensure the server_port value matches the port used in your application.
  • Adjust the host_path in the kubernetes_persistent_volume resource to an appropriate path on your Kubernetes nodes.

Deployment with Helm

  1. Install Helm: Ensure Helm is installed on your machine. You can install it following the instructions here.

  2. Package the Helm chart:

    helm package ./path/to/contract-manager
  3. Deploy the Helm chart:

    helm install contract-manager ./path/to/contract-manager
  4. Verify the deployment:

    kubectl get all -n contract-manager
  5. Retrieve Service IP:

    kubectl get svc -n contract-manager
  • Replace placeholder values in the values.yaml file with actual values from your .env.
  • Ensure the server_port value matches the port used in your application.
  • Configure your MongoDB connection details in the values.yaml file to point to your managed MongoDB instance.

Tests

  1. Run tests:
pnpm test

This command will run your tests using Mocha. Make sure your tests are located in ./src/tests/*.test.ts.

License

This project is licensed under MIT License

  • see the [LICENSE.md] file for details.