unleash-server
Version:
Unleash is an enterprise ready feature toggles service. It provides different strategies for handling feature toggles.
54 lines (53 loc) • 3.56 kB
TypeScript
import User, { IUser } from '../types/user';
import { AccessService } from './access-service';
import { IUnleashStores, IUnleashConfig } from '../types';
import { FeatureToggle, IProject, IProjectOverview, IProjectWithCount, IUserWithRole } from '../types/model';
import { IProjectQuery } from '../types/stores/project-store';
import { IProjectAccessModel, IRoleDescriptor } from '../types/stores/access-store';
import FeatureToggleService from './feature-toggle-service';
import { GroupService } from './group-service';
import { IGroupModelWithProjectRole, IGroupRole } from 'lib/types/group';
export interface AccessWithRoles {
users: IUserWithRole[];
roles: IRoleDescriptor[];
groups: IGroupModelWithProjectRole[];
}
export default class ProjectService {
private store;
private accessService;
private eventStore;
private featureToggleStore;
private featureTypeStore;
private featureEnvironmentStore;
private environmentStore;
private groupService;
private logger;
private featureToggleService;
private tagStore;
private userStore;
constructor({ projectStore, eventStore, featureToggleStore, featureTypeStore, environmentStore, featureEnvironmentStore, featureTagStore, userStore, }: Pick<IUnleashStores, 'projectStore' | 'eventStore' | 'featureToggleStore' | 'featureTypeStore' | 'environmentStore' | 'featureEnvironmentStore' | 'featureTagStore' | 'userStore'>, config: IUnleashConfig, accessService: AccessService, featureToggleService: FeatureToggleService, groupService: GroupService);
getProjects(query?: IProjectQuery, userId?: number): Promise<IProjectWithCount[]>;
getProject(id: string): Promise<IProject>;
createProject(newProject: Pick<IProject, 'id' | 'name'>, user: IUser): Promise<IProject>;
updateProject(updatedProject: IProject, user: User): Promise<void>;
checkProjectsCompatibility(feature: FeatureToggle, newProjectId: string): Promise<boolean>;
addEnvironmentToProject(project: string, environment: string): Promise<void>;
changeProject(newProjectId: string, featureName: string, user: User, currentProjectId: string): Promise<any>;
deleteProject(id: string, user: User): Promise<void>;
validateId(id: string): Promise<boolean>;
validateUniqueId(id: string): Promise<void>;
getAccessToProject(projectId: string): Promise<AccessWithRoles>;
addUser(projectId: string, roleId: number, userId: number, createdBy: string): Promise<void>;
removeUser(projectId: string, roleId: number, userId: number, createdBy: string): Promise<void>;
addGroup(projectId: string, roleId: number, groupId: number, modifiedBy: string): Promise<void>;
removeGroup(projectId: string, roleId: number, groupId: number, modifiedBy: string): Promise<void>;
addAccess(projectId: string, roleId: number, usersAndGroups: IProjectAccessModel, createdBy: string): Promise<void>;
findProjectGroupRole(projectId: string, roleId: number): Promise<IGroupRole>;
findProjectRole(projectId: string, roleId: number): Promise<IRoleDescriptor>;
validateAtLeastOneOwner(projectId: string, currentRole: IRoleDescriptor): Promise<void>;
changeRole(projectId: string, roleId: number, userId: number, createdBy: string): Promise<void>;
changeGroupRole(projectId: string, roleId: number, userId: number, createdBy: string): Promise<void>;
getMembers(projectId: string): Promise<number>;
getProjectsByUser(userId: number): Promise<string[]>;
getProjectOverview(projectId: string, archived?: boolean): Promise<IProjectOverview>;
}