@sourceloop/ctrl-plane-subscription-service
Version:
Subscription management microservice for SaaS control plane.
133 lines (127 loc) • 3.5 kB
text/typescript
import {authorize} from 'loopback4-authorization';
import {PermissionKey} from '../permissions';
import {authenticate, STRATEGY} from 'loopback4-authentication';
import {param, get, post, requestBody, patch} from '@loopback/rest';
import {
OPERATION_SECURITY_SPEC,
STATUS_CODE,
getModelSchemaRefSF,
} from '@sourceloop/core';
import {Plan} from '../models';
import {
Feature,
FeatureValues,
FeatureValuesRepository,
} from '@sourceloop/feature-toggle-service';
import {DataObject, repository} from '@loopback/repository';
import {inject} from '@loopback/core';
import {PlanFeaturesService} from '../services/plan-features-helper.service';
const basePath = 'plans/{id}/features';
export class PlanFeaturesController {
constructor(
public featureValuesRepository: FeatureValuesRepository,
private readonly planFeaturesService: PlanFeaturesService,
) {}
async getPlanFeatures(.path.string('id') id: string): Promise<
DataObject<Plan> & {
features: DataObject<Feature & {values: FeatureValues[]}>[];
}
> {
return this.planFeaturesService.planFeatures(id);
}
async setPlanFeatures(
.path.string('id') id: string,
featureValues: FeatureValues[],
): Promise<FeatureValues[]> {
const values = featureValues.map(e => {
e.strategyEntityId = id;
e.strategyKey = 'Plan';
return e;
});
return this.featureValuesRepository.createAll(values);
}
async updatePlanFeatures(
.path.string('id') id: string,
featureValues: Partial<FeatureValues>[],
): Promise<FeatureValues[]> {
return this.planFeaturesService.updatePlanFeatures(id, featureValues);
}
}