From c0673cbea6649e99638f554189fb8a639a8817fc Mon Sep 17 00:00:00 2001 From: Britta Stallknecht <146106656+britsta@users.noreply.github.com> Date: Wed, 6 Nov 2024 11:42:51 +0100 Subject: [PATCH] Make `creationContent` parameter of CanCreateRelationshipUseCase optional (#323) * feat: add CanCreateRelationshipRequest type * chore: build schema of CanCreateRelationshipRequest * fix: request type of canCreateRelationship facade method * feat: use schema validator of CanCreateRelationshipRequest * test: use case can be called without creationContent * chore: add barrel to index file * chore: remove useless empty import --- .../facades/transport/RelationshipsFacade.ts | 6 ++- .../runtime/src/useCases/common/Schemas.ts | 24 ++++++++++++ .../relationships/CanCreateRelationship.ts | 37 +++++++++++++------ .../useCases/transport/relationships/index.ts | 1 + .../test/transport/relationships.test.ts | 12 ++---- 5 files changed, 58 insertions(+), 22 deletions(-) diff --git a/packages/runtime/src/extensibility/facades/transport/RelationshipsFacade.ts b/packages/runtime/src/extensibility/facades/transport/RelationshipsFacade.ts index 64f28d1e8..7eaa0f8e0 100644 --- a/packages/runtime/src/extensibility/facades/transport/RelationshipsFacade.ts +++ b/packages/runtime/src/extensibility/facades/transport/RelationshipsFacade.ts @@ -6,6 +6,9 @@ import { AcceptRelationshipReactivationUseCase, AcceptRelationshipRequest, AcceptRelationshipUseCase, + CanCreateRelationshipRequest, + CanCreateRelationshipResponse, + CanCreateRelationshipUseCase, CreateRelationshipRequest, CreateRelationshipUseCase, DecomposeRelationshipRequest, @@ -32,7 +35,6 @@ import { TerminateRelationshipRequest, TerminateRelationshipUseCase } from "../../../useCases"; -import { CanCreateRelationshipResponse, CanCreateRelationshipUseCase } from "../../../useCases/transport/relationships/CanCreateRelationship"; export class RelationshipsFacade { public constructor( @@ -65,7 +67,7 @@ export class RelationshipsFacade { return await this.getRelationshipByAddressUseCase.execute(request); } - public async canCreateRelationship(request: CreateRelationshipRequest): Promise> { + public async canCreateRelationship(request: CanCreateRelationshipRequest): Promise> { return await this.canCreateRelationshipUseCase.execute(request); } diff --git a/packages/runtime/src/useCases/common/Schemas.ts b/packages/runtime/src/useCases/common/Schemas.ts index 717606136..58f9ae706 100644 --- a/packages/runtime/src/useCases/common/Schemas.ts +++ b/packages/runtime/src/useCases/common/Schemas.ts @@ -22895,4 +22895,28 @@ export const LoadPeerTokenRequest: any = { "pattern": "VE9L.{84}" } } +} + +export const CanCreateRelationshipRequest: any = { + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/CanCreateRelationshipRequest", + "definitions": { + "CanCreateRelationshipRequest": { + "type": "object", + "properties": { + "templateId": { + "$ref": "#/definitions/RelationshipTemplateIdString" + }, + "creationContent": {} + }, + "required": [ + "templateId" + ], + "additionalProperties": false + }, + "RelationshipTemplateIdString": { + "type": "string", + "pattern": "RLT[A-Za-z0-9]{17}" + } + } } \ No newline at end of file diff --git a/packages/runtime/src/useCases/transport/relationships/CanCreateRelationship.ts b/packages/runtime/src/useCases/transport/relationships/CanCreateRelationship.ts index 58bfa2338..2f77499f7 100644 --- a/packages/runtime/src/useCases/transport/relationships/CanCreateRelationship.ts +++ b/packages/runtime/src/useCases/transport/relationships/CanCreateRelationship.ts @@ -4,8 +4,18 @@ import { ArbitraryRelationshipCreationContent, RelationshipCreationContent } fro import { CoreId } from "@nmshd/core-types"; import { RelationshipsController, RelationshipTemplate, RelationshipTemplateController } from "@nmshd/transport"; import { Inject } from "@nmshd/typescript-ioc"; -import { RuntimeErrors, UseCase } from "../../common"; -import { CreateRelationshipRequest } from "./CreateRelationship"; +import { RelationshipTemplateIdString, RuntimeErrors, SchemaRepository, SchemaValidator, UseCase } from "../../common"; + +export interface CanCreateRelationshipRequest { + templateId: RelationshipTemplateIdString; + creationContent?: any; +} + +class Validator extends SchemaValidator { + public constructor(@Inject schemaRepository: SchemaRepository) { + super(schemaRepository.getSchema("CanCreateRelationshipRequest")); + } +} export type CanCreateRelationshipResponse = | { isSuccess: true } @@ -15,15 +25,16 @@ export type CanCreateRelationshipResponse = message: string; }; -export class CanCreateRelationshipUseCase extends UseCase { +export class CanCreateRelationshipUseCase extends UseCase { public constructor( @Inject private readonly relationshipController: RelationshipsController, - @Inject private readonly relationshipTemplateController: RelationshipTemplateController + @Inject private readonly relationshipTemplateController: RelationshipTemplateController, + @Inject validator: Validator ) { - super(); + super(validator); } - protected async executeInternal(request: CreateRelationshipRequest): Promise> { + protected async executeInternal(request: CanCreateRelationshipRequest): Promise> { const template = await this.relationshipTemplateController.getRelationshipTemplate(CoreId.from(request.templateId)); if (!template) { const error = RuntimeErrors.general.recordNotFound(RelationshipTemplate); @@ -35,12 +46,14 @@ export class CanCreateRelationshipUseCase extends UseCase { const canCreateRelationshipResponse = ( await services2.transport.relationships.canCreateRelationship({ - templateId: templateId, - creationContent: emptyRelationshipCreationContent + templateId: templateId }) ).value; @@ -167,8 +166,7 @@ describe("Can Create / Create Relationship", () => { const canCreateRelationshipResponse = ( await services2.transport.relationships.canCreateRelationship({ - templateId: templateId, - creationContent: emptyRelationshipCreationContent + templateId: templateId }) ).value; @@ -219,8 +217,7 @@ describe("Can Create / Create Relationship", () => { const canCreateRelationshipResponse = ( await services2.transport.relationships.canCreateRelationship({ - templateId: templateId, - creationContent: emptyRelationshipCreationContent + templateId: templateId }) ).value; @@ -977,8 +974,7 @@ describe("RelationshipDecomposition", () => { const canCreateRelationshipResponse = ( await services1.transport.relationships.canCreateRelationship({ - templateId: templateId, - creationContent: emptyRelationshipCreationContent + templateId: templateId }) ).value;