From e7c360d385e210eef344ab55c2695be5d30a1b54 Mon Sep 17 00:00:00 2001
From: sovrgn <boyan.tsolov@vereign.com>
Date: Thu, 12 Oct 2023 10:44:59 +0300
Subject: [PATCH] simplify: generic id request dto

---
 .../src/app/app.controller.ts                 |  4 ++--
 .../app/managers/attestation.controller.ts    | 11 ++++-----
 .../src/app/managers/connection.controller.ts |  8 +++----
 .../src/app/managers/proof.controller.ts      | 16 ++++++-------
 .../src/askar-nats/event.handler.service.ts   | 24 +++++++++----------
 libs/askar/src/askar-rest/rest.controller.ts  |  5 ++--
 libs/askar/src/askar/agent.service.ts         |  3 ++-
 .../src/dtos/requests/connection.req.dto.ts   |  9 -------
 .../src/dtos/requests/credential.req.dto.ts   |  9 -------
 .../{creddef.req.dto.ts => id.req.dto.ts}     |  4 ++--
 libs/dtos/src/dtos/requests/proof.req.dto.ts  | 10 ++++----
 libs/dtos/src/dtos/requests/schema.req.dto.ts |  9 -------
 libs/dtos/src/events/dtoToEventTransformer.ts |  6 ++---
 libs/dtos/src/index.ts                        |  6 +----
 14 files changed, 44 insertions(+), 80 deletions(-)
 delete mode 100644 libs/dtos/src/dtos/requests/connection.req.dto.ts
 delete mode 100644 libs/dtos/src/dtos/requests/credential.req.dto.ts
 rename libs/dtos/src/dtos/requests/{creddef.req.dto.ts => id.req.dto.ts} (58%)
 delete mode 100644 libs/dtos/src/dtos/requests/schema.req.dto.ts

diff --git a/apps/connection-manager/src/app/app.controller.ts b/apps/connection-manager/src/app/app.controller.ts
index 4eefca2f..98d111dc 100644
--- a/apps/connection-manager/src/app/app.controller.ts
+++ b/apps/connection-manager/src/app/app.controller.ts
@@ -7,8 +7,8 @@ import {
   ConnectionEvent,
   CreateInvitationResponseDto,
   GatewayAcceptedResponseDto,
-  ConnectionReqDto,
   makeEvent,
+  IdReqDto,
 } from "@ocm-engine/dtos";
 
 @Controller()
