mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-23 00:22:19 +01:00
refactor: move getProjectsByUser to read model (#8262)
This commit is contained in:
parent
aca0de414e
commit
823f6330b7
@ -14,4 +14,7 @@ export class FakeProjectReadModel implements IProjectReadModel {
|
|||||||
getProjectsForInsights(): Promise<ProjectForInsights[]> {
|
getProjectsForInsights(): Promise<ProjectForInsights[]> {
|
||||||
return Promise.resolve([]);
|
return Promise.resolve([]);
|
||||||
}
|
}
|
||||||
|
getProjectsByUser(): Promise<string[]> {
|
||||||
|
return Promise.resolve([]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,4 +37,5 @@ export interface IProjectReadModel {
|
|||||||
getFeatureProject(
|
getFeatureProject(
|
||||||
featureName: string,
|
featureName: string,
|
||||||
): Promise<{ project: string; createdAt: Date } | null>;
|
): Promise<{ project: string; createdAt: Date } | null>;
|
||||||
|
getProjectsByUser(userId: number): Promise<string[]>;
|
||||||
}
|
}
|
||||||
|
@ -249,4 +249,36 @@ export class ProjectReadModel implements IProjectReadModel {
|
|||||||
memberTimer();
|
memberTimer();
|
||||||
return members;
|
return members;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getProjectsByUser(userId: number): Promise<string[]> {
|
||||||
|
const projects = await this.db
|
||||||
|
.from((db) => {
|
||||||
|
db.select('role_user.project')
|
||||||
|
.from('role_user')
|
||||||
|
.leftJoin('roles', 'role_user.role_id', 'roles.id')
|
||||||
|
.leftJoin('projects', 'role_user.project', 'projects.id')
|
||||||
|
.where('user_id', userId)
|
||||||
|
.andWhere('projects.archived_at', null)
|
||||||
|
.union((queryBuilder) => {
|
||||||
|
queryBuilder
|
||||||
|
.select('group_role.project')
|
||||||
|
.from('group_role')
|
||||||
|
.leftJoin(
|
||||||
|
'group_user',
|
||||||
|
'group_user.group_id',
|
||||||
|
'group_role.group_id',
|
||||||
|
)
|
||||||
|
.leftJoin(
|
||||||
|
'projects',
|
||||||
|
'group_role.project',
|
||||||
|
'projects.id',
|
||||||
|
)
|
||||||
|
.where('group_user.user_id', userId)
|
||||||
|
.andWhere('projects.archived_at', null);
|
||||||
|
})
|
||||||
|
.as('query');
|
||||||
|
})
|
||||||
|
.pluck('project');
|
||||||
|
return projects;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1344,7 +1344,7 @@ export default class ProjectService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getProjectsByUser(userId: number): Promise<string[]> {
|
async getProjectsByUser(userId: number): Promise<string[]> {
|
||||||
return this.projectStore.getProjectsByUser(userId);
|
return this.projectReadModel.getProjectsByUser(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getProjectRoleUsage(roleId: number): Promise<IProjectRoleUsage[]> {
|
async getProjectRoleUsage(roleId: number): Promise<IProjectRoleUsage[]> {
|
||||||
|
@ -96,8 +96,6 @@ export interface IProjectStore extends Store<IProject, string> {
|
|||||||
date: string,
|
date: string,
|
||||||
): Promise<number>;
|
): Promise<number>;
|
||||||
|
|
||||||
getProjectsByUser(userId: number): Promise<string[]>;
|
|
||||||
|
|
||||||
count(): Promise<number>;
|
count(): Promise<number>;
|
||||||
|
|
||||||
getAll(query?: IProjectQuery): Promise<IProject[]>;
|
getAll(query?: IProjectQuery): Promise<IProject[]>;
|
||||||
|
@ -390,63 +390,6 @@ class ProjectStore implements IProjectStore {
|
|||||||
return rows.map(this.mapProjectEnvironmentRow);
|
return rows.map(this.mapProjectEnvironmentRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async getMembersCount(): Promise<IProjectMembersCount[]> {
|
|
||||||
const members = await this.db
|
|
||||||
.select('project')
|
|
||||||
.from((db) => {
|
|
||||||
db.select('user_id', 'project')
|
|
||||||
.from('role_user')
|
|
||||||
.leftJoin('roles', 'role_user.role_id', 'roles.id')
|
|
||||||
.where((builder) => builder.whereNot('type', 'root'))
|
|
||||||
.union((queryBuilder) => {
|
|
||||||
queryBuilder
|
|
||||||
.select('user_id', 'project')
|
|
||||||
.from('group_role')
|
|
||||||
.leftJoin(
|
|
||||||
'group_user',
|
|
||||||
'group_user.group_id',
|
|
||||||
'group_role.group_id',
|
|
||||||
);
|
|
||||||
})
|
|
||||||
.as('query');
|
|
||||||
})
|
|
||||||
.groupBy('project')
|
|
||||||
.count('user_id');
|
|
||||||
return members;
|
|
||||||
}
|
|
||||||
|
|
||||||
async getProjectsByUser(userId: number): Promise<string[]> {
|
|
||||||
const projects = await this.db
|
|
||||||
.from((db) => {
|
|
||||||
db.select('role_user.project')
|
|
||||||
.from('role_user')
|
|
||||||
.leftJoin('roles', 'role_user.role_id', 'roles.id')
|
|
||||||
.leftJoin('projects', 'role_user.project', 'projects.id')
|
|
||||||
.where('user_id', userId)
|
|
||||||
.andWhere('projects.archived_at', null)
|
|
||||||
.union((queryBuilder) => {
|
|
||||||
queryBuilder
|
|
||||||
.select('group_role.project')
|
|
||||||
.from('group_role')
|
|
||||||
.leftJoin(
|
|
||||||
'group_user',
|
|
||||||
'group_user.group_id',
|
|
||||||
'group_role.group_id',
|
|
||||||
)
|
|
||||||
.leftJoin(
|
|
||||||
'projects',
|
|
||||||
'group_role.project',
|
|
||||||
'projects.id',
|
|
||||||
)
|
|
||||||
.where('group_user.user_id', userId)
|
|
||||||
.andWhere('projects.archived_at', null);
|
|
||||||
})
|
|
||||||
.as('query');
|
|
||||||
})
|
|
||||||
.pluck('project');
|
|
||||||
return projects;
|
|
||||||
}
|
|
||||||
|
|
||||||
async getMembersCountByProject(projectId: string): Promise<number> {
|
async getMembersCountByProject(projectId: string): Promise<number> {
|
||||||
const members = await this.db
|
const members = await this.db
|
||||||
.from((db) => {
|
.from((db) => {
|
||||||
|
5
src/test/fixtures/fake-project-store.ts
vendored
5
src/test/fixtures/fake-project-store.ts
vendored
@ -143,11 +143,6 @@ export default class FakeProjectStore implements IProjectStore {
|
|||||||
)!.health = healthUpdate.health;
|
)!.health = healthUpdate.health;
|
||||||
}
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
||||||
getProjectsByUser(userId: number): Promise<string[]> {
|
|
||||||
return Promise.resolve([]);
|
|
||||||
}
|
|
||||||
|
|
||||||
addEnvironmentToProjects(
|
addEnvironmentToProjects(
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
environment: string,
|
environment: string,
|
||||||
|
Loading…
Reference in New Issue
Block a user