apps/recallassess/recallassess-api/src/api/admin/subscription/config/subscription-config.service.ts
ModuleConfigBase
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,
});
}
}