@@ -21,7 +21,7 @@ export class AppController {
   async create(
     @Body()
     payload: {
-      data: null | CreateInvitationResponseDto | ConnectionReqDto;
+      data: null | CreateInvitationResponseDto | IdReqDto;
       type: ConnectionEvent;
       source: string;
     },
diff --git a/apps/gateway/src/app/managers/attestation.controller.ts b/apps/gateway/src/app/managers/attestation.controller.ts
index a51fdf1b..ce4577f7 100644
--- a/apps/gateway/src/app/managers/attestation.controller.ts
+++ b/apps/gateway/src/app/managers/attestation.controller.ts
@@ -2,7 +2,6 @@ import { Body, Controller, Get, Param, Post, UseFilters } from "@nestjs/common";
 import { AllExceptionsHandler } from "../exception.handler";
 import { AttestationManagerClient } from "@ocm-engine/clients";
 import {
-  CredentialReqDto,
   CreateCredentialDefinitionRequsetDto,
   CreateSchemaRequestDto,
   CRED_DEF_CREATE,
@@ -11,13 +10,13 @@ import {
   CRED_OFFER_ACCEPT,
   CRED_OFFER_LIST,
   GatewayAcceptedResponseDto,
-  SchemaReqDto,
   IssueCredentialRequestDto,
   MakeBasicMessageRequestDto,
   MESSAGE_MAKE,
   SCHEMA_CREATE,
   SCHEMA_GET,
   SCHEMA_LIST,
+  IdReqDto,
 } from "@ocm-engine/dtos";
 import {
   ApiBadRequestResponse,
@@ -165,8 +164,8 @@ export class AttestationController {
       "Method will fetch specific schema or return null. The id of the response will be matched when you receive event from the websocket",
     tags: ["Schema"],
   })
-  async getSchemaById(@Body() schemaRequestDto: SchemaReqDto) {
-    return this.amClient.sendPayload<SchemaReqDto>({
+  async getSchemaById(@Body() schemaRequestDto: IdReqDto) {
+    return this.amClient.sendPayload<IdReqDto>({
       pattern: "schemas",
       payload: {
         source: "/schemas-by-id",
@@ -504,8 +503,8 @@ export class AttestationController {
     tags: ["Credentials Offers"],
   })
   acceptCredential(@Param("credential_record_id") credentialRecordId: string) {
-    const data = new CredentialReqDto();
-    data.credentialRecordId = credentialRecordId;
+    const data = new IdReqDto();
+    data.id = credentialRecordId;
     return this.amClient.sendPayload({
       pattern: "credentials",
       payload: {
diff --git a/apps/gateway/src/app/managers/connection.controller.ts b/apps/gateway/src/app/managers/connection.controller.ts
index aa29861f..7fd5db4f 100644
--- a/apps/gateway/src/app/managers/connection.controller.ts
+++ b/apps/gateway/src/app/managers/connection.controller.ts
@@ -15,7 +15,7 @@ import {
   CONNECTION_LIST,
   CreateInvitationResponseDto,
   GatewayAcceptedResponseDto,
-  ConnectionReqDto,
+  IdReqDto,
 } from "@ocm-engine/dtos";
 import { AllExceptionsHandler } from "../exception.handler";
 import {
@@ -238,10 +238,10 @@ export class ConnectionController {
     tags: ["Connections"],
   })
   async getById(@Param("id") id: string) {
-    const request = new ConnectionReqDto();
-    request.connectionId = id;
+    const request = new IdReqDto();
+    request.id = id;
 
-    return this.cmClient.sendPayload<ConnectionReqDto>({
+    return this.cmClient.sendPayload<IdReqDto>({
       pattern: "connections",
       payload: {
         source: "/connections/:id",
diff --git a/apps/gateway/src/app/managers/proof.controller.ts b/apps/gateway/src/app/managers/proof.controller.ts
index c90bad7c..1bf74b44 100644
--- a/apps/gateway/src/app/managers/proof.controller.ts
+++ b/apps/gateway/src/app/managers/proof.controller.ts
@@ -2,13 +2,13 @@ import { Body, Controller, Get, Param, Post, UseFilters } from "@nestjs/common";
 import {
   ProofReqDto,
   GatewayAcceptedResponseDto,
-  SchemaReqDto,
   IssueProofRequestDto,
   PROOF_ACCEPT,
   PROOF_DECLINE,
   PROOF_GET,
   PROOF_ISSUE,
   PROOF_LIST,
+  IdReqDto,
 } from "@ocm-engine/dtos";
 import { AllExceptionsHandler } from "../exception.handler";
 import { ProofManagerClient } from "@ocm-engine/clients";
@@ -60,7 +60,7 @@ export class ProofController {
     tags: ["Credentials Proof"],
   })
   proofs() {
-    return this.pmClient.sendPayload<SchemaReqDto>({
+    return this.pmClient.sendPayload<IdReqDto>({
       pattern: "proofs",
       payload: {
         source: "/credential/proofs",
@@ -106,10 +106,10 @@ export class ProofController {
     tags: ["Credentials Proof"],
   })
   getProofById(@Param("proof_record_id") proofRecordId: string) {
-    const data = new ProofReqDto();
-    data.proofRecordId = proofRecordId;
+    const data = new IdReqDto();
+    data.id = proofRecordId;
 
-    return this.pmClient.sendPayload<ProofReqDto>({
+    return this.pmClient.sendPayload<IdReqDto>({
       pattern: "proofs",
       payload: {
         source: "/credentials/proof/:proof_record_id",
@@ -275,10 +275,10 @@ export class ProofController {
     tags: ["Credentials Proof"],
   })
   declineProofRequest(@Param("proof_record_id") proofRecordId: string) {
-    const data = new ProofReqDto();
-    data.proofRecordId = proofRecordId;
+    const data = new IdReqDto();
+    data.id = proofRecordId;
 
-    return this.pmClient.sendPayload<ProofReqDto>({
+    return this.pmClient.sendPayload<IdReqDto>({
       pattern: "proofs",
       payload: {
         source: "/credentials/proof/:proof_record_id/decline",
diff --git a/libs/askar/src/askar-nats/event.handler.service.ts b/libs/askar/src/askar-nats/event.handler.service.ts
index 2c5b4409..ee08bcbb 100644
--- a/libs/askar/src/askar-nats/event.handler.service.ts
+++ b/libs/askar/src/askar-nats/event.handler.service.ts
@@ -1,7 +1,6 @@
 import { Injectable, Logger } from "@nestjs/common";
 import { AgentService } from "../askar/agent.service";
 import {
-  CredentialReqDto,
   ProofReqDto,
   CloudEventDto,
   CONNECTION_ACCEPT,
@@ -16,8 +15,6 @@ import {
   CRED_LIST,
   CRED_OFFER_ACCEPT,
   CRED_OFFER_LIST,
-  ConnectionReqDto,
-  SchemaReqDto,
   IssueCredentialRequestDto,
   IssueProofRequestDto,
   MakeBasicMessageRequestDto,
@@ -30,6 +27,7 @@ import {
   SCHEMA_GET,
   SCHEMA_LIST,
   PROOF_DECLINE,
+  IdReqDto,
 } from "@ocm-engine/dtos";
 import asyncRetry from "async-retry";
 
@@ -58,8 +56,8 @@ export class EventHandlerService {
             break;
 
           case CONNECTION_GET:
-            dto = event.data as ConnectionReqDto;
-            data = await this.agentService.getConnectionById(dto.connectionId);
+            dto = event.data as IdReqDto;
+            data = await this.agentService.getConnectionById(dto.id);
             break;
 
           case SCHEMA_CREATE:
@@ -71,8 +69,8 @@ export class EventHandlerService {
             break;
 
           case SCHEMA_GET:
-            dto = event.data as SchemaReqDto;
-            data = await this.agentService.getSchemaById(dto.schemaId);
+            dto = event.data as IdReqDto;
+            data = await this.agentService.getSchemaById(dto.id);
             break;
           case CRED_DEF_CREATE:
             data = await this.agentService.createCredentialDefinition(
@@ -95,9 +93,9 @@ export class EventHandlerService {
             break;
 
           case CRED_OFFER_ACCEPT:
-            dto = event.data as CredentialReqDto;
+            dto = event.data as IdReqDto;
             data = await this.agentService.acceptCredential(
-              dto.credentialRecordId,
+              dto.id,
             );
             break;
 
@@ -111,8 +109,8 @@ export class EventHandlerService {
             break;
 
           case PROOF_GET:
-            dto = event.data as ProofReqDto;
-            data = await this.agentService.getProofById(dto.proofRecordId);
+            dto = event.data as IdReqDto;
+            data = await this.agentService.getProofById(dto.id);
             break;
 
           case PROOF_ACCEPT:
@@ -122,9 +120,9 @@ export class EventHandlerService {
             break;
 
           case PROOF_DECLINE:
-            dto = event.data as ProofReqDto;
+            dto = event.data as IdReqDto;
             data = await this.agentService.declineProofRequest(
-              dto.proofRecordId,
+              dto.id,
             );
             break;
 
diff --git a/libs/askar/src/askar-rest/rest.controller.ts b/libs/askar/src/askar-rest/rest.controller.ts
index f8ca05f4..d6e20858 100644
--- a/libs/askar/src/askar-rest/rest.controller.ts
+++ b/libs/askar/src/askar-rest/rest.controller.ts
@@ -9,6 +9,7 @@ import {
   CreateSchemaRequestDto,
   MakeBasicMessageRequestDto,
   ProofReqDto,
+  IdReqDto,
 } from "@ocm-engine/dtos";
 import { AllExceptionsHandler } from "./exception.handler";
 
@@ -79,8 +80,8 @@ export class RestController {
   }
 
   @Get("credential/proof/:proof_record_id")
-  getProof(@Param("proof_record_id") data: ProofReqDto) {
-    return this.agentService.getProofById(data.proofRecordId);
+  getProof(@Param("proof_record_id") data: IdReqDto) {
+    return this.agentService.getProofById(data.id);
   }
 
   @Post(`/credential/proof/accept`)
diff --git a/libs/askar/src/askar/agent.service.ts b/libs/askar/src/askar/agent.service.ts
index 9f62532a..a4622aa5 100644
--- a/libs/askar/src/askar/agent.service.ts
+++ b/libs/askar/src/askar/agent.service.ts
@@ -410,7 +410,8 @@ export class AgentService {
     if (acceptProofDto.proofUrl) {
       return this.acceptOobProof(acceptProofDto.proofUrl);
     }
-    return this.acceptConnectionProof(acceptProofDto.proofRecordId);
+    // REVIEW: should the undefined case be covered inside acceptConnectionProof?
+    return this.acceptConnectionProof(acceptProofDto.proofRecordId as string);
   };
 
   acceptOobProof = async (url: string) => {
diff --git a/libs/dtos/src/dtos/requests/connection.req.dto.ts b/libs/dtos/src/dtos/requests/connection.req.dto.ts
deleted file mode 100644
index cd091613..00000000
--- a/libs/dtos/src/dtos/requests/connection.req.dto.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { IsNotEmpty, IsString } from "class-validator";
-
-
-export class ConnectionReqDto {
-  //@example 6464b521-005a-4379-91e0-a3692b31cafd
-  @IsNotEmpty()
-  @IsString()
-  connectionId: string;
-}
diff --git a/libs/dtos/src/dtos/requests/credential.req.dto.ts b/libs/dtos/src/dtos/requests/credential.req.dto.ts
deleted file mode 100644
index f94a2682..00000000
--- a/libs/dtos/src/dtos/requests/credential.req.dto.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { IsNotEmpty, IsString } from "class-validator";
-
-
-export class CredentialReqDto {
-  //@example cf8395a5-9a53-4e06-8a5d-04e0fc00ca04
-  @IsNotEmpty()
-  @IsString()
-  credentialRecordId: string;
-}
\ No newline at end of file
diff --git a/libs/dtos/src/dtos/requests/creddef.req.dto.ts b/libs/dtos/src/dtos/requests/id.req.dto.ts
similarity index 58%
rename from libs/dtos/src/dtos/requests/creddef.req.dto.ts
rename to libs/dtos/src/dtos/requests/id.req.dto.ts
index 681e3eec..5873b7f9 100644
--- a/libs/dtos/src/dtos/requests/creddef.req.dto.ts
+++ b/libs/dtos/src/dtos/requests/id.req.dto.ts
@@ -1,8 +1,8 @@
 import { IsNotEmpty, IsString } from "class-validator";
 
 
-export class CreddefReqDto {
+export class IdReqDto {
   @IsNotEmpty()
   @IsString()
-  credentialDefinitionId: string;
+  id: string;
 }
diff --git a/libs/dtos/src/dtos/requests/proof.req.dto.ts b/libs/dtos/src/dtos/requests/proof.req.dto.ts
index 4b33d363..8e995435 100644
--- a/libs/dtos/src/dtos/requests/proof.req.dto.ts
+++ b/libs/dtos/src/dtos/requests/proof.req.dto.ts
@@ -2,15 +2,13 @@ import { IsNotEmpty, IsString, ValidateIf } from "class-validator";
 
 
 export class ProofReqDto {
-  @ValidateIf((o) => o.proofUrl === undefined)
+  @ValidateIf((o) => o.proofUrl === undefined, { always: true })
   @IsString()
-  @ValidateIf((o) => o.proofUrl === undefined)
   @IsNotEmpty()
-  proofRecordId: string;
+  proofRecordId: string | undefined;
 
-  @ValidateIf((o) => o.proofRecordId === undefined)
+  @ValidateIf((o) => o.proofRecordId === undefined, { always: true })
   @IsString()
-  @ValidateIf((o) => o.proofRecordId === undefined)
   @IsNotEmpty()
-  proofUrl: string;
+  proofUrl: string | undefined;
 }
\ No newline at end of file
diff --git a/libs/dtos/src/dtos/requests/schema.req.dto.ts b/libs/dtos/src/dtos/requests/schema.req.dto.ts
deleted file mode 100644
index 4bf2cb6c..00000000
--- a/libs/dtos/src/dtos/requests/schema.req.dto.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { IsNotEmpty, IsString } from "class-validator";
-
-
-export class SchemaReqDto {
-  //@example "did:indy:LEDNGER:SXM76gQwRnjkgoz2oBnGjd/anoncreds/v0/SCHEMA/test schema/1.0.2"
-  @IsNotEmpty()
-  @IsString()
-  schemaId: string;
-}
diff --git a/libs/dtos/src/events/dtoToEventTransformer.ts b/libs/dtos/src/events/dtoToEventTransformer.ts
index 9d885143..586f96f1 100644
--- a/libs/dtos/src/events/dtoToEventTransformer.ts
+++ b/libs/dtos/src/events/dtoToEventTransformer.ts
@@ -11,24 +11,22 @@ import { ConnectionUnsupportedTypeError } from "../errors/connection.unsupported
 import { CreateCredentialDefinitionRequsetDto } from "../dtos/requests/create.credential.definition.request.dto";
 import { CreateInvitationResponseDto } from "../dtos/responses/create.invitation.response.dto";
 import { CreateSchemaRequestDto } from "../dtos/requests/create.schema.request.dto";
-import { ConnectionReqDto } from "../dtos/requests/connection.req.dto";
 import { IssueCredentialRequestDto } from "../dtos/requests/issue.credential.request.dto";
 import { IssueProofRequestDto } from "../dtos/requests/issue.proof.request.dto";
-import { CredentialReqDto } from "../dtos/requests/credential.req.dto";
 import { MessageRecordDto } from "../dtos/generics/message.record.dto";
 import { MakeBasicMessageRequestDto } from "../dtos/requests/make.basic.message.request.dto";
 import { ProofReqDto } from "../dtos/requests/proof.req.dto";
 import { ProofRecordDto } from "../dtos/generics/proof.record.dto";
+import { IdReqDto } from "../dtos/requests/id.req.dto";
 
 export const makeEvent = (payload: {
   data:
     | null
     | IssueProofRequestDto
-    | CredentialReqDto
     | CreateInvitationResponseDto
-    | ConnectionReqDto
     | CreateSchemaRequestDto
     | ProofReqDto
+    | IdReqDto
     | CreateSchemaRequestDto
     | CreateCredentialDefinitionRequsetDto
     | ProofRecordDto
diff --git a/libs/dtos/src/index.ts b/libs/dtos/src/index.ts
index 46976e38..df61e7a5 100644
--- a/libs/dtos/src/index.ts
+++ b/libs/dtos/src/index.ts
@@ -8,12 +8,8 @@ export * from "./dtos/generics/proof.record.dto";
 export * from "./dtos/generics/schema.record.dto";
 export * from "./dtos/generics/message.record.dto";
 
-
-export * from "./dtos/requests/connection.req.dto";
-export * from "./dtos/requests/creddef.req.dto";
-export * from "./dtos/requests/credential.req.dto";
 export * from "./dtos/requests/proof.req.dto";
-export * from "./dtos/requests/schema.req.dto";
+export * from "./dtos/requests/id.req.dto";
 
 export * from "./dtos/requests/create.schema.request.dto";
 export * from "./dtos/requests/create.credential.definition.request.dto";
-- 
GitLab