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:
parent
7ac283aa50
commit
050e53e564
@ -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[]> {
|
||||||
|
@ -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 [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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] ?? [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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[]>;
|
||||||
|
Loading…
Reference in New Issue
Block a user