From cb824c0ba7f7dca4bdf39de095f0bca5d8dd82ea Mon Sep 17 00:00:00 2001 From: tipusinghaw Date: Tue, 10 Oct 2023 15:46:48 +0530 Subject: [PATCH 1/2] fix: added ecosystem id in endorsement APIs Signed-off-by: tipusinghaw --- .../src/ecosystem/ecosystem.controller.ts | 117 +++++++++--------- .../src/ecosystem/ecosystem.service.ts | 16 +-- .../interfaces/ecosystem.interfaces.ts | 8 +- apps/ecosystem/src/ecosystem.controller.ts | 16 +-- apps/ecosystem/src/ecosystem.repository.ts | 18 ++- apps/ecosystem/src/ecosystem.service.ts | 21 ++-- libs/common/src/response-messages/index.ts | 1 + .../migration.sql | 2 + libs/prisma-service/prisma/schema.prisma | 29 ++--- 9 files changed, 123 insertions(+), 105 deletions(-) create mode 100644 libs/prisma-service/prisma/migrations/20231010055923_endorsement_transaction_schema_body/migration.sql diff --git a/apps/api-gateway/src/ecosystem/ecosystem.controller.ts b/apps/api-gateway/src/ecosystem/ecosystem.controller.ts index 06900397d..13e09ea4f 100644 --- a/apps/api-gateway/src/ecosystem/ecosystem.controller.ts +++ b/apps/api-gateway/src/ecosystem/ecosystem.controller.ts @@ -67,8 +67,8 @@ export class EcosystemController { @Param('orgId') orgId: string, @Query() getAllEndorsementsDto: GetAllEndorsementsDto, @Res() res: Response - ): Promise { - + ): Promise { + const ecosystemList = await this.ecosystemService.getEndorsementTranasactions(ecosystemId, orgId, getAllEndorsementsDto); const finalResponse: IResponseType = { statusCode: HttpStatus.OK, @@ -87,7 +87,7 @@ export class EcosystemController { async getEcosystem( @Param('orgId') orgId: string, @Res() res: Response - ): Promise { + ): Promise { const ecosystemList = await this.ecosystemService.getAllEcosystem(orgId); const finalResponse: IResponseType = { statusCode: HttpStatus.OK, @@ -127,7 +127,7 @@ export class EcosystemController { @Query() getAllInvitationsDto: GetAllSentEcosystemInvitationsDto, @Param('orgId') orgId: string, @User() user: user, @Res() res: Response): Promise { - + if (!Object.values(Invitation).includes(getAllInvitationsDto.status)) { throw new BadRequestException(ResponseMessages.ecosystem.error.invalidInvitationStatus); } @@ -206,15 +206,15 @@ export class EcosystemController { return res.status(HttpStatus.CREATED).json(finalResponse); } - @Post('/:orgId/transaction/schema') + @Post('/:ecosystemId/:orgId/transaction/schema') @ApiOperation({ summary: 'Request new schema', description: 'Request new schema' }) @ApiResponse({ status: 201, description: 'Success', type: ApiResponseDto }) - @UseGuards(AuthGuard('jwt'), EcosystemRolesGuard, OrgRolesGuard) - @ApiBearerAuth() - @EcosystemsRoles(EcosystemRoles.ECOSYSTEM_OWNER, EcosystemRoles.ECOSYSTEM_LEAD) - @Roles(OrgRoles.OWNER, OrgRoles.ADMIN) - async requestSchemaTransaction(@Body() requestSchemaPayload: RequestSchemaDto, @Param('orgId') orgId: number, @Res() res: Response): Promise { - await this.ecosystemService.schemaEndorsementRequest(requestSchemaPayload, orgId); + // @UseGuards(AuthGuard('jwt'), EcosystemRolesGuard, OrgRolesGuard) + // @ApiBearerAuth() + // @EcosystemsRoles(EcosystemRoles.ECOSYSTEM_MEMBER) + // @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER) + async requestSchemaTransaction(@Body() requestSchemaPayload: RequestSchemaDto, @Param('orgId') orgId: number, @Param('ecosystemId') ecosystemId: string, @Res() res: Response): Promise { + await this.ecosystemService.schemaEndorsementRequest(requestSchemaPayload, orgId, ecosystemId); const finalResponse: IResponseType = { statusCode: HttpStatus.CREATED, message: ResponseMessages.ecosystem.success.schemaRequest @@ -223,30 +223,31 @@ export class EcosystemController { } - @Post('/:orgId/transaction/cred-def') + @Post('/:ecosystemId/:orgId/transaction/cred-def') @ApiOperation({ summary: 'Request new credential-definition', description: 'Request new credential-definition' }) @ApiResponse({ status: 201, description: 'Success', type: ApiResponseDto }) @UseGuards(AuthGuard('jwt'), EcosystemRolesGuard, OrgRolesGuard) @ApiBearerAuth() - @EcosystemsRoles(EcosystemRoles.ECOSYSTEM_OWNER, EcosystemRoles.ECOSYSTEM_LEAD) - @Roles(OrgRoles.OWNER, OrgRoles.ADMIN) - async requestCredDefTransaction(@Body() requestCredDefPayload: RequestCredDefDto, @Param('orgId') orgId: number, @Res() res: Response): Promise { - await this.ecosystemService.credDefEndorsementRequest(requestCredDefPayload, orgId); + @EcosystemsRoles(EcosystemRoles.ECOSYSTEM_MEMBER) + @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER) + async requestCredDefTransaction(@Body() requestCredDefPayload: RequestCredDefDto, @Param('orgId') orgId: number, @Param('ecosystemId') ecosystemId: string, @Res() res: Response): Promise { + await this.ecosystemService.credDefEndorsementRequest(requestCredDefPayload, orgId, ecosystemId); const finalResponse: IResponseType = { statusCode: HttpStatus.CREATED, message: ResponseMessages.ecosystem.success.schemaRequest }; return res.status(HttpStatus.CREATED).json(finalResponse); } - @Post('transaction/sign/:endorsementId') + + @Post('/:ecosystemId/transaction/sign/:endorsementId') @ApiOperation({ summary: 'Sign transaction', description: 'Sign transaction' }) @ApiResponse({ status: 201, description: 'Success', type: ApiResponseDto }) @UseGuards(AuthGuard('jwt'), EcosystemRolesGuard, OrgRolesGuard) @ApiBearerAuth() - @EcosystemsRoles(EcosystemRoles.ECOSYSTEM_OWNER, EcosystemRoles.ECOSYSTEM_LEAD) + @EcosystemsRoles(EcosystemRoles.ECOSYSTEM_LEAD) @Roles(OrgRoles.OWNER, OrgRoles.ADMIN) - async SignEndorsementRequests(@Param('endorsementId') endorsementId: string, @Res() res: Response): Promise { - await this.ecosystemService.signTransaction(endorsementId); + async SignEndorsementRequests(@Param('endorsementId') endorsementId: string, @Param('ecosystemId') ecosystemId: string, @Res() res: Response): Promise { + await this.ecosystemService.signTransaction(endorsementId, ecosystemId); const finalResponse: IResponseType = { statusCode: HttpStatus.CREATED, message: ResponseMessages.ecosystem.success.sign @@ -254,15 +255,15 @@ export class EcosystemController { return res.status(HttpStatus.CREATED).json(finalResponse); } - @Post('transaction/sumbit/:endorsementId') + @Post('/:ecosystemId/transaction/sumbit/:endorsementId') @ApiOperation({ summary: 'Sumbit transaction', description: 'Sumbit transaction' }) @ApiResponse({ status: 201, description: 'Success', type: ApiResponseDto }) @UseGuards(AuthGuard('jwt'), EcosystemRolesGuard, OrgRolesGuard) @ApiBearerAuth() - @EcosystemsRoles(EcosystemRoles.ECOSYSTEM_OWNER, EcosystemRoles.ECOSYSTEM_LEAD) - @Roles(OrgRoles.OWNER, OrgRoles.ADMIN) - async SumbitEndorsementRequests(@Param('endorsementId') endorsementId: string, @Res() res: Response): Promise { - await this.ecosystemService.submitTransaction(endorsementId); + @EcosystemsRoles(EcosystemRoles.ECOSYSTEM_MEMBER) + @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER) + async SumbitEndorsementRequests(@Param('endorsementId') endorsementId: string, @Param('ecosystemId') ecosystemId: string, @Res() res: Response): Promise { + await this.ecosystemService.submitTransaction(endorsementId, ecosystemId); const finalResponse: IResponseType = { statusCode: HttpStatus.CREATED, message: ResponseMessages.ecosystem.success.sign @@ -288,9 +289,9 @@ export class EcosystemController { @EcosystemsRoles(EcosystemRoles.ECOSYSTEM_OWNER, EcosystemRoles.ECOSYSTEM_LEAD) @Roles(OrgRoles.OWNER, OrgRoles.ADMIN) async createInvitation(@Body() bulkInvitationDto: BulkEcosystemInvitationDto, - @Param('ecosystemId') ecosystemId: string, - @Param('orgId') orgId: string, - @User() user: user, @Res() res: Response): Promise { + @Param('ecosystemId') ecosystemId: string, + @Param('orgId') orgId: string, + @User() user: user, @Res() res: Response): Promise { bulkInvitationDto.ecosystemId = ecosystemId; await this.ecosystemService.createInvitation(bulkInvitationDto, String(user.id)); @@ -304,33 +305,33 @@ export class EcosystemController { } - /** - * - * @param acceptRejectEcosystemInvitation - * @param reqUser - * @param res - * @returns Ecosystem invitation status - */ - @Post('/:orgId/invitations/:invitationId') - @ApiOperation({ - summary: 'Accept or reject ecosystem invitation', - description: 'Accept or Reject ecosystem invitations' - }) - @UseGuards(AuthGuard('jwt'), OrgRolesGuard) - @ApiBearerAuth() - @Roles(OrgRoles.OWNER) - async acceptRejectEcosystemInvitaion(@Body() acceptRejectEcosystemInvitation: AcceptRejectEcosystemInvitationDto, @Param('orgId') orgId: string, @Param('invitationId') invitationId: string, @User() user: user, @Res() res: Response): Promise { - acceptRejectEcosystemInvitation.orgId = orgId; - acceptRejectEcosystemInvitation.invitationId = invitationId; + /** + * + * @param acceptRejectEcosystemInvitation + * @param reqUser + * @param res + * @returns Ecosystem invitation status + */ + @Post('/:orgId/invitations/:invitationId') + @ApiOperation({ + summary: 'Accept or reject ecosystem invitation', + description: 'Accept or Reject ecosystem invitations' + }) + @UseGuards(AuthGuard('jwt'), OrgRolesGuard) + @ApiBearerAuth() + @Roles(OrgRoles.OWNER) + async acceptRejectEcosystemInvitaion(@Body() acceptRejectEcosystemInvitation: AcceptRejectEcosystemInvitationDto, @Param('orgId') orgId: string, @Param('invitationId') invitationId: string, @User() user: user, @Res() res: Response): Promise { + acceptRejectEcosystemInvitation.orgId = orgId; + acceptRejectEcosystemInvitation.invitationId = invitationId; - const invitationRes = await this.ecosystemService.acceptRejectEcosystemInvitaion(acceptRejectEcosystemInvitation, user.email); + const invitationRes = await this.ecosystemService.acceptRejectEcosystemInvitaion(acceptRejectEcosystemInvitation, user.email); - const finalResponse: IResponseType = { - statusCode: HttpStatus.CREATED, - message: invitationRes.response - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - } + const finalResponse: IResponseType = { + statusCode: HttpStatus.CREATED, + message: invitationRes.response + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } @Put('/:ecosystemId/:orgId') @ApiOperation({ summary: 'Edit ecosystem', description: 'Edit existing ecosystem' }) @@ -352,7 +353,7 @@ export class EcosystemController { return res.status(HttpStatus.OK).json(finalResponse); } - + @Delete('/:ecosystemId/:orgId/invitations/:invitationId') @ApiOperation({ summary: 'Delete ecosystem pending invitations', description: 'Delete ecosystem pending invitations' }) @ApiResponse({ status: 200, description: 'Success', type: ApiResponseDto }) @@ -361,11 +362,11 @@ export class EcosystemController { @Roles(OrgRoles.OWNER) @ApiBearerAuth() async deleteEcosystemInvitations( - @Param('ecosystemId') ecosystemId: string, - @Param('invitationId') invitationId: string, - @Param('orgId') orgId: string, + @Param('ecosystemId') ecosystemId: string, + @Param('invitationId') invitationId: string, + @Param('orgId') orgId: string, @Res() res: Response): Promise { - + await this.ecosystemService.deleteEcosystemInvitations(invitationId); const finalResponse: IResponseType = { statusCode: HttpStatus.OK, diff --git a/apps/api-gateway/src/ecosystem/ecosystem.service.ts b/apps/api-gateway/src/ecosystem/ecosystem.service.ts index 353caf962..e40dba567 100644 --- a/apps/api-gateway/src/ecosystem/ecosystem.service.ts +++ b/apps/api-gateway/src/ecosystem/ecosystem.service.ts @@ -117,23 +117,23 @@ export class EcosystemService extends BaseService { } - async schemaEndorsementRequest(requestSchemaPayload: RequestSchemaDto, orgId: number): Promise { - const payload = { requestSchemaPayload, orgId}; + async schemaEndorsementRequest(requestSchemaPayload: RequestSchemaDto, orgId: number, ecosystemId:string): Promise { + const payload = { requestSchemaPayload, orgId, ecosystemId}; return this.sendNats(this.serviceProxy, 'schema-endorsement-request', payload); } - async credDefEndorsementRequest(requestCredDefPayload: RequestCredDefDto, orgId: number): Promise { - const payload = { requestCredDefPayload, orgId}; + async credDefEndorsementRequest(requestCredDefPayload: RequestCredDefDto, orgId: number, ecosystemId:string): Promise { + const payload = { requestCredDefPayload, orgId, ecosystemId}; return this.sendNats(this.serviceProxy, 'credDef-endorsement-request', payload); } - async signTransaction(endorsementId:string): Promise { - const payload = { endorsementId }; + async signTransaction(endorsementId:string, ecosystemId:string): Promise { + const payload = { endorsementId, ecosystemId }; return this.sendNats(this.serviceProxy, 'sign-endorsement-transaction', payload); } - async submitTransaction(endorsementId:string): Promise { - const payload = { endorsementId }; + async submitTransaction(endorsementId:string, ecosystemId:string): Promise { + const payload = { endorsementId, ecosystemId }; return this.sendNats(this.serviceProxy, 'sumbit-endorsement-transaction', payload); } } diff --git a/apps/ecosystem/interfaces/ecosystem.interfaces.ts b/apps/ecosystem/interfaces/ecosystem.interfaces.ts index 2d01cbebb..1ca0aff37 100644 --- a/apps/ecosystem/interfaces/ecosystem.interfaces.ts +++ b/apps/ecosystem/interfaces/ecosystem.interfaces.ts @@ -1,8 +1,14 @@ +export interface AttributeValue { + attributeName: string; + schemaDataType: string; + displayName: string; +} + export interface RequestSchemaEndorsement { orgId: number name: string; version: string; - attributes: IAttributeValue[]; + attributes: AttributeValue[]; endorse?: boolean; } diff --git a/apps/ecosystem/src/ecosystem.controller.ts b/apps/ecosystem/src/ecosystem.controller.ts index c8e5317b6..d1a82bc97 100644 --- a/apps/ecosystem/src/ecosystem.controller.ts +++ b/apps/ecosystem/src/ecosystem.controller.ts @@ -131,9 +131,9 @@ export class EcosystemController { */ @MessagePattern({ cmd: 'schema-endorsement-request' }) async schemaEndorsementRequest( - @Body() payload: { requestSchemaPayload: RequestSchemaEndorsement; orgId: number } + @Body() payload: { requestSchemaPayload: RequestSchemaEndorsement; orgId: number, ecosystemId: string } ): Promise { - return this.ecosystemService.requestSchemaEndorsement(payload.requestSchemaPayload, payload.orgId); + return this.ecosystemService.requestSchemaEndorsement(payload.requestSchemaPayload, payload.orgId, payload.ecosystemId); } /** @@ -143,9 +143,9 @@ export class EcosystemController { */ @MessagePattern({ cmd: 'credDef-endorsement-request' }) async credDefEndorsementRequest( - @Body() payload: { requestCredDefPayload: RequestCredDeffEndorsement; orgId: number } + @Body() payload: { requestCredDefPayload: RequestCredDeffEndorsement; orgId: number; ecosystemId:string} ): Promise { - return this.ecosystemService.requestCredDeffEndorsement(payload.requestCredDefPayload, payload.orgId); + return this.ecosystemService.requestCredDeffEndorsement(payload.requestCredDefPayload, payload.orgId, payload.ecosystemId); } /** @@ -155,9 +155,9 @@ export class EcosystemController { */ @MessagePattern({ cmd: 'sign-endorsement-transaction' }) async signTransaction( - @Body() payload: { endorsementId: string } + @Body() payload: { endorsementId: string, ecosystemId:string } ): Promise { - return this.ecosystemService.signTransaction(payload.endorsementId); + return this.ecosystemService.signTransaction(payload.endorsementId, payload.ecosystemId); } /** @@ -167,8 +167,8 @@ export class EcosystemController { */ @MessagePattern({ cmd: 'sumbit-endorsement-transaction' }) async submitTransaction( - @Body() payload: { endorsementId: string } + @Body() payload: { endorsementId: string, ecosystemId:string } ): Promise { - return this.ecosystemService.submitTransaction(payload.endorsementId); + return this.ecosystemService.submitTransaction(payload.endorsementId, payload.ecosystemId); } } diff --git a/apps/ecosystem/src/ecosystem.repository.ts b/apps/ecosystem/src/ecosystem.repository.ts index 89d5faaea..69bc831a8 100644 --- a/apps/ecosystem/src/ecosystem.repository.ts +++ b/apps/ecosystem/src/ecosystem.repository.ts @@ -4,7 +4,7 @@ import { PrismaService } from '@credebl/prisma-service'; import { ecosystem, ecosystem_invitations, ecosystem_orgs, ecosystem_roles, endorsement_transaction, org_agents, platform_config } from '@prisma/client'; import { EcosystemInvitationStatus, EcosystemOrgStatus, EcosystemRoles, endorsementTransactionStatus, endorsementTransactionType } from '../enums/ecosystem.enum'; import { updateEcosystemOrgsDto } from '../dtos/update-ecosystemOrgs.dto'; -import { SchemaTransactionResponse } from '../interfaces/ecosystem.interfaces'; +import { SchemaTransactionResponse } from '../interfaces/ecosystem.interfaces'; import { ResponseMessages } from '@credebl/common/response-messages'; // eslint-disable-next-line camelcase @@ -406,13 +406,16 @@ export class EcosystemRepository { } /** - * Description: Get getAgentEndPoint by orgId - * @param orgId + * Description: Get getAgentEndPoint by invalidEcosystemId + * @param invalidEcosystemId * @returns Get getAgentEndPoint details */ // eslint-disable-next-line camelcase - async getEcosystemLeadDetails(): Promise { + async getEcosystemLeadDetails(ecosystemId:string): Promise { try { + if (!ecosystemId) { + throw new InternalServerErrorException(ResponseMessages.ecosystem.error.invalidEcosystemId); + } const ecosystemRoleDetails = await this.prisma.ecosystem_roles.findFirst({ where: { name: EcosystemRoles.ECOSYSTEM_LEAD @@ -420,7 +423,8 @@ export class EcosystemRepository { }); const ecosystemLeadDetails = await this.prisma.ecosystem_orgs.findFirst({ where: { - ecosystemRoleId: ecosystemRoleDetails.id + ecosystemRoleId: ecosystemRoleDetails.id, + ecosystemId } }); return ecosystemLeadDetails; @@ -449,6 +453,7 @@ export class EcosystemRepository { async storeTransactionRequest( schemaTransactionResponse: SchemaTransactionResponse, + requestBody: object, type: endorsementTransactionType ): Promise { try { @@ -461,7 +466,8 @@ export class EcosystemRepository { status, ecosystemOrgId, responsePayload: '', - type + type, + requestBody } }); } catch (error) { diff --git a/apps/ecosystem/src/ecosystem.service.ts b/apps/ecosystem/src/ecosystem.service.ts index 29069fd97..b6ce87f29 100644 --- a/apps/ecosystem/src/ecosystem.service.ts +++ b/apps/ecosystem/src/ecosystem.service.ts @@ -264,8 +264,9 @@ export class EcosystemService { * @param RequestSchemaEndorsement * @returns */ - async requestSchemaEndorsement(requestSchemaPayload: RequestSchemaEndorsement, orgId: number): Promise { + async requestSchemaEndorsement(requestSchemaPayload: RequestSchemaEndorsement, orgId: number, ecosystemId:string): Promise { try { + const ecosystemMemberDetails = await this.ecosystemRepository.getAgentDetails(orgId); if (!ecosystemMemberDetails) { throw new InternalServerErrorException(ResponseMessages.ecosystem.error.notFound); @@ -278,7 +279,7 @@ export class EcosystemService { const attributeArray = requestSchemaPayload.attributes.map(item => item.attributeName); - const getEcosystemLeadDetails = await this.ecosystemRepository.getEcosystemLeadDetails(); + const getEcosystemLeadDetails = await this.ecosystemRepository.getEcosystemLeadDetails(ecosystemId); const ecosystemLeadAgentDetails = await this.ecosystemRepository.getAgentDetails(Number(getEcosystemLeadDetails.orgId)); @@ -309,7 +310,7 @@ export class EcosystemService { if ('failed' === schemaTransactionRequest.message.schemaState.state) { throw new InternalServerErrorException(ResponseMessages.ecosystem.error.requestSchemaTransaction); } - return this.ecosystemRepository.storeTransactionRequest(schemaTransactionResponse, endorsementTransactionType.SCHEMA); + return this.ecosystemRepository.storeTransactionRequest(schemaTransactionResponse, requestSchemaPayload, endorsementTransactionType.SCHEMA); } catch (error) { this.logger.error(`In request schema endorsement : ${JSON.stringify(error)}`); @@ -317,7 +318,7 @@ export class EcosystemService { } } - async requestCredDeffEndorsement(requestCredDefPayload: RequestCredDeffEndorsement, orgId: number): Promise { + async requestCredDeffEndorsement(requestCredDefPayload: RequestCredDeffEndorsement, orgId: number, ecosystemId:string): Promise { try { const ecosystemMemberDetails = await this.ecosystemRepository.getAgentDetails(orgId); if (!ecosystemMemberDetails) { @@ -331,7 +332,7 @@ export class EcosystemService { // const attributeArray = requestSchemaPayload.attributes.map(item => item.attributeName); - const getEcosystemLeadDetails = await this.ecosystemRepository.getEcosystemLeadDetails(); + const getEcosystemLeadDetails = await this.ecosystemRepository.getEcosystemLeadDetails(ecosystemId); const ecosystemLeadAgentDetails = await this.ecosystemRepository.getAgentDetails(Number(getEcosystemLeadDetails.orgId)); @@ -362,7 +363,7 @@ export class EcosystemService { throw new InternalServerErrorException(ResponseMessages.ecosystem.error.requestCredDefTransaction); } - return this.ecosystemRepository.storeTransactionRequest(schemaTransactionResponse, endorsementTransactionType.CREDENTIAL_DEFINITION); + return this.ecosystemRepository.storeTransactionRequest(schemaTransactionResponse, requestCredDefPayload, endorsementTransactionType.CREDENTIAL_DEFINITION); } catch (error) { this.logger.error(`In request cred-def endorsement : ${JSON.stringify(error)}`); @@ -418,14 +419,14 @@ export class EcosystemService { } } - async signTransaction(endorsementId: string): Promise { + async signTransaction(endorsementId: string, ecosystemId:string): Promise { try { const endorsementTransactionPayload = await this.ecosystemRepository.getEndorsementTransactionById(endorsementId, endorsementTransactionStatus.REQUESTED); if (!endorsementTransactionPayload) { throw new InternalServerErrorException(ResponseMessages.ecosystem.error.invalidTransaction); } - const getEcosystemLeadDetails = await this.ecosystemRepository.getEcosystemLeadDetails(); + const getEcosystemLeadDetails = await this.ecosystemRepository.getEcosystemLeadDetails(ecosystemId); if (!getEcosystemLeadDetails) { throw new InternalServerErrorException(ResponseMessages.ecosystem.error.leadNotFound); @@ -486,7 +487,7 @@ export class EcosystemService { } } - async submitTransaction(endorsementId: string): Promise { + async submitTransaction(endorsementId: string, ecosystemId:string): Promise { try { const endorsementTransactionPayload: EndorsementTransactionPayload = await this.ecosystemRepository.getEndorsementTransactionById(endorsementId, endorsementTransactionStatus.SIGNED); if (!endorsementTransactionPayload) { @@ -494,7 +495,7 @@ export class EcosystemService { } const ecosystemMemberDetails = await this.ecosystemRepository.getAgentDetails(Number(endorsementTransactionPayload.ecosystemOrgs.orgId)); - const getEcosystemLeadDetails = await this.ecosystemRepository.getEcosystemLeadDetails(); + const getEcosystemLeadDetails = await this.ecosystemRepository.getEcosystemLeadDetails(ecosystemId); // eslint-disable-next-line camelcase const platformConfig: platform_config = await this.ecosystemRepository.getPlatformConfigDetails(); diff --git a/libs/common/src/response-messages/index.ts b/libs/common/src/response-messages/index.ts index 1cdead15d..beb6e1fb4 100644 --- a/libs/common/src/response-messages/index.ts +++ b/libs/common/src/response-messages/index.ts @@ -210,6 +210,7 @@ export const ResponseMessages = { notFound: 'Organization not found', leadNotFound: 'Lead details not found', invalidOrgId: 'Invalid organization Id', + invalidEcosystemId: 'Invalid ecosystem Id', invalidTransaction: 'Transaction does not exist', invalidAgentUrl: 'Invalid agent url' } diff --git a/libs/prisma-service/prisma/migrations/20231010055923_endorsement_transaction_schema_body/migration.sql b/libs/prisma-service/prisma/migrations/20231010055923_endorsement_transaction_schema_body/migration.sql new file mode 100644 index 000000000..77f492116 --- /dev/null +++ b/libs/prisma-service/prisma/migrations/20231010055923_endorsement_transaction_schema_body/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "endorsement_transaction" ADD COLUMN "requestBody" JSONB; diff --git a/libs/prisma-service/prisma/schema.prisma b/libs/prisma-service/prisma/schema.prisma index 45aa68dd9..4f2373d54 100644 --- a/libs/prisma-service/prisma/schema.prisma +++ b/libs/prisma-service/prisma/schema.prisma @@ -382,18 +382,19 @@ model ecosystem_orgs { } model endorsement_transaction { - id String @id @default(uuid()) - endorserDid String - authorDid String - requestPayload String - responsePayload String - type String? - createDateTime DateTime @default(now()) @db.Timestamptz(6) - createdBy Int @default(1) - lastChangedDateTime DateTime @default(now()) @db.Timestamptz(6) - lastChangedBy Int @default(1) - deletedAt DateTime? @db.Timestamp(6) - status String - ecosystemOrgId String - ecosystemOrgs ecosystem_orgs @relation(fields: [ecosystemOrgId], references: [id]) + id String @id @default(uuid()) + endorserDid String + authorDid String + requestPayload String + responsePayload String + type String? + createDateTime DateTime @default(now()) @db.Timestamptz(6) + createdBy Int @default(1) + lastChangedDateTime DateTime @default(now()) @db.Timestamptz(6) + lastChangedBy Int @default(1) + deletedAt DateTime? @db.Timestamp(6) + status String + ecosystemOrgId String + requestBody Json? + ecosystemOrgs ecosystem_orgs @relation(fields: [ecosystemOrgId], references: [id]) } From d6c06f1c7ce2fca2ffcf98336ad482ff26dc9bf8 Mon Sep 17 00:00:00 2001 From: tipusinghaw Date: Tue, 10 Oct 2023 16:02:29 +0530 Subject: [PATCH 2/2] fix: added auth guard Signed-off-by: tipusinghaw --- apps/api-gateway/src/ecosystem/ecosystem.controller.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/api-gateway/src/ecosystem/ecosystem.controller.ts b/apps/api-gateway/src/ecosystem/ecosystem.controller.ts index c472e8720..51fc3262c 100644 --- a/apps/api-gateway/src/ecosystem/ecosystem.controller.ts +++ b/apps/api-gateway/src/ecosystem/ecosystem.controller.ts @@ -252,10 +252,10 @@ export class EcosystemController { @Post('/:ecosystemId/:orgId/transaction/schema') @ApiOperation({ summary: 'Request new schema', description: 'Request new schema' }) @ApiResponse({ status: 201, description: 'Success', type: ApiResponseDto }) - // @UseGuards(AuthGuard('jwt'), EcosystemRolesGuard, OrgRolesGuard) - // @ApiBearerAuth() - // @EcosystemsRoles(EcosystemRoles.ECOSYSTEM_MEMBER) - // @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER) + @UseGuards(AuthGuard('jwt'), EcosystemRolesGuard, OrgRolesGuard) + @ApiBearerAuth() + @EcosystemsRoles(EcosystemRoles.ECOSYSTEM_MEMBER) + @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER) async requestSchemaTransaction(@Body() requestSchemaPayload: RequestSchemaDto, @Param('orgId') orgId: number, @Param('ecosystemId') ecosystemId: string, @Res() res: Response): Promise { await this.ecosystemService.schemaEndorsementRequest(requestSchemaPayload, orgId, ecosystemId); const finalResponse: IResponseType = {