1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-11-10 01:19:53 +01:00
unleash.unleash/src/lib/db/index.ts
Gastón Fournier 37a125f0b5
feat: ability to query users with pagination (#10130)
Made a few QoL improvements:
- Don't use default export for class
- Move users store to a feature package (didn't move the interface as it
might be referenced elsewhere)
- Add types for query builders (and ts-expect-error when needed)
2025-06-12 17:43:22 +02:00

212 lines
10 KiB
TypeScript

import {
type IUnleashConfig,
type IUnleashStores,
ReleasePlanMilestoneStore,
ReleasePlanMilestoneStrategyStore,
ReleasePlanStore,
ReleasePlanTemplateStore,
} from '../types/index.js';
import EventStore from '../features/events/event-store.js';
import FeatureToggleStore from '../features/feature-toggle/feature-toggle-store.js';
import FeatureTypeStore from './feature-type-store.js';
import StrategyStore from './strategy-store.js';
import ClientInstanceStore from './client-instance-store.js';
import ClientApplicationsStore from './client-applications-store.js';
import ContextFieldStore from '../features/context/context-field-store.js';
import SettingStore from './setting-store.js';
import { UserStore } from '../features/users/user-store.js';
import ProjectStore from '../features/project/project-store.js';
import TagStore from './tag-store.js';
import TagTypeStore from '../features/tag-type/tag-type-store.js';
import AddonStore from './addon-store.js';
import { ApiTokenStore } from './api-token-store.js';
import SessionStore from './session-store.js';
import { AccessStore } from './access-store.js';
import { ResetTokenStore } from './reset-token-store.js';
import UserFeedbackStore from './user-feedback-store.js';
import FeatureStrategyStore from '../features/feature-toggle/feature-toggle-strategies-store.js';
import FeatureToggleClientStore from '../features/client-feature-toggles/client-feature-toggle-store.js';
import EnvironmentStore from '../features/project-environments/environment-store.js';
import FeatureTagStore from './feature-tag-store.js';
import { FeatureEnvironmentStore } from './feature-environment-store.js';
import { ClientMetricsStoreV2 } from '../features/metrics/client-metrics/client-metrics-store-v2.js';
import UserSplashStore from './user-splash-store.js';
import RoleStore from './role-store.js';
import SegmentStore from '../features/segment/segment-store.js';
import GroupStore from './group-store.js';
import PatStore from './pat-store.js';
import { PublicSignupTokenStore } from './public-signup-token-store.js';
import { FavoriteFeaturesStore } from './favorite-features-store.js';
import { FavoriteProjectsStore } from './favorite-projects-store.js';
import { AccountStore } from './account-store.js';
import ProjectStatsStore from './project-stats-store.js';
import type { Db } from './db.js';
import { ImportTogglesStore } from '../features/export-import-toggles/import-toggles-store.js';
import PrivateProjectStore from '../features/private-project/privateProjectStore.js';
import { DependentFeaturesStore } from '../features/dependent-features/dependent-features-store.js';
import LastSeenStore from '../features/metrics/last-seen/last-seen-store.js';
import FeatureSearchStore from '../features/feature-search/feature-search-store.js';
import { InactiveUsersStore } from '../users/inactive/inactive-users-store.js';
import { TrafficDataUsageStore } from '../features/traffic-data-usage/traffic-data-usage-store.js';
import { SegmentReadModel } from '../features/segment/segment-read-model.js';
import { ProjectOwnersReadModel } from '../features/project/project-owners-read-model.js';
import { FeatureLifecycleStore } from '../features/feature-lifecycle/feature-lifecycle-store.js';
import { ProjectFlagCreatorsReadModel } from '../features/project/project-flag-creators-read-model.js';
import { FeatureStrategiesReadModel } from '../features/feature-toggle/feature-strategies-read-model.js';
import { FeatureLifecycleReadModel } from '../features/feature-lifecycle/feature-lifecycle-read-model.js';
import { LargestResourcesReadModel } from '../features/metrics/sizes/largest-resources-read-model.js';
import { IntegrationEventsStore } from '../features/integration-events/integration-events-store.js';
import { FeatureCollaboratorsReadModel } from '../features/feature-toggle/feature-collaborators-read-model.js';
import { createProjectReadModel } from '../features/project/createProjectReadModel.js';
import { OnboardingStore } from '../features/onboarding/onboarding-store.js';
import { createOnboardingReadModel } from '../features/onboarding/createOnboardingReadModel.js';
import { UserUnsubscribeStore } from '../features/user-subscriptions/user-unsubscribe-store.js';
import { UserSubscriptionsReadModel } from '../features/user-subscriptions/user-subscriptions-read-model.js';
import { UniqueConnectionStore } from '../features/unique-connection/unique-connection-store.js';
import { UniqueConnectionReadModel } from '../features/unique-connection/unique-connection-read-model.js';
import { FeatureLinkStore } from '../features/feature-links/feature-link-store.js';
import { UnknownFlagsStore } from '../features/metrics/unknown-flags/unknown-flags-store.js';
import { FeatureLinksReadModel } from '../features/feature-links/feature-links-read-model.js';
export const createStores = (
config: IUnleashConfig,
db: Db,
): IUnleashStores => {
const { getLogger, eventBus } = config;
const eventStore = new EventStore(db, getLogger);
return {
eventStore,
featureToggleStore: new FeatureToggleStore(
db,
eventBus,
getLogger,
config.flagResolver,
),
featureTypeStore: new FeatureTypeStore(db, getLogger),
strategyStore: new StrategyStore(db, getLogger),
clientApplicationsStore: new ClientApplicationsStore(
db,
eventBus,
getLogger,
config.flagResolver,
),
clientInstanceStore: new ClientInstanceStore(db, eventBus, getLogger),
clientMetricsStoreV2: new ClientMetricsStoreV2(
db,
eventBus,
getLogger,
config.flagResolver,
),
contextFieldStore: new ContextFieldStore(
db,
getLogger,
config.flagResolver,
),
settingStore: new SettingStore(db, getLogger),
userStore: new UserStore(db, getLogger),
accountStore: new AccountStore(db, getLogger),
projectStore: new ProjectStore(db, eventBus, config),
tagStore: new TagStore(db, eventBus, getLogger),
tagTypeStore: new TagTypeStore(db, eventBus, getLogger),
addonStore: new AddonStore(db, eventBus, getLogger),
accessStore: new AccessStore(db, eventBus, getLogger),
apiTokenStore: new ApiTokenStore(
db,
eventBus,
getLogger,
config.flagResolver,
),
resetTokenStore: new ResetTokenStore(db, eventBus, getLogger),
sessionStore: new SessionStore(db, eventBus, getLogger),
userFeedbackStore: new UserFeedbackStore(db, eventBus, getLogger),
featureStrategiesStore: new FeatureStrategyStore(
db,
eventBus,
getLogger,
config.flagResolver,
),
clientFeatureToggleStore: new FeatureToggleClientStore(
db,
eventBus,
config,
),
environmentStore: new EnvironmentStore(db, eventBus, config),
featureTagStore: new FeatureTagStore(db, eventBus, getLogger),
featureEnvironmentStore: new FeatureEnvironmentStore(
db,
eventBus,
config,
),
userSplashStore: new UserSplashStore(db, eventBus, getLogger),
roleStore: new RoleStore(db, eventBus, getLogger),
segmentStore: new SegmentStore(
db,
eventBus,
getLogger,
config.flagResolver,
),
groupStore: new GroupStore(db),
publicSignupTokenStore: new PublicSignupTokenStore(
db,
eventBus,
getLogger,
),
patStore: new PatStore(db, getLogger),
favoriteFeaturesStore: new FavoriteFeaturesStore(
db,
eventBus,
getLogger,
),
favoriteProjectsStore: new FavoriteProjectsStore(
db,
eventBus,
getLogger,
),
projectStatsStore: new ProjectStatsStore(db, eventBus, getLogger),
importTogglesStore: new ImportTogglesStore(db),
privateProjectStore: new PrivateProjectStore(db, getLogger),
dependentFeaturesStore: new DependentFeaturesStore(db),
lastSeenStore: new LastSeenStore(db, eventBus, getLogger),
featureSearchStore: new FeatureSearchStore(
db,
eventBus,
getLogger,
config.flagResolver,
),
inactiveUsersStore: new InactiveUsersStore(db, eventBus, getLogger),
trafficDataUsageStore: new TrafficDataUsageStore(db, getLogger),
segmentReadModel: new SegmentReadModel(db),
projectOwnersReadModel: new ProjectOwnersReadModel(db),
projectFlagCreatorsReadModel: new ProjectFlagCreatorsReadModel(db),
featureLifecycleStore: new FeatureLifecycleStore(db),
featureStrategiesReadModel: new FeatureStrategiesReadModel(db),
onboardingReadModel: createOnboardingReadModel(db),
onboardingStore: new OnboardingStore(db),
featureLifecycleReadModel: new FeatureLifecycleReadModel(db),
largestResourcesReadModel: new LargestResourcesReadModel(db),
integrationEventsStore: new IntegrationEventsStore(db, { eventBus }),
featureCollaboratorsReadModel: new FeatureCollaboratorsReadModel(db),
projectReadModel: createProjectReadModel(
db,
eventBus,
config.flagResolver,
),
userUnsubscribeStore: new UserUnsubscribeStore(db),
userSubscriptionsReadModel: new UserSubscriptionsReadModel(db),
uniqueConnectionStore: new UniqueConnectionStore(db),
uniqueConnectionReadModel: new UniqueConnectionReadModel(
new UniqueConnectionStore(db),
),
releasePlanStore: new ReleasePlanStore(db, config),
releasePlanTemplateStore: new ReleasePlanTemplateStore(db, config),
releasePlanMilestoneStore: new ReleasePlanMilestoneStore(db, config),
releasePlanMilestoneStrategyStore:
new ReleasePlanMilestoneStrategyStore(db, config),
featureLinkStore: new FeatureLinkStore(db, config),
unknownFlagsStore: new UnknownFlagsStore(db),
featureLinkReadModel: new FeatureLinksReadModel(db, eventBus),
};
};