File

apps/recallassess/recallassess-api/src/api/admin/subscription/config/subscription-config.service.ts

Extends

ModuleConfigBase

Index

Methods

Methods

getConfiguration
getConfiguration()
Returns : ModuleConfig
import { ColumnConfig, ColumnType } from "@bish-nest/core/app-config/column-config.class";
import { ModuleConfig } from "@bish-nest/core/app-config/module-config.class";
import { ModuleConfigBase } from "@bish-nest/core/app-config/module-config-base.class";
import { Injectable } from "@nestjs/common";
import { BillingCycle, SubscriptionStatus, SubscriptionType } from "@prisma/client";
import { SubscriptionAddDto } from "../dto/subscription-add.dto";
import { SubscriptionDetailDto } from "../dto/subscription-detail.dto";
import { SubscriptionListDto } from "../dto/subscription-list.dto";
import { SubscriptionSaveDto } from "../dto/subscription-save.dto";

@Injectable()
export class SubscriptionConfig extends ModuleConfigBase {
  getConfiguration(): ModuleConfig {
    const columns: ColumnConfig[] = [
      new ColumnConfig({ name: "id", type: ColumnType.Integer }),
      new ColumnConfig({ name: "company_id", type: ColumnType.Integer }),
      new ColumnConfig({ name: "company.name" }),
      new ColumnConfig({ name: "company_name", relationPath: "company.name" }),
      new ColumnConfig({ name: "package_id", type: ColumnType.Integer }),
      new ColumnConfig({ name: "package.name" }),
      new ColumnConfig({ name: "package_name", relationPath: "package.name" }),
      new ColumnConfig({ name: "previous_subscription_id", type: ColumnType.Integer }),
      new ColumnConfig({ name: "license_count", type: ColumnType.Integer }),
      new ColumnConfig({
        name: "status",
        isEnumType: true,
        enumValues: Object.values(SubscriptionStatus),
      }),
      new ColumnConfig({
        name: "billing_cycle",
        isEnumType: true,
        enumValues: Object.values(BillingCycle),
      }),
      new ColumnConfig({ name: "start_date", type: ColumnType.DateTime }),
      new ColumnConfig({ name: "end_date", type: ColumnType.DateTime }),
      new ColumnConfig({ name: "next_billing_date", type: ColumnType.DateTime }),
      new ColumnConfig({ name: "stripe_subscription_id", type: ColumnType.Text }),
      new ColumnConfig({ name: "stripe_cancel_at_period_end", type: ColumnType.Boolean }),
      new ColumnConfig({ name: "is_current", type: ColumnType.Boolean }),
      new ColumnConfig({
        name: "subscription_type",
        isEnumType: true,
        enumValues: Object.values(SubscriptionType),
      }),
      new ColumnConfig({ name: "licenses_available", type: ColumnType.Integer }),
      new ColumnConfig({ name: "licenses_consumed", type: ColumnType.Integer }),
      new ColumnConfig({ name: "licenses_expired", type: ColumnType.Integer }),
      new ColumnConfig({ name: "last_license_assignment", type: ColumnType.DateTime }),
      new ColumnConfig({ name: "last_license_release", type: ColumnType.DateTime }),
      new ColumnConfig({ name: "created_at", type: ColumnType.DateTime }),
      new ColumnConfig({ name: "updated_at", type: ColumnType.DateTime }),
    ];

    return new ModuleConfig({
      name: "subscription",
      columns,
      // Keyword search supports:
      // - enums via partial matching (e.g. "act" -> ACTIVE)
      // - numeric cols via equals when keyword is a number
      // - DateTime cols listed here use BNestDataUtilService keyword date parsing (not Prisma "contains").
      keywordSearchCols: [
        "id",
        "company_id",
        "company.name",
        "package_id",
        "package.name",
        "previous_subscription_id",
        "license_count",
        "status",
        "billing_cycle",
        "start_date",
        "end_date",
        "stripe_subscription_id",
        "subscription_type",
        "licenses_available",
        "licenses_consumed",
        "licenses_expired",
        "next_billing_date",
        "created_at",
      ],

      relationObjToIncludeForList: {
        company: true,
        package: true,
      },

      relationObjToIncludeForDetail: {
        company: true,
        package: true,
        previousSubscription: true,
        userCreatedBy: true,
        userUpdatedBy: true,
      },

      listDto: SubscriptionListDto,
      detailDto: SubscriptionDetailDto,
      addDto: SubscriptionAddDto,
      saveDto: SubscriptionSaveDto,
    });
  }
}

results matching ""

    No results matching ""