1
0
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:
Mateusz Kwasniewski 2024-09-26 09:45:02 +02:00 committed by GitHub
parent aca0de414e
commit 823f6330b7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 37 additions and 65 deletions

View File

@ -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([]);
}
} }

View File

@ -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[]>;
} }

View File

@ -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;
}
} }

View File

@ -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[]> {

View File

@ -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[]>;

View File

@ -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) => {

View File

@ -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,