From 7c655e4e332ba5c5cfad6a29238682a0cf078f69 Mon Sep 17 00:00:00 2001 From: nttdata-rtorsoli <riccardo.torsoli@emeal.nttdata.com> Date: Tue, 21 Nov 2023 15:11:40 +0100 Subject: [PATCH 1/3] PIN-4220 Resolved PR issues --- .../tenantprocess/api/impl/TenantApiServiceImpl.scala | 4 ++-- src/test/resources/authz.json | 10 ++-------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiServiceImpl.scala b/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiServiceImpl.scala index f6d085b..15c6c0f 100644 --- a/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiServiceImpl.scala +++ b/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiServiceImpl.scala @@ -852,7 +852,7 @@ final case class TenantApiServiceImpl( override def addTenantMail(tenantId: String, mailSeed: MailSeed)(implicit contexts: Seq[(String, String)], toEntityMarshallerProblem: ToEntityMarshaller[Problem] - ): Route = authorize(ADMIN_ROLE, API_ROLE, SECURITY_ROLE, M2M_ROLE, INTERNAL_ROLE) { + ): Route = authorize(ADMIN_ROLE, API_ROLE) { val operationLabel = s"Adding mail of kind ${mailSeed.kind} to Tenant $tenantId" logger.info(operationLabel) @@ -871,7 +871,7 @@ final case class TenantApiServiceImpl( override def deleteTenantMail(tenantId: String, mailId: String)(implicit contexts: Seq[(String, String)], toEntityMarshallerProblem: ToEntityMarshaller[Problem] - ): Route = authorize(ADMIN_ROLE, API_ROLE, SECURITY_ROLE, M2M_ROLE, INTERNAL_ROLE) { + ): Route = authorize(ADMIN_ROLE, API_ROLE) { val operationLabel = s"Deleting mail $mailId to Tenant $tenantId" logger.info(operationLabel) diff --git a/src/test/resources/authz.json b/src/test/resources/authz.json index a8521e5..7bd98a7 100644 --- a/src/test/resources/authz.json +++ b/src/test/resources/authz.json @@ -153,10 +153,7 @@ "verb": "POST", "roles": [ "admin", - "security", - "api", - "m2m", - "internal" + "api" ] }, { @@ -164,10 +161,7 @@ "verb": "DELETE", "roles": [ "admin", - "security", - "api", - "m2m", - "internal" + "api" ] } ] From 794e1c7bfe22610e58e5c132b40c639c1482212b Mon Sep 17 00:00:00 2001 From: nttdata-rtorsoli <riccardo.torsoli@emeal.nttdata.com> Date: Fri, 24 Nov 2023 14:25:00 +0100 Subject: [PATCH 2/3] PIN-4084 Resolved PR issue --- project/Versions.scala | 2 +- src/main/resources/interface-specification.yml | 11 ++++++++++- .../api/impl/TenantApiMarshallerImpl.scala | 2 ++ .../api/impl/TenantApiServiceImpl.scala | 12 ++++++------ .../interop/tenantprocess/api/impl/package.scala | 9 +++++---- .../tenantprocess/provider/TenantCreationSpec.scala | 5 ----- 6 files changed, 24 insertions(+), 17 deletions(-) diff --git a/project/Versions.scala b/project/Versions.scala index 1360ccc..f4a42b0 100644 --- a/project/Versions.scala +++ b/project/Versions.scala @@ -23,6 +23,6 @@ object PagopaVersions { lazy val agreementProcessVersion = "1.0.x-SNAPSHOT" lazy val agreementManagementVersion = "1.0.x-SNAPSHOT" lazy val catalogManagementVersion = "1.0.x-SNAPSHOT" - lazy val tenantManagementVersion = "1.0.x-SNAPSHOT" + lazy val tenantManagementVersion = "PIN-4083-SNAPSHOT"//"1.0.x-SNAPSHOT" lazy val commonsVersion = "1.0.x-SNAPSHOT" } diff --git a/src/main/resources/interface-specification.yml b/src/main/resources/interface-specification.yml index 43e3671..98778fa 100644 --- a/src/main/resources/interface-specification.yml +++ b/src/main/resources/interface-specification.yml @@ -221,7 +221,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Tenant' + $ref: '#/components/schemas/CompactTenant' '409': description: Selfcare Id is already assigned and is different from the request content: @@ -817,6 +817,15 @@ components: maxLength: 64 required: - code + CompactTenant: + description: Tenant Compact model + type: object + properties: + id: + type: string + format: uuid + required: + - id Tenant: description: Tenant model type: object diff --git a/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiMarshallerImpl.scala b/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiMarshallerImpl.scala index 9082004..5bf0c20 100644 --- a/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiMarshallerImpl.scala +++ b/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiMarshallerImpl.scala @@ -39,4 +39,6 @@ object TenantApiMarshallerImpl extends TenantApiMarshaller with SprayJsonSupport override implicit def fromEntityUnmarshallerMailSeed: FromEntityUnmarshaller[MailSeed] = sprayJsonUnmarshaller[MailSeed] + override implicit def toEntityMarshallerCompactTenant: ToEntityMarshaller[CompactTenant] = + sprayJsonMarshaller[CompactTenant] } diff --git a/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiServiceImpl.scala b/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiServiceImpl.scala index dee7ac7..3be7dc5 100644 --- a/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiServiceImpl.scala +++ b/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiServiceImpl.scala @@ -38,6 +38,7 @@ import it.pagopa.interop.tenantprocess.api.adapters.TenantManagementAdapters._ import it.pagopa.interop.tenantprocess.error.ResponseHandlers._ import it.pagopa.interop.tenantprocess.error.TenantProcessErrors._ import it.pagopa.interop.tenantprocess.model._ +import it.pagopa.interop.tenantprocess.model.{CompactTenant => TenantUUID} import it.pagopa.interop.tenantprocess.service._ import it.pagopa.interop.tenantmanagement.model.tenant.PersistentExternalId @@ -207,8 +208,8 @@ final case class TenantApiServiceImpl( override def selfcareUpsertTenant(seed: SelfcareTenantSeed)(implicit contexts: Seq[(String, String)], - toEntityMarshallerProblem: ToEntityMarshaller[Problem], - toEntityMarshallerTenant: ToEntityMarshaller[Tenant] + toEntityMarshallerTenant: ToEntityMarshaller[TenantUUID], + toEntityMarshallerProblem: ToEntityMarshaller[Problem] ): Route = authorize(ADMIN_ROLE, API_ROLE, SECURITY_ROLE, INTERNAL_ROLE) { val operationLabel = s"Creating tenant with external id ${seed.externalId} via SelfCare request" logger.info(operationLabel) @@ -229,7 +230,7 @@ final case class TenantApiServiceImpl( tenant.selfcareId.fold(updateTenant())(verifyConflict) } - val result: Future[Tenant] = for { + val result: Future[TenantUUID] = for { existingTenant <- findTenant(seed.externalId) _ <- existingTenant.traverse(t => assertResourceAllowed(t.id)) tenant <- existingTenant @@ -237,11 +238,10 @@ final case class TenantApiServiceImpl( tenantKind <- getTenantKindLoadingCertifiedAttributes(tenant.attributes, tenant.externalId) _ <- updateSelfcareId(tenant, tenantKind) _ <- tenantManagementService.addTenantMail(tenant.id, seed.digitalAddress.toDependency) - tenant <- tenantManagementService.getTenantById(tenant.id) - } yield tenant.toApi + } yield TenantUUID(tenant.id) onComplete(result) { - selfcareUpsertTenantResponse[Tenant](operationLabel)(selfcareUpsertTenant200) + selfcareUpsertTenantResponse[TenantUUID](operationLabel)(selfcareUpsertTenant200) } } diff --git a/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/package.scala b/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/package.scala index 3529408..c6899e2 100644 --- a/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/package.scala +++ b/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/package.scala @@ -42,10 +42,11 @@ package object impl extends SprayJsonSupport with DefaultJsonProtocol { implicit def tenantVerifierFormat: RootJsonFormat[TenantVerifier] = jsonFormat4(TenantVerifier) implicit def tenantRevokerFormat: RootJsonFormat[TenantRevoker] = jsonFormat5(TenantRevoker) - implicit def tenantFormat: RootJsonFormat[Tenant] = jsonFormat11(Tenant) - implicit def tenantsFormat: RootJsonFormat[Tenants] = jsonFormat2(Tenants) - implicit def problemErrorFormat: RootJsonFormat[ProblemError] = jsonFormat2(ProblemError) - implicit def problemFormat: RootJsonFormat[Problem] = jsonFormat6(Problem) + implicit def compactTenantFormat: RootJsonFormat[CompactTenant] = jsonFormat1(CompactTenant) + implicit def tenantFormat: RootJsonFormat[Tenant] = jsonFormat11(Tenant) + implicit def tenantsFormat: RootJsonFormat[Tenants] = jsonFormat2(Tenants) + implicit def problemErrorFormat: RootJsonFormat[ProblemError] = jsonFormat2(ProblemError) + implicit def problemFormat: RootJsonFormat[Problem] = jsonFormat6(Problem) final val entityMarshallerProblem: ToEntityMarshaller[Problem] = sprayJsonMarshaller[Problem] diff --git a/src/test/scala/it/pagopa/interop/tenantprocess/provider/TenantCreationSpec.scala b/src/test/scala/it/pagopa/interop/tenantprocess/provider/TenantCreationSpec.scala index 3263d4d..1794594 100644 --- a/src/test/scala/it/pagopa/interop/tenantprocess/provider/TenantCreationSpec.scala +++ b/src/test/scala/it/pagopa/interop/tenantprocess/provider/TenantCreationSpec.scala @@ -912,7 +912,6 @@ class TenantCreationSpec extends AnyWordSpecLike with SpecHelper with ScalatestR mockCreateTenant(expectedTenantSeed, tenant) mockUpdateTenant(tenantId, expectedTenantUpdate) mockAddTenantMail(tenantId, dependencyMailSeed) - mockGetTenantById(tenantId, persistentTenant) Get() ~> tenantService.selfcareUpsertTenant(seed) ~> check { assert(status == StatusCodes.OK) @@ -946,7 +945,6 @@ class TenantCreationSpec extends AnyWordSpecLike with SpecHelper with ScalatestR mockCreateTenant(expectedTenantSeed, tenant) mockUpdateTenant(tenantId, expectedTenantUpdate) mockAddTenantMail(tenantId, dependencyMailSeed) - mockGetTenantById(tenantId, persistentTenant) Get() ~> tenantService.selfcareUpsertTenant(seed) ~> check { assert(status == StatusCodes.OK) @@ -976,7 +974,6 @@ class TenantCreationSpec extends AnyWordSpecLike with SpecHelper with ScalatestR mockGetTenantByExternalId(PersistentExternalId(seed.externalId.origin, seed.externalId.value), tenant) mockUpdateTenant(tenantId, expectedTenantUpdate) mockAddTenantMail(tenantId, dependencyMailSeed) - mockGetTenantById(tenantId, persistentTenant) Get() ~> tenantService.selfcareUpsertTenant(seed) ~> check { assert(status == StatusCodes.OK) @@ -1000,7 +997,6 @@ class TenantCreationSpec extends AnyWordSpecLike with SpecHelper with ScalatestR mockGetTenantByExternalId(PersistentExternalId(seed.externalId.origin, seed.externalId.value), tenant) mockAddTenantMail(tenantId, dependencyMailSeed) - mockGetTenantById(tenantId, tenant) Get() ~> tenantService.selfcareUpsertTenant(seed) ~> check { assert(status == StatusCodes.OK) @@ -1074,7 +1070,6 @@ class TenantCreationSpec extends AnyWordSpecLike with SpecHelper with ScalatestR mockGetTenantByExternalId(PersistentExternalId(seed.externalId.origin, seed.externalId.value), tenant) mockUpdateTenant(tenantId, expectedTenantUpdate) mockAddTenantMail(tenantId, dependencyMailSeed) - mockGetTenantById(tenantId, tenant) Get() ~> tenantService.selfcareUpsertTenant(seed) ~> check { assert(status == StatusCodes.OK) From 5d4a12556b76b2576a6fd286919bc0c7fcb7716f Mon Sep 17 00:00:00 2001 From: nttdata-rtorsoli <riccardo.torsoli@emeal.nttdata.com> Date: Fri, 24 Nov 2023 15:19:30 +0100 Subject: [PATCH 3/3] PIN-4084 Resolved PR issues --- src/main/resources/interface-specification.yml | 5 ++++- .../tenantprocess/api/impl/TenantApiServiceImpl.scala | 2 +- .../it/pagopa/interop/tenantprocess/api/impl/package.scala | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/resources/interface-specification.yml b/src/main/resources/interface-specification.yml index 98778fa..a920616 100644 --- a/src/main/resources/interface-specification.yml +++ b/src/main/resources/interface-specification.yml @@ -824,8 +824,11 @@ components: id: type: string format: uuid + externalId: + $ref: '#/components/schemas/ExternalId' required: - - id + - id + - externalId Tenant: description: Tenant model type: object diff --git a/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiServiceImpl.scala b/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiServiceImpl.scala index 3be7dc5..1500558 100644 --- a/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiServiceImpl.scala +++ b/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/TenantApiServiceImpl.scala @@ -238,7 +238,7 @@ final case class TenantApiServiceImpl( tenantKind <- getTenantKindLoadingCertifiedAttributes(tenant.attributes, tenant.externalId) _ <- updateSelfcareId(tenant, tenantKind) _ <- tenantManagementService.addTenantMail(tenant.id, seed.digitalAddress.toDependency) - } yield TenantUUID(tenant.id) + } yield TenantUUID(tenant.id, tenant.externalId.toApi) onComplete(result) { selfcareUpsertTenantResponse[TenantUUID](operationLabel)(selfcareUpsertTenant200) diff --git a/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/package.scala b/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/package.scala index c6899e2..50b4549 100644 --- a/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/package.scala +++ b/src/main/scala/it/pagopa/interop/tenantprocess/api/impl/package.scala @@ -42,7 +42,7 @@ package object impl extends SprayJsonSupport with DefaultJsonProtocol { implicit def tenantVerifierFormat: RootJsonFormat[TenantVerifier] = jsonFormat4(TenantVerifier) implicit def tenantRevokerFormat: RootJsonFormat[TenantRevoker] = jsonFormat5(TenantRevoker) - implicit def compactTenantFormat: RootJsonFormat[CompactTenant] = jsonFormat1(CompactTenant) + implicit def compactTenantFormat: RootJsonFormat[CompactTenant] = jsonFormat2(CompactTenant) implicit def tenantFormat: RootJsonFormat[Tenant] = jsonFormat11(Tenant) implicit def tenantsFormat: RootJsonFormat[Tenants] = jsonFormat2(Tenants) implicit def problemErrorFormat: RootJsonFormat[ProblemError] = jsonFormat2(ProblemError)