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[]> {
|
||||
return Promise.resolve([]);
|
||||
}
|
||||
getProjectsByUser(): Promise<string[]> {
|
||||
return Promise.resolve([]);
|
||||
}
|
||||
}
|
||||
|
@ -37,4 +37,5 @@ export interface IProjectReadModel {
|
||||
getFeatureProject(
|
||||
featureName: string,
|
||||
): Promise<{ project: string; createdAt: Date } | null>;
|
||||
getProjectsByUser(userId: number): Promise<string[]>;
|
||||
}
|
||||
|
@ -249,4 +249,36 @@ export class ProjectReadModel implements IProjectReadModel {
|
||||
memberTimer();
|
||||
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[]> {
|
||||
return this.projectStore.getProjectsByUser(userId);
|
||||
return this.projectReadModel.getProjectsByUser(userId);
|
||||
}
|
||||
|
||||
async getProjectRoleUsage(roleId: number): Promise<IProjectRoleUsage[]> {
|
||||
|
@ -96,8 +96,6 @@ export interface IProjectStore extends Store<IProject, string> {
|
||||
date: string,
|
||||
): Promise<number>;
|
||||
|
||||
getProjectsByUser(userId: number): Promise<string[]>;
|
||||
|
||||
count(): Promise<number>;
|
||||
|
||||
getAll(query?: IProjectQuery): Promise<IProject[]>;
|
||||
|
@ -390,63 +390,6 @@ class ProjectStore implements IProjectStore {
|
||||
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> {
|
||||
const members = await this.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;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
getProjectsByUser(userId: number): Promise<string[]> {
|
||||
return Promise.resolve([]);
|
||||
}
|
||||
|
||||
addEnvironmentToProjects(
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
environment: string,
|
||||
|
Loading…
Reference in New Issue
Block a user