diff --git a/src/lib/db/feature-type-store.ts b/src/lib/db/feature-type-store.ts index dbd281b0e2f..9415ab4f8df 100644 --- a/src/lib/db/feature-type-store.ts +++ b/src/lib/db/feature-type-store.ts @@ -39,7 +39,7 @@ class FeatureTypeStore implements IFeatureTypeStore { }; } - async get(id: string): Promise { + async get(id: string): Promise { const row = await this.db(TABLE).where({ id }).first(); return this.rowToFeatureType(row); } diff --git a/src/lib/features/export-import-toggles/export-import-controller.ts b/src/lib/features/export-import-toggles/export-import-controller.ts index 786c567661b..dab6d3a52da 100644 --- a/src/lib/features/export-import-toggles/export-import-controller.ts +++ b/src/lib/features/export-import-toggles/export-import-controller.ts @@ -1,5 +1,4 @@ import { Response } from 'express'; -import { Knex } from 'knex'; import Controller from '../../routes/controller'; import { Logger } from '../../logger'; import ExportImportService from './export-import-service'; @@ -30,7 +29,7 @@ class ExportImportController extends Controller { private exportImportService: ExportImportService; private transactionalExportImportService: ( - db: Knex.Transaction, + db: UnleashTransaction, ) => ExportImportService; private openApiService: OpenApiService; diff --git a/src/lib/features/project/createProjectService.ts b/src/lib/features/project/createProjectService.ts new file mode 100644 index 00000000000..ba641fd04a8 --- /dev/null +++ b/src/lib/features/project/createProjectService.ts @@ -0,0 +1,159 @@ +import { Db, IUnleashConfig } from 'lib/server-impl'; +import EventStore from '../../db/event-store'; +import GroupStore from '../../db/group-store'; +import { AccountStore } from '../../db/account-store'; +import EnvironmentStore from '../../db/environment-store'; +import { + AccessService, + FavoritesService, + GroupService, + ProjectService, +} from '../../services'; +import FakeGroupStore from '../../../test/fixtures/fake-group-store'; +import FakeEventStore from '../../../test/fixtures/fake-event-store'; +import ProjectStore from '../../db/project-store'; +import FeatureToggleStore from '../../db/feature-toggle-store'; +import FeatureTypeStore from '../../db/feature-type-store'; +import { FeatureEnvironmentStore } from '../../db/feature-environment-store'; +import FeatureTagStore from '../../db/feature-tag-store'; +import ProjectStatsStore from '../../db/project-stats-store'; +import { + createAccessService, + createFakeAccessService, +} from '../access/createAccessService'; +import { + createFakeFeatureToggleService, + createFeatureToggleService, +} from '../feature-toggle/createFeatureToggleService'; +import { FavoriteFeaturesStore } from '../../db/favorite-features-store'; +import { FavoriteProjectsStore } from '../../db/favorite-projects-store'; +import FakeProjectStore from '../../../test/fixtures/fake-project-store'; +import FakeFeatureToggleStore from '../../../test/fixtures/fake-feature-toggle-store'; +import FakeFeatureTypeStore from '../../../test/fixtures/fake-feature-type-store'; +import FakeEnvironmentStore from '../../../test/fixtures/fake-environment-store'; +import FakeFeatureEnvironmentStore from '../../../test/fixtures/fake-feature-environment-store'; +import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store'; +import FakeProjectStatsStore from '../../../test/fixtures/fake-project-stats-store'; +import FakeFavoriteFeaturesStore from '../../../test/fixtures/fake-favorite-features-store'; +import FakeFavoriteProjectsStore from '../../../test/fixtures/fake-favorite-projects-store'; +import { FakeAccountStore } from '../../../test/fixtures/fake-account-store'; + +export const createProjectService = ( + db: Db, + config: IUnleashConfig, +): ProjectService => { + const { eventBus, getLogger, flagResolver } = config; + const eventStore = new EventStore(db, getLogger); + const projectStore = new ProjectStore( + db, + eventBus, + getLogger, + flagResolver, + ); + const groupStore = new GroupStore(db); + const featureToggleStore = new FeatureToggleStore(db, eventBus, getLogger); + const featureTypeStore = new FeatureTypeStore(db, getLogger); + const accountStore = new AccountStore(db, getLogger); + const environmentStore = new EnvironmentStore(db, eventBus, getLogger); + const featureEnvironmentStore = new FeatureEnvironmentStore( + db, + eventBus, + getLogger, + ); + const featureTagStore = new FeatureTagStore(db, eventBus, getLogger); + const projectStatsStore = new ProjectStatsStore(db, eventBus, getLogger); + const accessService: AccessService = createAccessService(db, config); + const featureToggleService = createFeatureToggleService(db, config); + const favoriteFeaturesStore = new FavoriteFeaturesStore( + db, + eventBus, + getLogger, + ); + const favoriteProjectsStore = new FavoriteProjectsStore( + db, + eventBus, + getLogger, + ); + const favoriteService = new FavoritesService( + { + favoriteFeaturesStore, + favoriteProjectsStore, + eventStore, + }, + config, + ); + const groupService = new GroupService( + { groupStore, eventStore, accountStore }, + { getLogger }, + ); + + return new ProjectService( + { + projectStore, + eventStore, + featureToggleStore, + featureTypeStore, + environmentStore, + featureEnvironmentStore, + featureTagStore, + accountStore, + projectStatsStore, + }, + config, + accessService, + featureToggleService, + groupService, + favoriteService, + ); +}; + +export const createFakeProjectService = ( + config: IUnleashConfig, +): ProjectService => { + const { getLogger } = config; + const eventStore = new FakeEventStore(); + const projectStore = new FakeProjectStore(); + const groupStore = new FakeGroupStore(); + const featureToggleStore = new FakeFeatureToggleStore(); + const featureTypeStore = new FakeFeatureTypeStore(); + const accountStore = new FakeAccountStore(); + const environmentStore = new FakeEnvironmentStore(); + const featureEnvironmentStore = new FakeFeatureEnvironmentStore(); + const featureTagStore = new FakeFeatureTagStore(); + const projectStatsStore = new FakeProjectStatsStore(); + const accessService = createFakeAccessService(config); + const featureToggleService = createFakeFeatureToggleService(config); + const favoriteFeaturesStore = new FakeFavoriteFeaturesStore(); + const favoriteProjectsStore = new FakeFavoriteProjectsStore(); + const favoriteService = new FavoritesService( + { + favoriteFeaturesStore, + favoriteProjectsStore, + eventStore, + }, + config, + ); + const groupService = new GroupService( + { groupStore, eventStore, accountStore }, + { getLogger }, + ); + + return new ProjectService( + { + projectStore, + eventStore, + featureToggleStore, + featureTypeStore, + environmentStore, + featureEnvironmentStore, + featureTagStore, + accountStore, + projectStatsStore, + }, + config, + accessService, + featureToggleService, + groupService, + favoriteService, + ); +};