Skip to content

Commit

Permalink
feat: get projects by ids (#8269)
Browse files Browse the repository at this point in the history
  • Loading branch information
kwasniew authored Sep 26, 2024
1 parent 33f4407 commit ceb21fb
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 9 deletions.
4 changes: 2 additions & 2 deletions src/lib/features/project/project-read-model-type.ts
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -28,7 +28,7 @@ export type ProjectForInsights = {

export interface IProjectReadModel {
getProjectsForAdminUi(
query?: IProjectQuery,
query?: IProjectQuery & IProjectsQuery,
userId?: number,
): Promise<ProjectForUi[]>;
getProjectsForInsights(
Expand Down
7 changes: 5 additions & 2 deletions src/lib/features/project/project-read-model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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');
Expand Down Expand Up @@ -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(
Expand Down
5 changes: 5 additions & 0 deletions src/lib/features/project/project-service.e2e.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 () => {
Expand Down
11 changes: 6 additions & 5 deletions src/lib/features/project/project-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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 =
Expand Down
4 changes: 4 additions & 0 deletions src/lib/features/project/project-store-type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ export interface IProjectQuery {
archived?: boolean;
}

export interface IProjectsQuery {
ids?: string[];
}

export type ProjectEnvironment = {
environment: string;
changeRequestEnabled?: boolean;
Expand Down

0 comments on commit ceb21fb

Please sign in to comment.