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)