* refactor: replace FeaturesRepository with DI-based feature repositories Migrate from the legacy FeaturesRepository pattern to separate DI-based repositories: - Add checkIfFeatureIsEnabledGlobally to IFeatureRepository - Add getTeamsWithFeatureEnabled to ITeamFeatureRepository - Update CalendarSubscriptionService to use featureRepository, teamFeatureRepository, and userFeatureRepository - Update SelectedCalendarRepository.findNextSubscriptionBatch to filter by teamIds instead of featureIds - Update OnboardingPathService to use DI via getFeatureRepository() - Remove prisma parameter from OnboardingPathService callsites Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test: update tests to use new DI-based feature repositories Update CalendarSubscriptionService and SelectedCalendarRepository tests to use the new separate repository interfaces: - featureRepository for global feature checks - teamFeatureRepository for team-level feature checks - userFeatureRepository for user-level feature checks Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: update API routes to use DI-based feature repositories Update cron and webhook routes to use the new separate repository interfaces instead of the combined FeaturesRepository. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: remove prisma arg from getGettingStartedPathWithParams call The OnboardingPathService method no longer requires a prisma argument as it now uses DI containers internally. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test: update route tests to expect new DI-based feature repositories Update service instantiation tests to expect featureRepository, teamFeatureRepository, and userFeatureRepository instead of the old featuresRepository. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: optimize global feature check and add guard in checkForNewSubscriptions - Use targeted select for only `enabled` field in checkIfFeatureIsEnabledGlobally - Add global feature flag guard in checkForNewSubscriptions to avoid unnecessary DB queries and API calls when the cache feature is globally disabled Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * remove redundant comment --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
27 lines
1.1 KiB
TypeScript
27 lines
1.1 KiB
TypeScript
import { getFeatureRepository } from "@calcom/features/di/containers/FeatureRepository";
|
|
|
|
export class OnboardingPathService {
|
|
static async getGettingStartedPath(): Promise<string> {
|
|
const featureRepository = getFeatureRepository();
|
|
const onboardingV3Enabled = await featureRepository.checkIfFeatureIsEnabledGlobally("onboarding-v3");
|
|
return onboardingV3Enabled ? "/onboarding/getting-started" : "/getting-started";
|
|
}
|
|
|
|
static async getGettingStartedPathWhenInvited(): Promise<string> {
|
|
const featureRepository = getFeatureRepository();
|
|
const onboardingV3Enabled = await featureRepository.checkIfFeatureIsEnabledGlobally("onboarding-v3");
|
|
return onboardingV3Enabled ? "/onboarding/personal/settings" : "/getting-started";
|
|
}
|
|
|
|
static async getGettingStartedPathWithParams(queryParams?: Record<string, string>): Promise<string> {
|
|
const basePath = await OnboardingPathService.getGettingStartedPath();
|
|
|
|
if (!queryParams || Object.keys(queryParams).length === 0) {
|
|
return basePath;
|
|
}
|
|
|
|
const params = new URLSearchParams(queryParams);
|
|
return `${basePath}?${params.toString()}`;
|
|
}
|
|
}
|