From 01b4a39db7adc244a78eeef66cd6a26431558d15 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] 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 f9424c3..7d202ab 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 404c024..affad54 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]             = jsonFormat12(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] = jsonFormat2(CompactTenant)
+  implicit def tenantFormat: RootJsonFormat[Tenant]               = jsonFormat12(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 ff61e65..a9b624d 100644
--- a/src/test/scala/it/pagopa/interop/tenantprocess/provider/TenantCreationSpec.scala
+++ b/src/test/scala/it/pagopa/interop/tenantprocess/provider/TenantCreationSpec.scala
@@ -913,7 +913,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)
@@ -948,7 +947,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)
@@ -978,7 +976,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)
@@ -1002,7 +999,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)
@@ -1076,7 +1072,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)