1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-25 00:07:47 +01:00

feat: get projects by ids (#8269)

This commit is contained in:
Mateusz Kwasniewski 2024-09-26 11:27:59 +02:00 committed by GitHub
parent 33f44072dc
commit ceb21fbe51
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 22 additions and 9 deletions

View File

@ -1,5 +1,5 @@
import type { ProjectMode } from '../../types';
import type { IProjectQuery } from './project-store-type';
import type { IProjectQuery, IProjectsQuery } from './project-store-type';
export type ProjectForUi = {
id: string;
@ -28,7 +28,7 @@ export type ProjectForInsights = {
export interface IProjectReadModel {
getProjectsForAdminUi(
query?: IProjectQuery,
query?: IProjectQuery & IProjectsQuery,
userId?: number,
): Promise<ProjectForUi[]>;
getProjectsForInsights(

View File

@ -6,7 +6,7 @@ import type {
ProjectForInsights,
ProjectForUi,
} from './project-read-model-type';
import type { IProjectQuery } from './project-store-type';
import type { IProjectQuery, IProjectsQuery } from './project-store-type';
import metricsHelper from '../../util/metrics-helper';
import type EventEmitter from 'events';
import type { IProjectMembersCount } from './project-store';
@ -79,7 +79,7 @@ export class ProjectReadModel implements IProjectReadModel {
}
async getProjectsForAdminUi(
query?: IProjectQuery,
query?: IProjectQuery & IProjectsQuery,
userId?: number,
): Promise<ProjectForUi[]> {
const projectTimer = this.timer('getProjectsForAdminUi');
@ -113,6 +113,9 @@ export class ProjectReadModel implements IProjectReadModel {
if (query?.id) {
projects = projects.where(`${TABLE}.id`, query.id);
}
if (query?.ids) {
projects = projects.whereIn(`${TABLE}.id`, query.ids);
}
let selectColumns = [
this.db.raw(

View File

@ -152,6 +152,11 @@ test('should create new project', async () => {
expect(project.name).toEqual(ret.name);
expect(project.description).toEqual(ret.description);
expect(ret.createdAt).toBeTruthy();
const projectsById = await projectService.getProjects({ id: 'test' });
const projectsByIds = await projectService.getProjects({ ids: ['test'] });
expect(projectsById).toMatchObject([{ id: 'test' }]);
expect(projectsByIds).toMatchObject([{ id: 'test' }]);
});
test('should create new private project', async () => {

View File

@ -83,6 +83,7 @@ import type {
IProjectApplicationsSearchParams,
IProjectEnterpriseSettingsUpdate,
IProjectQuery,
IProjectsQuery,
} from './project-store-type';
import type { IProjectFlagCreatorsReadModel } from './project-flag-creators-read-model.type';
import { throwExceedsLimitError } from '../../error/exceeds-limit-error';
@ -230,13 +231,13 @@ export default class ProjectService {
}
async getProjects(
query?: IProjectQuery,
query?: IProjectQuery & IProjectsQuery,
userId?: number,
): Promise<ProjectForUi[]> {
const getProjects = () =>
this.projectReadModel.getProjectsForAdminUi(query, userId);
const projects = await getProjects();
const projects = await this.projectReadModel.getProjectsForAdminUi(
query,
userId,
);
if (userId) {
const projectAccess =

View File

@ -48,6 +48,10 @@ export interface IProjectQuery {
archived?: boolean;
}
export interface IProjectsQuery {
ids?: string[];
}
export type ProjectEnvironment = {
environment: string;
changeRequestEnabled?: boolean;