@sourceloop/ctrl-plane-subscription-service
Version:
Subscription management microservice for SaaS control plane.
49 lines (46 loc) • 1.5 kB
text/typescript
import {Getter, inject} from '@loopback/core';
import {
Entity,
HasManyRepositoryFactory,
juggler,
repository,
} from '@loopback/repository';
import {
DefaultUserModifyCrudRepository,
IAuthUserWithPermissions,
} from '@sourceloop/core';
import {AuthenticationBindings} from 'loopback4-authentication';
import {BillingCustomer, Invoice} from '../models';
import {SubscriptionDbSourceName} from '../types';
import {InvoiceRepository} from './invoice.repository';
export class BillingCustomerRepository<
T extends BillingCustomer = BillingCustomer,
> extends DefaultUserModifyCrudRepository<
T,
typeof BillingCustomer.prototype.id,
{}
> {
public readonly invoices: HasManyRepositoryFactory<
Invoice,
typeof BillingCustomer.prototype.id
>;
constructor(
(`datasources.${SubscriptionDbSourceName}`)
dataSource: juggler.DataSource,
.getter('InvoiceRepository')
protected invoiceRepositoryGetter: Getter<InvoiceRepository>,
.getter(AuthenticationBindings.CURRENT_USER)
public readonly getCurrentUser: Getter<IAuthUserWithPermissions>,
('models.BillingCustomer')
private readonly billingCustomer: typeof Entity & {
prototype: T;
},
) {
super(billingCustomer, dataSource, getCurrentUser);
this.invoices = this.createHasManyRepositoryFactoryFor(
'invoices',
invoiceRepositoryGetter,
);
this.registerInclusionResolver('invoices', this.invoices.inclusionResolver);
}
}