1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-06-04 01:18:20 +02:00

feat: return project owners (#8312)

This PR is part 1 of returning project owners and your project roles for
the personal dashboard single-project endpoint.

It moves the responsibility of adding owners and roles to the project to
the service from the controller and adds a new method to the project
owners read model to take care of it.

I'll add roles and tests in follow-up PRs.
This commit is contained in:
Thomas Heartman 2024-10-01 10:18:42 +02:00 committed by GitHub
parent 7ac283aa50
commit 050e53e564
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 24 additions and 13 deletions

View File

@ -17,17 +17,7 @@ import type {
} from '../../types'; } from '../../types';
import type { FeatureEventFormatter } from '../../addons/feature-event-formatter-md'; import type { FeatureEventFormatter } from '../../addons/feature-event-formatter-md';
import { generateImageUrl } from '../../util'; import { generateImageUrl } from '../../util';
import type { OnboardingStatus } from '../onboarding/onboarding-read-model-type'; import type { PersonalDashboardProjectDetailsSchema } from '../../openapi';
type PersonalProjectDetails = {
latestEvents: {
summary: string;
createdBy: string;
id: number;
createdByImageUrl: string;
}[];
onboardingStatus: OnboardingStatus;
};
export class PersonalDashboardService { export class PersonalDashboardService {
private personalDashboardReadModel: IPersonalDashboardReadModel; private personalDashboardReadModel: IPersonalDashboardReadModel;
@ -106,7 +96,7 @@ export class PersonalDashboardService {
async getPersonalProjectDetails( async getPersonalProjectDetails(
projectId: string, projectId: string,
): Promise<PersonalProjectDetails> { ): Promise<PersonalDashboardProjectDetailsSchema> {
const recentEvents = await this.eventStore.searchEvents( const recentEvents = await this.eventStore.searchEvents(
{ limit: 4, offset: 0 }, { limit: 4, offset: 0 },
[{ field: 'project', operator: 'IS', values: [projectId] }], [{ field: 'project', operator: 'IS', values: [projectId] }],
@ -124,7 +114,15 @@ export class PersonalDashboardService {
createdByImageUrl: generateImageUrl({ email: event.createdBy }), createdByImageUrl: generateImageUrl({ email: event.createdBy }),
})); }));
return { latestEvents: formattedEvents, onboardingStatus }; const owners =
await this.projectOwnersReadModel.getProjectOwners(projectId);
return {
latestEvents: formattedEvents,
onboardingStatus,
owners,
roles: [],
};
} }
async getAdmins(): Promise<MinimalUser[]> { async getAdmins(): Promise<MinimalUser[]> {

View File

@ -1,5 +1,6 @@
import type { import type {
IProjectOwnersReadModel, IProjectOwnersReadModel,
ProjectOwners,
UserProjectOwner, UserProjectOwner,
WithProjectOwners, WithProjectOwners,
} from './project-owners-read-model.type'; } from './project-owners-read-model.type';
@ -17,4 +18,8 @@ export class FakeProjectOwnersReadModel implements IProjectOwnersReadModel {
async getAllUserProjectOwners(): Promise<UserProjectOwner[]> { async getAllUserProjectOwners(): Promise<UserProjectOwner[]> {
return []; return [];
} }
async getProjectOwners(): Promise<ProjectOwners> {
return [];
}
} }

View File

@ -4,6 +4,7 @@ import { generateImageUrl } from '../../util';
import type { import type {
GroupProjectOwner, GroupProjectOwner,
IProjectOwnersReadModel, IProjectOwnersReadModel,
ProjectOwners,
ProjectOwnersDictionary, ProjectOwnersDictionary,
UserProjectOwner, UserProjectOwner,
WithProjectOwners, WithProjectOwners,
@ -157,4 +158,9 @@ export class ProjectOwnersReadModel implements IProjectOwnersReadModel {
return ProjectOwnersReadModel.addOwnerData(projects, owners); return ProjectOwnersReadModel.addOwnerData(projects, owners);
} }
async getProjectOwners(projectId: string): Promise<ProjectOwners> {
const owners = await this.getProjectOwnersDictionary();
return owners[projectId] ?? [];
}
} }

View File

@ -30,6 +30,8 @@ export interface IProjectOwnersReadModel {
projects: T[], projects: T[],
): Promise<WithProjectOwners<T>>; ): Promise<WithProjectOwners<T>>;
getProjectOwners(projectId: string): Promise<ProjectOwners>;
getAllUserProjectOwners( getAllUserProjectOwners(
projects?: Set<string>, projects?: Set<string>,
): Promise<UserProjectOwner[]>; ): Promise<UserProjectOwner[]>;