mirror of
https://github.com/Unleash/unleash.git
synced 2025-09-05 17:53:12 +02:00
feat: add support for project specific segments endpoint
This commit is contained in:
parent
068c55a925
commit
43df603ba6
@ -135,6 +135,16 @@ export default class SegmentStore implements ISegmentStore {
|
||||
return rows.map(this.mapRow);
|
||||
}
|
||||
|
||||
async getProjectSpecificSegments(project: string): Promise<ISegment[]> {
|
||||
const rows: ISegmentRow[] = await this.db
|
||||
.select(this.prefixColumns())
|
||||
.from(T.segments)
|
||||
.where({ segment_project_id: project })
|
||||
.orderBy('name', 'asc');
|
||||
|
||||
return rows.map(this.mapRow);
|
||||
}
|
||||
|
||||
deleteAll(): Promise<void> {
|
||||
return this.db(T.segments).del();
|
||||
}
|
||||
|
@ -82,7 +82,7 @@ export const createFeatureToggleService = (
|
||||
groupService,
|
||||
);
|
||||
const segmentService = new SegmentService(
|
||||
{ segmentStore, featureStrategiesStore, eventStore },
|
||||
{ segmentStore, featureStrategiesStore, eventStore, projectStore },
|
||||
config,
|
||||
);
|
||||
const featureToggleService = new FeatureToggleService(
|
||||
@ -131,7 +131,7 @@ export const createFakeFeatureToggleService = (
|
||||
groupService,
|
||||
);
|
||||
const segmentService = new SegmentService(
|
||||
{ segmentStore, featureStrategiesStore, eventStore },
|
||||
{ segmentStore, featureStrategiesStore, eventStore, projectStore },
|
||||
config,
|
||||
);
|
||||
const featureToggleService = new FeatureToggleService(
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { IUnleashConfig } from '../types/option';
|
||||
import { IEventStore } from '../types/stores/event-store';
|
||||
import { IUnleashStores } from '../types';
|
||||
import { IProjectStore, IUnleashStores } from '../types';
|
||||
import { Logger } from '../logger';
|
||||
import NameExistsError from '../error/name-exists-error';
|
||||
import { ISegmentStore } from '../types/stores/segment-store';
|
||||
@ -14,6 +14,7 @@ import {
|
||||
import User from '../types/user';
|
||||
import { IFeatureStrategiesStore } from '../types/stores/feature-strategies-store';
|
||||
import BadDataError from '../error/bad-data-error';
|
||||
import NotFoundError from '../error/notfound-error';
|
||||
|
||||
export class SegmentService {
|
||||
private logger: Logger;
|
||||
@ -24,22 +25,29 @@ export class SegmentService {
|
||||
|
||||
private eventStore: IEventStore;
|
||||
|
||||
private projectStore: IProjectStore;
|
||||
|
||||
private config: IUnleashConfig;
|
||||
|
||||
constructor(
|
||||
{
|
||||
segmentStore,
|
||||
featureStrategiesStore,
|
||||
projectStore,
|
||||
eventStore,
|
||||
}: Pick<
|
||||
IUnleashStores,
|
||||
'segmentStore' | 'featureStrategiesStore' | 'eventStore'
|
||||
| 'segmentStore'
|
||||
| 'featureStrategiesStore'
|
||||
| 'eventStore'
|
||||
| 'projectStore'
|
||||
>,
|
||||
config: IUnleashConfig,
|
||||
) {
|
||||
this.segmentStore = segmentStore;
|
||||
this.featureStrategiesStore = featureStrategiesStore;
|
||||
this.eventStore = eventStore;
|
||||
this.projectStore = projectStore;
|
||||
this.logger = config.getLogger('services/segment-service.ts');
|
||||
this.config = config;
|
||||
}
|
||||
@ -66,6 +74,13 @@ export class SegmentService {
|
||||
return this.featureStrategiesStore.getStrategiesBySegment(id);
|
||||
}
|
||||
|
||||
async getProjectSpecificSegments(projectId: string): Promise<ISegment[]> {
|
||||
if (!this.projectStore.hasProject(projectId)) {
|
||||
throw new NotFoundError(`Project "${projectId}" does not exist`);
|
||||
}
|
||||
return this.segmentStore.getProjectSpecificSegments(projectId);
|
||||
}
|
||||
|
||||
async create(
|
||||
data: unknown,
|
||||
user: Partial<Pick<User, 'username' | 'email'>>,
|
||||
|
@ -9,6 +9,8 @@ export interface ISegmentStore extends Store<ISegment, number> {
|
||||
|
||||
getByStrategy(strategyId: string): Promise<ISegment[]>;
|
||||
|
||||
getProjectSpecificSegments(projectId: string): Promise<ISegment[]>;
|
||||
|
||||
create(
|
||||
segment: Omit<ISegment, 'id'>,
|
||||
user: Partial<Pick<User, 'username' | 'email'>>,
|
||||
|
5
src/test/fixtures/fake-segment-store.ts
vendored
5
src/test/fixtures/fake-segment-store.ts
vendored
@ -58,5 +58,10 @@ export default class FakeSegmentStore implements ISegmentStore {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
|
||||
/*eslint-disable @typescript-eslint/no-unused-vars*/
|
||||
getProjectSpecificSegments(projectId: string): Promise<ISegment[]> {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
|
||||
destroy(): void {}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user