import { SchemaModel } from '@verb/src/libs/shared/base/base.model'; import { SubSchema } from '@verb/src/libs/shared/json-schema-validator/schema-types'; import { AccountType, HostBillingSchema } from '@verb/src/libs/stream/host-metadata'; export class HostBillingMetadataResponseModel implements SchemaModel { public accountType: AccountType = 'free'; public endDate: Date | null = null; public minutes = 0; public constructor(hostCreditSchema?: HostBillingSchema) { if (hostCreditSchema) { this.fromSchema(hostCreditSchema); } } public fromSchema(schema: HostBillingSchema): void { this.accountType = schema.account_type; this.minutes = schema.minutes; this.endDate = schema.end_date ? new Date(schema.end_date) : null; } public toSchema(): HostBillingMetadataResponseSchema { return { account_type: this.accountType, end_date: this.endDate ? this.endDate.toUTCString() : null, minutes: this.minutes, }; } } export interface HostBillingMetadataResponseSchema { account_type: AccountType; minutes: number; end_date: string | null; } export const hostBillingMetadataResponseValidationSchema: SubSchema = { additionalProperties: false, description: 'Host Billing Validation Schema', properties: { account_type: { description: 'Host Billing Account Type', enum: ['free', 'single', 'subscription'], minLength: 1, type: 'string', }, end_date: { description: 'End date of current subscription', type: 'string', }, minutes: { description: 'Host Minutes Remaining', type: 'number', }, }, required: ['account_type', 'minutes'], type: 'object', };