From cdd82dbe431a019493a62a2638ce671bf30ff761 Mon Sep 17 00:00:00 2001 From: Artur Sudnik-Hrynkiewicz Date: Tue, 26 Sep 2023 12:12:15 +0200 Subject: [PATCH] fix(input-descriptor-to-credential): fixing Swagger UI crashing (#181) * fix(input-descriptor-to-credential): fixing Swagger UI crashing the service * feat(input-descriptor-to-credential): disabling NestJS Swagger CLI --- .../docs/openapi.json | 54 ++++++++++++++++++- .../nest-cli.json | 9 +--- .../modules/converter/converter.controller.ts | 2 + .../modules/converter/dtos/credential.dto.ts | 7 +++ ...t-descriptor-to-credential-response.dto.ts | 4 +- 5 files changed, 64 insertions(+), 12 deletions(-) diff --git a/apps/input-descriptor-to-credential/docs/openapi.json b/apps/input-descriptor-to-credential/docs/openapi.json index 09588fe5..17d38383 100644 --- a/apps/input-descriptor-to-credential/docs/openapi.json +++ b/apps/input-descriptor-to-credential/docs/openapi.json @@ -16,8 +16,15 @@ } }, "responses": { - "201": { - "description": "" + "default": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InputDescriptorToCredentialResponseDto" + } + } + } } } } @@ -50,6 +57,49 @@ } }, "required": ["constraints"] + }, + "CredentialType": { + "type": "string", + "enum": ["VerifiableCredential", "VerifiablePresentation", "StatusList2021Credential", "EWFRole"] + }, + "CredentialDto": { + "type": "object", + "properties": { + "@context": { + "type": "array", + "items": { + "type": "string" + } + }, + "credentialSubject": { + "type": "object" + }, + "id": { + "type": "string" + }, + "issuanceDate": { + "type": "string" + }, + "type": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CredentialType" + } + }, + "issuer": { + "type": "string" + } + }, + "required": ["@context", "credentialSubject", "id", "issuanceDate", "type", "issuer"] + }, + "InputDescriptorToCredentialResponseDto": { + "type": "object", + "properties": { + "credential": { + "$ref": "#/components/schemas/CredentialDto" + } + }, + "required": ["credential"] } } } diff --git a/apps/input-descriptor-to-credential/nest-cli.json b/apps/input-descriptor-to-credential/nest-cli.json index 860eaac5..98ac32a5 100644 --- a/apps/input-descriptor-to-credential/nest-cli.json +++ b/apps/input-descriptor-to-credential/nest-cli.json @@ -3,13 +3,6 @@ "collection": "@nestjs/schematics", "sourceRoot": "src", "compilerOptions": { - "plugins": [ - { - "name": "@nestjs/swagger", - "options": { - "introspectComments": true - } - } - ] + "plugins": [] } } diff --git a/apps/input-descriptor-to-credential/src/modules/converter/converter.controller.ts b/apps/input-descriptor-to-credential/src/modules/converter/converter.controller.ts index 2662d283..68b2742b 100644 --- a/apps/input-descriptor-to-credential/src/modules/converter/converter.controller.ts +++ b/apps/input-descriptor-to-credential/src/modules/converter/converter.controller.ts @@ -19,12 +19,14 @@ import { Body, Controller, Post } from '@nestjs/common'; import { ConverterService } from './converter.service'; import { InputDesciptorToCredentialDto, InputDescriptorToCredentialResponseDto } from './dtos'; import { CredentialDto } from './dtos/credential.dto'; +import { ApiResponse } from '@nestjs/swagger'; @Controller('converter') export class ConverterController { constructor(private readonly converterService: ConverterService) {} @Post('input-descriptor-to-credential') + @ApiResponse({ type: InputDescriptorToCredentialResponseDto }) async inputDescriptorToCredential( @Body() inputDesciptorToCredentialDto: InputDesciptorToCredentialDto ): Promise { diff --git a/apps/input-descriptor-to-credential/src/modules/converter/dtos/credential.dto.ts b/apps/input-descriptor-to-credential/src/modules/converter/dtos/credential.dto.ts index 50c35c08..82972dcb 100644 --- a/apps/input-descriptor-to-credential/src/modules/converter/dtos/credential.dto.ts +++ b/apps/input-descriptor-to-credential/src/modules/converter/dtos/credential.dto.ts @@ -16,13 +16,20 @@ */ import { Credential, CredentialType } from '@ew-did-registry/credentials-interface'; +import { ApiProperty } from '@nestjs/swagger'; export class CredentialDto implements Credential> { + @ApiProperty() '@context': Array>; + @ApiProperty() credentialSubject: Record; + @ApiProperty() id: string; + @ApiProperty() issuanceDate: string; + @ApiProperty({ enum: CredentialType, enumName: 'CredentialType', isArray: true }) type: CredentialType[]; + @ApiProperty() issuer: string; [x: string]: unknown; diff --git a/apps/input-descriptor-to-credential/src/modules/converter/dtos/input-descriptor-to-credential-response.dto.ts b/apps/input-descriptor-to-credential/src/modules/converter/dtos/input-descriptor-to-credential-response.dto.ts index cd773150..c048389f 100644 --- a/apps/input-descriptor-to-credential/src/modules/converter/dtos/input-descriptor-to-credential-response.dto.ts +++ b/apps/input-descriptor-to-credential/src/modules/converter/dtos/input-descriptor-to-credential-response.dto.ts @@ -17,11 +17,11 @@ import { CredentialDto } from './credential.dto'; import { Type } from 'class-transformer'; -import { ValidateNested } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; export class InputDescriptorToCredentialResponseDto { @Type(() => CredentialDto) - @ValidateNested() + @ApiProperty({ type: CredentialDto }) credential: CredentialDto; constructor(props: Partial) {