Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 43 additions & 5 deletions apps/api-gateway/src/ecosystem/ecosystem.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,15 +106,22 @@ export class EcosystemController {
})
@ApiQuery({
name: 'status',
enum: Invitation
enum: [Invitation.REJECTED, Invitation.ACCEPTED]
})
@UseGuards(AuthGuard('jwt'))
@ApiBearerAuth()
async updateEcosystemInvitationStatus(
@Body() updateInvitation: UpdateEcosystemInvitationDto,
@User() reqUser: user,
@Res() res: Response,
@Query('status', new ParseEnumPipe(Invitation)) status: Invitation
@Query(
'status',
new ParseEnumPipe(Invitation, {
exceptionFactory: () =>
new BadRequestException(`Status must be one of: ${[Invitation.REJECTED, Invitation.ACCEPTED].join(', ')}`)
})
)
status: Invitation
): Promise<Response> {
if (!reqUser.id) {
throw new BadRequestException('Missing request user id');
Expand Down Expand Up @@ -200,7 +207,7 @@ export class EcosystemController {
})
@ApiQuery({
name: 'orgId',
required: false,
required: true,
type: String
})
@Roles(OrgRoles.PLATFORM_ADMIN, OrgRoles.ECOSYSTEM_LEAD)
Expand All @@ -211,15 +218,14 @@ export class EcosystemController {
@Query(
'orgId',
new ParseUUIDPipe({
optional: true,
exceptionFactory: (): Error => {
throw new BadRequestException(ResponseMessages.ecosystem.error.invalidOrgId);
}
})
)
orgId?: string
): Promise<Response> {
const ecosystems = await this.ecosystemService.getEcosystems(reqUser.id, paginationDto, orgId);
const ecosystems = await this.ecosystemService.getEcosystemOrgs(orgId ?? null, paginationDto);
return res.status(HttpStatus.OK).json({
statusCode: HttpStatus.OK,
message: ResponseMessages.ecosystem.success.fetchAllEcosystems,
Expand Down Expand Up @@ -457,4 +463,36 @@ export class EcosystemController {
data: dashboard
});
}

@Get('/invitation/status')
@UseGuards(AuthGuard('jwt'))
@ApiBearerAuth()
@ApiOperation({
summary: 'Get status of pending invitation for ecosystem creation',
description: 'Get status of pending invitation for ecosystem creation'
})
@ApiResponse({
status: HttpStatus.OK,
description: 'Invitation status fetched successfully'
})
@ApiQuery({
name: 'status',
enum: Invitation
})
async getCreateEcosystemInvitationStatus(
@Res() res: Response,
@User() reqUser: user,
@Query('status', new ParseEnumPipe(Invitation)) InvitationStatus: Invitation = Invitation.ACCEPTED
): Promise<Response> {
if (!reqUser.email) {
throw new BadRequestException('Email not Found');
}
Comment thread
sujitaw marked this conversation as resolved.
const status = await this.ecosystemService.getCreateEcosystemInvitationStatus(reqUser.email, InvitationStatus);

return res.status(HttpStatus.OK).json({
statusCode: HttpStatus.OK,
message: ResponseMessages.ecosystem.success.ecosystemStatus,
status
});
}
}
8 changes: 8 additions & 0 deletions apps/api-gateway/src/ecosystem/ecosystem.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -238,4 +238,12 @@ export class EcosystemService {
async getDashboardCountEcosystem(): Promise<IPlatformDashboardCount> {
return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-platform-admin-dashboard-count', {});
}

async getEcosystemOrgs(orgId: string | null, pageDetail: IPaginationSortingDto): Promise<object> {
return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-ecosystem-orgs-by-orgId', { orgId, pageDetail });
}

async getCreateEcosystemInvitationStatus(email: string, status: Invitation): Promise<boolean> {
return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-ecosystem-created-status', { email, status });
}
}
77 changes: 52 additions & 25 deletions apps/ecosystem/interfaces/ecosystem.interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { EcosystemOrgStatus, InvitationViewRole } from '@credebl/enum/enum';
import { Prisma, PrismaClient } from '@prisma/client';

import { CommonTableColumns } from '@credebl/common/interfaces/interface';
import { JsonValue } from '@prisma/client/runtime/library';
import { OrgRoles } from 'libs/org-roles/enums';

export interface ICreateEcosystem {
Expand Down Expand Up @@ -132,8 +131,8 @@ export interface IEcosystemSummary {
id: string;
name: string;
description: string | null;
logoUrl: string | null;
autoEndorsement: boolean;
logoUrl?: string | null;
autoEndorsement?: boolean;
}

export interface IUserSummary {
Expand All @@ -155,51 +154,45 @@ export interface IEcosystemInvitation {
createDateTime: Date;

ecosystem: IEcosystemSummary | null;
user: IUserSummary | null;
user?: IUserSummary | null;
organisation: {
name: string | null;
} | null;
}

export interface IGetAllOrgs {
id: string;
status: string;
userId: string | null;
ecosystem: IGetAllOrgEcosystem;
organisation: IGetAllOrgOrganisation;
createDateTime: Date;
user: IGetAllOrgUser;
ecosystemRole: {
id: string;
name: string;
};
}

export interface IFromattedGetAllOrgs {
id: string;
email: string | null;
status: string;
createDateTime: Date;
organisation: string | null;
orgId: string;
ecosystemName: string;
ecosystemId: string;
}

export interface IGetAllOrgEcosystem {
id: string;
name: string;
description: string;
tags: string | null;
createDateTime: Date;
createdBy: string;
logoUrl: string | null;
autoEndorsement: boolean;
ledgers: JsonValue;
}

export interface IGetAllOrgOrganisation {
id: string;
createDateTime: Date;
createdBy: string;
name: string | null;
description: string | null;
orgSlug: string | null;
}

export interface IGetAllOrgUser {
id: string;
createDateTime: Date;
lastChangedDateTime: Date;
firstName: string | null;
lastName: string | null;
email: string | null;
username: string | null;
}

export interface IGetEcosystemOrgStatus {
Expand All @@ -217,3 +210,37 @@ export interface IPlatformDashboardCount {
invitations: number;
activeOrgs: number;
}

export interface IGetEcosystemOrgs {
ecosystem: {
id: string;
name: string;
description: string;
_count: {
ecosystemOrgs: number;
};
ecosystemOrgs: {
id: string;
orgId: string;
organisation: {
name: string | null;
};
}[];
};
ecosystemRole: {
id: string;
name: string;
};
}

export interface IGetEcosystemOrgsResponse {
id: string;
name: string;
description: string;
memberCount: number;
role: string;
leadOrg: {
id: string;
name: string | null;
} | null;
}
Loading