From 158a83f7fa8a85d1e0d5933dbce815f6971b3f90 Mon Sep 17 00:00:00 2001 From: rschneider <97682836+rainer-exxcellent@users.noreply.github.com> Date: Tue, 5 Sep 2023 07:54:40 +0200 Subject: [PATCH] feat(generic bpm): #384 Gate API: Create input endpoints for generic business partners - Comments from the review incorporate --- .../openapidescription/CommonDescription.kt | 3 +++ .../LegalEntityDescription.kt | 2 +- .../bpdm/gate/api/GateBusinessPartnerApi.kt | 14 +++++++------- .../api/model/BusinessPartnerIdentifierDto.kt | 2 +- .../gate/api/model/BusinessPartnerStateDto.kt | 8 ++++---- .../api/model/IBaseBusinessPartnerInputDto.kt | 19 +++++++++---------- .../request/BusinessPartnerInputRequest.kt | 2 +- .../request/LegalEntityGateInputRequest.kt | 2 +- .../request/LegalEntityGateOutputRequest.kt | 2 +- ...ponseDto.kt => BusinessPartnerInputDto.kt} | 2 +- .../model/response/LegalEntityGateInputDto.kt | 2 +- .../response/LegalEntityGateOutputResponse.kt | 2 +- .../controller/BusinessPartnerController.kt | 6 +++--- 13 files changed, 34 insertions(+), 32 deletions(-) rename bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/{BusinessPartnerInputResponseDto.kt => BusinessPartnerInputDto.kt} (97%) diff --git a/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/openapidescription/CommonDescription.kt b/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/openapidescription/CommonDescription.kt index 7983245a4..f47d4bb3c 100644 --- a/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/openapidescription/CommonDescription.kt +++ b/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/openapidescription/CommonDescription.kt @@ -29,4 +29,7 @@ object CommonDescription { const val score = "Relative quality score of the match. The higher the better." const val externalId = "The identifier which uniquely identifies (in the internal system landscape of the sharing member) the business partner." + + const val roles = "Roles this business partner takes in relation to the sharing member." + } \ No newline at end of file diff --git a/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/openapidescription/LegalEntityDescription.kt b/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/openapidescription/LegalEntityDescription.kt index 80723ed77..3f963d78c 100644 --- a/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/openapidescription/LegalEntityDescription.kt +++ b/bpdm-common/src/main/kotlin/org/eclipse/tractusx/bpdm/common/dto/openapidescription/LegalEntityDescription.kt @@ -52,5 +52,5 @@ object LegalEntityDescription { const val states = "The list of (temporary) states of the legal entity." const val classifications = "The list of classifications of the legal entity, such as a specific industry." const val relations = "Relations to other business partners." - const val roles = "Roles this business partner takes in relation to the sharing member." + } diff --git a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/GateBusinessPartnerApi.kt b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/GateBusinessPartnerApi.kt index e00b63895..c51801b67 100644 --- a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/GateBusinessPartnerApi.kt +++ b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/GateBusinessPartnerApi.kt @@ -27,7 +27,7 @@ import jakarta.validation.Valid import org.eclipse.tractusx.bpdm.common.dto.request.PaginationRequest import org.eclipse.tractusx.bpdm.common.dto.response.PageDto import org.eclipse.tractusx.bpdm.gate.api.model.request.BusinessPartnerInputRequest -import org.eclipse.tractusx.bpdm.gate.api.model.response.BusinessPartnerInputResponseDto +import org.eclipse.tractusx.bpdm.gate.api.model.response.BusinessPartnerInputDto import org.springdoc.core.annotations.ParameterObject import org.springframework.http.MediaType import org.springframework.web.bind.annotation.PostMapping @@ -45,8 +45,8 @@ interface GateBusinessPartnerApi { @Operation( summary = "Create or update business partner with given external ID", description = "Create or update generic business partner. " + - "Updates instead of creating a new business partner if an already existing external id is used. " + - "The same external id may not occur more than once in a single request. " + + "Updates instead of creating a new business partner if an already existing external ID is used. " + + "The same external ID may not occur more than once in a single request. " + "For a single request, the maximum number of business partners in the request is limited to \${bpdm.api.upsert-limit} entries." ) @ApiResponses( @@ -57,15 +57,15 @@ interface GateBusinessPartnerApi { ) @PutMapping("/input/business-partners") @PutExchange("/input/business-partners") - fun upsertBusinessPartnersInput(@RequestBody businessPartners: Collection): Collection + fun upsertBusinessPartnersInput(@RequestBody businessPartners: Collection): Collection @Operation( summary = "Search business partner by external ID. An empty external ID list returns a paginated list of all business partners.", - description = "Get page of business partners filtered by a collection of externalIds." + description = "Get page of business partners filtered by a collection of external IDs." ) @ApiResponses( value = [ - ApiResponse(responseCode = "200", description = "The requested page of busines partners"), + ApiResponse(responseCode = "200", description = "The requested page of business partners"), ApiResponse(responseCode = "400", description = "On malformed pagination request", content = [Content()]), ] ) @@ -74,6 +74,6 @@ interface GateBusinessPartnerApi { fun getBusinessPartnersInputByExternalIds( @ParameterObject @Valid paginationRequest: PaginationRequest, @RequestBody externalIds: Collection - ): PageDto + ): PageDto } \ No newline at end of file diff --git a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/BusinessPartnerIdentifierDto.kt b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/BusinessPartnerIdentifierDto.kt index 813fcf2f4..f28a3c4e6 100644 --- a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/BusinessPartnerIdentifierDto.kt +++ b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/BusinessPartnerIdentifierDto.kt @@ -25,7 +25,7 @@ import io.swagger.v3.oas.annotations.media.Schema data class BusinessPartnerIdentifierDto( @get:Schema(description = "Value of the identifier") - val value: String, + val value: String?, @get:Schema(description = "Technical key of the type to which this identifier belongs to") val type: String, diff --git a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/BusinessPartnerStateDto.kt b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/BusinessPartnerStateDto.kt index aa3e8ccb6..633d4ba6d 100644 --- a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/BusinessPartnerStateDto.kt +++ b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/BusinessPartnerStateDto.kt @@ -27,15 +27,15 @@ import java.time.LocalDateTime @Schema(description = LegalEntityStateDescription.header, requiredProperties = ["type"]) data class BusinessPartnerStateDto( - @get:Schema(description = "Exact, official denotation of the status") + @get:Schema(description = "Denotation of the status.") val description: String?, - @get:Schema(description = "Date since when the status is/was valid") + @get:Schema(description = "Date since when the status is/was valid.") val validFrom: LocalDateTime?, - @get:Schema(description = "Date until the status was valid, if applicable") + @get:Schema(description = "Date until the status was valid, if applicable.") val validTo: LocalDateTime?, - @get:Schema(description = "The type of this specified status") + @get:Schema(description = "The type of this specified status.") val type: BusinessStateType ) diff --git a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/IBaseBusinessPartnerInputDto.kt b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/IBaseBusinessPartnerInputDto.kt index 04e23fa12..bcb049b5e 100644 --- a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/IBaseBusinessPartnerInputDto.kt +++ b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/IBaseBusinessPartnerInputDto.kt @@ -22,12 +22,11 @@ package org.eclipse.tractusx.bpdm.gate.api.model import io.swagger.v3.oas.annotations.media.ArraySchema import io.swagger.v3.oas.annotations.media.Schema import org.eclipse.tractusx.bpdm.common.dto.ClassificationDto -import org.eclipse.tractusx.bpdm.common.dto.openapidescription.LegalEntityDescription - +import org.eclipse.tractusx.bpdm.common.dto.openapidescription.CommonDescription interface IBaseBusinessPartnerInputDto { - @get:Schema(description = "ID the record has in the external system where the record originates from") + @get:Schema(description = CommonDescription.externalId) val externalId: String @get:Schema(description = "") @@ -36,25 +35,25 @@ interface IBaseBusinessPartnerInputDto { @get:Schema(description = "Abbreviated name or shorthand") val shortName: String? - @get:ArraySchema(arraySchema = Schema(description = LegalEntityDescription.identifiers)) + @get:ArraySchema(arraySchema = Schema(description = "The list of identifiers of the business partner.")) val identifiers: Collection - @get:Schema(description = "Technical key of the legal form") + @get:Schema(description = "Technical key of the legal form.") val legalForm: String? - @get:ArraySchema(arraySchema = Schema(description = LegalEntityDescription.states)) + @get:ArraySchema(arraySchema = Schema(description = "The list of (temporary) states of the business partner.")) val states: Collection - @get:ArraySchema(arraySchema = Schema(description = LegalEntityDescription.classifications)) + @get:ArraySchema(arraySchema = Schema(description = "The list of classifications of the legal entity, such as a specific industry.")) val classifications: Collection - @get:Schema(description = "Which roles this business partner takes in relation to the sharing member") + @get:ArraySchema(arraySchema = Schema(description = CommonDescription.roles)) val roles: Collection - @get:Schema(description = "") + @get:Schema(name = "isOwner", description = "True if the sharing member declares itself as the owner of the business partner.") val isOwner: Boolean - @get:Schema(description = "Address of the official seat of this legal entity") + @get:Schema(description = "Address of the official seat of this business partner.") val postalAddress: BusinessPartnerPostalAddressDto diff --git a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/request/BusinessPartnerInputRequest.kt b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/request/BusinessPartnerInputRequest.kt index 7773e6038..ffce80258 100644 --- a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/request/BusinessPartnerInputRequest.kt +++ b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/request/BusinessPartnerInputRequest.kt @@ -24,7 +24,7 @@ import org.eclipse.tractusx.bpdm.common.dto.ClassificationDto import org.eclipse.tractusx.bpdm.gate.api.model.* -@Schema(name = "BusinessPartnerInputDto", description = "Generic business partner with external id", requiredProperties = ["externalId", "postalAddress"]) +@Schema(description = "Generic business partner with external id", requiredProperties = ["externalId", "postalAddress"]) data class BusinessPartnerInputRequest( override val externalId: String, override val nameParts: List = emptyList(), diff --git a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/request/LegalEntityGateInputRequest.kt b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/request/LegalEntityGateInputRequest.kt index af6a1d4ba..1fb152a48 100644 --- a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/request/LegalEntityGateInputRequest.kt +++ b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/request/LegalEntityGateInputRequest.kt @@ -40,7 +40,7 @@ data class LegalEntityGateInputRequest( @field:JsonUnwrapped val legalEntity: LegalEntityDto, - @get:ArraySchema(arraySchema = Schema(description = LegalEntityDescription.roles)) + @get:ArraySchema(arraySchema = Schema(description = CommonDescription.roles)) val roles: Collection = emptyList(), // TODO OpenAPI description for complex field does not work!! diff --git a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/request/LegalEntityGateOutputRequest.kt b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/request/LegalEntityGateOutputRequest.kt index 01fd844eb..69fdb4804 100644 --- a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/request/LegalEntityGateOutputRequest.kt +++ b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/request/LegalEntityGateOutputRequest.kt @@ -40,7 +40,7 @@ data class LegalEntityGateOutputRequest( @field:JsonUnwrapped val legalEntity: LegalEntityDto, - @get:ArraySchema(arraySchema = Schema(description = LegalEntityDescription.roles)) + @get:ArraySchema(arraySchema = Schema(description = CommonDescription.roles)) val roles: Collection = emptyList(), // TODO OpenAPI description for complex field does not work!! diff --git a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/BusinessPartnerInputResponseDto.kt b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/BusinessPartnerInputDto.kt similarity index 97% rename from bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/BusinessPartnerInputResponseDto.kt rename to bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/BusinessPartnerInputDto.kt index 02636a631..c61959cc8 100644 --- a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/BusinessPartnerInputResponseDto.kt +++ b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/BusinessPartnerInputDto.kt @@ -27,7 +27,7 @@ import java.time.Instant @Schema(description = "Generic business partner with external id", requiredProperties = ["externalId", "postalAddress"]) -data class BusinessPartnerInputResponseDto( +data class BusinessPartnerInputDto( override val externalId: String, override val nameParts: List = emptyList(), override val shortName: String?, diff --git a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/LegalEntityGateInputDto.kt b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/LegalEntityGateInputDto.kt index 619bc87d4..0fab63791 100644 --- a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/LegalEntityGateInputDto.kt +++ b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/LegalEntityGateInputDto.kt @@ -40,7 +40,7 @@ data class LegalEntityGateInputDto( @field:JsonUnwrapped val legalEntity: LegalEntityDto, - @get:ArraySchema(arraySchema = Schema(description = LegalEntityDescription.roles)) + @get:ArraySchema(arraySchema = Schema(description = CommonDescription.roles)) val roles: Collection = emptyList(), // TODO OpenAPI description for complex field does not work!! diff --git a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/LegalEntityGateOutputResponse.kt b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/LegalEntityGateOutputResponse.kt index 516875136..01a6d7e32 100644 --- a/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/LegalEntityGateOutputResponse.kt +++ b/bpdm-gate-api/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/api/model/response/LegalEntityGateOutputResponse.kt @@ -39,7 +39,7 @@ data class LegalEntityGateOutputResponse( @field:JsonUnwrapped val legalEntity: LegalEntityDto, - @get:ArraySchema(arraySchema = Schema(description = LegalEntityDescription.roles)) + @get:ArraySchema(arraySchema = Schema(description = CommonDescription.roles)) val roles: Collection = emptyList(), // TODO OpenAPI description for complex field does not work!! diff --git a/bpdm-gate/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/controller/BusinessPartnerController.kt b/bpdm-gate/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/controller/BusinessPartnerController.kt index 07ec2c102..ba3cbb89c 100644 --- a/bpdm-gate/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/controller/BusinessPartnerController.kt +++ b/bpdm-gate/src/main/kotlin/org/eclipse/tractusx/bpdm/gate/controller/BusinessPartnerController.kt @@ -23,20 +23,20 @@ import org.eclipse.tractusx.bpdm.common.dto.request.PaginationRequest import org.eclipse.tractusx.bpdm.common.dto.response.PageDto import org.eclipse.tractusx.bpdm.gate.api.GateBusinessPartnerApi import org.eclipse.tractusx.bpdm.gate.api.model.request.BusinessPartnerInputRequest -import org.eclipse.tractusx.bpdm.gate.api.model.response.BusinessPartnerInputResponseDto +import org.eclipse.tractusx.bpdm.gate.api.model.response.BusinessPartnerInputDto import org.springframework.web.bind.annotation.RestController @RestController class BusinessPartnerController() : GateBusinessPartnerApi { - override fun upsertBusinessPartnersInput(businessPartners: Collection): Collection { + override fun upsertBusinessPartnersInput(businessPartners: Collection): Collection { TODO("Not yet implemented") } override fun getBusinessPartnersInputByExternalIds( paginationRequest: PaginationRequest, externalIds: Collection - ): PageDto { + ): PageDto { TODO("Not yet implemented") } } \ No newline at end of file