Skip to content

@sourceloop/ctrl-plane-subscription-service / Exports

subscription-service

LoopBack

This is the primary service of the control plane responsible for subscription and plan management.

Overview

A Microservice for handling subscription management operations. It provides - - plan creations and management - plan includes plan tier - silo/pooled - Add or Update Plan Items/Services/Resources to Plans - plan items are the offerings to user with in the selected plan - Billing Cycle handling - Billing cycle includes start date and end date etc

Installation

Install Subscription service using npm;

$ [npm install | yarn add] @sourceloop/subscription-service

Usage

  • Create a new Loopback4 Application (If you don't have one already) lb4 testapp
  • Install the subscription service npm i @sourceloop/subscription-service
  • Set the environment variables.
  • Run the migrations.
  • Add the SubscriptionServiceComponent to your Loopback4 Application (in application.ts).
    1
    2
    3
    4
    // import the SubscriptionServiceComponent
    import {SubscriptionServiceComponent} from '@sourceloop/subscription-service';
    // add Component for subscription-service
    this.component(SubscriptionServiceComponent);
    
  • Set up a Loopback4 Datasource with dataSourceName property set to SubscriptionDB. You can see an example datasource here.
  • Bind any of the custom providers you need.

Environment Variables

Name Required Description Default Value
NODE_ENV Y Node environment value, i.e. `dev`, `test`, `prod
LOG_LEVEL Y Log level value, i.e. `error`, `warn`, `info`, `verbose`, `debug`
DB_HOST Y Hostname for the database server.
DB_PORT Y Port for the database server.
DB_USER Y User for the database.
DB_PASSWORD Y Password for the database user.
DB_DATABASE Y Database to connect to on the database server.
DB_SCHEMA Y Database schema used for the data source. In PostgreSQL, this will be `public` unless a schema is made explicitly for the service.
REDIS_HOST Y Hostname of the Redis server.
REDIS_PORT Y Port to connect to the Redis server over.
REDIS_URL Y Fully composed URL for Redis connection. Used instead of other settings if set.
REDIS_PASSWORD Y Password for Redis if authentication is enabled.
REDIS_DATABASE Y Database within Redis to connect to.
JWT_SECRET Y Symmetric signing key of the JWT token.
JWT_ISSUER Y Issuer of the JWT token.

Setting up a DataSource

Here is a sample Implementation DataSource implementation using environment variables and PostgreSQL as the data source.

import {inject, lifeCycleObserver, LifeCycleObserver} from '@loopback/core';
import {juggler} from '@loopback/repository';
import {TenantManagementDbSourceName} from "@sourceloop/tenant-management-service";

const config = {
  name: SubscriptionDbSourceName,
  connector: 'postgresql',
  url: '',
  host: process.env.DB_HOST,
  port: process.env.DB_PORT,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_DATABASE,
  schema: process.env.DB_SCHEMA,
};

@lifeCycleObserver('datasource')
export class AuthenticationDbDataSource
  extends juggler.DataSource
  implements LifeCycleObserver
{
  static dataSourceName = SubscriptionDbSourceName;
  static readonly defaultConfig = config;

  constructor(
    // You need to set datasource configuration name as 'datasources.config.Authentication' otherwise you might get Errors
    @inject(`datasources.config.${SubscriptionDbSourceName}`, {optional: true})
    dsConfig: object = config,
  ) {
    super(dsConfig);
  }
}

Migrations

The migrations required for this service can be copied from the service. You can customize or cherry-pick the migrations in the copied files according to your specific requirements and then apply them to the DB.

Database Schema

Screenshot from 2024-04-24 11-55-23