From d2e1e3072056c0b8ff72710dceda81a8bb9c1d7c Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Mon, 8 Jul 2024 16:36:04 +0200 Subject: [PATCH 01/29] [SELC-5168] feat : Migrazione su monorepo institution --- apps/institution-ms | 1 + apps/pom.xml | 11 ++ .../institution-ms/.terraform.lock.hcl | 44 ++++++ .../institution-ms/env/dev-pnpg/backend.ini | 1 + .../env/dev-pnpg/backend.tfvars | 4 + .../env/dev-pnpg/terraform.tfvars | 137 +++++++++++++++++ .../institution-ms/env/dev/backend.ini | 1 + .../institution-ms/env/dev/backend.tfvars | 4 + .../institution-ms/env/dev/terraform.tfvars | 143 ++++++++++++++++++ .../institution-ms/env/prod-pnpg/backend.ini | 1 + .../env/prod-pnpg/backend.tfvars | 4 + .../env/prod-pnpg/terraform.tfvars | 137 +++++++++++++++++ .../institution-ms/env/prod/backend.ini | 1 + .../institution-ms/env/prod/backend.tfvars | 4 + .../institution-ms/env/prod/terraform.tfvars | 141 +++++++++++++++++ .../institution-ms/env/uat-pnpg/backend.ini | 1 + .../env/uat-pnpg/backend.tfvars | 4 + .../env/uat-pnpg/terraform.tfvars | 129 ++++++++++++++++ .../institution-ms/env/uat/backend.ini | 1 + .../institution-ms/env/uat/backend.tfvars | 4 + .../institution-ms/env/uat/terraform.tfvars | 132 ++++++++++++++++ infra/container_apps/institution-ms/locals.tf | 7 + infra/container_apps/institution-ms/main.tf | 28 ++++ .../institution-ms/terraform.sh | 69 +++++++++ .../institution-ms/variables.tf | 75 +++++++++ 25 files changed, 1084 insertions(+) create mode 160000 apps/institution-ms create mode 100644 infra/container_apps/institution-ms/.terraform.lock.hcl create mode 100644 infra/container_apps/institution-ms/env/dev-pnpg/backend.ini create mode 100644 infra/container_apps/institution-ms/env/dev-pnpg/backend.tfvars create mode 100644 infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars create mode 100644 infra/container_apps/institution-ms/env/dev/backend.ini create mode 100644 infra/container_apps/institution-ms/env/dev/backend.tfvars create mode 100644 infra/container_apps/institution-ms/env/dev/terraform.tfvars create mode 100644 infra/container_apps/institution-ms/env/prod-pnpg/backend.ini create mode 100644 infra/container_apps/institution-ms/env/prod-pnpg/backend.tfvars create mode 100644 infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars create mode 100644 infra/container_apps/institution-ms/env/prod/backend.ini create mode 100644 infra/container_apps/institution-ms/env/prod/backend.tfvars create mode 100644 infra/container_apps/institution-ms/env/prod/terraform.tfvars create mode 100644 infra/container_apps/institution-ms/env/uat-pnpg/backend.ini create mode 100644 infra/container_apps/institution-ms/env/uat-pnpg/backend.tfvars create mode 100644 infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars create mode 100644 infra/container_apps/institution-ms/env/uat/backend.ini create mode 100644 infra/container_apps/institution-ms/env/uat/backend.tfvars create mode 100644 infra/container_apps/institution-ms/env/uat/terraform.tfvars create mode 100644 infra/container_apps/institution-ms/locals.tf create mode 100644 infra/container_apps/institution-ms/main.tf create mode 100644 infra/container_apps/institution-ms/terraform.sh create mode 100644 infra/container_apps/institution-ms/variables.tf diff --git a/apps/institution-ms b/apps/institution-ms new file mode 160000 index 0000000..bd592f5 --- /dev/null +++ b/apps/institution-ms @@ -0,0 +1 @@ +Subproject commit bd592f54e95fb052f64c3930e5efff5595c5f693 diff --git a/apps/pom.xml b/apps/pom.xml index 8df3506..e522046 100644 --- a/apps/pom.xml +++ b/apps/pom.xml @@ -27,6 +27,17 @@ institution-send-mail-scheduler + + selc-ms-core + + + selc-ms-core/pom.xml + + + + selc-ms-core + + diff --git a/infra/container_apps/institution-ms/.terraform.lock.hcl b/infra/container_apps/institution-ms/.terraform.lock.hcl new file mode 100644 index 0000000..dd904d6 --- /dev/null +++ b/infra/container_apps/institution-ms/.terraform.lock.hcl @@ -0,0 +1,44 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/azure/azapi" { + version = "1.9.0" + constraints = "~> 1.9.0" + hashes = [ + "h1:Ow1rr5fYBGSkplH/kcXeWz9y2wA81BnhZ7vTBzJfAAg=", + "h1:shpEoqcAbf+p6AvspiYO1YrX//8l1LV/owEcQpujWHw=", + "zh:349569471fbf387feaaf8b88da1690669e201147c342f905e5eb03df42b3cf87", + "zh:54346d5fb78cbad3eb7cfd96e1dd7ce4f78666cabaaccfec6ee9437476330018", + "zh:64b799da915ea3a9a58ac7a926c6a31c59fd0d911687804d8e815eda88c5580b", + "zh:9336ed9e112555e0fda8af6be9ba21478e30117d79ba662233311d9560d2b7c6", + "zh:a8aace9897b28ea0b2dbd7a3be3df033e158af40412c9c7670be0956f216ed7e", + "zh:ab23df7de700d9e785009a4ca9ceb38ae1ab894a13f5788847f15d018556f415", + "zh:b4f13f0b13560a67d427c71c85246f8920f98987120341830071df4535842053", + "zh:e58377bf36d8a14d28178a002657865ee17446182dac03525fd43435e41a1b5c", + "zh:ea5db4acc6413fd0fe6b35981e58cdc9850f5f3118031cc3d2581de511aee6aa", + "zh:f0b32c06c6bd4e4af2c02a62be07b947766aeeb09289a03f21aba16c2fd3c60f", + "zh:f1518e766a90c257d7eb36d360dafaf311593a4a9352ff8db0bcfe0ed8cf45ae", + "zh:fa89e84cff0776b5b61ff27049b1d8ed52040bd58c81c4628890d644a6fb2989", + ] +} + +provider "registry.terraform.io/hashicorp/azurerm" { + version = "3.91.0" + constraints = "<= 3.91.0" + hashes = [ + "h1:8hMFuaTQsZIV69D0J/W+6hSlhRRDzYSpC0Eg9yWYF0o=", + "h1:Iv9CR+7491iozaK2AkCSAK2u4a2rPyJDQpyHijClj6Y=", + "zh:13928b71b1235783f3f877a799e28fb91e50512b051eb8ccb370500fc140cf3f", + "zh:3264341657e9ff3963d69b0fa088f64665349e2a29b2f3aeb4deee6d9d7584b7", + "zh:467a2ddd2eee26353db65e949bfbe533481ca0fb53c152724380b63a308f11b9", + "zh:6133e57087167b163180df3a77fab0c63b3e11609d139d39db8d3be3d6ec7ccd", + "zh:6df24730bc9247647ffb44832c3c64e45ab731dd83a3592d33d28235a453235a", + "zh:775aae148223a4a86e2dd25533a95a5fea4817085b6c5e643a7192453270cd68", + "zh:89d51148c7c123685d3e2f7e291888a3af009656e5c0ad66235a7c686ecb19d2", + "zh:9c89552051226eeb7c0fc66ad5aa57d1d0f5acc1d56afad06b6596707ae6c85e", + "zh:c4f3bc269837fa3b6ad803de2c7d1125dd791d78a521dcad2e7a63b905a13a53", + "zh:e48f05de1ffdcc998c5ff915570fb0557c7ac1d3af971dd76aff82e66d45bf06", + "zh:f1945716c7b9c23c25ca9fb4a68f27b6cfa25f5d235112c31f9412eba47f93c6", + "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + ] +} diff --git a/infra/container_apps/institution-ms/env/dev-pnpg/backend.ini b/infra/container_apps/institution-ms/env/dev-pnpg/backend.ini new file mode 100644 index 0000000..73ee9c6 --- /dev/null +++ b/infra/container_apps/institution-ms/env/dev-pnpg/backend.ini @@ -0,0 +1 @@ +subscription=DEV-SelfCare \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/dev-pnpg/backend.tfvars b/infra/container_apps/institution-ms/env/dev-pnpg/backend.tfvars new file mode 100644 index 0000000..84dd261 --- /dev/null +++ b/infra/container_apps/institution-ms/env/dev-pnpg/backend.tfvars @@ -0,0 +1,4 @@ +resource_group_name = "terraform-state-rg" +storage_account_name = "tfappdevselfcare" +container_name = "terraform-state" +key = "selfcare-pnpg-core.container_app.tfstate" \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars b/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars new file mode 100644 index 0000000..d7857b7 --- /dev/null +++ b/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars @@ -0,0 +1,137 @@ +is_pnpg = true +env_short = "d" + +tags = { + CreatedBy = "Terraform" + Environment = "Dev" + Owner = "SelfCare" + Source = "https://github.com/pagopa/selfcare-ms-core" + CostCenter = "TS310 - PAGAMENTI & SERVIZI" +} + +container_app = { + min_replicas = 0 + max_replicas = 1 + scale_rules = [ + { + custom = { + metadata = { + "desiredReplicas" = "1" + "start" = "0 8 * * MON-FRI" + "end" = "0 19 * * MON-FRI" + "timezone" = "Europe/Rome" + } + type = "cron" + } + name = "cron-scale-rule" + } + ] + cpu = 0.5 + memory = "1Gi" +} + +app_settings = [ + { + name = "DESTINATION_MAILS" + value = "pectest@pec.pagopa.it" + # //prod non presente + }, + { + name = "SELFCARE_URL" + value = "https://selfcare.pagopa.it" + }, + { + name = "MAIL_TEMPLATE_DELEGATION_NOTIFICATION_PATH" + value = "contracts/template/mail/delegation-notification/1.0.0.json" + }, + { + name = "MAIL_TEMPLATE_DELEGATION_USER_NOTIFICATION_PATH" + value = "contracts/template/mail/delegation-notification/user-1.0.0.json" + }, + { + name = "STORAGE_CONTAINER" + value = "$web" + }, + { + name = "STORAGE_ENDPOINT" + value = "core.windows.net" + }, + + { + name = "STORAGE_APPLICATION_ID" + value = "selcdweupnpgcheckoutsa" + }, + + { + name = "STORAGE_CREDENTIAL_ID" + value = "selcdweupnpgcheckoutsa" + }, + { + name = "STORAGE_TEMPLATE_URL" + value = "https://selcdweupnpgcheckoutsa.z6.web.core.windows.net" + }, + { + name = "APPLICATIONINSIGHTS_ROLE_NAME" + value = "ms-core" + }, + { + name = "JAVA_TOOL_OPTIONS" + value = "-javaagent:applicationinsights-agent.jar" + }, + { + name = "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL" + value = "OFF" + }, + { + name = "EXTERNAL_API_LOG_LEVEL" + value = "DEBUG" + }, + { + name = "SMTP_HOST" + value = "smtps.pec.aruba.it" + }, + { + name = "SMTP_PORT" + value = "465" + }, + { + name = "SMTP_SSL" + value = "true" + }, + { + name = "MS_NOTIFICATION_MANAGER_URL" + value = "http://selc-d-pnpg-notification-mngr-ca" + }, + { + name = "USERVICE_PARTY_REGISTRY_PROXY_URL" + value = "http://selc-d-pnpg-party-reg-proxy-ca" + }, + { + name = "USERVICE_USER_REGISTRY_URL" + value = "https://api.uat.pdv.pagopa.it/user-registry/v1" + }, + { + name = "SELFCARE_USER_URL" + value = "http://selc-d-pnpg-user-ms-ca" + }, + { + name = "MAIL_SENDER_ADDRESS" + value = "noreply@areariservata.pagopa.it" + } +] + +secrets_names = { + "STORAGE_APPLICATION_SECRET" = "contracts-storage-access-key" + "APPLICATIONINSIGHTS_CONNECTION_STRING" = "appinsights-connection-string" + "MONGODB_CONNECTION_URI" = "mongodb-connection-string" + "BLOB_STORAGE_CONN_STRING" = "blob-storage-contract-connection-string" + "STORAGE_CREDENTIAL_SECRET" = "contracts-storage-access-key" + "SMTP_USR" = "smtp-usr" + "SMTP_PSW" = "smtp-psw" + "ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL" = "party-test-institution-email" + "USER_REGISTRY_API_KEY" = "user-registry-api-key" + "JWT_TOKEN_PUBLIC_KEY" = "jwt-public-key" + "BLOB_STORAGE_PRODUCT_CONNECTION_STRING" = "blob-storage-product-connection-string" + "AWS_SES_ACCESS_KEY_ID" = "aws-ses-access-key-id" + "AWS_SES_SECRET_ACCESS_KEY" = "aws-ses-secret-access-key" +} \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/dev/backend.ini b/infra/container_apps/institution-ms/env/dev/backend.ini new file mode 100644 index 0000000..73ee9c6 --- /dev/null +++ b/infra/container_apps/institution-ms/env/dev/backend.ini @@ -0,0 +1 @@ +subscription=DEV-SelfCare \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/dev/backend.tfvars b/infra/container_apps/institution-ms/env/dev/backend.tfvars new file mode 100644 index 0000000..81eb577 --- /dev/null +++ b/infra/container_apps/institution-ms/env/dev/backend.tfvars @@ -0,0 +1,4 @@ +resource_group_name = "terraform-state-rg" +storage_account_name = "tfappdevselfcare" +container_name = "terraform-state" +key = "selfcare-core.container_app.tfstate" \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/dev/terraform.tfvars b/infra/container_apps/institution-ms/env/dev/terraform.tfvars new file mode 100644 index 0000000..a4471ba --- /dev/null +++ b/infra/container_apps/institution-ms/env/dev/terraform.tfvars @@ -0,0 +1,143 @@ +env_short = "d" +env = "dev" + +tags = { + CreatedBy = "Terraform" + Environment = "Dev" + Owner = "SelfCare" + Source = "https://github.com/pagopa/selfcare-ms-core" + CostCenter = "TS310 - PAGAMENTI & SERVIZI" +} + +container_app = { + min_replicas = 0 + max_replicas = 1 + scale_rules = [ + { + custom = { + metadata = { + "desiredReplicas" = "1" + "start" = "0 8 * * MON-FRI" + "end" = "0 19 * * MON-FRI" + "timezone" = "Europe/Rome" + } + type = "cron" + } + name = "cron-scale-rule" + } + ] + cpu = 0.5 + memory = "1Gi" +} + +app_settings = [ + { + name = "DESTINATION_MAILS" + value = "pectest@pec.pagopa.it" + # //prod non presente + }, + # { + # name = "ONBOARDING_SEND_EMAIL_TO_INSTITUTION" + # value = "true" //solo prod Selfcare + # }, + { + name = "SELFCARE_URL" + value = "https://selfcare.pagopa.it" + }, + { + name = "MAIL_TEMPLATE_DELEGATION_NOTIFICATION_PATH" + value = "contracts/template/mail/delegation-notification/1.0.0.json" + }, + { + name = "MAIL_TEMPLATE_DELEGATION_USER_NOTIFICATION_PATH" + value = "contracts/template/mail/delegation-notification/user-1.0.0.json" + }, + { + name = "STORAGE_CONTAINER" + value = "selc-d-contracts-blob" + }, + { + name = "STORAGE_ENDPOINT" + value = "core.windows.net" + }, + + { + name = "STORAGE_APPLICATION_ID" + value = "selcdcontractsstorage" + }, + + { + name = "STORAGE_CREDENTIAL_ID" + value = "selcdcontractsstorage" + }, + { + name = "STORAGE_TEMPLATE_URL" + value = "https://selcdcheckoutsa.z6.web.core.windows.net" + }, + { + name = "APPLICATIONINSIGHTS_ROLE_NAME" + value = "ms-core" + }, + { + name = "JAVA_TOOL_OPTIONS" + value = "-javaagent:applicationinsights-agent.jar" + }, + { + name = "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL" + value = "OFF" + }, + { + name = "EXTERNAL_API_LOG_LEVEL" + value = "DEBUG" + # // prod Γ¨ β€œINFO" + }, + { + name = "SMTP_HOST" + value = "smtps.pec.aruba.it" + }, + + { + name = "SMTP_PORT" + value = "465" + }, + { + name = "SMTP_SSL" + value = "true" + }, + { + name = "MS_NOTIFICATION_MANAGER_URL" + value = "http://selc-d-notification-mngr-ca" + }, + { + name = "USERVICE_PARTY_REGISTRY_PROXY_URL" + value = "http://selc-d-party-reg-proxy-ca" + }, + { + name = "USERVICE_USER_REGISTRY_URL" + value = "https://api.uat.pdv.pagopa.it/user-registry/v1" + }, + { + name = "SELFCARE_USER_URL" + value = "http://selc-d-user-ms-ca" + }, + { + name = "MAIL_SENDER_ADDRESS" + value = "noreply@areariservata.pagopa.it" + } +] + +secrets_names = { + "STORAGE_APPLICATION_SECRET" = "contracts-storage-access-key" + "APPLICATIONINSIGHTS_CONNECTION_STRING" = "appinsights-connection-string" + "MONGODB_CONNECTION_URI" = "mongodb-connection-string" + "BLOB_STORAGE_CONN_STRING" = "blob-storage-contract-connection-string" + "STORAGE_CREDENTIAL_SECRET" = "contracts-storage-access-key" + "SMTP_USR" = "smtp-usr" + "SMTP_PSW" = "smtp-psw" + "ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL" = "party-test-institution-email" + "USER_REGISTRY_API_KEY" = "user-registry-api-key" + "JWT_TOKEN_PUBLIC_KEY" = "jwt-public-key" + "BLOB_STORAGE_PRODUCT_CONNECTION_STRING" = "blob-storage-product-connection-string" + "AWS_SES_ACCESS_KEY_ID" = "aws-ses-access-key-id" + "AWS_SES_SECRET_ACCESS_KEY" = "aws-ses-secret-access-key" +} diff --git a/infra/container_apps/institution-ms/env/prod-pnpg/backend.ini b/infra/container_apps/institution-ms/env/prod-pnpg/backend.ini new file mode 100644 index 0000000..0343b4a --- /dev/null +++ b/infra/container_apps/institution-ms/env/prod-pnpg/backend.ini @@ -0,0 +1 @@ +subscription=PROD-SelfCare \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/prod-pnpg/backend.tfvars b/infra/container_apps/institution-ms/env/prod-pnpg/backend.tfvars new file mode 100644 index 0000000..7bd7d61 --- /dev/null +++ b/infra/container_apps/institution-ms/env/prod-pnpg/backend.tfvars @@ -0,0 +1,4 @@ +resource_group_name = "terraform-state-rg" +storage_account_name = "tfappprodselfcare" +container_name = "terraform-state" +key = "selfcare-pnpg-core.container_app.tfstate" \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars b/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars new file mode 100644 index 0000000..b88bfa3 --- /dev/null +++ b/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars @@ -0,0 +1,137 @@ +is_pnpg = true +env_short = "p" + +tags = { + CreatedBy = "Terraform" + Environment = "Prod" + Owner = "SelfCare" + Source = "https://github.com/pagopa/selfcare-ms-core" + CostCenter = "TS310 - PAGAMENTI & SERVIZI" +} + +container_app = { + min_replicas = 1 + max_replicas = 5 + scale_rules = [ + { + custom = { + metadata = { + "desiredReplicas" = "3" + "start" = "0 8 * * MON-FRI" + "end" = "0 19 * * MON-FRI" + "timezone" = "Europe/Rome" + } + type = "cron" + } + name = "cron-scale-rule" + } + ] + cpu = 1.25 + memory = "2.5Gi" +} + +app_settings = [ + { + name = "SELFCARE_URL" + value = "https://selfcare.pagopa.it" + }, + { + name = "MAIL_TEMPLATE_DELEGATION_NOTIFICATION_PATH" + value = "contracts/template/mail/delegation-notification/1.0.0.json" + }, + { + name = "MAIL_TEMPLATE_DELEGATION_USER_NOTIFICATION_PATH" + value = "contracts/template/mail/delegation-notification/user-1.0.0.json" + }, + { + name = "STORAGE_CONTAINER" + value = "$web" + }, + { + name = "STORAGE_ENDPOINT" + value = "core.windows.net" + }, + + { + name = "STORAGE_APPLICATION_ID" + value = "selcpweupnpgcheckoutsa" + }, + + { + name = "STORAGE_CREDENTIAL_ID" + value = "selcpweupnpgcheckoutsa" + }, + { + name = "STORAGE_TEMPLATE_URL" + value = "https://selcpweupnpgcheckoutsa.z6.web.core.windows.net" + }, + { + name = "APPLICATIONINSIGHTS_ROLE_NAME" + value = "ms-core" + }, + { + name = "JAVA_TOOL_OPTIONS" + value = "-javaagent:applicationinsights-agent.jar" + }, + { + name = "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL" + value = "OFF" + }, + { + name = "EXTERNAL_API_LOG_LEVEL" + value = "INFO" + }, + { + name = "SMTP_HOST" + value = "smtps.pec.aruba.it" + }, + { + name = "SMTP_PORT" + value = "465" + }, + { + name = "SMTP_SSL" + value = "true" + }, + { + name = "MS_NOTIFICATION_MANAGER_URL" + value = "http://selc-p-pnpg-notification-mngr-ca" + }, + { + name = "USERVICE_PARTY_REGISTRY_PROXY_URL" + value = "http://selc-p-pnpg-party-reg-proxy-ca" + }, + { + name = "USERVICE_USER_REGISTRY_URL" + value = "https://api.pdv.pagopa.it/user-registry/v1" + }, + { + name = "SELFCARE_USER_URL" + value = "http://selc-p-pnpg-user-ms-ca" + }, + { + name = "PRODUCT_STORAGE_CONTAINER" + value = "selc-p-product" + }, + { + name = "MAIL_SENDER_ADDRESS" + value = "noreply@areariservata.pagopa.it" + } +] + + +secrets_names = { + "STORAGE_APPLICATION_SECRET" = "contracts-storage-access-key" + "APPLICATIONINSIGHTS_CONNECTION_STRING" = "appinsights-connection-string" + "MONGODB_CONNECTION_URI" = "mongodb-connection-string" + "BLOB_STORAGE_CONN_STRING" = "blob-storage-contract-connection-string" + "STORAGE_CREDENTIAL_SECRET" = "contracts-storage-access-key" + "SMTP_USR" = "smtp-usr" + "SMTP_PSW" = "smtp-psw" + "ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL" = "party-test-institution-email" + "USER_REGISTRY_API_KEY" = "user-registry-api-key" + "JWT_TOKEN_PUBLIC_KEY" = "jwt-public-key" + "BLOB_STORAGE_PRODUCT_CONNECTION_STRING" = "blob-storage-product-connection-string" + "AWS_SES_ACCESS_KEY_ID" = "aws-ses-access-key-id" + "AWS_SES_SECRET_ACCESS_KEY" = "aws-ses-secret-access-key" +} \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/prod/backend.ini b/infra/container_apps/institution-ms/env/prod/backend.ini new file mode 100644 index 0000000..0343b4a --- /dev/null +++ b/infra/container_apps/institution-ms/env/prod/backend.ini @@ -0,0 +1 @@ +subscription=PROD-SelfCare \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/prod/backend.tfvars b/infra/container_apps/institution-ms/env/prod/backend.tfvars new file mode 100644 index 0000000..bf44787 --- /dev/null +++ b/infra/container_apps/institution-ms/env/prod/backend.tfvars @@ -0,0 +1,4 @@ +resource_group_name = "terraform-state-rg" +storage_account_name = "tfappprodselfcare" +container_name = "terraform-state" +key = "selfcare-core.container_app.tfstate" diff --git a/infra/container_apps/institution-ms/env/prod/terraform.tfvars b/infra/container_apps/institution-ms/env/prod/terraform.tfvars new file mode 100644 index 0000000..5d75a28 --- /dev/null +++ b/infra/container_apps/institution-ms/env/prod/terraform.tfvars @@ -0,0 +1,141 @@ +env_short = "p" + +tags = { + CreatedBy = "Terraform" + Environment = "Prod" + Owner = "SelfCare" + Source = "https://github.com/pagopa/selfcare-ms-core" + CostCenter = "TS310 - PAGAMENTI & SERVIZI" +} + +container_app = { + min_replicas = 1 + max_replicas = 5 + scale_rules = [ + { + custom = { + metadata = { + "desiredReplicas" = "3" + "start" = "0 8 * * MON-FRI" + "end" = "0 19 * * MON-FRI" + "timezone" = "Europe/Rome" + } + type = "cron" + } + name = "cron-scale-rule" + } + ] + cpu = 1.25 + memory = "2.5Gi" +} + + +app_settings = [ + { + name = "ONBOARDING_SEND_EMAIL_TO_INSTITUTION" + value = "true" + }, + { + name = "SELFCARE_URL" + value = "https://selfcare.pagopa.it" + }, + { + name = "MAIL_TEMPLATE_DELEGATION_NOTIFICATION_PATH" + value = "contracts/template/mail/delegation-notification/1.0.0.json" + }, + { + name = "MAIL_TEMPLATE_DELEGATION_USER_NOTIFICATION_PATH" + value = "contracts/template/mail/delegation-notification/user-1.0.0.json" + }, + { + name = "STORAGE_CONTAINER" + value = "selc-p-contracts-blob" + }, + { + name = "STORAGE_ENDPOINT" + value = "core.windows.net" + }, + + { + name = "STORAGE_APPLICATION_ID" + value = "selcpcontractsstorage" + }, + + { + name = "STORAGE_CREDENTIAL_ID" + value = "selcpcontractsstorage" + }, + { + name = "STORAGE_TEMPLATE_URL" + value = "https://selcpcheckoutsa.z6.web.core.windows.net" + }, + { + name = "APPLICATIONINSIGHTS_ROLE_NAME" + value = "ms-core" + }, + { + name = "JAVA_TOOL_OPTIONS" + value = "-javaagent:applicationinsights-agent.jar" + }, + { + name = "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL" + value = "OFF" + }, + { + name = "EXTERNAL_API_LOG_LEVEL" + value = "INFO" + }, + { + name = "SMTP_HOST" + value = "smtps.pec.aruba.it" + }, + + { + name = "SMTP_PORT" + value = "465" + }, + { + name = "SMTP_SSL" + value = "true" + }, + { + name = "MS_NOTIFICATION_MANAGER_URL" + value = "http://selc-p-notification-mngr-ca" + }, + { + name = "USERVICE_PARTY_REGISTRY_PROXY_URL" + value = "http://selc-p-party-reg-proxy-ca" + }, + { + name = "USERVICE_USER_REGISTRY_URL" + value = "https://api.pdv.pagopa.it/user-registry/v1" + }, + { + name = "SELFCARE_USER_URL" + value = "http://selc-p-user-ms-ca" + }, + { + name = "PRODUCT_STORAGE_CONTAINER" + value = "selc-p-product" + }, + { + name = "MAIL_SENDER_ADDRESS" + value = "noreply@areariservata.pagopa.it" + } +] + +secrets_names = { + "STORAGE_APPLICATION_SECRET" = "contracts-storage-access-key" + "APPLICATIONINSIGHTS_CONNECTION_STRING" = "appinsights-connection-string" + "MONGODB_CONNECTION_URI" = "mongodb-connection-string" + "BLOB_STORAGE_CONN_STRING" = "blob-storage-contract-connection-string" + "STORAGE_CREDENTIAL_SECRET" = "contracts-storage-access-key" + "SMTP_USR" = "smtp-usr" + "SMTP_PSW" = "smtp-psw" + "ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL" = "party-test-institution-email" + "USER_REGISTRY_API_KEY" = "user-registry-api-key" + "JWT_TOKEN_PUBLIC_KEY" = "jwt-public-key" + "BLOB_STORAGE_PRODUCT_CONNECTION_STRING" = "blob-storage-product-connection-string" + "AWS_SES_ACCESS_KEY_ID" = "aws-ses-access-key-id" + "AWS_SES_SECRET_ACCESS_KEY" = "aws-ses-secret-access-key" +} \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/uat-pnpg/backend.ini b/infra/container_apps/institution-ms/env/uat-pnpg/backend.ini new file mode 100644 index 0000000..8cadfd6 --- /dev/null +++ b/infra/container_apps/institution-ms/env/uat-pnpg/backend.ini @@ -0,0 +1 @@ +subscription=UAT-SelfCare \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/uat-pnpg/backend.tfvars b/infra/container_apps/institution-ms/env/uat-pnpg/backend.tfvars new file mode 100644 index 0000000..dd5ce31 --- /dev/null +++ b/infra/container_apps/institution-ms/env/uat-pnpg/backend.tfvars @@ -0,0 +1,4 @@ +resource_group_name = "terraform-state-rg" +storage_account_name = "tfappuatselfcare" +container_name = "terraform-state" +key = "selfcare-pnpg-core.container_app.tfstate" \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars b/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars new file mode 100644 index 0000000..2426434 --- /dev/null +++ b/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars @@ -0,0 +1,129 @@ +env_short = "u" +is_pnpg = true +suffix_increment = "-001" +cae_name = "cae-001" + +tags = { + CreatedBy = "Terraform" + Environment = "Uat" + Owner = "SelfCare" + Source = "https://github.com/pagopa/selfcare-ms-core" + CostCenter = "TS310 - PAGAMENTI & SERVIZI" +} + +container_app = { + min_replicas = 1 + max_replicas = 2 + scale_rules = [] + cpu = 0.5 + memory = "1Gi" +} + +app_settings = [ + { + name = "DESTINATION_MAILS" + value = "pectest@pec.pagopa.it" + }, + { + name = "SELFCARE_URL" + value = "https://selfcare.pagopa.it" + }, + { + name = "MAIL_TEMPLATE_DELEGATION_NOTIFICATION_PATH" + value = "contracts/template/mail/delegation-notification/1.0.0.json" + }, + { + name = "MAIL_TEMPLATE_DELEGATION_USER_NOTIFICATION_PATH" + value = "contracts/template/mail/delegation-notification/user-1.0.0.json" + }, + { + name = "STORAGE_CONTAINER" + value = "$web" + }, + { + name = "STORAGE_ENDPOINT" + value = "core.windows.net" + }, + + { + name = "STORAGE_APPLICATION_ID" + value = "selcuweupnpgcheckoutsa" + }, + + { + name = "STORAGE_CREDENTIAL_ID" + value = "selcuweupnpgcheckoutsa" + }, + { + name = "STORAGE_TEMPLATE_URL" + value = "https://selcuweupnpgcheckoutsa.z6.web.core.windows.net" + }, + { + name = "APPLICATIONINSIGHTS_ROLE_NAME" + value = "ms-core" + }, + { + name = "JAVA_TOOL_OPTIONS" + value = "-javaagent:applicationinsights-agent.jar" + }, + { + name = "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL" + value = "OFF" + }, + { + name = "EXTERNAL_API_LOG_LEVEL" + value = "DEBUG" + }, + { + name = "SMTP_HOST" + value = "smtps.pec.aruba.it" + }, + { + name = "SMTP_PORT" + value = "465" + }, + { + name = "SMTP_SSL" + value = "true" + }, + { + name = "MS_NOTIFICATION_MANAGER_URL" + value = "http://selc-u-pnpg-notification-mngr-ca" + }, + { + name = "USERVICE_PARTY_REGISTRY_PROXY_URL" + value = "http://selc-u-pnpg-party-reg-proxy-ca" + }, + { + name = "USERVICE_USER_REGISTRY_URL" + value = "https://api.uat.pdv.pagopa.it/user-registry/v1" + }, + { + name = "SELFCARE_USER_URL" + value = "http://selc-u-pnpg-user-ms-ca" + }, + { + name = "PRODUCT_STORAGE_CONTAINER" + value = "selc-u-product" + }, + { + name = "MAIL_SENDER_ADDRESS" + value = "noreply@areariservata.pagopa.it" + } +] + +secrets_names = { + "STORAGE_APPLICATION_SECRET" = "contracts-storage-access-key" + "APPLICATIONINSIGHTS_CONNECTION_STRING" = "appinsights-connection-string" + "MONGODB_CONNECTION_URI" = "mongodb-connection-string" + "BLOB_STORAGE_CONN_STRING" = "blob-storage-contract-connection-string" + "STORAGE_CREDENTIAL_SECRET" = "contracts-storage-access-key" + "SMTP_USR" = "smtp-usr" + "SMTP_PSW" = "smtp-psw" + "ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL" = "party-test-institution-email" + "USER_REGISTRY_API_KEY" = "user-registry-api-key" + "JWT_TOKEN_PUBLIC_KEY" = "jwt-public-key" + "BLOB_STORAGE_PRODUCT_CONNECTION_STRING" = "blob-storage-product-connection-string" + "AWS_SES_ACCESS_KEY_ID" = "aws-ses-access-key-id" + "AWS_SES_SECRET_ACCESS_KEY" = "aws-ses-secret-access-key" +} \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/uat/backend.ini b/infra/container_apps/institution-ms/env/uat/backend.ini new file mode 100644 index 0000000..8cadfd6 --- /dev/null +++ b/infra/container_apps/institution-ms/env/uat/backend.ini @@ -0,0 +1 @@ +subscription=UAT-SelfCare \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/uat/backend.tfvars b/infra/container_apps/institution-ms/env/uat/backend.tfvars new file mode 100644 index 0000000..659ba39 --- /dev/null +++ b/infra/container_apps/institution-ms/env/uat/backend.tfvars @@ -0,0 +1,4 @@ +resource_group_name = "terraform-state-rg" +storage_account_name = "tfappuatselfcare" +container_name = "terraform-state" +key = "selfcare-core.container_app.tfstate" \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/uat/terraform.tfvars b/infra/container_apps/institution-ms/env/uat/terraform.tfvars new file mode 100644 index 0000000..64f9ff6 --- /dev/null +++ b/infra/container_apps/institution-ms/env/uat/terraform.tfvars @@ -0,0 +1,132 @@ +env_short = "u" +suffix_increment = "-001" +cae_name = "cae-001" + +tags = { + CreatedBy = "Terraform" + Environment = "Uat" + Owner = "SelfCare" + Source = "https://github.com/pagopa/selfcare-ms-core" + CostCenter = "TS310 - PAGAMENTI & SERVIZI" +} + +container_app = { + min_replicas = 1 + max_replicas = 2 + scale_rules = [] + cpu = 0.5 + memory = "1Gi" +} + + +app_settings = [ + { + name = "DESTINATION_MAILS" + value = "pectest@pec.pagopa.it" + # //prod non presente + }, + { + name = "SELFCARE_URL" + value = "https://selfcare.pagopa.it" + }, + { + name = "MAIL_TEMPLATE_DELEGATION_NOTIFICATION_PATH" + value = "contracts/template/mail/delegation-notification/1.0.0.json" + }, + { + name = "MAIL_TEMPLATE_DELEGATION_USER_NOTIFICATION_PATH" + value = "contracts/template/mail/delegation-notification/user-1.0.0.json" + }, + { + name = "STORAGE_CONTAINER" + value = "selc-u-contracts-blob" + }, + { + name = "STORAGE_ENDPOINT" + value = "core.windows.net" + }, + + { + name = "STORAGE_APPLICATION_ID" + value = "selcucontractsstorage" + }, + + { + name = "STORAGE_CREDENTIAL_ID" + value = "selcucontractsstorage" + }, + { + name = "STORAGE_TEMPLATE_URL" + value = "https://selcucheckoutsa.z6.web.core.windows.net" + }, + { + name = "APPLICATIONINSIGHTS_ROLE_NAME" + value = "ms-core" + }, + { + name = "JAVA_TOOL_OPTIONS" + value = "-javaagent:applicationinsights-agent.jar" + }, + { + name = "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL" + value = "OFF" + }, + { + name = "EXTERNAL_API_LOG_LEVEL" + value = "DEBUG" + # // prod Γ¨ β€œINFO" + }, + { + name = "SMTP_HOST" + value = "smtps.pec.aruba.it" + }, + + { + name = "SMTP_PORT" + value = "465" + }, + { + name = "SMTP_SSL" + value = "true" + }, + { + name = "MS_NOTIFICATION_MANAGER_URL" + value = "http://selc-u-notification-mngr-ca" + }, + { + name = "USERVICE_PARTY_REGISTRY_PROXY_URL" + value = "http://selc-u-party-reg-proxy-ca" + }, + { + name = "USERVICE_USER_REGISTRY_URL" + value = "https://api.uat.pdv.pagopa.it/user-registry/v1" + }, + { + name = "SELFCARE_USER_URL" + value = "http://selc-u-user-ms-ca" + }, + { + name = "PRODUCT_STORAGE_CONTAINER" + value = "selc-u-product" + }, + { + name = "MAIL_SENDER_ADDRESS" + value = "noreply@areariservata.pagopa.it" + } +] + +secrets_names = { + "STORAGE_APPLICATION_SECRET" = "contracts-storage-access-key" + "APPLICATIONINSIGHTS_CONNECTION_STRING" = "appinsights-connection-string" + "MONGODB_CONNECTION_URI" = "mongodb-connection-string" + "BLOB_STORAGE_CONN_STRING" = "blob-storage-contract-connection-string" + "STORAGE_CREDENTIAL_SECRET" = "contracts-storage-access-key" + "SMTP_USR" = "smtp-usr" + "SMTP_PSW" = "smtp-psw" + "ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL" = "party-test-institution-email" + "USER_REGISTRY_API_KEY" = "user-registry-api-key" + "JWT_TOKEN_PUBLIC_KEY" = "jwt-public-key" + "BLOB_STORAGE_PRODUCT_CONNECTION_STRING" = "blob-storage-product-connection-string" + "AWS_SES_ACCESS_KEY_ID" = "aws-ses-access-key-id" + "AWS_SES_SECRET_ACCESS_KEY" = "aws-ses-secret-access-key" +} diff --git a/infra/container_apps/institution-ms/locals.tf b/infra/container_apps/institution-ms/locals.tf new file mode 100644 index 0000000..167de2c --- /dev/null +++ b/infra/container_apps/institution-ms/locals.tf @@ -0,0 +1,7 @@ +locals { + pnpg_suffix = var.is_pnpg == true ? "-pnpg" : "" + project = "selc-${var.env_short}" + + container_app_environment_name = "${local.project}${local.pnpg_suffix}-${var.cae_name}" + ca_resource_group_name = "${local.project}-container-app${var.suffix_increment}-rg" +} \ No newline at end of file diff --git a/infra/container_apps/institution-ms/main.tf b/infra/container_apps/institution-ms/main.tf new file mode 100644 index 0000000..8b176ac --- /dev/null +++ b/infra/container_apps/institution-ms/main.tf @@ -0,0 +1,28 @@ +terraform { + required_version = ">= 1.6.0" + + backend "azurerm" {} +} + +provider "azurerm" { + features {} +} + +module "container_app_core" { + source = "github.com/pagopa/selfcare-commons//infra/terraform-modules/container_app_microservice?ref=main" + + is_pnpg = var.is_pnpg + + env_short = var.env_short + container_app = var.container_app + resource_group_name = local.ca_resource_group_name + container_app_name = "ms-core" + container_app_environment_name = local.container_app_environment_name + image_name = "selfcare-ms-core" + image_tag = var.image_tag + app_settings = var.app_settings + secrets_names = var.secrets_names + workload_profile_name = var.workload_profile_name + + tags = var.tags +} diff --git a/infra/container_apps/institution-ms/terraform.sh b/infra/container_apps/institution-ms/terraform.sh new file mode 100644 index 0000000..e8fe042 --- /dev/null +++ b/infra/container_apps/institution-ms/terraform.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +set -e + +action=$1 +env=$2 +shift 2 +other=$@ +# must be subscription in lower case +subscription="" +BACKEND_CONFIG_PATH="./env/${ENV}/backend.tfvars" + +if [ -z "$action" ]; then + echo "Missed action: init, apply, plan" + exit 0 +fi + +if [ -z "$env" ]; then + echo "env should be: dev, uat or prod." + exit 0 +fi + +source "./env/$env/backend.ini" + +az account set -s "${subscription}" + +# if using cygwin, we have to transcode the WORKDIR +if [[ $WORKDIR == /cygdrive/* ]]; then + WORKDIR=$(cygpath -w $WORKDIR) +fi + +if [ "$action" = "force-unlock" ]; then + echo "🧭 terraform INIT in env: ${env}" + terraform init -reconfigure -backend-config="./env/$env/backend.tfvars" $other + warn_message="You are about to unlock Terraform's remote state. + This is a dangerous task you want to be aware of before going on. + This operation won't affect your infrastructure directly. + However, please note that you may lose pieces of information about partially-applied configurations. + + Please refer to the official Terraform documentation about the command: + https://developer.hashicorp.com/terraform/cli/commands/force-unlock" + printf "\n\e[33m%s\e[0m\n\n" "$warn_message" + + read -r -p "Please enter the LOCK ID: " lock_id + terraform force-unlock "$lock_id" + + exit 0 # this line prevents the script to go on +fi + +if echo "init plan apply refresh import output state taint destroy" | grep -w "$action" > /dev/null; then + if [ "$action" = "init" ]; then + echo "🧭 terraform INIT in env: ${env}" + terraform "$action" -reconfigure -backend-config="./env/$env/backend.tfvars" $other + elif [ "$action" = "output" ] || [ "$action" = "state" ] || [ "$action" = "taint" ]; then + # init terraform backend + echo "🧭 terraform (output|state|taint) launched with action: ${action} in env: ${env}" + terraform init -reconfigure -backend-config="./env/$env/backend.tfvars" + terraform "$action" $other + else + # init terraform backend + echo "🧭 terraform launched with action: ${action} in env: ${env}" + + terraform init -reconfigure -backend-config="./env/$env/backend.tfvars" + terraform "$action" -var-file="./env/$env/terraform.tfvars" $other + fi +else + echo "Action not allowed." + exit 1 +fi \ No newline at end of file diff --git a/infra/container_apps/institution-ms/variables.tf b/infra/container_apps/institution-ms/variables.tf new file mode 100644 index 0000000..bad40e5 --- /dev/null +++ b/infra/container_apps/institution-ms/variables.tf @@ -0,0 +1,75 @@ +variable "is_pnpg" { + type = bool + default = false + description = "(Optional) True if you want to apply changes to PNPG environment" +} + +variable "env_short" { + description = "Environment short name" + type = string + validation { + condition = ( + length(var.env_short) <= 1 + ) + error_message = "Max length is 1 chars." + } +} + +variable "tags" { + type = map(any) +} + +variable "container_app" { + description = "Container App configuration" + type = object({ + min_replicas = number + max_replicas = number + + scale_rules = list(object({ + name = string + custom = object({ + metadata = map(string) + type = string + }) + })) + + cpu = number + memory = string + }) +} + +variable "image_tag" { + type = string + default = "latest" + description = "Image tag to use for the container" +} + +variable "app_settings" { + type = list(object({ + name = string + value = string + })) +} + +variable "secrets_names" { + type = map(string) + description = "KeyVault secrets to get values from" +} + +variable "workload_profile_name" { + type = string + description = "Workload Profile name to use" + default = null +} + +variable "cae_name" { + type = string + description = "Container App Environment name" + default = "cae-cp" +} + +variable "suffix_increment" { + type = string + description = "Suffix increment Container App Environment name" + default = "" +} \ No newline at end of file From f896a93512684196716447b2a9e2aec12bd84daf Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Mon, 8 Jul 2024 17:00:25 +0200 Subject: [PATCH 02/29] [SELC-5168] feat : fix pom --- apps/pom.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/pom.xml b/apps/pom.xml index e522046..15429b7 100644 --- a/apps/pom.xml +++ b/apps/pom.xml @@ -13,6 +13,7 @@ pom institution-send-mail-scheduler + institution-ms @@ -31,11 +32,11 @@ selc-ms-core - selc-ms-core/pom.xml + institution-ms/pom.xml - selc-ms-core + institution-ms From 2f4640499e9d6dc72c2b0471fbb0ac3ec4414b9d Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Mon, 8 Jul 2024 17:36:03 +0200 Subject: [PATCH 03/29] [SELC-5168] feat : fix profile id value --- apps/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/pom.xml b/apps/pom.xml index 15429b7..f8a12b6 100644 --- a/apps/pom.xml +++ b/apps/pom.xml @@ -29,7 +29,7 @@ - selc-ms-core + institution-ms institution-ms/pom.xml From 76e102e91e7297a17206301cd78518ee1314159f Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Tue, 9 Jul 2024 16:04:09 +0200 Subject: [PATCH 04/29] [SELC-5168] feat : added readme test coverage module --- test-coverage/pom.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test-coverage/pom.xml b/test-coverage/pom.xml index 064f182..978d9f6 100644 --- a/test-coverage/pom.xml +++ b/test-coverage/pom.xml @@ -42,6 +42,19 @@ + + institution-ms + + false + + + + it.pagopa.selfcare + selc-ms-core + 1.0-SNAPSHOT + + + report From deea03f7e5d53d4b6e080d0e648f92f9753ec146 Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Wed, 10 Jul 2024 09:04:32 +0200 Subject: [PATCH 05/29] [SELC-5168] feat : add workflows institution-ms (need to review) --- ...pr_container_apps_infra_institution-ms.yml | 52 +++++++++++++ .github/workflows/pr_institution-ms.yml | 36 +++++++++ .github/workflows/release_institution-ms.yml | 73 +++++++++++++++++++ .../workflows/release_institution-ms_pnpg.yml | 63 ++++++++++++++++ .github/workflows/release_open_api.yml | 19 +++++ README.md | 40 +++++++++- 6 files changed, 282 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/pr_container_apps_infra_institution-ms.yml create mode 100644 .github/workflows/pr_institution-ms.yml create mode 100644 .github/workflows/release_institution-ms.yml create mode 100644 .github/workflows/release_institution-ms_pnpg.yml create mode 100644 .github/workflows/release_open_api.yml diff --git a/.github/workflows/pr_container_apps_infra_institution-ms.yml b/.github/workflows/pr_container_apps_infra_institution-ms.yml new file mode 100644 index 0000000..819c22d --- /dev/null +++ b/.github/workflows/pr_container_apps_infra_institution-ms.yml @@ -0,0 +1,52 @@ +name: Code Review container app infra - institution-ms + +on: + workflow_dispatch: + + pull_request: + branches: + - main + - releases/* + types: + - opened + - edited + - synchronize + - reopened + - ready_for_review + paths: + - '!./infra/container_apps/institution-ms/env/**-pnpg' + - './infra/container_apps/institution-ms/**' + - './.github/workflows/pr_container_apps_infra.yml' + - './.github/workflows/call_code_review_infra.yml' + +jobs: + code_review_dev: + uses: ./.github/workflows/call_code_review_infra.yml + name: '[DEV] Container Apps Infra Code Review' + if: ${{ !startsWith(github.ref_name, 'releases/') }} + secrets: inherit + with: + environment: dev + dir: ./infra/container_apps/institution-ms + env_vars: | + TF_VAR_image_tag=sha-$(git rev-parse --short ${{ github.sha }}) + + code_review_uat: + uses: ./.github/workflows/call_code_review_infra.yml + name: '[UAT] Container Apps Infra Code Review' + secrets: inherit + with: + environment: uat + dir: ./infra/container_apps/institution-ms + env_vars: | + TF_VAR_image_tag=sha-$(git rev-parse --short ${{ github.sha }}) + + code_review_prod: + uses: ./.github/workflows/call_code_review_infra.yml + name: '[PROD] Container Apps Infra Code Review' + secrets: inherit + with: + environment: prod + dir: ./infra/container_apps/institution-ms + env_vars: | + TF_VAR_image_tag=sha-$(git rev-parse --short ${{ github.sha }}) diff --git a/.github/workflows/pr_institution-ms.yml b/.github/workflows/pr_institution-ms.yml new file mode 100644 index 0000000..d0d2b23 --- /dev/null +++ b/.github/workflows/pr_institution-ms.yml @@ -0,0 +1,36 @@ +name: Code Review institution-ms + +on: + workflow_dispatch: + + pull_request: + branches: + - main + - releases/** + types: + - opened + - edited + - synchronize + - reopened + - ready_for_review + paths: + - 'apps/institution-ms/**' + - '.github/workflows/pr_institution-ms.yml' + - '.github/workflows/call_code_review.yml' + +jobs: + code_review: + uses: ./.github/workflows/call_code_review.yml + name: 'institution-ms Code Review' + secrets: inherit + if: github.event_name == 'pull_request' + with: + pr_number: ${{ github.event.pull_request.number }} + source_branch: ${{ github.head_ref }} + target_branch: ${{ github.base_ref }} + sonar_key: 'pagopa_selfcare-ms-core' + module: 'institution-ms' + + docker_build: + uses: ./.github/workflows/call_code_review.yml + name: 'Docker' diff --git a/.github/workflows/release_institution-ms.yml b/.github/workflows/release_institution-ms.yml new file mode 100644 index 0000000..f90ab74 --- /dev/null +++ b/.github/workflows/release_institution-ms.yml @@ -0,0 +1,73 @@ +name: Release - institution-ms + +on: + push: + branches: + - main + - releases/* + paths: + - "apps/institution-ms/**" + - "infra/container_apps/institution-ms/**" + - "apps/pom.xml" + - "pom.xml" + + workflow_dispatch: + inputs: + env: + type: choice + description: Environment + options: + - dev + - uat + - prod + +jobs: + + release_dev: + uses: pagopa/selfcare-commons/.github/workflows/call_release_docker.yml@main + name: '[Dev] Institution Ms Release' + if: ${{ (startsWith(github.ref_name, 'releases/') != true && inputs.env == null) || inputs.env == 'dev' }} + secrets: inherit + with: + environment: dev + tf_environment: dev + dir: 'infra/container_apps/container_apps' + dockerfile_path: ./apps/institution-ms/Dockerfile + docker_image_name: pagopa/institution-ms + upload_openapi_enabled: false + + release_uat: + uses: pagopa/selfcare-commons/.github/workflows/call_release_docker.yml@main + name: '[UAT] Core ms Release' + if: ${{ (startsWith(github.ref_name, 'releases/') == true && inputs.env == null) || inputs.env == 'uat' }} + secrets: inherit + with: + environment: uat + tf_environment: uat + dir: 'infra/container_apps/container_apps' + dockerfile_path: ./apps/institution-ms/Dockerfile + docker_image_name: pagopa/institution-ms + upload_openapi_enabled: false + + release_prod: + uses: pagopa/selfcare-commons/.github/workflows/call_release_docker.yml@main + name: '[Prod] Core ms Release' + if: ${{ inputs.env == 'prod' }} + secrets: inherit + with: + environment: prod + tf_environment: prod + dir: 'infra/container_apps/container_apps' + dockerfile_path: ./apps/institution-ms/Dockerfile + docker_image_name: pagopa/institution-ms + upload_openapi_enabled: false + + promote_release: + name: 'Promote prerelase release' + runs-on: ubuntu-20.04 + needs: [release_prod] + steps: + - uses: pagopa/selfcare-commons/github-actions-template/promote-release@main + with: + github_path_token: ${{ secrets.GH_PAT_VARIABLES }} + release_version: ${{ vars.CURRENT_UAT_VERSION }} \ No newline at end of file diff --git a/.github/workflows/release_institution-ms_pnpg.yml b/.github/workflows/release_institution-ms_pnpg.yml new file mode 100644 index 0000000..2724f8a --- /dev/null +++ b/.github/workflows/release_institution-ms_pnpg.yml @@ -0,0 +1,63 @@ +name: Release - PNPG institution-ms + +on: + push: + branches: + - main + - releases/* + paths: + - "apps/institution-ms/**" + - "infra/container_apps/institution-ms/**" + - "apps/pom.xml" + - "pom.xml" + + workflow_dispatch: + inputs: + env: + type: choice + description: Environment + options: + - dev + - uat + - prod + +jobs: + + release_dev: + uses: pagopa/selfcare-commons/.github/workflows/call_release_docker.yml@main + name: '[Dev] Institution ms Release' + if: ${{ (startsWith(github.ref_name, 'releases/') != true && inputs.env == null) || inputs.env == 'dev' }} + secrets: inherit + with: + environment: dev + tf_environment: dev-pnpg + dir: 'infra/container_apps/container_apps' + dockerfile_path: ./apps/institution-ms/Dockerfile + docker_image_name: pagopa/institution-ms + upload_openapi_enabled: false + + release_uat: + uses: pagopa/selfcare-commons/.github/workflows/call_release_docker.yml@main + name: '[UAT] Core ms Release' + if: ${{ (startsWith(github.ref_name, 'releases/') == true && inputs.env == null) || inputs.env == 'uat' }} + secrets: inherit + with: + environment: uat + tf_environment: uat-pnpg + dir: 'infra/container_apps/container_apps' + dockerfile_path: ./apps/institution-ms/Dockerfile + docker_image_name: pagopa/institution-ms + upload_openapi_enabled: false + + release_prod: + uses: pagopa/selfcare-commons/.github/workflows/call_release_docker.yml@main + name: '[Prod] Core ms Release' + if: ${{ inputs.env == 'prod' }} + secrets: inherit + with: + environment: prod + tf_environment: prod-pnpg + dir: 'infra/container_apps/container_apps' + dockerfile_path: ./apps/institution-ms/Dockerfile + docker_image_name: pagopa/institution-ms + upload_openapi_enabled: false \ No newline at end of file diff --git a/.github/workflows/release_open_api.yml b/.github/workflows/release_open_api.yml new file mode 100644 index 0000000..0d30053 --- /dev/null +++ b/.github/workflows/release_open_api.yml @@ -0,0 +1,19 @@ +name: Swagger Detect Rules and Conflict +on: + pull_request: + types: [ opened, synchronize, reopened ] +# workflow_dispatch: +permissions: + contents: write + +jobs: + swagger_conflict_update: + runs-on: ubuntu-20.04 + permissions: write-all + name: Swagger Detect Rules and Conflict + steps: + - id: swagger-detect + uses: pagopa/selfcare-commons/github-actions-template/swagger-detect-conflict-spring@main + with: + path_openapi_docs: app/src/main/resources/swagger/api-docs.json + github_token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/README.md b/README.md index 024be83..bae3c88 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,41 @@ # selfcare-institution -This repo structure and build monorepo with Apache Maven for selfcare institution domain. \ No newline at end of file +This repo structure and build monorepo with Apache Maven for selfcare user domain. + +Applications under apps/ depend on shared code under libs/. +test-coverage/ is used to assess the test coverage of the entire project. + + + +``` +. + +β”œβ”€β”€ apps +β”‚Β Β  β”œβ”€β”€ institution-send-mail-scheduler +β”‚Β Β  └── institution-ms +└── test-coverage +``` + +Look at single README module for more information. + +## Infrastructure + +The [`.container_apps/`] sub folder contains terraform files for deploying infrastructure as container apps in Azure. + + +## Continous integration + +The [`.github/`] sub folder contains a self-contained ci-stack for building the monorepo with Github Actions. + +## Usage + +```shell script +mvn clean package install +``` + +## Maven basic actions for monorep + +Maven is really not a monorepo-*native* build tool (e.g. lacks +trustworthy incremental builds, can only build java code natively, is recursive and +struggles with partial repo checkouts) but can be made good use of with some tricks +and usage of a couple of lesser known command line switches. From b81fc541058e69f5b98c6b951427ec8080cba878 Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Wed, 10 Jul 2024 10:07:53 +0200 Subject: [PATCH 06/29] [SELC-5168] feat : retry push --- apps/institution-ms-new/.dockerignore | 12 + .../.pre-commit-config.yaml | 10 + apps/institution-ms-new/.terraform-version | 1 + apps/institution-ms-new/CODEOWNERS | 3 + apps/institution-ms-new/Dockerfile | 5 + apps/institution-ms-new/Dockerfile.new | 35 + .../Dockerfile.new.dockerignore | 117 + apps/institution-ms-new/README.md | 47 + apps/institution-ms-new/app/pom.xml | 60 + .../mscore/SelfCareCoreApplication.java | 15 + .../src/main/resources/config/application.yml | 60 + .../config/azure-storage-config.properties | 7 + .../resources/config/core-config.properties | 31 + .../src/main/resources/swagger/api-docs.json | 3804 +++++++++++++++++ .../mscore/web/config/SwaggerConfigTest.java | 86 + apps/institution-ms-new/connector-api/pom.xml | 48 + .../mscore/api/DelegationConnector.java | 22 + .../selfcare/mscore/api/EmailConnector.java | 11 + .../mscore/api/FileStorageConnector.java | 19 + .../mscore/api/InstitutionConnector.java | 62 + .../api/NotificationServiceConnector.java | 11 + .../api/PartyRegistryProxyConnector.java | 28 + .../mscore/api/PecNotificationConnector.java | 10 + .../selfcare/mscore/api/ProductConnector.java | 10 + .../selfcare/mscore/api/UserApiConnector.java | 14 + .../mscore/api/UserRegistryConnector.java | 18 + .../mscore/config/AzureStorageConfig.java | 25 + .../selfcare/mscore/config/CoreConfig.java | 36 + .../mscore/config/MailTemplateConfig.java | 23 + .../selfcare/mscore/constant/CustomError.java | 68 + .../mscore/constant/DelegationState.java | 6 + .../mscore/constant/DelegationType.java | 7 + .../pagopa/selfcare/mscore/constant/Env.java | 8 + .../mscore/constant/GenericError.java | 86 + .../selfcare/mscore/constant/Order.java | 9 + .../selfcare/mscore/constant/Origin.java | 48 + .../selfcare/mscore/constant/PricingPlan.java | 16 + .../selfcare/mscore/constant/ProductId.java | 32 + .../mscore/constant/RelationshipState.java | 10 + .../selfcare/mscore/constant/SearchMode.java | 7 + .../selfcare/mscore/constant/TokenType.java | 6 + .../mscore/exception/BadGatewayException.java | 11 + .../exception/InvalidRequestException.java | 14 + .../mscore/exception/MsCoreException.java | 15 + .../exception/ResourceConflictException.java | 15 + .../exception/ResourceForbiddenException.java | 14 + .../exception/ResourceNotFoundException.java | 15 + .../ServiceUnavailableException.java | 4 + .../model/AreaOrganizzativaOmogenea.java | 22 + .../selfcare/mscore/model/Certification.java | 9 + .../selfcare/mscore/model/CertifiedField.java | 13 + .../mscore/model/InstitutionToNotify.java | 34 + .../selfcare/mscore/model/QueueEvent.java | 6 + .../selfcare/mscore/model/RootParent.java | 14 + .../mscore/model/UnitaOrganizzativa.java | 23 + .../selfcare/mscore/model/UserToNotify.java | 22 + .../mscore/model/aggregation/QueryCount.java | 15 + .../UserInstitutionAggregation.java | 19 + .../aggregation/UserInstitutionBinding.java | 16 + .../aggregation/UserInstitutionFilter.java | 24 + .../mscore/model/delegation/Delegation.java | 39 + .../delegation/DelegationInstitution.java | 18 + .../delegation/DelegationWithPagination.java | 19 + .../delegation/GetDelegationParameters.java | 18 + .../mscore/model/delegation/PageInfo.java | 17 + .../selfcare/mscore/model/error/Problem.java | 11 + .../mscore/model/error/ProblemError.java | 10 + .../mscore/model/institution/ASResource.java | 17 + .../institution/AdditionalInformations.java | 16 + .../mscore/model/institution/Attributes.java | 10 + .../mscore/model/institution/Billing.java | 20 + .../model/institution/CategoryProxyInfo.java | 11 + .../institution/DataProtectionOfficer.java | 18 + .../institution/GeographicTaxonomies.java | 26 + .../institution/GeographicTaxonomyPage.java | 11 + .../mscore/model/institution/Institution.java | 54 + .../model/institution/InstitutionByLegal.java | 9 + .../InstitutionGeographicTaxonomies.java | 13 + .../InstitutionGeographicTaxonomyPage.java | 11 + .../institution/InstitutionProxyInfo.java | 20 + .../model/institution/InstitutionUpdate.java | 36 + ...NationalRegistriesProfessionalAddress.java | 12 + .../mscore/model/institution/Onboarding.java | 23 + .../model/institution/OnboardingPage.java | 11 + .../model/institution/PaAttributes.java | 9 + .../institution/PaymentServiceProvider.java | 20 + .../mscore/model/institution/Premium.java | 16 + .../mscore/model/institution/SaResource.java | 14 + .../model/institution/ValidInstitution.java | 13 + .../mscore/model/institution/WorkContact.java | 13 + .../model/notification/MessageRequest.java | 12 + .../MultipleReceiverMessageRequest.java | 13 + .../mscore/model/onboarding/Contract.java | 9 + .../model/onboarding/ContractImported.java | 10 + .../mscore/model/onboarding/MailTemplate.java | 20 + .../model/onboarding/OnboardedProduct.java | 27 + .../model/onboarding/OnboardedUser.java | 17 + .../model/onboarding/OnboardingInfo.java | 16 + .../onboarding/OnboardingLegalsRequest.java | 19 + .../OnboardingOperatorsRequest.java | 15 + .../model/onboarding/OnboardingRequest.java | 44 + .../model/onboarding/OnboardingRollback.java | 20 + .../onboarding/OnboardingUpdateRollback.java | 18 + .../onboarding/OnboardingUsersRequest.java | 17 + .../model/onboarding/ResourceResponse.java | 10 + .../mscore/model/onboarding/Token.java | 36 + .../model/onboarding/TokenRelationships.java | 31 + .../mscore/model/onboarding/TokenUser.java | 14 + .../onboarding/VerifyOnboardingFilters.java | 45 + .../pecnotification/PecNotification.java | 23 + .../mscore/model/product/Product.java | 20 + .../mscore/model/product/ProductRoleInfo.java | 23 + .../mscore/model/product/ProductStatus.java | 6 + .../mscore/model/user/ProductManagerInfo.java | 19 + .../mscore/model/user/RelationshipInfo.java | 18 + .../mscore/model/user/RelationshipPage.java | 11 + .../model/user/RelationshipPageElement.java | 10 + .../selfcare/mscore/model/user/User.java | 35 + .../mscore/model/user/UserBinding.java | 25 + .../selfcare/mscore/model/user/UserInfo.java | 15 + .../mscore/model/user/UserToOnboard.java | 19 + .../selfcare/mscore/utils/MaskDataUtils.java | 97 + .../InvalidRequestExceptionTest.java | 21 + .../mscore/exception/MsCoreExceptionTest.java | 21 + .../ResourceConflictExceptionTest.java | 21 + .../ResourceNotFoundExceptionTest.java | 21 + .../mscore/utils/MaskDataUtilsTest.java | 29 + .../connector/azure-storage/pom.xml | 21 + .../azure_storage/AzureBlobClient.java | 170 + .../config/AzureStorageConfigTest.java | 47 + apps/institution-ms-new/connector/dao/pom.xml | 29 + .../mscore/connector/dao/CriteriaBuilder.java | 50 + .../dao/DelegationConnectorImpl.java | 180 + .../connector/dao/DelegationRepository.java | 18 + .../dao/InstitutionConnectorImpl.java | 359 ++ .../connector/dao/InstitutionRepository.java | 16 + .../connector/dao/MongoCustomConnector.java | 28 + .../dao/MongoCustomConnectorImpl.java | 107 + .../dao/PecNotificationConnectorImpl.java | 67 + .../dao/PecNotificationRepository.java | 8 + .../mscore/connector/dao/TokenRepository.java | 8 + .../mscore/connector/dao/UserRepository.java | 10 + .../connector/dao/config/DaoConfig.java | 22 + .../OffsetDateTimeToStringConverter.java | 16 + .../StringToOffsetDateTimeConverter.java | 15 + .../connector/dao/model/DelegationEntity.java | 36 + .../dao/model/InstitutionEntity.java | 61 + .../dao/model/PecNotificationEntity.java | 29 + .../connector/dao/model/TokenEntity.java | 46 + .../connector/dao/model/UserEntity.java | 27 + .../UserInstitutionAggregationEntity.java | 25 + .../UserInstitutionBindingEntity.java | 17 + .../inner/AdditionalInformationsEntity.java | 18 + .../dao/model/inner/AttributesEntity.java | 12 + .../dao/model/inner/BillingEntity.java | 15 + .../inner/DataProtectionOfficerEntity.java | 12 + .../dao/model/inner/GeoTaxonomyEntity.java | 11 + .../model/inner/InstitutionUpdateEntity.java | 30 + .../model/inner/OnboardedProductEntity.java | 30 + .../dao/model/inner/OnboardingEntity.java | 25 + .../dao/model/inner/PaAttributesEntity.java | 9 + .../inner/PaymentServiceProviderEntity.java | 14 + .../dao/model/inner/TokenUserEntity.java | 10 + .../dao/model/inner/UserBindingEntity.java | 22 + .../model/mapper/DelegationEntityMapper.java | 23 + .../mapper/DelegationInstitutionMapper.java | 34 + .../model/mapper/InstitutionEntityMapper.java | 18 + .../dao/model/mapper/InstitutionMapper.java | 96 + .../model/mapper/InstitutionMapperHelper.java | 87 + .../model/mapper/OnboardedProductMapper.java | 10 + .../mapper/PecNotificationEntityMapper.java | 17 + .../dao/model/mapper/UserEntityMapper.java | 43 + .../UserInstitutionAggregationMapper.java | 11 + .../resources/config/dao-config.properties | 3 + .../connector/dao/CriteriaBuilderTest.java | 39 + .../dao/DelegationConnectorImplTest.java | 350 ++ .../dao/DelegationRepositoryTest.java | 41 + .../dao/InstitutionConnectorImplTest.java | 739 ++++ .../dao/InstitutionRepositoryTest.java | 71 + .../dao/MongoCustomConnectorImplTest.java | 139 + .../dao/PecNotificationConnectorImplTest.java | 107 + .../connector/dao/config/DaoConfigTest.java | 31 + .../OffsetDateTimeToStringConverterTest.java | 19 + .../StringToOffsetDateTimeConverterTest.java | 18 + .../dao/model/mapper/UserMapperTest.java | 210 + .../mscore/connector/dao/utils/TestUtils.java | 155 + .../connector/email/pom.xml | 32 + .../connector/email/EmailConnectorImpl.java | 100 + .../email/config/EmailBaseConfig.java | 9 + .../main/resources/config/email.properties | 7 + .../email/EmailConnectorImplTest.java | 101 + apps/institution-ms-new/connector/pom.xml | 25 + .../rest/docs/openapi/registry_proxy.json | 2199 ++++++++++ .../rest/docs/openapi/selfcare-user-docs.json | 1550 +++++++ .../rest/docs/openapi/user_registry.json | 596 +++ .../institution-ms-new/connector/rest/pom.xml | 152 + .../rest/PartyRegistryProxyConnectorImpl.java | 213 + .../connector/rest/ProductConnectorImpl.java | 38 + .../connector/rest/UserApiConnectorImpl.java | 41 + .../rest/UserRegistryConnectorImpl.java | 124 + .../client/PartyRegistryProxyRestClient.java | 47 + .../rest/client/UserApiRestClient.java | 8 + .../client/UserInstitutionApiRestClient.java | 8 + .../rest/client/UserRegistryRestClient.java | 11 + .../rest/config/FeignClientConfig.java | 11 + .../PartyRegistryProxyRestClientConfig.java | 16 + .../rest/config/UserApiRestClientConfig.java | 15 + .../UserInstitutionApiRestClientConfig.java | 15 + .../config/UserRegistryRestClientConfig.java | 15 + .../rest/decoder/FeignErrorDecoder.java | 22 + .../connector/rest/mapper/AooMapper.java | 11 + .../connector/rest/mapper/AsMapper.java | 12 + .../connector/rest/mapper/SaMapper.java | 11 + .../connector/rest/mapper/UoMapper.java | 13 + .../rest/mapper/UserMapperClient.java | 26 + .../GeographicTaxonomiesResponse.java | 24 + .../rest/model/registryproxy/AooResponse.java | 38 + .../rest/model/registryproxy/AsResponse.java | 17 + .../model/registryproxy/Institutions.java | 9 + .../InstitutionsByLegalRequest.java | 9 + .../InstitutionsByLegalResponse.java | 14 + .../rest/model/registryproxy/LegalFilter.java | 8 + .../model/registryproxy/PdndResponse.java | 14 + .../registryproxy/ProxyCategoryResponse.java | 11 + .../ProxyInstitutionResponse.java | 20 + .../rest/model/registryproxy/UoResponse.java | 35 + .../resources/config/feign-client.properties | 2 + ...arty-registry-proxy-rest-client.properties | 21 + .../user-registry-rest-client.properties | 3 + .../config/user-rest-client.properties | 14 + .../PartyRegistryProxyConnectorImplTest.java | 591 +++ .../rest/ProductConnectorImplTest.java | 56 + .../rest/UserApiConnectorImplTest.java | 85 + .../rest/UserRegistryConnectorImplTest.java | 155 + .../rest/decoder/FeignErrorDecoderTest.java | 90 + apps/institution-ms-new/core/pom.xml | 88 + .../selfcare/mscore/core/ClassPathStream.java | 28 + .../mscore/core/ClassPathStreamFactory.java | 26 + .../selfcare/mscore/core/ContractService.java | 74 + .../mscore/core/DelegationService.java | 21 + .../mscore/core/DelegationServiceImpl.java | 162 + .../selfcare/mscore/core/ExternalService.java | 21 + .../mscore/core/ExternalServiceImpl.java | 49 + .../mscore/core/InstitutionService.java | 70 + .../mscore/core/InstitutionServiceImpl.java | 404 ++ .../mscore/core/MailNotificationService.java | 7 + .../core/MailNotificationServiceImpl.java | 76 + .../selfcare/mscore/core/OnboardingDao.java | 27 + .../mscore/core/OnboardingService.java | 18 + .../mscore/core/OnboardingServiceImpl.java | 167 + .../mscore/core/UserNotificationService.java | 10 + .../core/UserNotificationServiceImpl.java | 70 + .../core/config/CloudTemplateLoader.java | 28 + .../mscore/core/config/FreeMarkerConfig.java | 71 + .../mscore/core/config/MdcTaskDecorator.java | 32 + .../mscore/core/config/MsCoreConfig.java | 44 + .../mscore/core/mapper/InstitutionMapper.java | 17 + .../mscore/core/mapper/TokenMapper.java | 20 + .../strategy/CreateInstitutionStrategy.java | 20 + .../CreateInstitutionStrategyAnac.java | 59 + .../CreateInstitutionStrategyCommon.java | 38 + .../CreateInstitutionStrategyInfocamere.java | 95 + .../CreateInstitutionStrategyIpa.java | 200 + .../CreateInstitutionStrategyIvass.java | 58 + .../CreateInstitutionStrategyPda.java | 136 + .../CreateInstitutionStrategyRaw.java | 44 + .../CreateInstitutionStrategyFactory.java | 60 + .../input/CreateInstitutionStrategyInput.java | 22 + .../selfcare/mscore/core/util/Constants.java | 14 + .../core/util/InstitutionPaSubunitType.java | 5 + .../core/util/MailParametersMapper.java | 32 + .../mscore/core/util/OnboardingInfoUtils.java | 65 + .../mscore/core/util/UtilEnumList.java | 32 + .../core/ClassPathStreamFactoryTest.java | 30 + .../mscore/core/ClassPathStreamTest.java | 22 + .../mscore/core/ContractServiceTest.java | 63 + .../core/DelegationServiceImplTest.java | 385 ++ .../mscore/core/ExternalServiceImplTest.java | 170 + .../core/InstitutionServiceImplPdaTest.java | 33 + .../core/InstitutionServiceImplTest.java | 1102 +++++ .../core/MailNotificationServiceImplTest.java | 105 + .../mscore/core/OnboardingDaoTest.java | 37 + .../core/OnboardingServiceImplTest.java | 325 ++ .../selfcare/mscore/core/TestUtils.java | 331 ++ .../core/UserNotificationServiceImplTest.java | 61 + .../CreateInstitutionStrategyPdaTest.java | 236 + .../CreateInstitutionStrategyTest.java | 643 +++ .../core/util/MailParametersMapperTest.java | 34 + .../core/util/OnboardingInfoUtilsTest.java | 471 ++ .../selfcare/mscore/core/util/TestUtils.java | 65 + .../mscore/core/util/model/DummyUser.java | 38 + apps/institution-ms-new/lombok.config | 1 + apps/institution-ms-new/mvnw | 310 ++ apps/institution-ms-new/mvnw.cmd | 182 + apps/institution-ms-new/pom.xml | 220 + apps/institution-ms-new/web/pom.xml | 38 + .../mscore/web/config/CoreSecurityConfig.java | 14 + .../mscore/web/config/SwaggerConfig.java | 156 + .../selfcare/mscore/web/config/WebConfig.java | 24 + .../web/controller/DelegationController.java | 136 + .../controller/DelegationV2Controller.java | 90 + .../web/controller/ExternalController.java | 148 + .../web/controller/InstitutionController.java | 540 +++ .../web/controller/ManagementController.java | 48 + .../web/controller/OnboardingController.java | 95 + .../web/exception/CustomExceptionHandler.java | 115 + .../selfcare/mscore/web/filter/LogFilter.java | 70 + .../model/delegation/DelegationRequest.java | 25 + .../DelegationRequestFromTaxcode.java | 27 + .../model/delegation/DelegationResponse.java | 38 + .../DelegationWithPaginationResponse.java | 20 + .../AdditionalInformationsRequest.java | 16 + .../model/institution/AttributesRequest.java | 10 + .../model/institution/AttributesResponse.java | 10 + .../web/model/institution/BillingRequest.java | 11 + .../model/institution/BillingResponse.java | 11 + .../web/model/institution/BrokerResponse.java | 13 + .../model/institution/BulkInstitution.java | 48 + .../model/institution/BulkInstitutions.java | 11 + .../model/institution/BulkPartiesSeed.java | 15 + .../web/model/institution/BulkProduct.java | 19 + .../CreatePgInstitutionRequest.java | 19 + .../model/institution/CreatedAtRequest.java | 19 + .../DataProtectionOfficerRequest.java | 10 + .../DataProtectionOfficerResponse.java | 10 + .../web/model/institution/GeoTaxonomies.java | 9 + .../InstitutionBillingResponse.java | 25 + .../institution/InstitutionFromIpaPost.java | 19 + .../institution/InstitutionListResponse.java | 16 + .../InstitutionManagementResponse.java | 40 + .../InstitutionManagerResponse.java | 22 + .../InstitutionOnboardedRequest.java | 12 + .../InstitutionOnboardingListResponse.java | 16 + .../InstitutionOnboardingRequest.java | 21 + .../InstitutionOnboardingResponse.java | 39 + .../model/institution/InstitutionProduct.java | 10 + .../web/model/institution/InstitutionPut.java | 16 + .../model/institution/InstitutionRequest.java | 42 + .../institution/InstitutionResponse.java | 52 + .../institution/InstitutionToOnboard.java | 14 + .../institution/InstitutionUpdateRequest.java | 38 + .../InstitutionUpdateResponse.java | 34 + .../institution/InstitutionsResponse.java | 11 + .../model/institution/OnboardingResponse.java | 21 + .../institution/OnboardingsResponse.java | 12 + .../PaymentServiceProviderRequest.java | 12 + .../PaymentServiceProviderResponse.java | 12 + .../institution/PdaInstitutionRequest.java | 18 + .../model/institution/ProductsManagement.java | 14 + .../institution/RelationshipResponse.java | 22 + .../model/institution/RelationshipResult.java | 28 + .../institution/RelationshipsManagement.java | 14 + .../model/institution/RootParentResponse.java | 12 + .../model/institution/UserInfoResponse.java | 18 + .../mscore/web/model/mapper/BrokerMapper.java | 14 + .../web/model/mapper/DelegationMapper.java | 33 + .../model/mapper/InstitutionMapperCustom.java | 562 +++ .../mapper/InstitutionResourceMapper.java | 40 + .../model/mapper/InstitutionUpdateMapper.java | 29 + .../web/model/mapper/OnboardingMapper.java | 145 + .../mapper/OnboardingResourceMapper.java | 49 + .../web/model/mapper/RelationshipMapper.java | 60 + .../mscore/web/model/mapper/UserMapper.java | 12 + .../web/model/onboarding/BusinessData.java | 14 + .../web/model/onboarding/ContractRequest.java | 13 + .../web/model/onboarding/LegalsResponse.java | 13 + .../OnboardedInstitutionResponse.java | 46 + .../onboarding/OnboardedProductResponse.java | 21 + .../model/onboarding/OnboardedProducts.java | 11 + .../onboarding/OnboardingImportContract.java | 16 + .../onboarding/OnboardingInfoResponse.java | 13 + .../OnboardingInstitutionLegalsRequest.java | 33 + ...OnboardingInstitutionOperatorsRequest.java | 24 + .../OnboardingInstitutionRequest.java | 40 + .../OnboardingInstitutionUsersRequest.java | 24 + .../web/model/onboarding/ProductInfo.java | 16 + .../web/model/onboarding/SupportContact.java | 13 + .../model/onboarding/TokenListResponse.java | 20 + .../web/model/onboarding/TokenResponse.java | 40 + .../token/InstitutionToNotifyResponse.java | 33 + .../web/model/token/ScContractResponse.java | 30 + .../web/model/user/InstitutionProducts.java | 14 + .../model/user/OnboardedUsersResponse.java | 12 + .../mscore/web/model/user/Person.java | 34 + .../mscore/web/model/user/PersonId.java | 13 + .../mscore/web/model/user/Product.java | 24 + .../mscore/web/model/user/ProductCount.java | 9 + .../web/model/user/ProductCountResponse.java | 16 + .../web/model/user/UserProductsResponse.java | 18 + .../mscore/web/model/user/UserResponse.java | 27 + .../web/util/CustomExceptionMessage.java | 20 + .../resources/swagger/swagger_en.properties | 115 + .../resources/swagger/swagger_it.properties | 90 + .../pagopa/selfcare/mscore/web/TestUtils.java | 145 + .../mscore/web/config/SwaggerConfigTest.java | 116 + .../mscore/web/config/WebTestConfig.java | 9 + .../controller/DelegationControllerTest.java | 296 ++ .../DelegationV2ControllerTest.java | 296 ++ .../controller/ExternalControllerTest.java | 419 ++ .../InstitutionControllerPdaTest.java | 99 + .../controller/InstitutionControllerTest.java | 1395 ++++++ .../controller/ManagementControllerTest.java | 56 + .../controller/OnboardingControllerTest.java | 85 + .../exception/CustomExceptionHandlerTest.java | 163 + .../mscore/web/filter/LogFilterTest.java | 63 + .../mapper/InstitutionMapperCustomTest.java | 1248 ++++++ .../model/mapper/OnboardingMapperTest.java | 115 + .../model/mapper/RelationshipMapperTest.java | 351 ++ 408 files changed, 33436 insertions(+) create mode 100644 apps/institution-ms-new/.dockerignore create mode 100644 apps/institution-ms-new/.pre-commit-config.yaml create mode 100644 apps/institution-ms-new/.terraform-version create mode 100644 apps/institution-ms-new/CODEOWNERS create mode 100644 apps/institution-ms-new/Dockerfile create mode 100644 apps/institution-ms-new/Dockerfile.new create mode 100644 apps/institution-ms-new/Dockerfile.new.dockerignore create mode 100644 apps/institution-ms-new/README.md create mode 100644 apps/institution-ms-new/app/pom.xml create mode 100644 apps/institution-ms-new/app/src/main/java/it/pagopa/selfcare/mscore/SelfCareCoreApplication.java create mode 100644 apps/institution-ms-new/app/src/main/resources/config/application.yml create mode 100644 apps/institution-ms-new/app/src/main/resources/config/azure-storage-config.properties create mode 100644 apps/institution-ms-new/app/src/main/resources/config/core-config.properties create mode 100644 apps/institution-ms-new/app/src/main/resources/swagger/api-docs.json create mode 100644 apps/institution-ms-new/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java create mode 100644 apps/institution-ms-new/connector-api/pom.xml create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/DelegationConnector.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/EmailConnector.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/FileStorageConnector.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/InstitutionConnector.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/NotificationServiceConnector.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PartyRegistryProxyConnector.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PecNotificationConnector.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/ProductConnector.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserApiConnector.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserRegistryConnector.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/AzureStorageConfig.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/CoreConfig.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/MailTemplateConfig.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/CustomError.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationState.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationType.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Env.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/GenericError.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Order.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Origin.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/PricingPlan.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/ProductId.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/RelationshipState.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/SearchMode.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/TokenType.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/BadGatewayException.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/InvalidRequestException.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/MsCoreException.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceConflictException.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceForbiddenException.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundException.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ServiceUnavailableException.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/AreaOrganizzativaOmogenea.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/Certification.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/CertifiedField.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/InstitutionToNotify.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/QueueEvent.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/RootParent.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UnitaOrganizzativa.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UserToNotify.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/QueryCount.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionAggregation.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionBinding.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionFilter.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/Delegation.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationInstitution.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationWithPagination.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/GetDelegationParameters.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/PageInfo.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/Problem.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/ProblemError.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ASResource.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/AdditionalInformations.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Attributes.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Billing.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/CategoryProxyInfo.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/DataProtectionOfficer.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomies.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomyPage.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Institution.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionByLegal.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomies.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomyPage.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionProxyInfo.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionUpdate.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/NationalRegistriesProfessionalAddress.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Onboarding.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/OnboardingPage.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaAttributes.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaymentServiceProvider.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Premium.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/SaResource.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ValidInstitution.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/WorkContact.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MessageRequest.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MultipleReceiverMessageRequest.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Contract.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ContractImported.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/MailTemplate.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedProduct.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedUser.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingInfo.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingLegalsRequest.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingOperatorsRequest.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRequest.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRollback.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUpdateRollback.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUsersRequest.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ResourceResponse.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Token.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenRelationships.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenUser.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/VerifyOnboardingFilters.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/Product.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductRoleInfo.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductStatus.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/ProductManagerInfo.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipInfo.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPage.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPageElement.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/User.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserBinding.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserInfo.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserToOnboard.java create mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/utils/MaskDataUtils.java create mode 100644 apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/InvalidRequestExceptionTest.java create mode 100644 apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/MsCoreExceptionTest.java create mode 100644 apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceConflictExceptionTest.java create mode 100644 apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundExceptionTest.java create mode 100644 apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/utils/MaskDataUtilsTest.java create mode 100644 apps/institution-ms-new/connector/azure-storage/pom.xml create mode 100644 apps/institution-ms-new/connector/azure-storage/src/main/java/it/pagopa/selfcare/mscore/connector/azure_storage/AzureBlobClient.java create mode 100644 apps/institution-ms-new/connector/azure-storage/src/test/java/it/pagopa/selfcare/mscore/connector/azure_storage/config/AzureStorageConfigTest.java create mode 100644 apps/institution-ms-new/connector/dao/pom.xml create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilder.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImpl.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepository.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImpl.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepository.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnector.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImpl.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImpl.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationRepository.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/TokenRepository.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/UserRepository.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfig.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverter.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverter.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/DelegationEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/InstitutionEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/TokenEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/UserEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionAggregationEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionBindingEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AdditionalInformationsEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AttributesEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/BillingEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/DataProtectionOfficerEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/GeoTaxonomyEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/InstitutionUpdateEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardedProductEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardingEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaAttributesEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaymentServiceProviderEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/TokenUserEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/UserBindingEntity.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationEntityMapper.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationInstitutionMapper.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionEntityMapper.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapper.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapperHelper.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/OnboardedProductMapper.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserEntityMapper.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserInstitutionAggregationMapper.java create mode 100644 apps/institution-ms-new/connector/dao/src/main/resources/config/dao-config.properties create mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilderTest.java create mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImplTest.java create mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepositoryTest.java create mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImplTest.java create mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepositoryTest.java create mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImplTest.java create mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImplTest.java create mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfigTest.java create mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverterTest.java create mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverterTest.java create mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserMapperTest.java create mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/utils/TestUtils.java create mode 100644 apps/institution-ms-new/connector/email/pom.xml create mode 100644 apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImpl.java create mode 100644 apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/config/EmailBaseConfig.java create mode 100644 apps/institution-ms-new/connector/email/src/main/resources/config/email.properties create mode 100644 apps/institution-ms-new/connector/email/src/test/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImplTest.java create mode 100644 apps/institution-ms-new/connector/pom.xml create mode 100644 apps/institution-ms-new/connector/rest/docs/openapi/registry_proxy.json create mode 100644 apps/institution-ms-new/connector/rest/docs/openapi/selfcare-user-docs.json create mode 100644 apps/institution-ms-new/connector/rest/docs/openapi/user_registry.json create mode 100644 apps/institution-ms-new/connector/rest/pom.xml create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImpl.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImpl.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImpl.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImpl.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/PartyRegistryProxyRestClient.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserApiRestClient.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserInstitutionApiRestClient.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserRegistryRestClient.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/FeignClientConfig.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/PartyRegistryProxyRestClientConfig.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserApiRestClientConfig.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserInstitutionApiRestClientConfig.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserRegistryRestClientConfig.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoder.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AooMapper.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AsMapper.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/SaMapper.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UoMapper.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UserMapperClient.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/geotaxonomy/GeographicTaxonomiesResponse.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AooResponse.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AsResponse.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/Institutions.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalRequest.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalResponse.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/LegalFilter.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/PdndResponse.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyCategoryResponse.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyInstitutionResponse.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/UoResponse.java create mode 100644 apps/institution-ms-new/connector/rest/src/main/resources/config/feign-client.properties create mode 100644 apps/institution-ms-new/connector/rest/src/main/resources/config/party-registry-proxy-rest-client.properties create mode 100644 apps/institution-ms-new/connector/rest/src/main/resources/config/user-registry-rest-client.properties create mode 100644 apps/institution-ms-new/connector/rest/src/main/resources/config/user-rest-client.properties create mode 100644 apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImplTest.java create mode 100644 apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImplTest.java create mode 100644 apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImplTest.java create mode 100644 apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImplTest.java create mode 100644 apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoderTest.java create mode 100644 apps/institution-ms-new/core/pom.xml create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStream.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactory.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ContractService.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationService.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalService.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalServiceImpl.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionService.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImpl.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationService.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImpl.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingDao.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingService.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationService.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImpl.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/CloudTemplateLoader.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/FreeMarkerConfig.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MdcTaskDecorator.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MsCoreConfig.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/InstitutionMapper.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/TokenMapper.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategy.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyAnac.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyCommon.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyInfocamere.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIpa.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIvass.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPda.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyRaw.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/factory/CreateInstitutionStrategyFactory.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/input/CreateInstitutionStrategyInput.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/Constants.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/InstitutionPaSubunitType.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapper.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtils.java create mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/UtilEnumList.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactoryTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ContractServiceTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ExternalServiceImplTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplPdaTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImplTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingDaoTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/TestUtils.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImplTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPdaTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapperTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtilsTest.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/TestUtils.java create mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/model/DummyUser.java create mode 100644 apps/institution-ms-new/lombok.config create mode 100644 apps/institution-ms-new/mvnw create mode 100644 apps/institution-ms-new/mvnw.cmd create mode 100644 apps/institution-ms-new/pom.xml create mode 100644 apps/institution-ms-new/web/pom.xml create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/CoreSecurityConfig.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfig.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/WebConfig.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationController.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2Controller.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ExternalController.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ManagementController.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/OnboardingController.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandler.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/filter/LogFilter.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequestFromTaxcode.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationWithPaginationResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AdditionalInformationsRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BrokerResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitution.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitutions.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkPartiesSeed.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkProduct.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatePgInstitutionRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatedAtRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/GeoTaxonomies.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionBillingResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionFromIpaPost.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionListResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagementResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagerResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardedRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingListResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionProduct.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionPut.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionToOnboard.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionsResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingsResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PdaInstitutionRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/ProductsManagement.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResult.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipsManagement.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RootParentResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/UserInfoResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/BrokerMapper.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/DelegationMapper.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustom.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionResourceMapper.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionUpdateMapper.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapper.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingResourceMapper.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapper.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/UserMapper.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/BusinessData.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ContractRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/LegalsResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedInstitutionResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProductResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProducts.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingImportContract.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInfoResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionLegalsRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionOperatorsRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionUsersRequest.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ProductInfo.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/SupportContact.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenListResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/InstitutionToNotifyResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/ScContractResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/InstitutionProducts.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/OnboardedUsersResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Person.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/PersonId.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Product.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCount.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCountResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserProductsResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserResponse.java create mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/util/CustomExceptionMessage.java create mode 100644 apps/institution-ms-new/web/src/main/resources/swagger/swagger_en.properties create mode 100644 apps/institution-ms-new/web/src/main/resources/swagger/swagger_it.properties create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/TestUtils.java create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/WebTestConfig.java create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationControllerTest.java create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2ControllerTest.java create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ExternalControllerTest.java create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerPdaTest.java create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerTest.java create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ManagementControllerTest.java create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/OnboardingControllerTest.java create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandlerTest.java create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/filter/LogFilterTest.java create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustomTest.java create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapperTest.java create mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapperTest.java diff --git a/apps/institution-ms-new/.dockerignore b/apps/institution-ms-new/.dockerignore new file mode 100644 index 0000000..4cbae43 --- /dev/null +++ b/apps/institution-ms-new/.dockerignore @@ -0,0 +1,12 @@ +**/.dockerignore +**/.git +**/bin +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md diff --git a/apps/institution-ms-new/.pre-commit-config.yaml b/apps/institution-ms-new/.pre-commit-config.yaml new file mode 100644 index 0000000..e991df9 --- /dev/null +++ b/apps/institution-ms-new/.pre-commit-config.yaml @@ -0,0 +1,10 @@ +repos: + - repo: https://github.com/antonbabenko/pre-commit-terraform + rev: v1.86.0 + hooks: + - id: terraform_fmt + - id: terraform_docs + - id: terraform_validate + args: + - --args=-json + - --args=-no-color \ No newline at end of file diff --git a/apps/institution-ms-new/.terraform-version b/apps/institution-ms-new/.terraform-version new file mode 100644 index 0000000..83d1a5e --- /dev/null +++ b/apps/institution-ms-new/.terraform-version @@ -0,0 +1 @@ +1.6.6 \ No newline at end of file diff --git a/apps/institution-ms-new/CODEOWNERS b/apps/institution-ms-new/CODEOWNERS new file mode 100644 index 0000000..04a4227 --- /dev/null +++ b/apps/institution-ms-new/CODEOWNERS @@ -0,0 +1,3 @@ +# see https://help.github.com/en/articles/about-code-owners#example-of-a-codeowners-file + +* @pagopa/selfcare-contributors diff --git a/apps/institution-ms-new/Dockerfile b/apps/institution-ms-new/Dockerfile new file mode 100644 index 0000000..322cffb --- /dev/null +++ b/apps/institution-ms-new/Dockerfile @@ -0,0 +1,5 @@ +FROM maven@sha256:dcfe7934d3780beda6e1f0f641bc7db3fa9b8818899981f6eddae052c78394c7 +ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/3.1.1/applicationinsights-agent-3.1.1.jar /applicationinsights-agent.jar +VOLUME /tmp +COPY target/*.jar app.jar +ENTRYPOINT ["java","-jar","app.jar"] \ No newline at end of file diff --git a/apps/institution-ms-new/Dockerfile.new b/apps/institution-ms-new/Dockerfile.new new file mode 100644 index 0000000..8f8f2be --- /dev/null +++ b/apps/institution-ms-new/Dockerfile.new @@ -0,0 +1,35 @@ +FROM maven:3-eclipse-temurin-17@sha256:0d328fa6843bb26b60cf44d69833f241ffe96218fb29fa19df7a6603863eaae7 AS builder + +COPY . . + +RUN echo "\n" \ + "\n" \ + "\n" \ + "\${repositoryOnboarding}\n" \ + "\${repoLogin}\n" \ + "\${repoPwd}\n" \ + "\n" \ + "\n" \ + "\n" > settings.xml + +ARG REPO_ONBOARDING +ARG REPO_USERNAME +ARG REPO_PASSWORD + +RUN mvn --global-settings settings.xml -DrepositoryOnboarding=${REPO_ONBOARDING} -DrepoLogin=${REPO_USERNAME} -DrepoPwd=${REPO_PASSWORD} clean package -DskipTests=true + +FROM openjdk:17-jdk@sha256:528707081fdb9562eb819128a9f85ae7fe000e2fbaeaf9f87662e7b3f38cb7d8 AS runtime + +ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' + +WORKDIR /app + +COPY --from=builder ./target/*.jar ./app.jar + +ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/3.2.11/applicationinsights-agent-3.2.11.jar ./applicationinsights-agent.jar +RUN chmod 755 ./applicationinsights-agent.jar + +EXPOSE 8080 +USER 1001 + +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/apps/institution-ms-new/Dockerfile.new.dockerignore b/apps/institution-ms-new/Dockerfile.new.dockerignore new file mode 100644 index 0000000..427b8ce --- /dev/null +++ b/apps/institution-ms-new/Dockerfile.new.dockerignore @@ -0,0 +1,117 @@ +**/.dockerignore +**/.git +**/bin +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md + +**/.idea +.idea +**/.mvn +.mvn + +**/target + +# Created by .ignore support plugin (hsz.mobi) +### Maven template +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +### Java template +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests \ No newline at end of file diff --git a/apps/institution-ms-new/README.md b/apps/institution-ms-new/README.md new file mode 100644 index 0000000..7da7e5e --- /dev/null +++ b/apps/institution-ms-new/README.md @@ -0,0 +1,47 @@ +# selfcare-ms-core + +## Description +This Spring Boot-based microservice is designed to handle several key functionalities in the selfcare operations domain. It includes business logic for: + +- Onboarding operations. +- Management of institutions and delegations. +- User creation. +- Associating users with products and institutions. + +## Prerequisites +Before running the microservice, ensure you have installed: + +- Java JDK 17 or higher +- Maven 3.6 or higher +- Connection to VPN selc-d-vnet + +## Configuration +Look at app/src/main/resources/`application.yml` file to set up environment-specific settings, such as database details. + +## Installation and Local Startup +To run the microservice locally, follow these steps: + +1. **Clone the Repository** + +```shell script +git clone https://github.com/pagopa/selfcare-ms-core.git +cd selfcare-ms-core +``` + +2. **Build the Project** + +```shell script +mvn clean install +``` + +2. **Start the Application** + +```shell script +mvn spring-boot:run -pl app +``` + +## Usage +After starting, the microservice will be available at `http://localhost:8080/`. + +To use the API, refer to the Swagger UI documentation (if available) at `http://localhost:8080/swagger-ui.html`. + diff --git a/apps/institution-ms-new/app/pom.xml b/apps/institution-ms-new/app/pom.xml new file mode 100644 index 0000000..12a6481 --- /dev/null +++ b/apps/institution-ms-new/app/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + selc-ms-core + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-app + + + + it.pagopa.selfcare + selc-ms-core-web + + + it.pagopa.selfcare + selc-ms-core-connector-dao + runtime + + + it.pagopa.selfcare + selc-ms-core-connector-rest + runtime + + + it.pagopa.selfcare + selc-ms-core-connector-azure-storage + runtime + + + it.pagopa.selfcare + selc-ms-core-connector-email + runtime + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + false + ${project.parent.artifactId}-${project.parent.version}-FATJAR + ../target + + + org.projectlombok + lombok + + + + + + + + diff --git a/apps/institution-ms-new/app/src/main/java/it/pagopa/selfcare/mscore/SelfCareCoreApplication.java b/apps/institution-ms-new/app/src/main/java/it/pagopa/selfcare/mscore/SelfCareCoreApplication.java new file mode 100644 index 0000000..3b116ad --- /dev/null +++ b/apps/institution-ms-new/app/src/main/java/it/pagopa/selfcare/mscore/SelfCareCoreApplication.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; + +@SpringBootApplication +@EnableAsync +public class SelfCareCoreApplication { + + public static void main(String[] args) { + SpringApplication.run(SelfCareCoreApplication.class, args); + } + +} diff --git a/apps/institution-ms-new/app/src/main/resources/config/application.yml b/apps/institution-ms-new/app/src/main/resources/config/application.yml new file mode 100644 index 0000000..ebc4a01 --- /dev/null +++ b/apps/institution-ms-new/app/src/main/resources/config/application.yml @@ -0,0 +1,60 @@ +server: + port: ${APP_SERVER_PORT:8080} + shutdown: graceful + +spring: + application: + name: "@project.parent.artifactId@" + version: "@project.version@" + profiles: + include: + # TO enable specific-language documentations + - swaggerEN + - AzureStorage + data: + web: + pageable: + max-page-size: ${MAX_PAGE_SIZE:2000} + zipkin: + enabled: false + sleuth: + baggage: + remote-fields: X-Client-Ip + correlation-fields: X-Client-Ip + +info: + build: + artifact: "@project.parent.artifactId@" + name: "@project.parent.artifactId@" + description: "@project.description@" + version: "@project.version@" + + +logging: + level: + it: + pagopa: + selfcare: ${APP_LOG_LEVEL:DEBUG} + org: + springframework: + data: + mongodb: + core: + MongoTemplate: DEBUG + pattern: + additional-info: ",%X{X-Client-Ip:-}]" + +core: + user-event-service: + type: ${CORE_USER_EVENT_SERVICE_TYPE:ignore} + contract-event-service: + type: ${CORE_CONTRACT_EVENT_SERVICE_TYPE:ignore} + resilience4j: + retry: + retry-aspect-order: 1 + instances: + retryTimeout: + max-attempts: 3 + wait-duration: 5s + retry-exceptions: + - feign.RetryableException \ No newline at end of file diff --git a/apps/institution-ms-new/app/src/main/resources/config/azure-storage-config.properties b/apps/institution-ms-new/app/src/main/resources/config/azure-storage-config.properties new file mode 100644 index 0000000..a9370ea --- /dev/null +++ b/apps/institution-ms-new/app/src/main/resources/config/azure-storage-config.properties @@ -0,0 +1,7 @@ +blob-storage.account-key=${STORAGE_CREDENTIAL_SECRET} +blob-storage.container=${STORAGE_CONTAINER} +blob-storage.checkout-template-container=${STORAGE_TEMPLATE_URL}/resources/templates/email/ +blob-storage.endpoint-suffix = ${STORAGE_ENDPOINT} +blob-storage.account-name = ${STORAGE_CREDENTIAL_ID} +blob-storage.contract-path = parties/docs/ +blob-storage.connection-string = ${BLOB_STORAGE_CONN_STRING:UseDevelopmentStorage=true;} \ No newline at end of file diff --git a/apps/institution-ms-new/app/src/main/resources/config/core-config.properties b/apps/institution-ms-new/app/src/main/resources/config/core-config.properties new file mode 100644 index 0000000..9a5ec02 --- /dev/null +++ b/apps/institution-ms-new/app/src/main/resources/config/core-config.properties @@ -0,0 +1,31 @@ +mscore.port=8080 + +mscore.logoPath = ${PAGOPA_LOGO_URL:resources/logo.png} +mscore.infoCamereEnable = ${INFOCAMERE_ENABLE:false} +mscore.sender-mail = ${MAIL_SENDER_ADDRESS:test@test.it} +mscore.destination-mails = ${DESTINATION_MAILS:} +mscore.enableSendDelegationMail=${SEND_DELEGATION_PEC:false} +mscore.sendEmailToInstitution = ${ONBOARDING_SEND_EMAIL_TO_INSTITUTION:false} +mscore.institutionAlternativeEmail = ${ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL} + +mscore.mail-template.placeholders.onboarding.delegationNotificationPath = ${MAIL_TEMPLATE_DELEGATION_NOTIFICATION_PATH} +mscore.mail-template.placeholders.onboarding.delegationUserNotificationPath = ${MAIL_TEMPLATE_DELEGATION_USER_NOTIFICATION_PATH} +mscore.mail-template.placeholders.onboarding.delegationPartnerName = partnerName + +mscore.mail-template.placeholders.onboarding.institutionDescription = institutionName +mscore.mail-template.placeholders.onboarding.notificationProductName = productName + +scheduler.threads.max-number=${THREADS_SCHEDULE_MAX_NUMBER:1} +scheduler.fixed-delay.delay=${SCHEDULER_FIXED_DELAY:20000} + +mscore.blob-storage.container-product=${PRODUCT_STORAGE_CONTAINER:selc-d-product} +mscore.blob-storage.filepath-product = products.json +mscore.blob-storage.connection-string-product = ${BLOB_STORAGE_PRODUCT_CONNECTION_STRING:UseDevelopmentStorage=true;} + +#SES +mscore.aws-ses-secret-id=${AWS_SES_ACCESS_KEY_ID:secret-id-example} +mscore.aws-ses-secret-key=${AWS_SES_SECRET_ACCESS_KEY:secret-key-example} +mscore.aws-ses-region=${AWS_SES_REGION:eu-south-1} + +mscore.sending-frequency-pec-notification=${SENDING_FREQUENCY_PEC_NOTIFICATION:30} +mscore.epoch-date-pec-notification=${EPOCH_DATE_PEC_NOTIFICATION:2024-01-01} \ No newline at end of file diff --git a/apps/institution-ms-new/app/src/main/resources/swagger/api-docs.json b/apps/institution-ms-new/app/src/main/resources/swagger/api-docs.json new file mode 100644 index 0000000..936ecd7 --- /dev/null +++ b/apps/institution-ms-new/app/src/main/resources/swagger/api-docs.json @@ -0,0 +1,3804 @@ +{ + "openapi" : "3.0.3", + "info" : { + "title" : "selc-ms-core", + "version" : "1.0-SNAPSHOT" + }, + "servers" : [ { + "url" : "{url}:{port}{basePath}", + "variables" : { + "url" : { + "default" : "http://localhost" + }, + "port" : { + "default" : "80" + }, + "basePath" : { + "default" : "" + } + } + } ], + "tags" : [ { + "name" : "Delegation", + "description" : "Delegation Controller" + }, { + "name" : "External", + "description" : "External Controller" + }, { + "name" : "Institution", + "description" : "Institution Controller" + }, { + "name" : "Management", + "description" : "Management Controller" + }, { + "name" : "Onboarding", + "description" : "Onboarding Controller" + } ], + "paths" : { + "/delegations" : { + "get" : { + "tags" : [ "Delegation", "external-v2", "support" ], + "summary" : "Retrieve institution's delegations", + "description" : "Retrieve institution's delegations", + "operationId" : "getDelegationsUsingGET", + "parameters" : [ { + "name" : "institutionId", + "in" : "query", + "description" : "The internal identifier of the institution", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "brokerId", + "in" : "query", + "description" : "The internal identifier of the institution", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "query", + "description" : "Product's unique identifier", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "search", + "in" : "query", + "description" : "Description ente", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "taxCode", + "in" : "query", + "description" : "Institution's tax code", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "order", + "in" : "query", + "description" : "Order to show response NONE, ASC, DESC", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string", + "enum" : [ "ASC", "DESC", "NONE" ] + } + }, { + "name" : "page", + "in" : "query", + "description" : "page", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "size", + "in" : "query", + "description" : "size", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DelegationResponse" + } + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + }, + "post" : { + "tags" : [ "Delegation" ], + "summary" : "Create an association between institution id and technical partner", + "description" : "Create an association between institution id and technical partner", + "operationId" : "createDelegationUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/DelegationRequest" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/DelegationResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/delegations/from-taxcode" : { + "post" : { + "tags" : [ "Delegation" ], + "summary" : "Create an association between institution and technical partner using taxCode for both instead of internal id. It is useful when we don't know institution's internal id.", + "description" : "Create an association between institution and technical partner using taxCode for both instead of internal id. It is useful when we don't know institution's internal id.", + "operationId" : "createDelegationFromInstitutionsTaxCodeUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/DelegationRequestFromTaxcode" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/DelegationResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/delegations/{delegationId}" : { + "delete" : { + "tags" : [ "Delegation" ], + "summary" : "Delete an association between institution id and technical partner setting its status to DELETED and setting delegation to false on institution if it has no more delegations", + "description" : "Delete an association between institution id and technical partner setting its status to DELETED and setting delegation to false on institution if it has no more delegations", + "operationId" : "deleteDelegationUsingDELETE", + "parameters" : [ { + "name" : "delegationId", + "in" : "path", + "description" : "Delegation's unique internal identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "204" : { + "description" : "No Content" + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/v2/delegations" : { + "get" : { + "tags" : [ "Delegation" ], + "summary" : "Retrieve institution's delegations with pagination", + "description" : "Retrieve institution's delegations with pagination", + "operationId" : "getDelegationsUsingGET_1", + "parameters" : [ { + "name" : "institutionId", + "in" : "query", + "description" : "The internal identifier of the institution", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "brokerId", + "in" : "query", + "description" : "The internal identifier of the institution", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "query", + "description" : "Product's unique identifier", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "search", + "in" : "query", + "description" : "Description ente", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "taxCode", + "in" : "query", + "description" : "Institution's tax code", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "order", + "in" : "query", + "description" : "Order to show response NONE, ASC, DESC", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string", + "enum" : [ "ASC", "DESC", "NONE" ] + } + }, { + "name" : "page", + "in" : "query", + "description" : "page", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "size", + "in" : "query", + "description" : "size", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/DelegationWithPaginationResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/external/institutions" : { + "get" : { + "tags" : [ "External" ], + "summary" : "Gets the corresponding institution using internal institution id", + "description" : "Gets the corresponding institution using internal institution id", + "operationId" : "retrieveInstitutionByIdsUsingGET", + "parameters" : [ { + "name" : "ids", + "in" : "query", + "description" : "List of Institution to onboard", + "required" : true, + "style" : "form", + "explode" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/external/institutions/{externalId}" : { + "get" : { + "tags" : [ "External" ], + "summary" : "Gets institution using external institution id", + "description" : "Gets institution using external institution id", + "operationId" : "getByExternalIdUsingGET", + "parameters" : [ { + "name" : "externalId", + "in" : "path", + "description" : "Institution's unique external identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/external/institutions/{externalId}/geotaxonomies" : { + "get" : { + "tags" : [ "External" ], + "summary" : "retrieves the geographic taxonomies related to Institution.", + "description" : "retrieves the geographic taxonomies related to Institution.", + "operationId" : "retrieveInstitutionGeoTaxonomiesByExternalIdUsingGET", + "parameters" : [ { + "name" : "externalId", + "in" : "path", + "description" : "Institution's unique external identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/GeographicTaxonomies" + } + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/external/institutions/{externalId}/products" : { + "get" : { + "tags" : [ "External" ], + "summary" : "retrieves the products related to Institution", + "description" : "retrieves the products related to Institution", + "operationId" : "retrieveInstitutionProductsByExternalIdUsingGET", + "parameters" : [ { + "name" : "externalId", + "in" : "path", + "description" : "Institution's unique external identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "states", + "in" : "query", + "description" : "states", + "required" : false, + "style" : "form", + "explode" : true, + "schema" : { + "type" : "string", + "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/OnboardedProducts" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/external/institutions/{externalId}/products/{productId}/billing" : { + "get" : { + "tags" : [ "External" ], + "summary" : "retrieves the billing data related to the institution even if the current user is not related to the institution/product", + "description" : "retrieves the billing data related to the institution even if the current user is not related to the institution/product", + "operationId" : "getBillingInstitutionByExternalIdUsingGET", + "parameters" : [ { + "name" : "externalId", + "in" : "path", + "description" : "Institution's unique external identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "path", + "description" : "Product's unique identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionBillingResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions" : { + "get" : { + "tags" : [ "Institution", "external-v2", "support", "support-pnpg" ], + "summary" : "Gets institutions filtering by taxCode and/or subunitCode", + "description" : "Gets institutions filtering by taxCode and/or subunitCode", + "operationId" : "getInstitutionsUsingGET", + "parameters" : [ { + "name" : "taxCode", + "in" : "query", + "description" : "Institution's tax code", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "subunitCode", + "in" : "query", + "description" : "Institution's subunit code", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "origin", + "in" : "query", + "description" : "origin", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "originId", + "in" : "query", + "description" : "originId", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionsResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + }, + "post" : { + "tags" : [ "Institution" ], + "summary" : "create an institution using external institution id without fetching data from party-registry or info-camere", + "description" : "create an institution using external institution id without fetching data from party-registry or info-camere", + "operationId" : "createInstitutionUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionRequest" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/from-anac" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "Create an association between institution id and technical partner from anac", + "description" : "Create an association between institution id and technical partner from anac", + "operationId" : "createInstitutionFromAnacUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionRequest" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/from-infocamere" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "create an institution from infocamere registry", + "description" : "create an institution from infocamere registry", + "operationId" : "createInstitutionFromInfocamereUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionRequest" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/from-ipa" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "create an institution from ipa registry", + "description" : "create an institution from ipa registry", + "operationId" : "createInstitutionFromIpaUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionFromIpaPost" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/from-ivass" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "create an institution from ivass CSV", + "description" : "create an institution from ivass CSV", + "operationId" : "createInstitutionFromIvassUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionRequest" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/from-pda" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "Create an association between institution id and technical partner from pda", + "description" : "create an institution from ipa registry", + "operationId" : "createInstitutionFromPdaUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/PdaInstitutionRequest" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/insert/{externalId}" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "create an institution using external institution id without fetching data from party-registry or info-camere", + "description" : "create an institution using external institution id without fetching data from party-registry or info-camere", + "operationId" : "createInstitutionRawUsingPOST", + "parameters" : [ { + "name" : "externalId", + "in" : "path", + "description" : "Institution's unique external identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionRequest" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "deprecated" : true, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/onboarded/{productId}" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "Retrieve list of institution which logged user can onboard", + "description" : "Retrieve list of institution which logged user can onboard", + "operationId" : "getValidInstitutionToOnboardUsingPOST", + "parameters" : [ { + "name" : "productId", + "in" : "path", + "description" : "productId", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionToOnboard" + } + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionToOnboard" + } + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/pg" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "create an institution (PG) using external institution id fetching data from info-camere", + "description" : "create an institution (PG) using external institution id fetching data from info-camere", + "operationId" : "createPgInstitutionUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CreatePgInstitutionRequest" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/products/{productId}" : { + "get" : { + "tags" : [ "Institution" ], + "summary" : "Gets institutions filtering onboardings by product id", + "description" : "Gets institutions filtering onboardings by product id", + "operationId" : "findFromProductUsingGET", + "parameters" : [ { + "name" : "productId", + "in" : "path", + "description" : "Product's unique identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "page", + "in" : "query", + "description" : "Page number", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "size", + "in" : "query", + "description" : "Page size", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionOnboardingListResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{externalId}" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "create an institution (PA) using external institution id fetching data from party-registry", + "description" : "create an institution (PA) using external institution id fetching data from party-registry", + "operationId" : "createInstitutionByExternalIdUsingPOST", + "parameters" : [ { + "name" : "externalId", + "in" : "path", + "description" : "Institution's unique external identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "deprecated" : true, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{id}" : { + "get" : { + "tags" : [ "Institution", "external-v2" ], + "summary" : "Gets the corresponding institution using internal institution id", + "description" : "Gets the corresponding institution using internal institution id", + "operationId" : "retrieveInstitutionByIdUsingGET", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "The internal identifier of the institution", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + }, + "put" : { + "tags" : [ "Institution" ], + "summary" : "update institution data of given institution", + "description" : "update institution data of given institution", + "operationId" : "updateInstitutionUsingPUT", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "The internal identifier of the institution", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionPut" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "403" : { + "description" : "Forbidden", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{id}/geotaxonomies" : { + "get" : { + "tags" : [ "Institution" ], + "summary" : "retrieves the geographic taxonomies this institution is related to", + "description" : "retrieves the geographic taxonomies this institution is related to", + "operationId" : "retrieveInstitutionGeoTaxonomiesUsingGET", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "The internal identifier of the institution", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/GeographicTaxonomies" + } + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{id}/onboarding" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "The service adds users to the registry if they are not present and associates them with the institution and product contained in the body", + "description" : "The service adds users to the registry if they are not present and associates them with the institution and product contained in the body", + "operationId" : "onboardingInstitutionUsingPOST", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "id", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionOnboardingRequest" + } + } + } + }, + "responses" : { + "200" : { + "description" : "User already exists an onboarding in status ACTIVE or SUSPENDED with that productId", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{id}/products" : { + "get" : { + "tags" : [ "Institution" ], + "summary" : "retrieves the insistitution's related products.", + "description" : "retrieves the insistitution's related products.", + "operationId" : "retrieveInstitutionProductsUsingGET", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "The internal identifier of the institution", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "states", + "in" : "query", + "description" : "List of Relationship state for filter products", + "required" : false, + "style" : "form", + "explode" : true, + "schema" : { + "type" : "string", + "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/OnboardedProducts" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{id}/products/{productId}" : { + "delete" : { + "tags" : [ "Institution" ], + "summary" : "The service set DELETE status on onboarding association with the product and institutionId", + "description" : "The service set DELETE status on onboarding association with the product and institutionId", + "operationId" : "deleteOnboardedInstitutionUsingDELETE", + "parameters" : [ { + "name" : "productId", + "in" : "path", + "description" : "productId", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "id", + "in" : "path", + "description" : "id", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "204" : { + "description" : "No Content" + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{institutionId}/createdAt" : { + "put" : { + "tags" : [ "Institution" ], + "summary" : "The service updates the createdAt field for the institution-product pair", + "description" : "The service updates the createdAt field for the institution-product pair", + "operationId" : "updateCreatedAtUsingPUT", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "description" : "The internal identifier of the institution", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CreatedAtRequest" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK" + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "403" : { + "description" : "Forbidden", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{institutionId}/onboardings" : { + "get" : { + "tags" : [ "Institution", "external-v2" ], + "summary" : "Retrieve institution information", + "description" : "Retrieve institution information", + "operationId" : "getOnboardingsInstitutionUsingGET", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "description" : "The internal identifier of the institution", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "query", + "description" : "productId", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/OnboardingsResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{productId}/brokers/{institutionType}" : { + "get" : { + "tags" : [ "Institution" ], + "summary" : "Retrieve institution brokers", + "description" : "Retrieve institution brokers", + "operationId" : "getInstitutionBrokersUsingGET", + "parameters" : [ { + "name" : "productId", + "in" : "path", + "description" : "Product's unique identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "institutionType", + "in" : "path", + "description" : "Institution's type", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BrokerResponse" + } + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/bulk/institutions" : { + "post" : { + "tags" : [ "Management" ], + "summary" : "Gets the corresponding institution using internal institution id", + "description" : "Gets the corresponding institution using internal institution id", + "operationId" : "retrieveInstitutionByIdsUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/BulkPartiesSeed" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/BulkInstitutions" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/onboarding" : { + "head" : { + "tags" : [ "Onboarding" ], + "summary" : "verify if onboardedProduct is already onboarded for institution", + "description" : "verify if onboardedProduct is already onboarded for institution", + "operationId" : "verifyOnboardingInfoUsingHEAD", + "parameters" : [ { + "name" : "taxCode", + "in" : "query", + "description" : "Institution's tax code", + "required" : true, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "subunitCode", + "in" : "query", + "description" : "Institution's subunit code", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "query", + "description" : "Product's unique identifier", + "required" : true, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "204" : { + "description" : "No Content" + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/onboarding/institution/{externalId}/products/{productId}" : { + "head" : { + "tags" : [ "Onboarding" ], + "summary" : "verify if onboardedProduct is already onboarded for institution", + "description" : "verify if onboardedProduct is already onboarded for institution", + "operationId" : "verifyOnboardingInfoUsingHEAD_1", + "parameters" : [ { + "name" : "externalId", + "in" : "path", + "description" : "Institution's unique external identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "path", + "description" : "Product's unique identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "204" : { + "description" : "No Content" + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/onboarding/verify" : { + "head" : { + "tags" : [ "Onboarding" ], + "summary" : "verify if onboardedProduct is already onboarded for institution", + "description" : "verify if onboardedProduct is already onboarded for institution", + "operationId" : "verifyOnboardingInfoByFiltersUsingHEAD", + "parameters" : [ { + "name" : "productId", + "in" : "query", + "description" : "Product's unique identifier", + "required" : true, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "externalId", + "in" : "query", + "description" : "Institution's unique external identifier", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "taxCode", + "in" : "query", + "description" : "Institution's tax code", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "origin", + "in" : "query", + "description" : "Institution's origin", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "originId", + "in" : "query", + "description" : "Institution's id in the relative origin open data", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "subunitCode", + "in" : "query", + "description" : "Institution's subunit code", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "204" : { + "description" : "No Content" + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + } + }, + "components" : { + "schemas" : { + "AdditionalInformations" : { + "title" : "AdditionalInformations", + "type" : "object", + "properties" : { + "agentOfPublicService" : { + "type" : "boolean" + }, + "agentOfPublicServiceNote" : { + "type" : "string" + }, + "belongRegulatedMarket" : { + "type" : "boolean" + }, + "establishedByRegulatoryProvision" : { + "type" : "boolean" + }, + "establishedByRegulatoryProvisionNote" : { + "type" : "string" + }, + "ipa" : { + "type" : "boolean" + }, + "ipaCode" : { + "type" : "string" + }, + "otherNote" : { + "type" : "string" + }, + "regulatedMarketNote" : { + "type" : "string" + } + } + }, + "AttributesRequest" : { + "title" : "AttributesRequest", + "type" : "object", + "properties" : { + "code" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "origin" : { + "type" : "string" + } + } + }, + "AttributesResponse" : { + "title" : "AttributesResponse", + "type" : "object", + "properties" : { + "code" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "origin" : { + "type" : "string" + } + } + }, + "Billing" : { + "title" : "Billing", + "type" : "object", + "properties" : { + "publicServices" : { + "type" : "boolean" + }, + "recipientCode" : { + "type" : "string" + }, + "taxCodeInvoicing" : { + "type" : "string" + }, + "vatNumber" : { + "type" : "string" + } + } + }, + "BillingRequest" : { + "title" : "BillingRequest", + "type" : "object", + "properties" : { + "publicServices" : { + "type" : "boolean" + }, + "recipientCode" : { + "type" : "string" + }, + "taxCodeInvoicing" : { + "type" : "string" + }, + "vatNumber" : { + "type" : "string" + } + } + }, + "BillingResponse" : { + "title" : "BillingResponse", + "type" : "object", + "properties" : { + "publicServices" : { + "type" : "boolean" + }, + "recipientCode" : { + "type" : "string" + }, + "taxCodeInvoicing" : { + "type" : "string" + }, + "vatNumber" : { + "type" : "string" + } + } + }, + "BrokerResponse" : { + "title" : "BrokerResponse", + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "id" : { + "type" : "string" + }, + "numberOfDelegations" : { + "type" : "integer", + "format" : "int32" + }, + "taxCode" : { + "type" : "string" + } + } + }, + "BulkInstitution" : { + "title" : "BulkInstitution", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "attributes" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/AttributesResponse" + } + }, + "description" : { + "type" : "string" + }, + "digitalAddress" : { + "type" : "string" + }, + "externalId" : { + "type" : "string" + }, + "id" : { + "type" : "string" + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "origin" : { + "type" : "string" + }, + "originId" : { + "type" : "string" + }, + "products" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/BulkProduct" + } + }, + "taxCode" : { + "type" : "string" + }, + "zipCode" : { + "type" : "string" + } + } + }, + "BulkInstitutions" : { + "title" : "BulkInstitutions", + "type" : "object", + "properties" : { + "found" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BulkInstitution" + } + }, + "notFound" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "BulkPartiesSeed" : { + "title" : "BulkPartiesSeed", + "type" : "object", + "properties" : { + "partyIdentifiers" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "BulkProduct" : { + "title" : "BulkProduct", + "type" : "object", + "properties" : { + "billing" : { + "$ref" : "#/components/schemas/BillingResponse" + }, + "pricingPlan" : { + "type" : "string" + }, + "product" : { + "type" : "string" + }, + "status" : { + "type" : "string", + "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] + } + } + }, + "Contract" : { + "title" : "Contract", + "type" : "object", + "properties" : { + "path" : { + "type" : "string" + }, + "version" : { + "type" : "string" + } + } + }, + "CreatePgInstitutionRequest" : { + "title" : "CreatePgInstitutionRequest", + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "existsInRegistry" : { + "type" : "boolean" + }, + "taxId" : { + "type" : "string" + } + } + }, + "CreatedAtRequest" : { + "title" : "CreatedAtRequest", + "type" : "object", + "properties" : { + "activatedAt" : { + "type" : "string", + "format" : "date-time" + }, + "createdAt" : { + "type" : "string", + "format" : "date-time" + }, + "productId" : { + "type" : "string" + } + } + }, + "DataProtectionOfficer" : { + "title" : "DataProtectionOfficer", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "pec" : { + "type" : "string" + } + } + }, + "DataProtectionOfficerRequest" : { + "title" : "DataProtectionOfficerRequest", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "pec" : { + "type" : "string" + } + } + }, + "DataProtectionOfficerResponse" : { + "title" : "DataProtectionOfficerResponse", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "pec" : { + "type" : "string" + } + } + }, + "DelegationRequest" : { + "title" : "DelegationRequest", + "type" : "object", + "properties" : { + "from" : { + "type" : "string" + }, + "institutionFromName" : { + "type" : "string" + }, + "institutionToName" : { + "type" : "string" + }, + "productId" : { + "type" : "string" + }, + "to" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "enum" : [ "AOO", "EA", "PT" ] + } + } + }, + "DelegationRequestFromTaxcode" : { + "title" : "DelegationRequestFromTaxcode", + "type" : "object", + "properties" : { + "fromSubunitCode" : { + "type" : "string" + }, + "fromTaxCode" : { + "type" : "string" + }, + "institutionFromName" : { + "type" : "string" + }, + "institutionToName" : { + "type" : "string" + }, + "productId" : { + "type" : "string" + }, + "toSubunitCode" : { + "type" : "string" + }, + "toTaxCode" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "enum" : [ "AOO", "EA", "PT" ] + } + } + }, + "DelegationResponse" : { + "title" : "DelegationResponse", + "type" : "object", + "properties" : { + "brokerId" : { + "type" : "string" + }, + "brokerName" : { + "type" : "string" + }, + "brokerTaxCode" : { + "type" : "string" + }, + "brokerType" : { + "type" : "string" + }, + "createdAt" : { + "type" : "string", + "format" : "date-time" + }, + "id" : { + "type" : "string" + }, + "institutionId" : { + "type" : "string" + }, + "institutionName" : { + "type" : "string" + }, + "institutionRootName" : { + "type" : "string" + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "productId" : { + "type" : "string" + }, + "status" : { + "type" : "string", + "enum" : [ "ACTIVE", "DELETED" ] + }, + "taxCode" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "enum" : [ "AOO", "EA", "PT" ] + }, + "updatedAt" : { + "type" : "string", + "format" : "date-time" + } + } + }, + "DelegationWithPaginationResponse" : { + "title" : "DelegationWithPaginationResponse", + "type" : "object", + "properties" : { + "delegations" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DelegationResponse" + } + }, + "pageInfo" : { + "$ref" : "#/components/schemas/PageInfo" + } + } + }, + "GeoTaxonomies" : { + "title" : "GeoTaxonomies", + "type" : "object", + "properties" : { + "code" : { + "type" : "string" + }, + "desc" : { + "type" : "string" + } + } + }, + "GeographicTaxonomies" : { + "title" : "GeographicTaxonomies", + "type" : "object", + "properties" : { + "code" : { + "type" : "string" + }, + "country" : { + "type" : "string" + }, + "country_abbreviation" : { + "type" : "string" + }, + "desc" : { + "type" : "string" + }, + "enabled" : { + "type" : "boolean" + }, + "istat_code" : { + "type" : "string" + }, + "province_abbreviation" : { + "type" : "string" + }, + "province_id" : { + "type" : "string" + }, + "region_id" : { + "type" : "string" + } + } + }, + "InstitutionBillingResponse" : { + "title" : "InstitutionBillingResponse", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "aooParentCode" : { + "type" : "string" + }, + "billing" : { + "$ref" : "#/components/schemas/BillingResponse" + }, + "description" : { + "type" : "string" + }, + "digitalAddress" : { + "type" : "string" + }, + "externalId" : { + "type" : "string" + }, + "institutionId" : { + "type" : "string" + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "origin" : { + "type" : "string", + "enum" : [ "ADE", "ANAC", "INFOCAMERE", "IPA", "IVASS", "MOCK", "SELC", "UNKNOWN" ] + }, + "originId" : { + "type" : "string" + }, + "pricingPlan" : { + "type" : "string" + }, + "subunitCode" : { + "type" : "string" + }, + "subunitType" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "zipCode" : { + "type" : "string" + } + } + }, + "InstitutionFromIpaPost" : { + "title" : "InstitutionFromIpaPost", + "type" : "object", + "properties" : { + "geographicTaxonomies" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/GeoTaxonomies" + } + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "subunitCode" : { + "type" : "string" + }, + "subunitType" : { + "type" : "string", + "enum" : [ "AOO", "UO" ] + }, + "taxCode" : { + "type" : "string" + } + } + }, + "InstitutionGeographicTaxonomies" : { + "title" : "InstitutionGeographicTaxonomies", + "type" : "object", + "properties" : { + "code" : { + "type" : "string" + }, + "desc" : { + "type" : "string" + } + } + }, + "InstitutionOnboardingListResponse" : { + "title" : "InstitutionOnboardingListResponse", + "type" : "object", + "properties" : { + "items" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionOnboardingResponse" + } + } + } + }, + "InstitutionOnboardingRequest" : { + "title" : "InstitutionOnboardingRequest", + "type" : "object", + "properties" : { + "activatedAt" : { + "type" : "string", + "format" : "date-time" + }, + "billing" : { + "$ref" : "#/components/schemas/BillingRequest" + }, + "contractPath" : { + "type" : "string" + }, + "isAggregator" : { + "type" : "boolean" + }, + "pricingPlan" : { + "type" : "string" + }, + "productId" : { + "type" : "string" + }, + "tokenId" : { + "type" : "string" + } + } + }, + "InstitutionOnboardingResponse" : { + "title" : "InstitutionOnboardingResponse", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "aooParentCode" : { + "type" : "string" + }, + "attributes" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/AttributesResponse" + } + }, + "businessRegisterPlace" : { + "type" : "string" + }, + "createdAt" : { + "type" : "string", + "format" : "date-time" + }, + "dataProtectionOfficer" : { + "$ref" : "#/components/schemas/DataProtectionOfficerResponse" + }, + "description" : { + "type" : "string" + }, + "digitalAddress" : { + "type" : "string" + }, + "externalId" : { + "type" : "string" + }, + "geographicTaxonomies" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/GeoTaxonomies" + } + }, + "id" : { + "type" : "string" + }, + "imported" : { + "type" : "boolean" + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "onboardings" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/OnboardingResponse" + } + }, + "origin" : { + "type" : "string" + }, + "originId" : { + "type" : "string" + }, + "paymentServiceProvider" : { + "$ref" : "#/components/schemas/PaymentServiceProviderResponse" + }, + "rea" : { + "type" : "string" + }, + "shareCapital" : { + "type" : "string" + }, + "subunitCode" : { + "type" : "string" + }, + "subunitType" : { + "type" : "string" + }, + "supportEmail" : { + "type" : "string" + }, + "supportPhone" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "updatedAt" : { + "type" : "string", + "format" : "date-time" + }, + "zipCode" : { + "type" : "string" + } + } + }, + "InstitutionProduct" : { + "title" : "InstitutionProduct", + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "state" : { + "type" : "string", + "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] + } + } + }, + "InstitutionPut" : { + "title" : "InstitutionPut", + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "digitalAddress" : { + "type" : "string" + }, + "geographicTaxonomyCodes" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "parentDescription" : { + "type" : "string" + } + } + }, + "InstitutionRequest" : { + "title" : "InstitutionRequest", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "attributes" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/AttributesRequest" + } + }, + "billing" : { + "$ref" : "#/components/schemas/BillingRequest" + }, + "businessRegisterPlace" : { + "type" : "string" + }, + "city" : { + "type" : "string" + }, + "country" : { + "type" : "string" + }, + "county" : { + "type" : "string" + }, + "createdAt" : { + "type" : "string", + "format" : "date-time" + }, + "dataProtectionOfficer" : { + "$ref" : "#/components/schemas/DataProtectionOfficerRequest" + }, + "delegation" : { + "type" : "boolean" + }, + "description" : { + "type" : "string" + }, + "digitalAddress" : { + "type" : "string" + }, + "externalId" : { + "type" : "string" + }, + "geographicTaxonomies" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/GeoTaxonomies" + } + }, + "id" : { + "type" : "string" + }, + "imported" : { + "type" : "boolean" + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "onboarding" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/OnboardingRequest" + } + }, + "origin" : { + "type" : "string" + }, + "originId" : { + "type" : "string" + }, + "paymentServiceProvider" : { + "$ref" : "#/components/schemas/PaymentServiceProviderRequest" + }, + "rea" : { + "type" : "string" + }, + "shareCapital" : { + "type" : "string" + }, + "supportEmail" : { + "type" : "string" + }, + "supportPhone" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "updatedAt" : { + "type" : "string", + "format" : "date-time" + }, + "zipCode" : { + "type" : "string" + } + } + }, + "InstitutionResponse" : { + "title" : "InstitutionResponse", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "aooParentCode" : { + "type" : "string" + }, + "attributes" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/AttributesResponse" + } + }, + "businessRegisterPlace" : { + "type" : "string" + }, + "city" : { + "type" : "string" + }, + "country" : { + "type" : "string" + }, + "county" : { + "type" : "string" + }, + "createdAt" : { + "type" : "string", + "format" : "date-time" + }, + "dataProtectionOfficer" : { + "$ref" : "#/components/schemas/DataProtectionOfficerResponse" + }, + "delegation" : { + "type" : "boolean" + }, + "description" : { + "type" : "string" + }, + "digitalAddress" : { + "type" : "string" + }, + "externalId" : { + "type" : "string" + }, + "geographicTaxonomies" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/GeoTaxonomies" + } + }, + "id" : { + "type" : "string" + }, + "imported" : { + "type" : "boolean" + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "istatCode" : { + "type" : "string" + }, + "onboarding" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/OnboardedProductResponse" + } + }, + "origin" : { + "type" : "string" + }, + "originId" : { + "type" : "string" + }, + "paymentServiceProvider" : { + "$ref" : "#/components/schemas/PaymentServiceProviderResponse" + }, + "rea" : { + "type" : "string" + }, + "rootParent" : { + "$ref" : "#/components/schemas/RootParentResponse" + }, + "shareCapital" : { + "type" : "string" + }, + "subunitCode" : { + "type" : "string" + }, + "subunitType" : { + "type" : "string" + }, + "supportEmail" : { + "type" : "string" + }, + "supportPhone" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "updatedAt" : { + "type" : "string", + "format" : "date-time" + }, + "zipCode" : { + "type" : "string" + } + } + }, + "InstitutionToOnboard" : { + "title" : "InstitutionToOnboard", + "type" : "object", + "properties" : { + "cfImpresa" : { + "type" : "string" + }, + "denominazione" : { + "type" : "string" + } + } + }, + "InstitutionUpdate" : { + "title" : "InstitutionUpdate", + "type" : "object", + "properties" : { + "additionalInformations" : { + "$ref" : "#/components/schemas/AdditionalInformations" + }, + "address" : { + "type" : "string" + }, + "businessRegisterPlace" : { + "type" : "string" + }, + "city" : { + "type" : "string" + }, + "country" : { + "type" : "string" + }, + "county" : { + "type" : "string" + }, + "dataProtectionOfficer" : { + "$ref" : "#/components/schemas/DataProtectionOfficer" + }, + "delegation" : { + "type" : "boolean" + }, + "description" : { + "type" : "string" + }, + "digitalAddress" : { + "type" : "string" + }, + "geographicTaxonomies" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionGeographicTaxonomies" + } + }, + "imported" : { + "type" : "boolean" + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "ivassCode" : { + "type" : "string" + }, + "parentDescription" : { + "type" : "string" + }, + "paymentServiceProvider" : { + "$ref" : "#/components/schemas/PaymentServiceProvider" + }, + "rea" : { + "type" : "string" + }, + "shareCapital" : { + "type" : "string" + }, + "supportEmail" : { + "type" : "string" + }, + "supportPhone" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "zipCode" : { + "type" : "string" + } + } + }, + "InstitutionsResponse" : { + "title" : "InstitutionsResponse", + "type" : "object", + "properties" : { + "institutions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "OnboardedProductResponse" : { + "title" : "OnboardedProductResponse", + "type" : "object", + "properties" : { + "billing" : { + "$ref" : "#/components/schemas/BillingResponse" + }, + "createdAt" : { + "type" : "string", + "format" : "date-time" + }, + "isAggregator" : { + "type" : "boolean" + }, + "productId" : { + "type" : "string" + }, + "status" : { + "type" : "string", + "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] + }, + "updatedAt" : { + "type" : "string", + "format" : "date-time" + } + } + }, + "OnboardedProducts" : { + "title" : "OnboardedProducts", + "type" : "object", + "properties" : { + "products" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionProduct" + } + } + } + }, + "OnboardingRequest" : { + "title" : "OnboardingRequest", + "type" : "object", + "properties" : { + "billingRequest" : { + "$ref" : "#/components/schemas/Billing" + }, + "contract" : { + "$ref" : "#/components/schemas/Contract" + }, + "contractActivatedAt" : { + "type" : "string", + "format" : "date-time" + }, + "contractCreatedAt" : { + "type" : "string", + "format" : "date-time" + }, + "contractFilePath" : { + "type" : "string" + }, + "institutionExternalId" : { + "type" : "string" + }, + "institutionUpdate" : { + "$ref" : "#/components/schemas/InstitutionUpdate" + }, + "pricingPlan" : { + "type" : "string" + }, + "productId" : { + "type" : "string" + }, + "productName" : { + "type" : "string" + }, + "sendCompleteOnboardingEmail" : { + "type" : "boolean" + }, + "signContract" : { + "type" : "boolean" + }, + "tokenType" : { + "type" : "string", + "enum" : [ "INSTITUTION", "LEGALS" ] + }, + "users" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserToOnboard" + } + } + } + }, + "OnboardingResponse" : { + "title" : "OnboardingResponse", + "type" : "object", + "properties" : { + "billing" : { + "$ref" : "#/components/schemas/BillingResponse" + }, + "closedAt" : { + "type" : "string", + "format" : "date-time" + }, + "contract" : { + "type" : "string" + }, + "createdAt" : { + "type" : "string", + "format" : "date-time" + }, + "isAggregator" : { + "type" : "boolean" + }, + "pricingPlan" : { + "type" : "string" + }, + "productId" : { + "type" : "string" + }, + "status" : { + "type" : "string", + "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] + }, + "tokenId" : { + "type" : "string" + }, + "updatedAt" : { + "type" : "string", + "format" : "date-time" + } + } + }, + "OnboardingsResponse" : { + "title" : "OnboardingsResponse", + "type" : "object", + "properties" : { + "onboardings" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/OnboardingResponse" + } + } + } + }, + "PageInfo" : { + "title" : "PageInfo", + "type" : "object", + "properties" : { + "pageNo" : { + "type" : "integer", + "format" : "int64" + }, + "pageSize" : { + "type" : "integer", + "format" : "int64" + }, + "totalElements" : { + "type" : "integer", + "format" : "int64" + }, + "totalPages" : { + "type" : "integer", + "format" : "int64" + } + } + }, + "PaymentServiceProvider" : { + "title" : "PaymentServiceProvider", + "type" : "object", + "properties" : { + "abiCode" : { + "type" : "string" + }, + "businessRegisterNumber" : { + "type" : "string" + }, + "legalRegisterName" : { + "type" : "string" + }, + "legalRegisterNumber" : { + "type" : "string" + }, + "vatNumberGroup" : { + "type" : "boolean" + } + } + }, + "PaymentServiceProviderRequest" : { + "title" : "PaymentServiceProviderRequest", + "type" : "object", + "properties" : { + "abiCode" : { + "type" : "string" + }, + "businessRegisterNumber" : { + "type" : "string" + }, + "legalRegisterName" : { + "type" : "string" + }, + "legalRegisterNumber" : { + "type" : "string" + }, + "vatNumberGroup" : { + "type" : "boolean" + } + } + }, + "PaymentServiceProviderResponse" : { + "title" : "PaymentServiceProviderResponse", + "type" : "object", + "properties" : { + "abiCode" : { + "type" : "string" + }, + "businessRegisterNumber" : { + "type" : "string" + }, + "legalRegisterName" : { + "type" : "string" + }, + "legalRegisterNumber" : { + "type" : "string" + }, + "vatNumberGroup" : { + "type" : "boolean" + } + } + }, + "PdaInstitutionRequest" : { + "title" : "PdaInstitutionRequest", + "type" : "object", + "properties" : { + "billing" : { + "$ref" : "#/components/schemas/BillingRequest" + }, + "description" : { + "type" : "string" + }, + "injectionInstitutionType" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + } + } + }, + "Problem" : { + "title" : "Problem", + "type" : "object", + "properties" : { + "errors" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/ProblemError" + } + }, + "status" : { + "type" : "integer", + "format" : "int32" + } + } + }, + "ProblemError" : { + "title" : "ProblemError", + "type" : "object" + }, + "RootParentResponse" : { + "title" : "RootParentResponse", + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "id" : { + "type" : "string" + } + } + }, + "UserToOnboard" : { + "title" : "UserToOnboard", + "type" : "object", + "properties" : { + "email" : { + "type" : "string" + }, + "env" : { + "type" : "string", + "enum" : [ "COLL", "DEV", "PROD", "ROOT" ] + }, + "id" : { + "type" : "string" + }, + "name" : { + "type" : "string" + }, + "productRole" : { + "type" : "string" + }, + "role" : { + "type" : "string", + "enum" : [ "DELEGATE", "MANAGER", "OPERATOR", "SUB_DELEGATE" ] + }, + "roleLabel" : { + "type" : "string" + }, + "surname" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + } + } + } + }, + "securitySchemes" : { + "bearerAuth" : { + "type" : "http", + "description" : "A bearer token in the format of a JWS and conformed to the specifications included in [RFC8725](https://tools.ietf.org/html/RFC8725)", + "scheme" : "bearer", + "bearerFormat" : "JWT" + } + } + } +} \ No newline at end of file diff --git a/apps/institution-ms-new/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java b/apps/institution-ms-new/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java new file mode 100644 index 0000000..572f386 --- /dev/null +++ b/apps/institution-ms-new/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java @@ -0,0 +1,86 @@ +package it.pagopa.selfcare.mscore.web.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.core.*; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.http.MediaType; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import springfox.documentation.oas.annotations.EnableOpenApi; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@SpringBootTest(classes = { + SwaggerConfig.class, + WebConfig.class +}) +@EnableOpenApi +@EnableWebMvc +@Slf4j +@ComponentScan(basePackages = {"it.pagopa.selfcare.mscore.web.controller","it.pagopa.selfcare.mscore.web.model"}) +@TestPropertySource(locations = "classpath:config/application.yml") +class SwaggerConfigTest { + + @MockBean + ExternalService externalService; + + @MockBean + InstitutionService institutionService; + + @MockBean + OnboardingService onboardingService; + + @Autowired + WebApplicationContext context; + + @MockBean + DelegationService delegationService; + + @Autowired + private ObjectMapper objectMapper; + + @Test + void swaggerSpringPlugin() throws Exception { + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(context).build(); + mockMvc.perform(MockMvcRequestBuilders.get("/v3/api-docs").accept(MediaType.APPLICATION_JSON)) + .andExpect(MockMvcResultMatchers.status().is2xxSuccessful()).andDo(result -> { + assertNotNull(result); + assertNotNull(result.getResponse()); + final String content = result.getResponse().getContentAsString(); + checkPlaceholders(content); + assertFalse(content.isBlank()); + assertFalse(content.contains("${"), "Generated swagger contains placeholders"); + Object swagger = objectMapper.readValue(result.getResponse().getContentAsString(), Object.class); + String formatted = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(swagger); + Path basePath = Paths.get("src/main/resources/swagger/"); + Files.createDirectories(basePath); + Files.write(basePath.resolve("api-docs.json"), formatted.getBytes()); + }); + } + + private static void checkPlaceholders(String content) { + Pattern pattern = Pattern.compile("\\$\\{(.*?)\\}"); + Matcher matcher = pattern.matcher(content); + while (matcher.find()) { + log.error("\033[31m An error occurred with placeholder: {}", matcher.group(1)); + } + } +} + diff --git a/apps/institution-ms-new/connector-api/pom.xml b/apps/institution-ms-new/connector-api/pom.xml new file mode 100644 index 0000000..a2f0c26 --- /dev/null +++ b/apps/institution-ms-new/connector-api/pom.xml @@ -0,0 +1,48 @@ + + + 4.0.0 + + selc-ms-core + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-connector-api + + + + com.fasterxml.jackson.core + jackson-annotations + 2.13.4 + + + com.fasterxml.jackson.core + jackson-databind + + + + org.springframework.data + spring-data-commons + + + it.pagopa.selfcare + selc-commons-base + + + + it.pagopa.selfcare + onboarding-sdk-product + 0.1.15 + + + + + + selfcare-onboarding + Selfcare Onboarding SDK + https://maven.pkg.github.com/pagopa/selfcare-onboarding + + + + diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/DelegationConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/DelegationConnector.java new file mode 100644 index 0000000..3f2eff6 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/DelegationConnector.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.api; + +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.Order; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; +import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; +import it.pagopa.selfcare.mscore.model.institution.Institution; + +import java.util.List; + +public interface DelegationConnector { + + Delegation save(Delegation delegation); + boolean checkIfExistsWithStatus(Delegation delegation, DelegationState status); + List find(String from, String to, String productId, String search, String taxCode, Order order, Integer page, Integer size); + DelegationWithPagination findAndCount(GetDelegationParameters delegationParameters); + Delegation findByIdAndModifyStatus(String delegationId, DelegationState status); + boolean checkIfDelegationsAreActive(String institutionId); + Delegation findAndActivate(String from, String to, String productId); + void updateDelegation(Institution update); +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/EmailConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/EmailConnector.java new file mode 100644 index 0000000..9c9733f --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/EmailConnector.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.api; + +import java.io.File; +import java.util.List; +import java.util.Map; + +public interface EmailConnector { + + void sendMail(String templateName, List destinationMail, File pdf, String productName, Map mailParameters, String nameFile); + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/FileStorageConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/FileStorageConnector.java new file mode 100644 index 0000000..73020d7 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/FileStorageConnector.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.api; + +import it.pagopa.selfcare.mscore.model.onboarding.ResourceResponse; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; + +public interface FileStorageConnector { + + ResourceResponse getFile(String fileName); + + String getTemplateFile(String templateName); + + String uploadContract(String id, MultipartFile contract); + + void removeContract(String fileName, String tokenId); + + File getFileAsPdf(String contractTemplate); +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/InstitutionConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/InstitutionConnector.java new file mode 100644 index 0000000..661f7a4 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/InstitutionConnector.java @@ -0,0 +1,62 @@ +package it.pagopa.selfcare.mscore.api; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.SearchMode; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; + +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Optional; + +public interface InstitutionConnector { + + Institution save(Institution example); + + List findAll(); + + void deleteById(String id); + + void findAndDeleteOnboarding(String institutionId, String productId); + + List findByTaxCodeSubunitCodeAndOrigin(String taxtCode, String subunitCode, String origin, String originId); + + Boolean existsByTaxCodeAndSubunitCodeAndProductAndStatusList(String taxtCode, String subunitCode, Optional productId, List validRelationshipStates); + + Optional findByExternalId(String externalId); + + List findWithFilter(String externalId, String productId, List validRelationshipStates); + + Institution findById(String id); + + Institution findAndUpdateStatus(String id, String tokenId, RelationshipState state); + + Institution findAndUpdate(String id, Onboarding onboarding, List geographicTaxonomies, InstitutionUpdate institutionUpdate); + + Institution findByExternalIdAndProductId(String externalId, String productId); + + List findOnboardingByIdAndProductId(String externalId, String productId); + + List findInstitutionsByProductId(String productId, Integer page, Integer size); + + void findAndRemoveOnboarding(String institutionId, Onboarding onboarding); + + List findByGeotaxonomies(List geo, SearchMode searchMode); + + List findByProductId(String productId); + + List findAllByIds(List ids); + + List findByExternalIdsAndProductId(List externalIds, String productId); + + Institution updateOnboardedProductCreatedAt(String institutionId, String productId, OffsetDateTime createdAt); + + List findBrokers(String productId, InstitutionType type); + + List findByTaxCodeAndSubunitCode(String taxCode, String subunitCode); + + List findByOriginAndOriginId(String origin, String originId); + + Boolean existsOnboardingByFilters(VerifyOnboardingFilters filters); +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/NotificationServiceConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/NotificationServiceConnector.java new file mode 100644 index 0000000..e934b0e --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/NotificationServiceConnector.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.api; + + +import it.pagopa.selfcare.mscore.model.notification.MessageRequest; +import it.pagopa.selfcare.mscore.model.notification.MultipleReceiverMessageRequest; + +public interface NotificationServiceConnector { + void sendNotificationToUser(MessageRequest messageRequest); + void sendNotificationToUsers(MultipleReceiverMessageRequest multipleReceiverMessageRequest); + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PartyRegistryProxyConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PartyRegistryProxyConnector.java new file mode 100644 index 0000000..bf81a39 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PartyRegistryProxyConnector.java @@ -0,0 +1,28 @@ +package it.pagopa.selfcare.mscore.api; + +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; +import it.pagopa.selfcare.mscore.model.institution.*; + +import java.util.List; + +public interface PartyRegistryProxyConnector { + + InstitutionProxyInfo getInstitutionById(String id); + + CategoryProxyInfo getCategory(String origin, String code); + + List getInstitutionsByLegal(String taxId); + + NationalRegistriesProfessionalAddress getLegalAddress(String taxId); + + GeographicTaxonomies getExtByCode(String code); + + AreaOrganizzativaOmogenea getAooById(String aooId); + + UnitaOrganizzativa getUoById(String uoId); + + SaResource getSAFromAnac(String taxId); + + ASResource getASFromIvass(String ivassCode); +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PecNotificationConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PecNotificationConnector.java new file mode 100644 index 0000000..003c214 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PecNotificationConnector.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.api; + +import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; + +public interface PecNotificationConnector { + + boolean findAndDeletePecNotification(String institutionId, String productId); + + boolean insertPecNotification(PecNotification pecNotification); +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/ProductConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/ProductConnector.java new file mode 100644 index 0000000..5ff62c7 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/ProductConnector.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.api; + + +import it.pagopa.selfcare.product.entity.Product; + +public interface ProductConnector { + Product getProductById(String productId); + + Product getProductValidById(String productId); +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserApiConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserApiConnector.java new file mode 100644 index 0000000..383081c --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserApiConnector.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.api; + + +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; + +import java.util.List; + +public interface UserApiConnector { + + List getUserEmails(String institutionId, String productId); + + void updateUserInstitution(String institutionId, InstitutionUpdate institutionUpdate); + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserRegistryConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserRegistryConnector.java new file mode 100644 index 0000000..2bff80e --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserRegistryConnector.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.api; + +import it.pagopa.selfcare.mscore.model.user.User; + +public interface UserRegistryConnector { + + User getUserByInternalIdWithFiscalCode(String userId); + + User getUserByInternalId(String userId); + + User getUserByInternalIdWithCustomFields(String userId, String fieldList); + + User getUserByFiscalCode(String fiscalCode); + + User persistUserUsingPatch(String name, String familyName, String fiscalCode, String email, String institutionId); + + User persistUserWorksContractUsingPatch(String fiscalCode, String email, String institutionId); +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/AzureStorageConfig.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/AzureStorageConfig.java new file mode 100644 index 0000000..22a5e8d --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/AzureStorageConfig.java @@ -0,0 +1,25 @@ +package it.pagopa.selfcare.mscore.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.context.annotation.PropertySource; + +@Data +@Configuration +@PropertySource("classpath:config/azure-storage-config.properties") +@ConfigurationProperties(prefix = "blob-storage") +@Profile("AzureStorage") +public class AzureStorageConfig { + + private String connectionString; + private String accountName; + private String endpointSuffix; + private String accountKey; + + private String container; + private String contractPath; + + private String checkoutTemplateContainer; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/CoreConfig.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/CoreConfig.java new file mode 100644 index 0000000..0741d36 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/CoreConfig.java @@ -0,0 +1,36 @@ +package it.pagopa.selfcare.mscore.config; + +import lombok.Data; +import lombok.ToString; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +import java.util.List; + +@Configuration +@PropertySource("classpath:config/core-config.properties") +@ConfigurationProperties(prefix = "mscore") +@Data +@ToString +public class CoreConfig { + + private String logoPath; + private String senderMail; + private List destinationMails; + private String institutionAlternativeEmail; + private boolean sendEmailToInstitution; + private boolean infoCamereEnable; + private boolean enableSendDelegationMail; + private BlobStorage blobStorage; + private String awsSesSecretId; + private String awsSesSecretKey; + private String awsSesRegion; + + @Data + public static class BlobStorage { + private String containerProduct; + private String filepathProduct; + private String connectionStringProduct; + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/MailTemplateConfig.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/MailTemplateConfig.java new file mode 100644 index 0000000..dc111e9 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/MailTemplateConfig.java @@ -0,0 +1,23 @@ +package it.pagopa.selfcare.mscore.config; + +import lombok.Data; +import lombok.ToString; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@PropertySource("classpath:config/core-config.properties") +@ConfigurationProperties(prefix = "mscore.mail-template.placeholders.onboarding") +@Data +@ToString +public class MailTemplateConfig { + + private String delegationNotificationPath; + private String delegationUserNotificationPath; + private String delegationPartnerName; + + private String institutionDescription; + + private String notificationProductName; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/CustomError.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/CustomError.java new file mode 100644 index 0000000..8f0f4f5 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/CustomError.java @@ -0,0 +1,68 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum CustomError { + + RELATIONSHIP_ID_NOT_FOUND("0008", "Relationship %s not found"), + GET_INSTITUTION_MANAGER_NOT_FOUND("0043", "Cannot find active manager for institution having externalId %s and product %s"), + USER_NOT_FOUND_ERROR("0031", "User having userId %s not found"), + USERS_NOT_FOUND_ERROR("0031", "Users having userIds %s not found"), + USERS_SIZE_NOT_ADMITTED("0030","At least one user for onboarding PG"), + PRODUCT_ALREADY_ONBOARDED("0032", "Product %s already onboarded for institution having externalId %s"), + MANAGER_NOT_FOUND_GENERIC_ERROR("0033", "No onboarded managers"), + MANAGER_NOT_FOUND_ERROR("0033", "No onboarded managers for at least one of the institutions %s and product %s"), + ROLES_NOT_ADMITTED_ERROR("0034","Roles %s are not admitted for this operation"), + INSTITUTION_NOT_ONBOARDED("0004", "Institution having externalId %s is not onboarded for product %s"), + INSTITUTION_NOT_ONBOARDED_BY_FILTERS("0004", "Has not been found an onboarded Institution with the provided filters"), + INSTITUTION_NOT_FOUND("0036", "Cannot find Institution using institutionId %s and externalInstitutionId %s"), + INSTITUTION_LEGAL_NOT_FOUND("0037", "Institution with externalInstitutionId %s is not related to user"), + CREATE_INSTITUTION_CONFLICT("0038", "Institution having externalId %s already exists"), + CREATE_INSTITUTION_IPA_CONFLICT("0038", "Institution having taxCode %s and subunitCode %s already exists"), + CREATE_INSTITUTION_ORIGIN_CONFLICT("0038", "Institution having origin %s and originId %s already exists"), + CREATE_INSTITUTION_NOT_FOUND("0039", "Institution having externalId %s not exists in registry"), + INSTITUTION_TAX_CODE_NOT_FOUND("0040", "Cannot find Institution using taxCode %s"), + ONBOARDING_INVALID_UPDATES("0046", "Cannot perform data overrides on institution having external id %s"), + GEO_TAXONOMY_CODE_NOT_FOUND("0049", "Error on retrieve geographic taxonomy code: %s"), + PRODUCTS_NOT_FOUND_ERROR("0030", "Products not found for institution having internalId %s"), + ONBOARDING_INFO_INSTITUTION_NOT_FOUND("0050", "No onboarding information found for %s"), + ONBOARDING_INFO_ERROR("0051", "Error getting onboarding info"), + ONBOARDING_INFO_FILTERS_ERROR("0052", "Invalid filters parameters to retrieve onboarding info"), + ONBOARDING_BILLING_ERROR("0000", "Billing vatNumber and recipientCode are required"), + ONBOARDING_BILLING_VATNUMBER_ERROR("0000", "Billing vatNumber is required"), + ONBOARDING_PENDING("0000", "There is already an onboarding request for product %s pending"), + TOKEN_ALREADY_CONSUMED("0040", "Token %s has already consumed"), + TOKEN_EXPIRED("0040", "Token %s is expired in %s and is status is DELETED"), + TOKEN_NOT_FOUND("0014", "Token %s not found"), + CONTRACT_NOT_FOUND("0015", "Token for institution %s and product %s not found or is in invalid status"), + DOCUMENT_NOT_FOUND("0016", "Document for relationship %s not found"), + GET_INSTITUTION_BILLING_ERROR("0044", "Error while retrieving institution having externalId %s and productId %s"), + RELATIONSHIP_NOT_ACTIVABLE("0007", "Relationship %s cannot be activated"), + INVALID_STATUS_CHANGE("0000", "Cannot update state from value %s to value %s"), + RELATIONSHIP_NOT_SUSPENDABLE("0010", "Relationship %s cannot be suspended"), + MISSING_QUERY_PARAMETER("0045", "At least one query parameter between [userId, institutionId] must be passed"), + RELATIONSHIP_NOT_FOUND("0008", "Relationship not found for Institution %s, User %s and Role %s"), + CREATE_DELEGATION_CONFLICT("0041", "Delegation with parameters [from, to, productId, type] already exists"), + INSTITUTION_NOT_FOUND_IN_REGISTRY("0042", "NOT_FOUND_IN_REGISTRY"), + ROLE_NOT_FOUND("0000", "ROLE_NOT_FOUND"), + ROLE_IS_NULL("0000", "ROLE_IS_NULL - Role is required if productRole is present"), + PRODUCT_ROLE_NOT_FOUND("0000", "PRODUCT_ROLE_NOT_FOUND"), + DELEGATION_NOT_FOUND("0047", "Cannot find Delegation with parameters: to %s, from %s, productId: %s"); + + + + private final String code; + private final String detail; + + CustomError(String code, String detail) { + this.code = code; + this.detail = detail; + } + + public String getCode() { + return code; + } + + public String getMessage() { + return detail; + } + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationState.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationState.java new file mode 100644 index 0000000..cb78d40 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationState.java @@ -0,0 +1,6 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum DelegationState { + ACTIVE, + DELETED, +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationType.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationType.java new file mode 100644 index 0000000..5d96f18 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationType.java @@ -0,0 +1,7 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum DelegationType { + PT, + AOO, + EA +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Env.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Env.java new file mode 100644 index 0000000..b94d52a --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Env.java @@ -0,0 +1,8 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum Env { + ROOT, + DEV, + COLL, + PROD +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/GenericError.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/GenericError.java new file mode 100644 index 0000000..c7b0911 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/GenericError.java @@ -0,0 +1,86 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum GenericError { + + GET_USER_INSTITUTION_RELATIONSHIP_ERROR("0023", "Error while retrieving user relationships"), + GET_INSTITUTION_BY_ID_ERROR("0040", "Error while retrieving institution having id %s"), + GET_INSTITUTION_BY_EXTERNAL_ID_ERROR("0041", "Error while retrieving institution having externalId %s"), + INSTITUTION_MANAGER_ERROR("0042", "Error while retrieving institution having externalId %s"), + INSTITUTION_BILLING_ERROR("0044", "Error while retrieving institution having externalId %s"), + CREATE_INSTITUTION_ERROR("0037", "Error while creating requested institution"), + INSTITUTION_INFOCAMERE_NOTFOUND("0039", "Institution %s not found on INFOCAMERE"), + ONBOARDING_OPERATION_ERROR("0017", "Error while performing onboarding operation"), + CREATE_DELEGATION_ERROR("001-0027", "Error while creating requested delegation"), + SEND_MAIL_FOR_DELEGATION_ERROR("002-0027", "Error during send mail for delegation"), + DELETE_DELEGATION_ERROR("0003-0027", "Error while deleting delegation"), + UPDATE_DELEGATION_ERROR("004-0027", "Error while updating delegation"), + ONBOARDING_VERIFICATION_ERROR("0015", "Error while verifying onboarding"), + GETTING_ONBOARDING_INFO_ERROR("0016", "Error while getting onboarding info"), + GET_PRODUCTS_ERROR("0031", "Error while getting products"), + CONTRACT_PATH_ERROR("0100", "Contract Path is required"), + MANAGER_EMAIL_NOT_FOUND("0101", "Manager email not found"), + VERIFY_TOKEN_FAILED("0041", "Something went wrong trying to verify token"), + + SIGNATURE_NOT_FOUND("002-1007", "No signature found"), + SIGNATURE_VALIDATION_ERROR("002-1004", "The tax code related to signature does not match anyone contained in the relationships"), + ORIGINAL_DOCUMENT_NOT_FOUND("002-1008", "Original document information not found"), + + INSTITUTION_NOT_ONBOARDED("002-1009", "Institution having externalId %s has already onboarded for product %s"), + DOCUMENT_VALIDATION_FAIL("002-1000", "Error trying to validate document, due: %s"), + INVALID_SIGNATURE_FORMS("002-1003", "Only CAdES signature form is admitted. Invalid signatures forms detected: %s"), + INVALIDATE_ONBOARDING_ERROR("0022", "Error while invalidating onboarding"), + CONFIRM_ONBOARDING_ERROR("0021", "Error while confirming onboarding"), + INVALID_DOCUMENT_SIGNATURE("002-1002", "Document signature is invalid"), + INVALID_CONTRACT_DIGEST("002-1001", "Invalid file digest"), + + INVALIDE_SIGNATURE_TAX_CODE_FORMAT("002-1005", "Invalid tax code format found in digital signature"), + TAX_CODE_NOT_FOUND_IN_SIGNATURE("002-1006", "No tax code has been found in digital signature"), + INVALID_SIGNATURE_TAX_CODE("002-1004", "The tax code related to signature does not match anyone contained in the relationships"), + UNABLE_TO_DOWNLOAD_FILE("1102", "Unable to download template %s"), + INVALID_SIGNATURE("002-1005", "Signature not valid: "), + ERROR_DURING_SEND_MAIL("0000", "Error during send mail"), + ERROR_DURING_UPLOAD_FILE("0000", "Error during upload file %s"), + + ERROR_DURING_DELETED_FILE("0000", "Error during deleted file %s"), + ERROR_DURING_DOWNLOAD_FILE("0000", "Error during download file %s"), + ERROR_DURING_COMPRESS_FILE("0000", "Error compressing the file %s"), + RETRIEVING_USER_RELATIONSHIP_ERROR("0023", "Error while retrieving user relationships"), + ACTIVATE_RELATIONSHIP_ERROR("0024", "Error while activating relationship"), + SUSPEND_RELATIONSHIP_ERROR("0025", "Error while suspending relationship"), + PUT_INSTITUTION_ERROR("0051", "Error while updating institution"), + ONBOARDING_SUBDELEGATES_ERROR("0019", "Error while onboarding subdelegates"), + ONBOARDING_OPERATORS_ERROR("0020", "Error while onboarding operators"), + ONBOARDING_LEGALS_ERROR("0018", "Error while onboarding legals"), + RETRIEVE_GEO_TAXONOMIES_ERROR("0050", "Error while retrieving institution geographic taxonomy"), + GET_RELATIONSHIP_ERROR("0028", "Error while getting relationship"), + CREATE_PERSON_ERROR("0009", "Error while creating person"), + GET_INSTITUTION_ATTRIBUTES_ERROR("0022", "Error while getting party attributes"), + GET_INSTITUTION_BY_GEOTAXONOMY_ERROR("0053", "Error while searching institutions related to given geoTaxonomies"), + GET_INSTITUTION_BY_PRODUCTID_ERROR("0053", "Error while searching institutions related to given productId"), + GET_INSTITUTIONS_REQUEST_ERROR("0054", "Invalid request parameters sent. Allowed filters combinations taxCode and subunit or origin and originId"), + VERIFY_USER_ERROR("0000", "Error while searching institutions related to given productId"), + GET_USER_ERROR("0000", "Error while searching user given UserID"), + UPDATE_USER_INSTITUTION_ERROR("0000", "Error while updating InstitutionUser for id %s"), + GENERIC_ERROR("0000", "Generic Error"), + DELETE_ONBOARDED_OPERATION_ERROR("0000", "Error while deleting Onboarded Institution"), + DELETE_NOTIFICATION_OPERATION_ERROR ("0000", "PecNotificationEntity was not deleted because either it does not exist or there are multiple records"), + INVALID_INSERT_PEC_NOTIFICATION_ERROR ("0001", "PecNotificationEntity was not inserted because either it exist or the data are invalid"); + + private final String code; + private final String detail; + + + GenericError(String code, String detail) { + this.code = code; + this.detail = detail; + } + + public String getCode() { + return code; + } + + public String getMessage() { + return detail; + } + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Order.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Order.java new file mode 100644 index 0000000..c02e8db --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Order.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum Order { + + NONE, + ASC, + DESC; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Origin.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Origin.java new file mode 100644 index 0000000..31bcbbb --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Origin.java @@ -0,0 +1,48 @@ +package it.pagopa.selfcare.mscore.constant; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import org.springframework.util.StringUtils; + +import java.util.Arrays; + +public enum Origin { + MOCK("MOCK"), + IPA("IPA"), + SELC("SELC"), + ANAC("ANAC"), + UNKNOWN("UNKNOWN"), + ADE("ADE"), + INFOCAMERE("INFOCAMERE"), + IVASS("IVASS"); + + private final String value; + + Origin(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + @JsonValue + public String toString() { + return value; + } + + @JsonCreator + public static Origin fromValue(String value) { + if(StringUtils.hasText(value)) { + return Arrays.stream(values()) + .filter(origin -> origin.toString().equals(value)) + .findAny() + .orElseThrow(() -> new InvalidRequestException("Valid value for Origin are: IPA, INFOCAMERE, SELC or static", "0000")); + }else{ + return Origin.UNKNOWN; + } + } + +} \ No newline at end of file diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/PricingPlan.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/PricingPlan.java new file mode 100644 index 0000000..42c8326 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/PricingPlan.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum PricingPlan { + + FA("FAST"), + BASE("BASE"), + PREMIUM("PREMIUM"); + + private final String value; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/ProductId.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/ProductId.java new file mode 100644 index 0000000..7657544 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/ProductId.java @@ -0,0 +1,32 @@ +package it.pagopa.selfcare.mscore.constant; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum ProductId { + + PROD_INTEROP("prod-interop"), + PROD_PN("prod-pn"), + PROD_FD("prod-fd"), + PROD_FD_GARANTITO("prod-fd-garantito"), + PROD_IO("prod-io"), + PROD_INTEROP_COLL("prod-interop-coll"), + PROD_IO_SIGN("prod-io-sign"), + PROD_PAGOPA("prod-pagopa"), + PROD_IO_PREMIUM("prod-io-premium"); + + private final String value; + + ProductId(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + @JsonValue + public String toString() { + return value; + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/RelationshipState.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/RelationshipState.java new file mode 100644 index 0000000..89bac4c --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/RelationshipState.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum RelationshipState { + ACTIVE, + PENDING, + TOBEVALIDATED, + SUSPENDED, + DELETED, + REJECTED +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/SearchMode.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/SearchMode.java new file mode 100644 index 0000000..0075c6e --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/SearchMode.java @@ -0,0 +1,7 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum SearchMode { + ALL, + ANY, + EXACT +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/TokenType.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/TokenType.java new file mode 100644 index 0000000..f424c78 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/TokenType.java @@ -0,0 +1,6 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum TokenType { + INSTITUTION, + LEGALS +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/BadGatewayException.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/BadGatewayException.java new file mode 100644 index 0000000..604792b --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/BadGatewayException.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.exception; + +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class BadGatewayException extends RuntimeException { + + public BadGatewayException(String message) { + super(message); + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/InvalidRequestException.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/InvalidRequestException.java new file mode 100644 index 0000000..58218f3 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/InvalidRequestException.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.exception; + +public class InvalidRequestException extends RuntimeException{ + private final String code; + + public InvalidRequestException(String message, String code) { + super(message); + this.code = code; + } + + public String getCode() { + return code; + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/MsCoreException.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/MsCoreException.java new file mode 100644 index 0000000..04a9b2f --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/MsCoreException.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.exception; + +public class MsCoreException extends RuntimeException { + + private final String code; + + public MsCoreException(String message, String code) { + super(message); + this.code = code; + } + + public String getCode() { + return code; + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceConflictException.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceConflictException.java new file mode 100644 index 0000000..3e0386e --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceConflictException.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.exception; + + +public class ResourceConflictException extends RuntimeException { + + private final String code; + public ResourceConflictException(String message, String code) { + super(message); + this.code = code; + } + + public String getCode() { + return code; + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceForbiddenException.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceForbiddenException.java new file mode 100644 index 0000000..c38a896 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceForbiddenException.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.exception; + +public class ResourceForbiddenException extends RuntimeException{ + private final String code; + + public ResourceForbiddenException(String message, String code) { + super(message); + this.code = code; + } + + public String getCode() { + return code; + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundException.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundException.java new file mode 100644 index 0000000..e3eeb6f --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundException.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.exception; + + +public class ResourceNotFoundException extends RuntimeException { + + private final String code; + public ResourceNotFoundException(String message, String code) { + super(message); + this.code = code; + } + + public String getCode() { + return code; + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ServiceUnavailableException.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ServiceUnavailableException.java new file mode 100644 index 0000000..d51d4c4 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ServiceUnavailableException.java @@ -0,0 +1,4 @@ +package it.pagopa.selfcare.mscore.exception; + +public class ServiceUnavailableException extends RuntimeException { +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/AreaOrganizzativaOmogenea.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/AreaOrganizzativaOmogenea.java new file mode 100644 index 0000000..ec9a832 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/AreaOrganizzativaOmogenea.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.model; + +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; + +@Data +public class AreaOrganizzativaOmogenea { + + private String id; + private String codiceIpa; + private String denominazioneEnte; + private String codiceFiscaleEnte; + private String codiceUniAoo; + private String denominazioneAoo; + private String mail1; + private String tipoMail1; + private String codAoo; + private Origin origin; + private String indirizzo; + private String CAP; + private String codiceComuneISTAT; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/Certification.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/Certification.java new file mode 100644 index 0000000..d27f90b --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/Certification.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.model; + +public enum Certification { + NONE, SPID; + + public static boolean isCertified(Certification certification) { + return certification != null && !Certification.NONE.equals(certification); + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/CertifiedField.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/CertifiedField.java new file mode 100644 index 0000000..983c4f9 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/CertifiedField.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.model; + +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +public class CertifiedField { + + private Certification certification; + private T value; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/InstitutionToNotify.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/InstitutionToNotify.java new file mode 100644 index 0000000..ce6e8bf --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/InstitutionToNotify.java @@ -0,0 +1,34 @@ +package it.pagopa.selfcare.mscore.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class InstitutionToNotify { + + private InstitutionType institutionType; + private String description; + private String digitalAddress; + private String address; + private String taxCode; + private String origin; + private String originId; + private String zipCode; + private PaymentServiceProvider paymentServiceProvider; + private String istatCode; + private String city; + private String country; + private String county; + private String subUnitCode; + private String category; + private String subUnitType; + private RootParent rootParent; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/QueueEvent.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/QueueEvent.java new file mode 100644 index 0000000..a2c907d --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/QueueEvent.java @@ -0,0 +1,6 @@ +package it.pagopa.selfcare.mscore.model; + +public enum QueueEvent { + ADD, + UPDATE +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/RootParent.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/RootParent.java new file mode 100644 index 0000000..9d55f2d --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/RootParent.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RootParent { + private String id; + private String originId; + private String description; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UnitaOrganizzativa.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UnitaOrganizzativa.java new file mode 100644 index 0000000..51cd888 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UnitaOrganizzativa.java @@ -0,0 +1,23 @@ +package it.pagopa.selfcare.mscore.model; + +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; + +@Data +public class UnitaOrganizzativa { + + private String id; + private String codiceIpa; + private String denominazioneEnte; + private String codiceFiscaleEnte; + private String codiceUniUo; + private String codiceUniUoPadre; + private String codiceUniAoo; + private String descrizioneUo; + private String mail1; + private String tipoMail1; + private Origin origin; + private String indirizzo; + private String CAP; + private String codiceComuneISTAT; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UserToNotify.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UserToNotify.java new file mode 100644 index 0000000..d7e16d3 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UserToNotify.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.model; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserToNotify { + + private String userId; + private String name; + private String familyName; + private String email; + private PartyRole role; + private String productRole; + private RelationshipState relationshipStatus; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/QueryCount.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/QueryCount.java new file mode 100644 index 0000000..09a23b2 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/QueryCount.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.model.aggregation; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +@AllArgsConstructor +@NoArgsConstructor +public class QueryCount { + private String _id; + private Integer count; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionAggregation.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionAggregation.java new file mode 100644 index 0000000..86bcfe5 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionAggregation.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.model.aggregation; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +import java.util.List; + +@Data +@FieldNameConstants(asEnum = true) +@AllArgsConstructor +@NoArgsConstructor +public class UserInstitutionAggregation { + private String id; + private UserInstitutionBinding bindings; + private List institutions; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionBinding.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionBinding.java new file mode 100644 index 0000000..171d78b --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionBinding.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.model.aggregation; + +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +@AllArgsConstructor +@NoArgsConstructor +public class UserInstitutionBinding { + private String institutionId; + private OnboardedProduct products; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionFilter.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionFilter.java new file mode 100644 index 0000000..964a20f --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionFilter.java @@ -0,0 +1,24 @@ +package it.pagopa.selfcare.mscore.model.aggregation; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +public class UserInstitutionFilter { + private String fromCollection = "User"; + private String toCollection = "Institution"; + private String userId; + private String institutionId; + private String externalId; + private List states; + + public UserInstitutionFilter(String userId, String institutionId, String externalId, List states) { + this.userId = userId; + this.institutionId = institutionId; + this.externalId = externalId; + this.states = states; + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/Delegation.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/Delegation.java new file mode 100644 index 0000000..ac280c7 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/Delegation.java @@ -0,0 +1,39 @@ +package it.pagopa.selfcare.mscore.model.delegation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Delegation { + + private String id; + private String from; + private String institutionFromName; + private String institutionToName; + private String institutionFromRootName; + private DelegationType type; + private String to; + private String productId; + private InstitutionType institutionType; + private String taxCode; + private String toTaxCode; + private String fromTaxCode; + private InstitutionType brokerType; + private String brokerTaxCode; + private String fromSubunitCode; + private String toSubunitCode; + private DelegationState status; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationInstitution.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationInstitution.java new file mode 100644 index 0000000..d8ae94f --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationInstitution.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.model.delegation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class DelegationInstitution extends Delegation { + private List institutions; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationWithPagination.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationWithPagination.java new file mode 100644 index 0000000..21caece --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationWithPagination.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.model.delegation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class DelegationWithPagination { + + private List delegations; + private PageInfo pageInfo; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/GetDelegationParameters.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/GetDelegationParameters.java new file mode 100644 index 0000000..902fcf5 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/GetDelegationParameters.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.model.delegation; + +import it.pagopa.selfcare.mscore.constant.Order; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class GetDelegationParameters { + private String from; + private String to; + private String productId; + private String search; + private String taxCode; + private Order order; + private Integer page; + private Integer size; +} \ No newline at end of file diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/PageInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/PageInfo.java new file mode 100644 index 0000000..7927725 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/PageInfo.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.model.delegation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class PageInfo { + private long pageSize; + private long pageNo; + private long totalElements; + private long totalPages; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/Problem.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/Problem.java new file mode 100644 index 0000000..3e29c6d --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/Problem.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.model.error; + +import lombok.Data; + +import java.util.List; + +@Data +public class Problem { + private Integer status; + private List errors; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/ProblemError.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/ProblemError.java new file mode 100644 index 0000000..0e81b2c --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/ProblemError.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.model.error; + +import lombok.Builder; + + +@Builder +public class ProblemError { + private String code; + private String detail; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ASResource.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ASResource.java new file mode 100644 index 0000000..98d2568 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ASResource.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; + +@Data +public class ASResource { + private String id; + private String originId; + private String taxCode; + private String description; + private String digitalAddress; + private String workType; + private String registerType; + private String address; + private Origin origin; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/AdditionalInformations.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/AdditionalInformations.java new file mode 100644 index 0000000..04847ad --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/AdditionalInformations.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class AdditionalInformations { + private boolean belongRegulatedMarket; + private String regulatedMarketNote; + private boolean ipa; + private String ipaCode; + private boolean establishedByRegulatoryProvision; + private String establishedByRegulatoryProvisionNote; + private boolean agentOfPublicService; + private String agentOfPublicServiceNote; + private String otherNote; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Attributes.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Attributes.java new file mode 100644 index 0000000..51c3b66 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Attributes.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class Attributes { + private String origin; + private String code; + private String description; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Billing.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Billing.java new file mode 100644 index 0000000..bd79c5a --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Billing.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class Billing { + + @JsonProperty("vatNumber") + private String vatNumber; + + @JsonProperty("taxCodeInvoicing") + private String taxCodeInvoicing; + + @JsonProperty("recipientCode") + private String recipientCode; + + @JsonProperty("publicServices") + private boolean publicServices; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/CategoryProxyInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/CategoryProxyInfo.java new file mode 100644 index 0000000..f6fd86a --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/CategoryProxyInfo.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class CategoryProxyInfo { + private String code; + private String name; + private String kind; + private String origin; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/DataProtectionOfficer.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/DataProtectionOfficer.java new file mode 100644 index 0000000..b1f80b6 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/DataProtectionOfficer.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@FieldNameConstants(asEnum = true) +public class DataProtectionOfficer { + + private String address; + private String email; + private String pec; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomies.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomies.java new file mode 100644 index 0000000..b586660 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomies.java @@ -0,0 +1,26 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class GeographicTaxonomies { + @JsonProperty("code") + private String geotaxId; //REQUIRED + @JsonProperty("desc") + private String description; + @JsonProperty("istat_code")//REQUIRED + private String istatCode; + @JsonProperty("province_id") + private String provinceId; + @JsonProperty("province_abbreviation") + private String provinceAbbreviation; + @JsonProperty("region_id") + private String regionId; + @JsonProperty("country") + private String country; + @JsonProperty("country_abbreviation") + private String countryAbbreviation; + @JsonProperty("enabled") + private boolean enable; //REQUIRED +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomyPage.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomyPage.java new file mode 100644 index 0000000..fe9e2b1 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomyPage.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +import java.util.List; + +@Data +public class GeographicTaxonomyPage { + private Integer total; + private List data; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Institution.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Institution.java new file mode 100644 index 0000000..84c6b61 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Institution.java @@ -0,0 +1,54 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Institution { + + private String id; + private String externalId; + private String origin; + private String originId; + private String description; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String taxCode; + private String ivassCode; + private String city; + private String county; + private String country; + private String istatCode; + private Billing billing; + private List onboarding; + private List geographicTaxonomies; + private List attributes; + private PaymentServiceProvider paymentServiceProvider; + private DataProtectionOfficer dataProtectionOfficer; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private String subunitCode; + private String subunitType; + private String rootParentId; + private String parentDescription; + private PaAttributes paAttributes; + private boolean delegation; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionByLegal.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionByLegal.java new file mode 100644 index 0000000..37c7316 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionByLegal.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class InstitutionByLegal { + private String businessName; + private String businessTaxId; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomies.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomies.java new file mode 100644 index 0000000..ccc76f9 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomies.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class InstitutionGeographicTaxonomies { + private String code; + private String desc; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomyPage.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomyPage.java new file mode 100644 index 0000000..23ebe6a --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomyPage.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +import java.util.List; + +@Data +public class InstitutionGeographicTaxonomyPage { + private Integer total; + private List data; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionProxyInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionProxyInfo.java new file mode 100644 index 0000000..ee0e4ec --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionProxyInfo.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class InstitutionProxyInfo { + private String id; + private String originId; + private String o; + private String ou; + private String aoo; + private String taxCode; + private String category; + private String description; + private String digitalAddress; + private String address; + private String zipCode; + private String origin; + private String istatCode; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionUpdate.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionUpdate.java new file mode 100644 index 0000000..902bfb7 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionUpdate.java @@ -0,0 +1,36 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +import java.util.List; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +@FieldNameConstants(asEnum = true) +public class InstitutionUpdate { + private InstitutionType institutionType; + private String description; + private String digitalAddress; + private String address; + private String taxCode; + private String zipCode; + private String city; + private String county; + private String country; + private PaymentServiceProvider paymentServiceProvider; + private DataProtectionOfficer dataProtectionOfficer; + private List geographicTaxonomies; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private String ivassCode; + private boolean imported; + private AdditionalInformations additionalInformations; + private Boolean delegation; + private String parentDescription; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/NationalRegistriesProfessionalAddress.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/NationalRegistriesProfessionalAddress.java new file mode 100644 index 0000000..6dcf220 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/NationalRegistriesProfessionalAddress.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class NationalRegistriesProfessionalAddress { + private String description; + private String municipality; + private String province; + private String address; + private String zipCode; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Onboarding.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Onboarding.java new file mode 100644 index 0000000..8d3e97c --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Onboarding.java @@ -0,0 +1,23 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +import java.time.OffsetDateTime; + +@Data +@FieldNameConstants(asEnum = true) +public class Onboarding { + + private String productId; + private String tokenId; + private RelationshipState status; + private String contract; + private String pricingPlan; + private Billing billing; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private OffsetDateTime closedAt; + private Boolean isAggregator; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/OnboardingPage.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/OnboardingPage.java new file mode 100644 index 0000000..7211e76 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/OnboardingPage.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +import java.util.List; + +@Data +public class OnboardingPage { + private Integer total; + private List data; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaAttributes.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaAttributes.java new file mode 100644 index 0000000..b401f63 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaAttributes.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class PaAttributes { + + private String aooParentCode; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaymentServiceProvider.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaymentServiceProvider.java new file mode 100644 index 0000000..053228f --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaymentServiceProvider.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@FieldNameConstants(asEnum = true) +public class PaymentServiceProvider { + + private String abiCode; + private String businessRegisterNumber; + private String legalRegisterName; + private String legalRegisterNumber; + private boolean vatNumberGroup; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Premium.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Premium.java new file mode 100644 index 0000000..ca7cbaa --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Premium.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import com.fasterxml.jackson.annotation.JsonProperty; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; + +@Data +public class Premium { + + @JsonProperty("status") + private RelationshipState status; + + @JsonProperty("contract") + private String contract; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/SaResource.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/SaResource.java new file mode 100644 index 0000000..6c90169 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/SaResource.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class SaResource { + private String id; + private String originId; + private boolean anacEngaged; + private boolean anacEnabled; + private String taxCode; + private String description; + private String digitalAddress; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ValidInstitution.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ValidInstitution.java new file mode 100644 index 0000000..a99ad17 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ValidInstitution.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ValidInstitution { + private String id; + private String description; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/WorkContact.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/WorkContact.java new file mode 100644 index 0000000..bffa736 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/WorkContact.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import it.pagopa.selfcare.mscore.model.CertifiedField; +import lombok.Data; + +@Data +public class WorkContact { + private CertifiedField email; + + public String getEmail() { + return email != null ? email.getValue() : ""; + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MessageRequest.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MessageRequest.java new file mode 100644 index 0000000..fc6549b --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MessageRequest.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.model.notification; + +import lombok.Data; + +@Data +public class MessageRequest { + + String content; + String subject; + String senderEmail; + String receiverEmail; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MultipleReceiverMessageRequest.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MultipleReceiverMessageRequest.java new file mode 100644 index 0000000..c13613a --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MultipleReceiverMessageRequest.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.model.notification; + +import lombok.Data; + +import java.util.List; + +@Data +public class MultipleReceiverMessageRequest { + + String content; + String subject; + List receiverEmails; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Contract.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Contract.java new file mode 100644 index 0000000..f0b71a5 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Contract.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import lombok.Data; + +@Data +public class Contract { + private String version; + private String path; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ContractImported.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ContractImported.java new file mode 100644 index 0000000..0902293 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ContractImported.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import lombok.Data; + +@Data +public class ContractImported { + private String fileName; + private String filePath; + private String contractType; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/MailTemplate.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/MailTemplate.java new file mode 100644 index 0000000..c6f34e6 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/MailTemplate.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import lombok.Data; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +@Data +public class MailTemplate { + private String subject; + private String body; + + public String getSubject() { + return new String(Base64.getDecoder().decode(subject), StandardCharsets.UTF_8); + } + + public String getBody() { + return new String(Base64.getDecoder().decode(body), StandardCharsets.UTF_8); + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedProduct.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedProduct.java new file mode 100644 index 0000000..6fa9513 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedProduct.java @@ -0,0 +1,27 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.Env; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +import java.time.OffsetDateTime; + +import static it.pagopa.selfcare.mscore.constant.Env.ROOT; + +@Data +@FieldNameConstants(asEnum = true) +public class OnboardedProduct { + + private String relationshipId; + private String productId; + private RelationshipState status; + private String contract; + private String productRole; + private PartyRole role; + private String tokenId; + private Env env = ROOT; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedUser.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedUser.java new file mode 100644 index 0000000..fe72999 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedUser.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.model.user.UserBinding; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OnboardedUser { + private String id; + private List bindings; + private OffsetDateTime createdAt; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingInfo.java new file mode 100644 index 0000000..755142b --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingInfo.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionBinding; +import it.pagopa.selfcare.mscore.model.institution.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OnboardingInfo { + private String userId; + private Institution institution; + private UserInstitutionBinding binding; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingLegalsRequest.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingLegalsRequest.java new file mode 100644 index 0000000..402d02e --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingLegalsRequest.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.model.user.UserToOnboard; +import it.pagopa.selfcare.mscore.constant.TokenType; +import lombok.Data; +import java.util.List; + +@Data +public class OnboardingLegalsRequest { + + private TokenType tokenType; + private String productId; + private String productName; + private List users; + private String institutionExternalId; + private String institutionId; + private Contract contract; + private boolean signContract; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingOperatorsRequest.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingOperatorsRequest.java new file mode 100644 index 0000000..f34cefa --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingOperatorsRequest.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.model.user.UserToOnboard; +import lombok.Data; +import java.util.List; + +@Data +public class OnboardingOperatorsRequest { + + private String productId; + private String productTitle; + private List users; + private String institutionId; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRequest.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRequest.java new file mode 100644 index 0000000..5657c02 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRequest.java @@ -0,0 +1,44 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.TokenType; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import it.pagopa.selfcare.mscore.model.user.UserToOnboard; +import lombok.Data; +import org.springframework.util.StringUtils; + +import java.time.OffsetDateTime; +import java.util.List; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CONTRACT_PATH_ERROR; + +@Data +public class OnboardingRequest { + + private String productId; + private String productName; + private List users; + private String institutionExternalId; + private InstitutionUpdate institutionUpdate; + private String pricingPlan; + private Billing billingRequest; + private Contract contract; + + private Boolean signContract; + private TokenType tokenType; + private String contractFilePath; + private OffsetDateTime contractCreatedAt; + private OffsetDateTime contractActivatedAt; + private Boolean sendCompleteOnboardingEmail; + + public Contract getContract() { + if ((institutionUpdate != null && InstitutionType.PG == institutionUpdate.getInstitutionType()) + || (contract != null && StringUtils.hasText(contract.getPath()))) { + return contract; + } else { + throw new InvalidRequestException(CONTRACT_PATH_ERROR.getMessage(), CONTRACT_PATH_ERROR.getCode()); + } + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRollback.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRollback.java new file mode 100644 index 0000000..928024f --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRollback.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OnboardingRollback { + private Token token; + private Onboarding onboarding; + private Map productMap; + private Institution updatedInstitution; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUpdateRollback.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUpdateRollback.java new file mode 100644 index 0000000..5c81b60 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUpdateRollback.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OnboardingUpdateRollback { + private Token token; + private List userList; + private Institution updatedInstitution; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUsersRequest.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUsersRequest.java new file mode 100644 index 0000000..032999d --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUsersRequest.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.model.user.UserToOnboard; +import lombok.Data; + +import java.util.List; + +@Data +public class OnboardingUsersRequest { + + private String productId; + private List users; + private String institutionTaxCode; + private String institutionSubunitCode; + private Boolean sendCreateUserNotificationEmail; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ResourceResponse.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ResourceResponse.java new file mode 100644 index 0000000..fb38fd0 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ResourceResponse.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import lombok.Data; + +@Data +public class ResourceResponse { + private byte[] data; + private String fileName; + private String mimetype; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Token.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Token.java new file mode 100644 index 0000000..3a6c553 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Token.java @@ -0,0 +1,36 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.TokenType; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; +import java.util.List; +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Token { + private String id; + private TokenType type; + private RelationshipState status; + private String institutionId; + private String productId; + private OffsetDateTime expiringDate; + private String checksum; + private String contractVersion; + private String contractTemplate; + private String contractSigned; + private String contentType; + private List users; + private InstitutionUpdate institutionUpdate; + private OffsetDateTime createdAt; + private OffsetDateTime activatedAt; + private OffsetDateTime updatedAt; + private OffsetDateTime deletedAt; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenRelationships.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenRelationships.java new file mode 100644 index 0000000..9140bd7 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenRelationships.java @@ -0,0 +1,31 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.TokenType; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TokenRelationships { + private String tokenId; + private String checksum; + private TokenType type; + private String institutionId; + private String productId; + private String contractSigned; + private String contentType; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private OffsetDateTime closedAt; + private OffsetDateTime activatedAt; + private RelationshipState status; + private List users; + private InstitutionUpdate institutionUpdate; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenUser.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenUser.java new file mode 100644 index 0000000..8c7e80d --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenUser.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TokenUser { + private String userId; + private PartyRole role; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/VerifyOnboardingFilters.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/VerifyOnboardingFilters.java new file mode 100644 index 0000000..3f1ea91 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/VerifyOnboardingFilters.java @@ -0,0 +1,45 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.constant.CustomError; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import lombok.Data; +import org.springframework.util.StringUtils; + +import java.util.List; + +@Data +public class VerifyOnboardingFilters { + private String productId; + private String externalId; + private String taxCode; + private String origin; + private String originId; + private String subunitCode; + private List validRelationshipStates; + + public VerifyOnboardingFilters(String productId, String externalId, String taxCode, String origin, String originId, String subunitCode) { + this.productId = productId; + + /* + We don't set the values of all the attributes of the class, but try to value only a portion of them based on different + search patterns priority that we intend to convey. + And if the provided parameters do not fall within the identified cases for a search then return exception. + */ + if (StringUtils.hasText(externalId)) { + this.externalId = externalId; + } else if (StringUtils.hasText(taxCode)) { + this.taxCode = taxCode; + this.subunitCode = subunitCode; + this.origin = origin; + } else if(StringUtils.hasText(subunitCode)) { + this.subunitCode = subunitCode; + this.origin = origin; + } else if (StringUtils.hasText(origin) && StringUtils.hasText(originId)) { + this.origin = origin; + this.originId = originId; + } else { + throw new InvalidRequestException(CustomError.ONBOARDING_INFO_FILTERS_ERROR.getMessage(), CustomError.ONBOARDING_INFO_FILTERS_ERROR.getCode()); + } + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java new file mode 100644 index 0000000..f6fcf92 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java @@ -0,0 +1,23 @@ +package it.pagopa.selfcare.mscore.model.pecnotification; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PecNotification { + + private String id; + private String institutionId; + private String productId; + private Integer moduleDayOfTheEpoch; + private String digitalAddress; + + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/Product.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/Product.java new file mode 100644 index 0000000..a8e976e --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/Product.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.model.product; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import it.pagopa.selfcare.commons.base.security.PartyRole; +import lombok.Data; + +import java.util.EnumMap; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class Product { + + private String id; + private EnumMap roleMappings; + private String contractTemplatePath; + private String contractTemplateVersion; + private String title; + private String parentId; + private ProductStatus status; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductRoleInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductRoleInfo.java new file mode 100644 index 0000000..1d177d8 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductRoleInfo.java @@ -0,0 +1,23 @@ +package it.pagopa.selfcare.mscore.model.product; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +public class ProductRoleInfo { + + private boolean multiroleAllowed; + private List roles; + + + @Data + @EqualsAndHashCode(of = "code") + public static class ProductRole { + private String code; + private String label; + private String description; + } + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductStatus.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductStatus.java new file mode 100644 index 0000000..b174336 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductStatus.java @@ -0,0 +1,6 @@ +package it.pagopa.selfcare.mscore.model.product; + +public enum ProductStatus { + + ACTIVE, TESTING, PHASE_OUT, INACTIVE +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/ProductManagerInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/ProductManagerInfo.java new file mode 100644 index 0000000..e57f15e --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/ProductManagerInfo.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.model.user; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProductManagerInfo { + + private String userId; + private Institution institution; + private List products; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipInfo.java new file mode 100644 index 0000000..34a0a9c --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipInfo.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.model.user; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@NoArgsConstructor +@AllArgsConstructor +@Data +public class RelationshipInfo { + + Institution institution; + String userId; + OnboardedProduct onboardedProduct; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPage.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPage.java new file mode 100644 index 0000000..a2af676 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPage.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.model.user; + +import lombok.Data; + +import java.util.List; + +@Data +public class RelationshipPage { + private Integer total; + private List data; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPageElement.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPageElement.java new file mode 100644 index 0000000..47f551a --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPageElement.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.model.user; + +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import lombok.Data; + +@Data +public class RelationshipPageElement { + private String userId; + private OnboardedProduct product; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/User.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/User.java new file mode 100644 index 0000000..b0f1d5a --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/User.java @@ -0,0 +1,35 @@ +package it.pagopa.selfcare.mscore.model.user; + +import it.pagopa.selfcare.mscore.model.CertifiedField; +import it.pagopa.selfcare.mscore.model.institution.WorkContact; +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +import java.util.Map; + +@Data +@FieldNameConstants(asEnum = true) +public class User { + + @FieldNameConstants.Exclude + private String id; + private String fiscalCode; + private CertifiedField name; + private CertifiedField familyName; + @FieldNameConstants.Exclude + private CertifiedField email; + + private Map workContacts; + + public String getName() { + return name != null ? name.getValue() : ""; + } + + public String getFamilyName() { + return familyName != null ? familyName.getValue() : ""; + } + + public String getEmail() { + return email != null ? email.getValue() : ""; + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserBinding.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserBinding.java new file mode 100644 index 0000000..4733b7c --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserBinding.java @@ -0,0 +1,25 @@ +package it.pagopa.selfcare.mscore.model.user; + +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +import java.util.List; + +@Data +@FieldNameConstants(asEnum = true) +@AllArgsConstructor +@NoArgsConstructor +public class UserBinding { + private String institutionId; + private String institutionName; + private String institutionRootName; + private List products; + + public UserBinding(String institutionId, List products) { + this.institutionId = institutionId; + this.products = products; + } +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserInfo.java new file mode 100644 index 0000000..6af23c1 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserInfo.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.model.user; + +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import lombok.Data; + +import java.util.List; + +@Data +public class UserInfo { + + private String id; + private User user; + private List products; + +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserToOnboard.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserToOnboard.java new file mode 100644 index 0000000..64cc151 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserToOnboard.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.model.user; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.Env; +import lombok.Data; + +@Data +public class UserToOnboard { + + private String id; + private String taxCode; + private String name; + private String surname; + private String email; + private PartyRole role; + private String productRole; + private String roleLabel; + private Env env; +} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/utils/MaskDataUtils.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/utils/MaskDataUtils.java new file mode 100644 index 0000000..c3103f8 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/utils/MaskDataUtils.java @@ -0,0 +1,97 @@ +package it.pagopa.selfcare.mscore.utils; + +import io.micrometer.core.instrument.util.StringUtils; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +@NoArgsConstructor(access = AccessLevel.NONE) +public class MaskDataUtils { + + private static final int MATCHER_GROUP = 2; + private static final int MASK_STRING_END = 3; + private static final int CHARACTER_LIMIT = 4; + private static final String REGEX_ELENCO_CF = "(\"elencoCf\")\\s*:\\s*\\[\"(.*?)\""; + private static final String REGEX_TAX_ID = "(\"taxId\"|\"legalTaxId\"|\"businessTaxId\"|\"vatNumber\")\\s*:\\s*\"(.*?)\""; + private static final String REGEX_ADDRESS = "(\"description\"|\"at\"|\"address\"|\"zip\"|\"municipality\"|\"municipalityDetails\"|\"province\"|\"foreignState\"|\"codiceStato\"|\"descrizioneStato\"|\"descrizioneLocalita\"|\"denominazione\"|\"numeroCivico\"|\"digitalAddress\")\\s*:\\s*\"(.*?)\""; + private static final String REGEX_PEC = "(\"pecProfessionista\"|\"cf\"|\"codFiscale\"|\"codiceFiscale\"|\"cognome\"|\"nome\"|\"sesso\"|\"dataNascita\")\\s*:\\s*\"(.*?)\""; + private static final String REGEX_TOKEN = "(\"access_token\")\\s*:\\s*\"(.*?)\""; + private static final Pattern PATTERN_ELENCO_CF = Pattern.compile(REGEX_ELENCO_CF); + private static final Pattern PATTERN_TAX_ID = Pattern.compile(REGEX_TAX_ID); + private static final Pattern PATTERN_ADDRESS = Pattern.compile(REGEX_ADDRESS); + private static final Pattern PATTERN_PEC = Pattern.compile(REGEX_PEC); + private static final Pattern PATTERN_TOKEN = Pattern.compile(REGEX_TOKEN); + + public static String maskInformation(String dataBuffered){ + + dataBuffered = maskMatcher(PATTERN_ELENCO_CF, dataBuffered); + dataBuffered = maskMatcher(PATTERN_TAX_ID, dataBuffered); + dataBuffered = maskMatcher(PATTERN_ADDRESS, dataBuffered); + dataBuffered = maskMatcher(PATTERN_PEC, dataBuffered); + dataBuffered = maskMatcher(PATTERN_TOKEN, dataBuffered); + + return dataBuffered; + } + + private static String maskMatcher(Pattern pattern, String dataBuffered){ + Matcher matcher = pattern.matcher(dataBuffered); + while(matcher.find()){ + String toBeMasked = matcher.group(MATCHER_GROUP); + String valueMasked = mask(toBeMasked); + if(!toBeMasked.isBlank()){ + dataBuffered = dataBuffered.replace("\""+toBeMasked+"\"","\""+valueMasked+"\""); + } + } + return dataBuffered; + } + + private static String mask(String unmasked){ + if(unmasked.contains(",")){ + return maskAddress(unmasked); + } + else if(unmasked.contains("@")){ + return maskEmailAddress(unmasked); + } + else{ + return maskString(unmasked); + } + } + + + private static String maskAddress(String strAddress){ + String[] parts = strAddress.split(","); + StringBuilder masked = new StringBuilder(); + for (String part : parts) { + masked.append(maskString(part)).append(","); + } + return masked.substring(0,masked.length()-1); + } + + private static String maskEmailAddress(String strEmail) { + String[] parts = strEmail.split("@"); + String strId = maskString(parts[0]); + return strId + "@" + parts[1]; + } + + public static String maskString(String strText) { + int start = 1; + int end = strText.length()-MASK_STRING_END; + String maskChar = String.valueOf('*'); + if(StringUtils.isEmpty(strText)){ + return strText; + } + if(strText.length() < CHARACTER_LIMIT){ + end = strText.length(); + } + int maskLength = end - start; + if(maskLength == 0){ + return maskChar; + } + String sbMaskString = maskChar.repeat(Math.max(0, maskLength)); + return strText.substring(0, start) + + sbMaskString + + strText.substring(start + maskLength); + } + +} diff --git a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/InvalidRequestExceptionTest.java b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/InvalidRequestExceptionTest.java new file mode 100644 index 0000000..91dba2e --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/InvalidRequestExceptionTest.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.exception; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class InvalidRequestExceptionTest { + /** + * Methods under test: + * + *
    + *
  • {@link InvalidRequestException#InvalidRequestException(String, String)} + *
  • {@link InvalidRequestException#getCode()} + *
+ */ + @Test + void testConstructor() { + assertEquals("Code", (new InvalidRequestException("An error occurred", "Code")).getCode()); + } +} + diff --git a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/MsCoreExceptionTest.java b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/MsCoreExceptionTest.java new file mode 100644 index 0000000..05a609b --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/MsCoreExceptionTest.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.exception; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class MsCoreExceptionTest { + /** + * Methods under test: + * + *
    + *
  • {@link MsCoreException#MsCoreException(String, String)} + *
  • {@link MsCoreException#getCode()} + *
+ */ + @Test + void testConstructor() { + assertEquals("Code", (new MsCoreException("An error occurred", "Code")).getCode()); + } +} + diff --git a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceConflictExceptionTest.java b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceConflictExceptionTest.java new file mode 100644 index 0000000..f6a3206 --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceConflictExceptionTest.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.exception; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class ResourceConflictExceptionTest { + /** + * Methods under test: + * + *
    + *
  • {@link ResourceConflictException#ResourceConflictException(String, String)} + *
  • {@link ResourceConflictException#getCode()} + *
+ */ + @Test + void testConstructor() { + assertEquals("Code", (new ResourceConflictException("An error occurred", "Code")).getCode()); + } +} + diff --git a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundExceptionTest.java b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundExceptionTest.java new file mode 100644 index 0000000..615d4bf --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundExceptionTest.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.exception; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class ResourceNotFoundExceptionTest { + /** + * Methods under test: + * + *
    + *
  • {@link ResourceNotFoundException#ResourceNotFoundException(String, String)} + *
  • {@link ResourceNotFoundException#getCode()} + *
+ */ + @Test + void testConstructor() { + assertEquals("Code", (new ResourceNotFoundException("An error occurred", "Code")).getCode()); + } +} + diff --git a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/utils/MaskDataUtilsTest.java b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/utils/MaskDataUtilsTest.java new file mode 100644 index 0000000..b3aec2e --- /dev/null +++ b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/utils/MaskDataUtilsTest.java @@ -0,0 +1,29 @@ +package it.pagopa.selfcare.mscore.utils; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class MaskDataUtilsTest { + /** + * Method under test: {@link MaskDataUtils#maskInformation(String)} + */ + @Test + void testMaskInformation() { + assertEquals("Data Buffered", MaskDataUtils.maskInformation("Data Buffered")); + assertEquals("\"elencoCf\" : [\"U*\"", MaskDataUtils.maskInformation("\"elencoCf\" : [\"UU\"")); + assertEquals("\"elencoCf\" : [\"V***********ssi, **\"", MaskDataUtils.maskInformation("\"elencoCf\" : [\"Via Mario Rossi, 47\"")); + assertEquals("\"elencoCf\" : [\"m******ssi@mario.rossi\"", MaskDataUtils.maskInformation("\"elencoCf\" : [\"mariorossi@mario.rossi\"")); + + } + + /** + * Method under test: {@link MaskDataUtils#maskString(String)} + */ + @Test + void testMaskString() { + assertEquals("S****ext", MaskDataUtils.maskString("Str Text")); + assertEquals("", MaskDataUtils.maskString("")); + } +} + diff --git a/apps/institution-ms-new/connector/azure-storage/pom.xml b/apps/institution-ms-new/connector/azure-storage/pom.xml new file mode 100644 index 0000000..5bf605f --- /dev/null +++ b/apps/institution-ms-new/connector/azure-storage/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + + selc-ms-core-connector + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-connector-azure-storage + + + + com.microsoft.azure + azure-storage + 8.6.6 + + + + \ No newline at end of file diff --git a/apps/institution-ms-new/connector/azure-storage/src/main/java/it/pagopa/selfcare/mscore/connector/azure_storage/AzureBlobClient.java b/apps/institution-ms-new/connector/azure-storage/src/main/java/it/pagopa/selfcare/mscore/connector/azure_storage/AzureBlobClient.java new file mode 100644 index 0000000..646d54a --- /dev/null +++ b/apps/institution-ms-new/connector/azure-storage/src/main/java/it/pagopa/selfcare/mscore/connector/azure_storage/AzureBlobClient.java @@ -0,0 +1,170 @@ +package it.pagopa.selfcare.mscore.connector.azure_storage; + +import com.microsoft.azure.storage.CloudStorageAccount; +import com.microsoft.azure.storage.StorageCredentials; +import com.microsoft.azure.storage.StorageCredentialsAccountAndKey; +import com.microsoft.azure.storage.StorageException; +import com.microsoft.azure.storage.blob.*; +import it.pagopa.selfcare.mscore.api.FileStorageConnector; +import it.pagopa.selfcare.mscore.config.AzureStorageConfig; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.onboarding.ResourceResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Profile; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Paths; + +import static it.pagopa.selfcare.mscore.constant.GenericError.*; + +@Slf4j +@Service +@PropertySource("classpath:config/azure-storage-config.properties") +@Profile("AzureStorage") +class AzureBlobClient implements FileStorageConnector { + + private final CloudBlobClient blobClient; + private final AzureStorageConfig azureStorageConfig; + + AzureBlobClient(AzureStorageConfig azureStorageConfig) throws URISyntaxException { + log.trace("AzureBlobClient.AzureBlobClient"); + this.azureStorageConfig = azureStorageConfig; + final CloudStorageAccount storageAccount = buildStorageAccount(); + this.blobClient = storageAccount.createCloudBlobClient(); + } + + private CloudStorageAccount buildStorageAccount() throws URISyntaxException { + StorageCredentials storageCredentials = new StorageCredentialsAccountAndKey(azureStorageConfig.getAccountName(), azureStorageConfig.getAccountKey()); + return new CloudStorageAccount(storageCredentials, + true, + azureStorageConfig.getEndpointSuffix(), + azureStorageConfig.getAccountName()); + } + + @Override + public ResourceResponse getFile(String fileName) { + log.info("START - getFile for path: {}", fileName); + try { + ResourceResponse response = new ResourceResponse(); + final CloudBlobContainer blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); + final CloudBlockBlob blob = blobContainer.getBlockBlobReference(fileName); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + BlobProperties properties = blob.getProperties(); + blob.download(outputStream); + log.info("END - getFile - path {}", fileName); + response.setData(outputStream.toByteArray()); + response.setFileName(blob.getName()); + response.setMimetype(properties.getContentType()); + return response; + } catch (StorageException e) { + if (e.getHttpStatusCode() == 404) { + throw new ResourceNotFoundException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), fileName), + ERROR_DURING_DOWNLOAD_FILE.getCode()); + } + throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), fileName), + ERROR_DURING_DOWNLOAD_FILE.getCode()); + } catch (URISyntaxException e) { + throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), fileName), + ERROR_DURING_DOWNLOAD_FILE.getCode()); + } + } + + @Override + public String getTemplateFile(String templateName) { + log.info("START - getTemplateFile for template: {}", templateName); + try { + final CloudBlobContainer blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); + final CloudBlockBlob blob = blobContainer.getBlockBlobReference(templateName); + String downloaded = blob.downloadText(); + log.info("END - getTemplateFile - Downloaded {}", templateName); + return downloaded; + } catch (StorageException | URISyntaxException | IOException e) { + log.error(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), templateName), e); + throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), templateName), + ERROR_DURING_DOWNLOAD_FILE.getCode()); + } + } + + @Override + public File getFileAsPdf(String contractTemplate){ + log.info("START - getFileAsPdf for template: {}", contractTemplate); + + final CloudBlobContainer blobContainer; + final CloudBlockBlob blob; + final File downloadedFile; + + try { + blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); + blob = blobContainer.getBlockBlobReference(contractTemplate); + + String fileName = Paths.get(contractTemplate).getFileName().toString(); + downloadedFile = File.createTempFile(fileName, ".pdf"); + } catch (URISyntaxException | StorageException | IOException e) { + log.error(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), contractTemplate), e); + throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), contractTemplate), + ERROR_DURING_DOWNLOAD_FILE.getCode()); + } + + try (BlobInputStream blobInputStream = blob.openInputStream(); + FileOutputStream fileOutputStream = new FileOutputStream(downloadedFile)){ + + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = blobInputStream.read(buffer)) != -1) { + fileOutputStream.write(buffer, 0, bytesRead); + } + + } catch (IOException | StorageException e) { + log.error(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), contractTemplate), e); + throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), contractTemplate), + ERROR_DURING_DOWNLOAD_FILE.getCode()); + } + + log.info("END - getFileAsPdf"); + return downloadedFile; + } + + @Override + public String uploadContract(String id, MultipartFile contract) { + log.info("START - uploadContract for token: {}", id); + String fileName = Paths.get(azureStorageConfig.getContractPath(), id, contract.getOriginalFilename()).toString(); + log.debug("uploadContract fileName = {}, contentType = {}", fileName, contract.getContentType()); + try { + final CloudBlobContainer blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); + final CloudBlockBlob blob = blobContainer.getBlockBlobReference(fileName); + blob.getProperties().setContentType(contract.getContentType()); + blob.upload(contract.getInputStream(), contract.getInputStream().available()); + log.info("Uploaded {}", fileName); + return fileName; + } catch (StorageException | URISyntaxException | IOException e) { + log.error(String.format(ERROR_DURING_UPLOAD_FILE.getMessage(), fileName), e); + throw new MsCoreException(String.format(ERROR_DURING_UPLOAD_FILE.getMessage(), fileName), + ERROR_DURING_UPLOAD_FILE.getCode()); + } + } + + @Override + public void removeContract(String fileName, String tokenId) { + log.info("START - deleteContract for token: {}", tokenId); + + try { + final CloudBlobContainer blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); + final CloudBlockBlob blob = blobContainer.getBlockBlobReference(fileName); + blob.deleteIfExists(); + log.info("Deleted {}", fileName); + } catch (StorageException | URISyntaxException e) { + log.error(String.format(ERROR_DURING_DELETED_FILE.getMessage(), fileName), e); + throw new MsCoreException(String.format(ERROR_DURING_DELETED_FILE.getMessage(), fileName), + ERROR_DURING_DELETED_FILE.getCode()); + } + } + +} diff --git a/apps/institution-ms-new/connector/azure-storage/src/test/java/it/pagopa/selfcare/mscore/connector/azure_storage/config/AzureStorageConfigTest.java b/apps/institution-ms-new/connector/azure-storage/src/test/java/it/pagopa/selfcare/mscore/connector/azure_storage/config/AzureStorageConfigTest.java new file mode 100644 index 0000000..5015bfc --- /dev/null +++ b/apps/institution-ms-new/connector/azure-storage/src/test/java/it/pagopa/selfcare/mscore/connector/azure_storage/config/AzureStorageConfigTest.java @@ -0,0 +1,47 @@ +package it.pagopa.selfcare.mscore.connector.azure_storage.config; + +import it.pagopa.selfcare.mscore.config.AzureStorageConfig; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class AzureStorageConfigTest { + + /** + * Method under test: {@link AzureStorageConfig#getConnectionString()} + */ + @Test + void testGetConnectionString2() { + + AzureStorageConfig azureStorageConfig = new AzureStorageConfig(); + azureStorageConfig.setConnectionString("42"); + assertEquals("42", azureStorageConfig.getConnectionString()); + } + + /** + * Method under test: {@link AzureStorageConfig#getContainer()} ()); + } + + /** + * Method under test: {@link AzureStorageConfig#getContainer()} ()} + */ + @Test + void testGetContractsTemplateContainer3() { + + AzureStorageConfig azureStorageConfig = new AzureStorageConfig(); + azureStorageConfig.setContractPath("42"); + assertEquals("42", azureStorageConfig.getContractPath()); + } + + @Test + void testGetContractsTemplateContainer4() { + + AzureStorageConfig azureStorageConfig = new AzureStorageConfig(); + azureStorageConfig.setConnectionString("42"); + azureStorageConfig.setContainer("42"); + azureStorageConfig.setContractPath("42"); + + assertEquals("AzureStorageConfig(connectionString=42, accountName=null, endpointSuffix=null, accountKey=null, container=42, contractPath=42, checkoutTemplateContainer=null)", azureStorageConfig.toString()); + } +} + diff --git a/apps/institution-ms-new/connector/dao/pom.xml b/apps/institution-ms-new/connector/dao/pom.xml new file mode 100644 index 0000000..93e3b22 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + selc-ms-core-connector + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-connector-dao + + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + de.flapdoodle.embed + de.flapdoodle.embed.mongo + test + + + it.pagopa.selfcare + selc-ms-core-connector-rest + + + + diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilder.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilder.java new file mode 100644 index 0000000..c1a88e4 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilder.java @@ -0,0 +1,50 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.lang.NonNull; +import org.springframework.lang.Nullable; + +import java.util.List; + +public class CriteriaBuilder { + + private Criteria criteria; + private boolean first; + + private CriteriaBuilder() { + criteria = new Criteria(); + first = true; + } + + public static CriteriaBuilder builder() { + return new CriteriaBuilder(); + } + + public Criteria build() { + return criteria; + } + + public CriteriaBuilder inIfNotEmpty(@NonNull String key, @Nullable List value) { + if (value != null && !value.isEmpty()) { + if (first) { + criteria = Criteria.where(key).in(value); + first = false; + } else { + criteria = criteria.and(key).in(value); + } + } + return this; + } + + public CriteriaBuilder isIfNotNull(@NonNull String key, @Nullable Object value) { + if (value != null) { + if (first) { + criteria = Criteria.where(key).is(value); + first = false; + } else { + criteria = criteria.and(key).is(value); + } + } + return this; + } +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImpl.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImpl.java new file mode 100644 index 0000000..9aaa08a --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImpl.java @@ -0,0 +1,180 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.api.DelegationConnector; +import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationEntityMapper; +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.Order; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; +import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; +import it.pagopa.selfcare.mscore.model.delegation.PageInfo; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.FindAndModifyOptions; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.data.support.PageableExecutionUtils; +import org.springframework.stereotype.Component; + +import java.time.OffsetDateTime; +import java.util.*; +import java.util.regex.Pattern; + +@Slf4j +@Component +public class DelegationConnectorImpl implements DelegationConnector { + + public static final String INSTITUTION = "Institution"; + public static final String INSTITUTIONS = "institutions"; + public static final String DELEGATIONS = "Delegations"; + private final DelegationRepository repository; + private final DelegationEntityMapper delegationMapper; + private final MongoTemplate mongoTemplate; + + public DelegationConnectorImpl(DelegationRepository repository, + DelegationEntityMapper delegationMapper, + MongoTemplate mongoTemplate) { + this.repository = repository; + this.delegationMapper = delegationMapper; + this.mongoTemplate = mongoTemplate; + } + + @Override + public Delegation save(Delegation delegation) { + final DelegationEntity entity = delegationMapper.convertToDelegationEntity(delegation); + return delegationMapper.convertToDelegation(repository.save(entity)); + } + + @Override + public boolean checkIfExistsWithStatus(Delegation delegation, DelegationState status) { + Optional opt = repository.findByFromAndToAndProductIdAndTypeAndStatus( + delegation.getFrom(), + delegation.getTo(), + delegation.getProductId(), + delegation.getType(), + status + ); + return opt.isPresent(); + } + + private List getCriterias(String from, String to, String productId, String search, String taxCode) { + List criterias = new ArrayList<>(); + + criterias.add(Criteria.where(DelegationEntity.Fields.status.name()).is(DelegationState.ACTIVE.name())); + + if (Objects.nonNull(from)) { + criterias.add(Criteria.where(DelegationEntity.Fields.from.name()).is(from)); + if(Objects.nonNull(taxCode)) { + criterias.add(Criteria.where(DelegationEntity.Fields.toTaxCode.name()).is(taxCode)); + } + } + if (Objects.nonNull(to)) { + criterias.add(Criteria.where(DelegationEntity.Fields.to.name()).is(to)); + if(Objects.nonNull(taxCode)) { + criterias.add(Criteria.where(DelegationEntity.Fields.fromTaxCode.name()).is(taxCode)); + } + } + if (Objects.nonNull(productId)) { + criterias.add(Criteria.where(DelegationEntity.Fields.productId.name()).is(productId)); + } + if (Objects.nonNull(search)) { + criterias.add(Criteria.where(DelegationEntity.Fields.institutionFromName.name()).regex("(?i)" + Pattern.quote(search))); + } + return criterias; + } + + @Override + public List find(String from, String to, String productId, String search, String taxCode, Order order, Integer page, Integer size) { + Criteria criteria = new Criteria(); + Pageable pageable = PageRequest.of(page, size); + List criterias = getCriterias(from, to, productId, search, taxCode); + + Sort.Direction sortDirection = order.equals(Order.ASC) ? Sort.Direction.ASC : Sort.Direction.DESC; + + Query query = Query.query(criteria.andOperator(criterias)); + + if (!order.equals(Order.NONE)) { + query = query.with(Sort.by(sortDirection, DelegationEntity.Fields.institutionFromName.name())); + } + + return repository.find(query, pageable, DelegationEntity.class) + .stream() + .map(delegationMapper::convertToDelegation) + .toList(); + } + + @Override + public DelegationWithPagination findAndCount(GetDelegationParameters delegationParameters) { + + List delegations = find(delegationParameters.getFrom(), delegationParameters.getTo(), delegationParameters.getProductId(), + delegationParameters.getSearch(), delegationParameters.getTaxCode(), delegationParameters.getOrder(), + delegationParameters.getPage(), delegationParameters.getSize()); + + Query query = Query.query(new Criteria().andOperator(getCriterias(delegationParameters.getFrom(), delegationParameters.getTo(), + delegationParameters.getProductId(), delegationParameters.getSearch(), delegationParameters.getTaxCode()))); + + long count = mongoTemplate.count(query, DelegationEntity.class); + + Pageable pageable = PageRequest.of(delegationParameters.getPage(), delegationParameters.getSize()); + Page result = PageableExecutionUtils.getPage(delegations, pageable, () -> count); + + PageInfo pageInfo = new PageInfo(result.getSize(), result.getNumber(), result.getTotalElements(), result.getTotalPages()); + return new DelegationWithPagination(delegations, pageInfo); + } + + @Override + public Delegation findByIdAndModifyStatus(String delegationId, DelegationState status) { + Query query = Query.query(Criteria.where(DelegationEntity.Fields.id.name()).is(delegationId)); + Update update = new Update(); + update.set(DelegationEntity.Fields.updatedAt.name(), OffsetDateTime.now()); + update.set(DelegationEntity.Fields.status.name(), status); + FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false); + return delegationMapper.convertToDelegation(repository.findAndModify(query, update, findAndModifyOptions, DelegationEntity.class)); + } + + @Override + public boolean checkIfDelegationsAreActive(String institutionId) { + List opt = repository.findByToAndStatus(institutionId, DelegationState.ACTIVE).orElse(Collections.emptyList()); + return !opt.isEmpty(); + } + + @Override + public Delegation findAndActivate(String from, String to, String productId) { + Query query = Query.query(Criteria.where(DelegationEntity.Fields.from.name()).is(from).and(DelegationEntity.Fields.to.name()).is(to).and(DelegationEntity.Fields.productId.name()).is(productId)); + Update update = new Update(); + update.set(DelegationEntity.Fields.updatedAt.name(), OffsetDateTime.now()); + update.set(DelegationEntity.Fields.status.name(), DelegationState.ACTIVE); + FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); + return delegationMapper.convertToDelegation(repository.findAndModify(query, update, findAndModifyOptions, DelegationEntity.class)); + } + + @Override + public void updateDelegation(Institution institutionUpdate) { + + // If institution own some delegations, we also update "to" reference + // isDelegation is true if institution own some delegations + if (institutionUpdate.isDelegation()) { + Update updateFrom = new Update(); + Query queryFrom = Query.query(Criteria.where(DelegationEntity.Fields.to.name()).is(institutionUpdate.getId())); + updateFrom.set(DelegationEntity.Fields.institutionToName.name(), institutionUpdate.getDescription()); + repository.updateMulti(queryFrom, updateFrom, DelegationEntity.class); + } + + Update updateTo = new Update(); + Query queryTo = Query.query(Criteria.where(DelegationEntity.Fields.from.name()).is(institutionUpdate.getId())); + updateTo.set(DelegationEntity.Fields.institutionFromName.name(), institutionUpdate.getDescription()); + if (Objects.nonNull(institutionUpdate.getParentDescription())) { + updateTo.set(DelegationEntity.Fields.institutionFromRootName.name(), institutionUpdate.getParentDescription()); + } + repository.updateMulti(queryTo, updateTo, DelegationEntity.class); + + } + +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepository.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepository.java new file mode 100644 index 0000000..352b2bd --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepository.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface DelegationRepository extends MongoRepository, MongoCustomConnector { + + Optional findByFromAndToAndProductIdAndTypeAndStatus(String from, String to, String productId, DelegationType type, DelegationState status); + + Optional> findByToAndStatus(String to, DelegationState status); +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImpl.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImpl.java new file mode 100644 index 0000000..04bea06 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImpl.java @@ -0,0 +1,359 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.GeoTaxonomyEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardingEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionEntityMapper; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionMapperHelper; +import it.pagopa.selfcare.mscore.constant.GenericError; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.SearchMode; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; +import it.pagopa.selfcare.product.entity.ProductStatus; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.mongodb.core.FindAndModifyOptions; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Component; + +import java.time.OffsetDateTime; +import java.util.*; +import java.util.stream.Collectors; + +import static it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionMapperHelper.addGeographicTaxonomies; +import static it.pagopa.selfcare.mscore.constant.CustomError.GET_INSTITUTION_BILLING_ERROR; +import static it.pagopa.selfcare.mscore.constant.CustomError.INSTITUTION_NOT_FOUND; + +@Slf4j +@Component +public class InstitutionConnectorImpl implements InstitutionConnector { + + private static final String CURRENT_ONBOARDING = "current."; + private static final String CURRENT_ONBOARDING_REFER = "$[current]"; + + private final InstitutionRepository repository; + private final InstitutionEntityMapper institutionMapper; + + public InstitutionConnectorImpl(InstitutionRepository repository, InstitutionEntityMapper institutionMapper) { + this.repository = repository; + this.institutionMapper = institutionMapper; + } + + @Override + public List findAll() { + return repository.findAll().stream().map(institutionMapper::convertToInstitution).collect(Collectors.toList()); + } + + @Override + public Institution save(Institution institution) { + final InstitutionEntity entity = institutionMapper.convertToInstitutionEntity(institution); + return institutionMapper.convertToInstitution(repository.save(entity)); + } + + @Override + public List findByExternalIdsAndProductId(List validInstitutionList, String productId) { + List externalIds = validInstitutionList.stream().map(ValidInstitution::getId).collect(Collectors.toList()); + Query query = Query.query(Criteria.where(constructQuery(Onboarding.Fields.productId.name())).is(productId) + .and(InstitutionEntity.Fields.externalId.name()).in(externalIds)); + return repository.find(query, InstitutionEntity.class).stream() + .map(InstitutionEntity::getExternalId) + .collect(Collectors.toList()); + } + + @Override + public void deleteById(String id) { + repository.deleteById(id); + } + + @Override + public Institution findById(String id) { + return repository.findById(id) + .map(institution -> { + log.info("Founded institution {}", institution.getExternalId()); + return institutionMapper.convertToInstitution(institution); + }) + .orElseThrow(() -> new ResourceNotFoundException(String.format(INSTITUTION_NOT_FOUND.getMessage(), id, "UNDEFINED"), INSTITUTION_NOT_FOUND.getCode())); + } + + @Override + public Institution findAndUpdateStatus(String institutionId, String tokenId, RelationshipState status) { + OffsetDateTime now = OffsetDateTime.now(); + + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); + Update update = new Update() + .set(constructQuery(CURRENT_ONBOARDING_REFER, Onboarding.Fields.status.name()), status) + .set(constructQuery(CURRENT_ONBOARDING_REFER, Onboarding.Fields.updatedAt.name()), now) + .filterArray(Criteria.where(CURRENT_ONBOARDING + Onboarding.Fields.tokenId.name()).is(tokenId)); + if (status == RelationshipState.DELETED) { + update.set(constructQuery(CURRENT_ONBOARDING_REFER, Onboarding.Fields.closedAt.name()), now); + } + FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); + return institutionMapper.convertToInstitution(repository.findAndModify(query, update, findAndModifyOptions, InstitutionEntity.class)); + } + + @Override + public Institution findAndUpdate(String institutionId, Onboarding onboarding, List geographicTaxonomiesList, InstitutionUpdate institutionUpdate) { + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); + Update update = new Update(); + update.set(InstitutionEntity.Fields.updatedAt.name(), OffsetDateTime.now()); + if (onboarding != null) { + update.addToSet(InstitutionEntity.Fields.onboarding.name(), onboarding); + } + if (institutionUpdate != null) { + Map map = InstitutionMapperHelper.getNotNullField(institutionUpdate); + map.forEach(update::set); + } + addGeographicTaxonomies(geographicTaxonomiesList, update); + FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); + return institutionMapper.convertToInstitution(repository.findAndModify(query, update, findAndModifyOptions, InstitutionEntity.class)); + } + + @Override + public List findByGeotaxonomies(List geo, SearchMode searchMode) { + Query query = constructQueryWithSearchMode(geo, searchMode); + return repository.find(query, InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public List findByProductId(String productId) { + Query query = Query.query(Criteria.where(constructQuery(Onboarding.Fields.productId.name())).is(productId)); + return repository.find(query, InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public List findAllByIds(List ids) { + List list = new ArrayList<>(); + repository.findAllById(ids) + .forEach(entity -> list.add(institutionMapper.convertToInstitution(entity))); + return list; + } + + @Override + public Institution findByExternalIdAndProductId(String externalId, String productId) { + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.externalId.name()).is(externalId) + .and(constructQuery(Onboarding.Fields.productId.name())).is(productId)); + + return repository.find(query, InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .findFirst().orElseThrow(() -> new ResourceNotFoundException(String.format(GET_INSTITUTION_BILLING_ERROR.getMessage(), externalId, productId), + GET_INSTITUTION_BILLING_ERROR.getCode())); + } + + @Override + public List findOnboardingByIdAndProductId(String institutionId, String productId) { + + Optional optionalInstitution = Objects.nonNull(productId) + ? Optional + .ofNullable(repository.findByInstitutionIdAndOnboardingProductId(institutionId, productId)) + : repository.findById(institutionId); + return optionalInstitution + .map(institutionMapper::convertToInstitution) + .map(Institution::getOnboarding) + .orElse(List.of()); + } + + @Override + public List findInstitutionsByProductId(String productId, Integer page, Integer size) { + + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.onboarding.name()). + elemMatch(Criteria.where(Onboarding.Fields.productId.name()).is(productId))); + + Pageable pageable = PageRequest.of(Objects.nonNull(page) ? page : 0, + Objects.nonNull(size) ? size : 100); + + Page institutionEntities = repository.find(query, pageable, InstitutionEntity.class); + return institutionEntities.getContent().stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public void findAndRemoveOnboarding(String institutionId, Onboarding onboarding) { + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); + Update update = new Update(); + update.set(InstitutionEntity.Fields.updatedAt.name(), OffsetDateTime.now()); + if (onboarding != null) { + update.pull(InstitutionEntity.Fields.onboarding.name(), onboarding); + } + FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(false); + repository.findAndModify(query, update, findAndModifyOptions, InstitutionEntity.class); + } + + @Override + public void findAndDeleteOnboarding(String institutionId, String productId) { + + Query query = Query.query( + Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); + + Update update = new Update(); + update.set(InstitutionEntity.Fields.updatedAt.name(), OffsetDateTime.now()); + update.set("onboarding.$[elem].status", RelationshipState.DELETED.name()); + update.set("onboarding.$[elem].updatedAt", OffsetDateTime.now()); + + update.filterArray(Criteria.where("elem.productId").is(productId) + .and("elem.status").is(RelationshipState.ACTIVE.name())); + + FindAndModifyOptions options = FindAndModifyOptions.options().upsert(false).returnNew(false); + InstitutionEntity updatedEntity = repository.findAndModify(query, update, options, InstitutionEntity.class); + } + + + @Override + public List findByTaxCodeSubunitCodeAndOrigin(String taxCode, String subunitCode, String origin, String originId) { + return repository.find(Query.query(CriteriaBuilder.builder() + .isIfNotNull(InstitutionEntity.Fields.taxCode.name(), taxCode) + .isIfNotNull(InstitutionEntity.Fields.subunitCode.name(), subunitCode) + .isIfNotNull(InstitutionEntity.Fields.origin.name(), origin) + .isIfNotNull(InstitutionEntity.Fields.originId.name(), originId) + .build() + ), + InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public Boolean existsByTaxCodeAndSubunitCodeAndProductAndStatusList(String taxCode, String subunitCode, + Optional optProductId, List validRelationshipStates) { + + Criteria criteriaInstitution = Criteria.where(InstitutionEntity.Fields.taxCode.name()).is(taxCode) + .and(InstitutionEntity.Fields.subunitCode.name()).is(subunitCode); + + Criteria criteriaOnboarding = Criteria.where(Onboarding.Fields.status.name()).in(validRelationshipStates); + optProductId.ifPresent(productId -> criteriaOnboarding.and(Onboarding.Fields.productId.name()).is(productId)); + + return repository.exists(Query.query(criteriaInstitution) + .addCriteria(Criteria.where(InstitutionEntity.Fields.onboarding.name()) + .elemMatch(criteriaOnboarding)) + , InstitutionEntity.class); + } + + @Override + public Optional findByExternalId(String externalId) { + return repository.find(Query.query(Criteria.where(InstitutionEntity.Fields.externalId.name()).is(externalId)), + InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .findFirst(); + } + + @Override + public List findWithFilter(String externalId, String productId, List validRelationshipStates) { + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.externalId.name()).is(externalId)) + .addCriteria(Criteria.where(InstitutionEntity.Fields.onboarding.name()) + .elemMatch(Criteria.where(Onboarding.Fields.productId.name()).is(productId) + .and(Onboarding.Fields.status.name()).in(validRelationshipStates))); + + return repository.find(query, InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public Institution updateOnboardedProductCreatedAt(String institutionId, String productId, OffsetDateTime createdAt) { + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); + + Update update = new Update(); + update.set(constructQuery(CURRENT_ONBOARDING_REFER, OnboardingEntity.Fields.createdAt.name()), createdAt) + .set(constructQuery(CURRENT_ONBOARDING_REFER, OnboardingEntity.Fields.updatedAt.name()), OffsetDateTime.now()) + .filterArray(Criteria.where(CURRENT_ONBOARDING + OnboardingEntity.Fields.productId.name()).is(productId) + .and(CURRENT_ONBOARDING + OnboardingEntity.Fields.status.name()).is(RelationshipState.ACTIVE.name())); + + Update updateInstitutionEntityUpdatedAt = new Update(); + updateInstitutionEntityUpdatedAt.set(InstitutionEntity.Fields.updatedAt.name(), OffsetDateTime.now()); + + FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); + repository.findAndModify(query, update, findAndModifyOptions, InstitutionEntity.class); + return institutionMapper.convertToInstitution(repository.findAndModify(query, updateInstitutionEntityUpdatedAt, findAndModifyOptions, InstitutionEntity.class)); + } + + @Override + public List findBrokers(String productId, InstitutionType type) { + + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.institutionType.name()).is(type) + .and(InstitutionEntity.Fields.onboarding.name()).elemMatch(Criteria.where(Onboarding.Fields.productId.name()).is(productId) + .and(Onboarding.Fields.status.name()).is(ProductStatus.ACTIVE))); + + List institutionEntities = repository.find(query, InstitutionEntity.class); + return institutionEntities.stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public List findByTaxCodeAndSubunitCode(String taxCode, String subunitCode) { + return repository.find(Query.query(Criteria.where(InstitutionEntity.Fields.taxCode.name()).is(taxCode) + .and(InstitutionEntity.Fields.subunitCode.name()).is(subunitCode) + ), + InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public List findByOriginAndOriginId(String origin, String originId) { + return repository.find(Query.query(CriteriaBuilder.builder() + .isIfNotNull(InstitutionEntity.Fields.origin.name(), origin) + .isIfNotNull(InstitutionEntity.Fields.originId.name(), originId) + .build() + ), + InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public Boolean existsOnboardingByFilters(VerifyOnboardingFilters filters) { + Criteria criteriaInstitution = CriteriaBuilder.builder() + .isIfNotNull(InstitutionEntity.Fields.externalId.name(), filters.getExternalId()) + .isIfNotNull(InstitutionEntity.Fields.taxCode.name(), filters.getTaxCode()) + .isIfNotNull(InstitutionEntity.Fields.origin.name(), filters.getOrigin()) + .isIfNotNull(InstitutionEntity.Fields.originId.name(), filters.getOriginId()) + .build(); + + criteriaInstitution.and(InstitutionEntity.Fields.subunitCode.name()).is(filters.getSubunitCode()); + + Criteria criteriaOnboarding = Criteria.where(Onboarding.Fields.status.name()).in(filters.getValidRelationshipStates()) + .and(Onboarding.Fields.productId.name()).is(filters.getProductId()); + + return repository.exists(Query.query(criteriaInstitution) + .addCriteria(Criteria.where(InstitutionEntity.Fields.onboarding.name()) + .elemMatch(criteriaOnboarding)) + , InstitutionEntity.class); + } + + private Query constructQueryWithSearchMode(List geo, SearchMode searchMode) { + String geoQuery = InstitutionEntity.Fields.geographicTaxonomies.name() + + "." + GeoTaxonomyEntity.Fields.code.name(); + switch (searchMode) { + case ALL: + return Query.query(Criteria.where(geoQuery).all(geo)); + case ANY: + return Query.query(Criteria.where(geoQuery).in(geo)); + case EXACT: + return Query.query(Criteria.where(geoQuery).all(geo) + .and(InstitutionEntity.Fields.geographicTaxonomies.name()).size(geo.size())); + default: + throw new InvalidRequestException("Invalid search mode", "0000"); + } + } + + private String constructQuery(String... variables) { + StringBuilder builder = new StringBuilder(); + builder.append(InstitutionEntity.Fields.onboarding.name()); + Arrays.stream(variables).forEach(s -> builder.append(".").append(s)); + return builder.toString(); + } +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepository.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepository.java new file mode 100644 index 0000000..e742364 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepository.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.Query; +import org.springframework.stereotype.Repository; + +@Repository +public interface InstitutionRepository extends MongoRepository, MongoCustomConnector { + + @Query(value = "{ '_id' : ?0, 'onboarding' : { $elemMatch: { 'productId' : ?1 } } }", + fields = "{ 'onboarding': { $elemMatch: { 'productId' : ?1 } } }") + InstitutionEntity findByInstitutionIdAndOnboardingProductId(String institutionId, String productId); + + +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnector.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnector.java new file mode 100644 index 0000000..5fbb442 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnector.java @@ -0,0 +1,28 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import com.mongodb.client.result.UpdateResult; +import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionFilter; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.mongodb.core.FindAndModifyOptions; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.UpdateDefinition; + +import java.util.List; + +public interface MongoCustomConnector { + + boolean exists(Query query, Class outputType); + + Long count(Query query, Class outputType); + + List find(Query query, Class outputType); + + Page find(Query query, Pageable pageable, Class outputType); + + O findAndModify(Query query, UpdateDefinition updateDefinition, FindAndModifyOptions findAndModifyOptions, Class outputType); + + List findUserInstitutionAggregation(UserInstitutionFilter filter, Class outputType); + + UpdateResult updateMulti(Query query, UpdateDefinition updateDefinition, Class outputType); +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImpl.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImpl.java new file mode 100644 index 0000000..a9c352a --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImpl.java @@ -0,0 +1,107 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import com.mongodb.client.result.UpdateResult; +import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionFilter; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.data.mongodb.core.FindAndModifyOptions; +import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.GraphLookupOperation; +import org.springframework.data.mongodb.core.aggregation.MatchOperation; +import org.springframework.data.mongodb.core.aggregation.UnwindOperation; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.UpdateDefinition; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +public class MongoCustomConnectorImpl implements MongoCustomConnector { + private static final String INSTITUTION_ID = "institutionId"; + private static final String INSTITUTIONS = "institutions"; + private static final String ENTITY_ID = "_id"; + private static final String BINDINGS = "$bindings"; + private final MongoOperations mongoOperations; + + public MongoCustomConnectorImpl(MongoOperations mongoOperations) { + this.mongoOperations = mongoOperations; + } + + + @Override + public boolean exists(Query query, Class outputType) { + return mongoOperations.exists(query, outputType); + } + + @Override + public Long count(Query query, Class outputType) { + return mongoOperations.count(query, outputType); + } + + @Override + public List find(Query query, Class outputType) { + return mongoOperations.find(query, outputType); + } + + @Override + public Page find(Query query, Pageable pageable, Class outputType) { + long count = mongoOperations.count(query, outputType); + List list = new ArrayList<>(); + if (count > 0) { + list = mongoOperations.find(query.with(pageable), outputType); + } + return new PageImpl<>(list, pageable, count); + } + + @Override + public O findAndModify(Query query, UpdateDefinition updateDefinition, FindAndModifyOptions findAndModifyOptions, Class outputType) { + return mongoOperations.findAndModify(query, updateDefinition, findAndModifyOptions, outputType); + } + + @Override + public List findUserInstitutionAggregation(UserInstitutionFilter filter, Class outputType) { + MatchOperation matchUserId = Aggregation.match(Criteria.where(ENTITY_ID).is(filter.getUserId())); + //Output a new document for each userBindings + UnwindOperation unwindBindings = Aggregation.unwind(BINDINGS); + //retrieve institution for each binding + GraphLookupOperation.GraphLookupOperationBuilder graphLookupInstitution = Aggregation.graphLookup(filter.getToCollection()) + .startWith(BINDINGS + "." + INSTITUTION_ID) + .connectFrom(INSTITUTION_ID) + .connectTo(ENTITY_ID) + .maxDepth(2); + //Output a new document for each product in bindings + UnwindOperation unwindProducts = Aggregation.unwind(BINDINGS + ".products"); + //remove document with product status not in filter + MatchOperation matchProductStatus = Aggregation.match(Criteria.where("bindings.products.status").in(filter.getStates())); + //remove document with no institution + MatchOperation matchInstitutionExist = Aggregation.match(Criteria.where(INSTITUTIONS).size(1)); + + Aggregation aggregation; + if (StringUtils.hasText(filter.getInstitutionId())) { + MatchOperation matchInstitutionId = checkIfInstitutionIdIsPresent(filter); + aggregation = Aggregation.newAggregation(matchUserId, unwindBindings, graphLookupInstitution.as(INSTITUTIONS), matchInstitutionId, unwindProducts, matchProductStatus, matchInstitutionExist); + } else if (StringUtils.hasText(filter.getExternalId())) { + checkIfExternalIdIsPresent(filter, graphLookupInstitution); + aggregation = Aggregation.newAggregation(matchUserId, unwindBindings, graphLookupInstitution.as(INSTITUTIONS), unwindProducts, matchProductStatus, matchInstitutionExist); + } else { + aggregation = Aggregation.newAggregation(matchUserId, unwindBindings, graphLookupInstitution.as(INSTITUTIONS), unwindProducts, matchProductStatus, matchInstitutionExist); + } + return mongoOperations.aggregate(aggregation, filter.getFromCollection(), outputType).getMappedResults(); + } + + private MatchOperation checkIfInstitutionIdIsPresent(UserInstitutionFilter filter) { + return Aggregation.match(Criteria.where("bindings." + INSTITUTION_ID).is(filter.getInstitutionId())); + } + + private void checkIfExternalIdIsPresent(UserInstitutionFilter filter, GraphLookupOperation.GraphLookupOperationBuilder graphLookupOperation) { + graphLookupOperation.restrict(Criteria.where("externalId").is(filter.getExternalId())); + } + + @Override + public UpdateResult updateMulti(Query query, UpdateDefinition updateDefinition, Class outputType){ + return mongoOperations.updateMulti(query, updateDefinition, outputType); + } +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImpl.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImpl.java new file mode 100644 index 0000000..c6ee1c3 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImpl.java @@ -0,0 +1,67 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.api.PecNotificationConnector; +import it.pagopa.selfcare.mscore.connector.dao.model.PecNotificationEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.PecNotificationEntityMapper; +import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Objects; + +@Slf4j +@Component +public class PecNotificationConnectorImpl implements PecNotificationConnector { + + private final PecNotificationRepository repository; + private final PecNotificationEntityMapper pecNotificationMapper; + + public PecNotificationConnectorImpl(PecNotificationRepository repository, PecNotificationEntityMapper pecNotificationMapper) { + this.repository = repository; + this.pecNotificationMapper = pecNotificationMapper; + } + + @Override + public boolean findAndDeletePecNotification(String institutionId, String productId) { + + Query query = Query.query(Criteria.where(PecNotificationEntity.Fields.institutionId.name()).is(institutionId) + .and(PecNotificationEntity.Fields.productId.name()).is(productId)); + + List pecNotificationEntityList = repository.find(query, PecNotificationEntity.class); + + if(Objects.nonNull(pecNotificationEntityList) && pecNotificationEntityList.size() == 1) { + repository.delete(pecNotificationEntityList.get(0)); + log.trace("Deleted PecNotification with institutionId: {} and productId: {}", institutionId, productId); + return true; + } + + if (Objects.nonNull(pecNotificationEntityList) && pecNotificationEntityList.size() > 1) { + log.trace("Cannot delete PecNotification with institutionId: {} and productId: {}, because there are multiple entries", institutionId, productId); + return false; + } + + log.trace("Cannot delete PecNotification with institutionId: {} and productId: {}, because it does not exist", institutionId, productId); + return false; + } + + @Override + public boolean insertPecNotification(PecNotification pecNotification){ + + PecNotificationEntity pecNotificationEntity = this.pecNotificationMapper.convertToPecNotificationEntity(pecNotification); + + boolean exist = repository.existsByInstitutionIdAndProductId(pecNotificationEntity.getInstitutionId(), pecNotificationEntity.getProductId()); + + if (exist){ + log.trace("Cannot insert the PecNotification: {}, as it already exists in the collection", pecNotification.toString()); + return false; + } + + repository.insert(pecNotificationEntity); + log.trace("Inserted PecNotification: {}", pecNotification.toString()); + return true; + } + +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationRepository.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationRepository.java new file mode 100644 index 0000000..87c8f85 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationRepository.java @@ -0,0 +1,8 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.connector.dao.model.PecNotificationEntity; +import org.springframework.data.mongodb.repository.MongoRepository; + +public interface PecNotificationRepository extends MongoRepository, MongoCustomConnector { + boolean existsByInstitutionIdAndProductId(String institutionId, String productId); +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/TokenRepository.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/TokenRepository.java new file mode 100644 index 0000000..483a662 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/TokenRepository.java @@ -0,0 +1,8 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.connector.dao.model.TokenEntity; +import org.springframework.data.mongodb.repository.MongoRepository; + +public interface TokenRepository extends MongoRepository, MongoCustomConnector { + +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/UserRepository.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/UserRepository.java new file mode 100644 index 0000000..ee21f99 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/UserRepository.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.connector.dao.model.UserEntity; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository extends MongoRepository,MongoCustomConnector { + +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfig.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfig.java new file mode 100644 index 0000000..6e55562 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfig.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.connector.dao.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.data.mongodb.core.convert.MongoCustomConversions; + +import java.util.Arrays; + +@Configuration +@PropertySource("classpath:config/dao-config.properties") +class DaoConfig{ + + @Bean + public MongoCustomConversions customConversions() { + return new MongoCustomConversions(Arrays.asList( + new OffsetDateTimeToStringConverter(), + new StringToOffsetDateTimeConverter() + )); + } + +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverter.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverter.java new file mode 100644 index 0000000..161d0c2 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverter.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.connector.dao.config; + +import org.springframework.core.convert.converter.Converter; + +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; + +class OffsetDateTimeToStringConverter implements Converter { + + @Override + public String convert(OffsetDateTime source) { + return source.toInstant().atOffset(ZoneOffset.UTC).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); + } + +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverter.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverter.java new file mode 100644 index 0000000..686f031 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverter.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.connector.dao.config; + +import org.springframework.core.convert.converter.Converter; + +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; + +class StringToOffsetDateTimeConverter implements Converter { + + @Override + public OffsetDateTime convert(String source) { + return OffsetDateTime.parse(source, DateTimeFormatter.ISO_OFFSET_DATE_TIME); + } + +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/DelegationEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/DelegationEntity.java new file mode 100644 index 0000000..4b14e6b --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/DelegationEntity.java @@ -0,0 +1,36 @@ +package it.pagopa.selfcare.mscore.connector.dao.model; + +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import lombok.Data; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Sharded; + +import java.time.OffsetDateTime; + +@Data +@Document("Delegations") +@Sharded(shardKey = {"id"}) +@FieldNameConstants(asEnum = true) +public class DelegationEntity { + + @Id + private String id; + private String from; + private String institutionFromName; + private String institutionToName; + private String institutionFromRootName; + private String to; + private String toTaxCode; + private String fromTaxCode; + private String toType; + private String fromType; + private String productId; + private DelegationType type; + private DelegationState status; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/InstitutionEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/InstitutionEntity.java new file mode 100644 index 0000000..b370791 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/InstitutionEntity.java @@ -0,0 +1,61 @@ +package it.pagopa.selfcare.mscore.connector.dao.model; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.*; +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.index.Indexed; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Sharded; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@Document("Institution") +@Sharded(shardKey = {"id"}) +@FieldNameConstants(asEnum = true) +public class InstitutionEntity { + + @Id + private String id; + + @Indexed(unique = true) + private String externalId; + + private Origin origin; + private String originId; + private String description; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String taxCode; + private String city; + private String county; + private String country; + private String istatCode; + private BillingEntity billing; + private List onboarding; + private List geographicTaxonomies; + private List attributes; + private PaymentServiceProviderEntity paymentServiceProvider; + private DataProtectionOfficerEntity dataProtectionOfficer; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private String subunitCode; + private String subunitType; + private String parentDescription; + private String rootParentId; + private PaAttributesEntity paAttributes; + private boolean delegation; + +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java new file mode 100644 index 0000000..ac2c57a --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java @@ -0,0 +1,29 @@ +package it.pagopa.selfcare.mscore.connector.dao.model; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Sharded; + +import java.time.OffsetDateTime; + +@Data +@NoArgsConstructor +@Document("PecNotification") +@Sharded(shardKey = {"id"}) +@FieldNameConstants(asEnum = true) +public class PecNotificationEntity { + + @Id + private String id; + private String institutionId; + private String productId; + private Integer moduleDayOfTheEpoch; + private String digitalAddress; + + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + +} \ No newline at end of file diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/TokenEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/TokenEntity.java new file mode 100644 index 0000000..03a6c23 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/TokenEntity.java @@ -0,0 +1,46 @@ +package it.pagopa.selfcare.mscore.connector.dao.model; + +import it.pagopa.selfcare.mscore.connector.dao.model.inner.InstitutionUpdateEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.TokenUserEntity; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.TokenType; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.index.Indexed; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Sharded; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@NoArgsConstructor +@Document("Token") +@Sharded(shardKey = {"id"}) +@FieldNameConstants(asEnum = true) +public class TokenEntity { + + @Id + private String id; + private TokenType type; + private RelationshipState status; + private String institutionId; + private String productId; + private OffsetDateTime expiringDate; + private String checksum; + private String contractVersion; + private String contractTemplate; + private String contractSigned; + private String contentType; + private List users; + private InstitutionUpdateEntity institutionUpdate; + @Indexed + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private OffsetDateTime deletedAt; + private OffsetDateTime activatedAt; + +} + diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/UserEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/UserEntity.java new file mode 100644 index 0000000..1162bfc --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/UserEntity.java @@ -0,0 +1,27 @@ +package it.pagopa.selfcare.mscore.connector.dao.model; + +import it.pagopa.selfcare.mscore.connector.dao.model.inner.UserBindingEntity; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Sharded; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@NoArgsConstructor +@Document("User") +@Sharded(shardKey = {"id"}) +@FieldNameConstants(asEnum = true) +public class UserEntity { + + @Id + private String id; + private List bindings; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionAggregationEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionAggregationEntity.java new file mode 100644 index 0000000..e4ef1ad --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionAggregationEntity.java @@ -0,0 +1,25 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.aggregation; + + +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Sharded; + +import java.util.List; + +@Data +@NoArgsConstructor +@Document("User") +@Sharded(shardKey = {"id"}) +@FieldNameConstants(asEnum = true) +public class UserInstitutionAggregationEntity { + + @Id + private String id; + private UserInstitutionBindingEntity bindings; + private List institutions; +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionBindingEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionBindingEntity.java new file mode 100644 index 0000000..f5a6ed5 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionBindingEntity.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.aggregation; + +import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardedProductEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +@AllArgsConstructor +@NoArgsConstructor +public class UserInstitutionBindingEntity { + + private String institutionId; + private OnboardedProductEntity products; +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AdditionalInformationsEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AdditionalInformationsEntity.java new file mode 100644 index 0000000..a53ff98 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AdditionalInformationsEntity.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +public class AdditionalInformationsEntity { + private boolean belongRegulatedMarket; + private String regulatedMarketNote; + private boolean ipa; + private String ipaCode; + private boolean establishedByRegulatoryProvision; + private String establishedByRegulatoryProvisionNote; + private boolean agentOfPublicService; + private String agentOfPublicServiceNote; + private String otherNote; +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AttributesEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AttributesEntity.java new file mode 100644 index 0000000..67248df --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AttributesEntity.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +public class AttributesEntity { + private String origin; + private String code; + private String description; +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/BillingEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/BillingEntity.java new file mode 100644 index 0000000..47e5edd --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/BillingEntity.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +public class BillingEntity { + + private String vatNumber; + private String taxCodeInvoicing; + private String recipientCode; + private boolean publicServices; + +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/DataProtectionOfficerEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/DataProtectionOfficerEntity.java new file mode 100644 index 0000000..d6224c5 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/DataProtectionOfficerEntity.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +public class DataProtectionOfficerEntity { + private String address; + private String email; + private String pec; +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/GeoTaxonomyEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/GeoTaxonomyEntity.java new file mode 100644 index 0000000..518e0fb --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/GeoTaxonomyEntity.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +public class GeoTaxonomyEntity { + private String code; + private String desc; +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/InstitutionUpdateEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/InstitutionUpdateEntity.java new file mode 100644 index 0000000..4a2cd3b --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/InstitutionUpdateEntity.java @@ -0,0 +1,30 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.Data; + +import java.util.List; + +@Data +public class InstitutionUpdateEntity { + + private InstitutionType institutionType; + private String description; + private String digitalAddress; + private String address; + private String taxCode; + private String zipCode; + private String city; + private String county; + private String country; + private PaymentServiceProviderEntity paymentServiceProvider; + private DataProtectionOfficerEntity dataProtectionOfficer; + private List geographicTaxonomies; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private AdditionalInformationsEntity additionalInformations; +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardedProductEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardedProductEntity.java new file mode 100644 index 0000000..e8a040d --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardedProductEntity.java @@ -0,0 +1,30 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.Env; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.mongodb.core.index.Indexed; + +import java.time.OffsetDateTime; + +import static it.pagopa.selfcare.mscore.constant.Env.ROOT; + +@Data +@FieldNameConstants(asEnum = true) +public class OnboardedProductEntity { + + @Indexed + private String productId; + + private String relationshipId; + private String tokenId; + private RelationshipState status; + private String contract; + private String productRole; + private PartyRole role; + private Env env = ROOT; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardingEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardingEntity.java new file mode 100644 index 0000000..6c86903 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardingEntity.java @@ -0,0 +1,25 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.mongodb.core.index.Indexed; + +import java.time.OffsetDateTime; + +@Data +@FieldNameConstants(asEnum = true) +public class OnboardingEntity { + + @Indexed(unique = true) + private String productId; + private RelationshipState status; + private String tokenId; + private String contract; + private String pricingPlan; + private BillingEntity billing; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private OffsetDateTime closedAt; + private Boolean isAggregator; +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaAttributesEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaAttributesEntity.java new file mode 100644 index 0000000..e2c7098 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaAttributesEntity.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.Data; + +@Data +public class PaAttributesEntity { + + private String aooParentCode; +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaymentServiceProviderEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaymentServiceProviderEntity.java new file mode 100644 index 0000000..d7f4bf6 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaymentServiceProviderEntity.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +public class PaymentServiceProviderEntity { + private String abiCode; + private String businessRegisterNumber; + private String legalRegisterName; + private String legalRegisterNumber; + private boolean vatNumberGroup; +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/TokenUserEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/TokenUserEntity.java new file mode 100644 index 0000000..9e3ef4f --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/TokenUserEntity.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import lombok.Data; + +@Data +public class TokenUserEntity { + private String userId; + private PartyRole role; +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/UserBindingEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/UserBindingEntity.java new file mode 100644 index 0000000..ce3fad0 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/UserBindingEntity.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.mongodb.core.index.Indexed; + +import java.util.List; + +@Data +@FieldNameConstants(asEnum = true) +@AllArgsConstructor +@NoArgsConstructor +public class UserBindingEntity { + + @Indexed(unique = true) + private String institutionId; + private String institutionName; + private String institutionRootName; + private List products; +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationEntityMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationEntityMapper.java new file mode 100644 index 0000000..b762a79 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationEntityMapper.java @@ -0,0 +1,23 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + + +import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +import java.util.UUID; + +@Mapper(componentModel = "spring", imports = UUID.class) +public interface DelegationEntityMapper { + + @Mapping(target = "id", defaultExpression = "java(UUID.randomUUID().toString())") + @Mapping(target = "toType", source = "brokerType") + @Mapping(target = "fromType", source = "institutionType") + DelegationEntity convertToDelegationEntity(Delegation delegation); + + @Mapping(target = "brokerType", source = "toType") + @Mapping(target = "institutionType", source = "fromType") + Delegation convertToDelegation(DelegationEntity entity); + +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationInstitutionMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationInstitutionMapper.java new file mode 100644 index 0000000..7b84a97 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationInstitutionMapper.java @@ -0,0 +1,34 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.model.delegation.DelegationInstitution; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; + +import java.util.List; + +@Mapper(componentModel = "spring") +public interface DelegationInstitutionMapper { + + @Mapping(source = "institutions", target = "taxCode", qualifiedByName = "setTaxCode") + @Mapping(source = "institutions", target = "institutionType", qualifiedByName = "setInstitutionType") + Delegation convertToDelegationInstitution(DelegationInstitution delegation); + + @Mapping(source = "institutions", target = "brokerTaxCode", qualifiedByName = "setTaxCode") + @Mapping(source = "institutions", target = "brokerType", qualifiedByName = "setInstitutionType") + Delegation convertToDelegationBroker(DelegationInstitution delegation); + + @Named("setTaxCode") + default String setTaxCode(List institutionList) { + return !institutionList.isEmpty() ? institutionList.get(0).getTaxCode() : null; + } + + @Named("setInstitutionType") + default InstitutionType setInstitutionType(List institutionList) { + return !institutionList.isEmpty()? institutionList.get(0).getInstitutionType() : null; + } + +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionEntityMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionEntityMapper.java new file mode 100644 index 0000000..73c4e9b --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionEntityMapper.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + + +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +import java.util.UUID; + +@Mapper(componentModel = "spring", imports = UUID.class) +public interface InstitutionEntityMapper { + + @Mapping(target = "id", defaultExpression = "java(UUID.randomUUID().toString())") + InstitutionEntity convertToInstitutionEntity(Institution institution); + + Institution convertToInstitution(InstitutionEntity entity); +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapper.java new file mode 100644 index 0000000..bc0abcf --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapper.java @@ -0,0 +1,96 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + +import it.pagopa.selfcare.mscore.connector.dao.model.inner.AdditionalInformationsEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.DataProtectionOfficerEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.GeoTaxonomyEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.PaymentServiceProviderEntity; +import it.pagopa.selfcare.mscore.model.institution.AdditionalInformations; +import it.pagopa.selfcare.mscore.model.institution.DataProtectionOfficer; +import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; +import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; + +/** Deprecated: Use InstitutionEntityMapper */ +@Deprecated +@NoArgsConstructor(access = AccessLevel.NONE) +public class InstitutionMapper { + + public static DataProtectionOfficer toDataProtectionOfficer(DataProtectionOfficerEntity dataProtectionOfficer) { + DataProtectionOfficer data = new DataProtectionOfficer(); + data.setPec(dataProtectionOfficer.getPec()); + data.setEmail(dataProtectionOfficer.getEmail()); + data.setAddress(dataProtectionOfficer.getAddress()); + return data; + } + + public static AdditionalInformations toAdditionalInformations(AdditionalInformationsEntity additionalInformations) { + AdditionalInformations additionalInfo = new AdditionalInformations(); + additionalInfo.setIpa(additionalInformations.isIpa()); + additionalInfo.setIpaCode(additionalInformations.getIpaCode()); + additionalInfo.setAgentOfPublicService(additionalInformations.isAgentOfPublicService()); + additionalInfo.setAgentOfPublicServiceNote(additionalInformations.getAgentOfPublicServiceNote()); + additionalInfo.setBelongRegulatedMarket(additionalInformations.isBelongRegulatedMarket()); + additionalInfo.setRegulatedMarketNote(additionalInformations.getRegulatedMarketNote()); + additionalInfo.setEstablishedByRegulatoryProvision(additionalInformations.isEstablishedByRegulatoryProvision()); + additionalInfo.setEstablishedByRegulatoryProvisionNote(additionalInformations.getEstablishedByRegulatoryProvisionNote()); + additionalInfo.setOtherNote(additionalInformations.getOtherNote()); + return additionalInfo; + } + + public static PaymentServiceProvider toPaymentServiceProvider(PaymentServiceProviderEntity paymentServiceProvider) { + PaymentServiceProvider provider = new PaymentServiceProvider(); + provider.setLegalRegisterName(paymentServiceProvider.getLegalRegisterName()); + provider.setAbiCode(paymentServiceProvider.getAbiCode()); + provider.setLegalRegisterNumber(paymentServiceProvider.getLegalRegisterNumber()); + provider.setVatNumberGroup(paymentServiceProvider.isVatNumberGroup()); + provider.setBusinessRegisterNumber(paymentServiceProvider.getBusinessRegisterNumber()); + return provider; + } + + public static List toGeoTaxonomyEntity(List geographicTaxonomies) { + List list = new ArrayList<>(); + for(InstitutionGeographicTaxonomies geo : geographicTaxonomies){ + GeoTaxonomyEntity entity = new GeoTaxonomyEntity(); + entity.setDesc(geo.getDesc()); + entity.setCode(geo.getCode()); + list.add(entity); + } + return list; + } + + public static DataProtectionOfficerEntity toDataProtectionOfficerEntity(DataProtectionOfficer dataProtectionOfficer) { + DataProtectionOfficerEntity data = new DataProtectionOfficerEntity(); + data.setPec(dataProtectionOfficer.getPec()); + data.setEmail(dataProtectionOfficer.getEmail()); + data.setAddress(dataProtectionOfficer.getAddress()); + return data; + } + + public static AdditionalInformationsEntity toAdditionalInformationsEntity(AdditionalInformations additionalInformations) { + AdditionalInformationsEntity additionalInfo = new AdditionalInformationsEntity(); + additionalInfo.setIpa(additionalInformations.isIpa()); + additionalInfo.setIpaCode(additionalInformations.getIpaCode()); + additionalInfo.setAgentOfPublicService(additionalInformations.isAgentOfPublicService()); + additionalInfo.setAgentOfPublicServiceNote(additionalInformations.getAgentOfPublicServiceNote()); + additionalInfo.setBelongRegulatedMarket(additionalInformations.isBelongRegulatedMarket()); + additionalInfo.setRegulatedMarketNote(additionalInformations.getRegulatedMarketNote()); + additionalInfo.setEstablishedByRegulatoryProvision(additionalInformations.isEstablishedByRegulatoryProvision()); + additionalInfo.setEstablishedByRegulatoryProvisionNote(additionalInformations.getEstablishedByRegulatoryProvisionNote()); + additionalInfo.setOtherNote(additionalInformations.getOtherNote()); + return additionalInfo; + } + + public static PaymentServiceProviderEntity toPaymentServiceProviderEntity(PaymentServiceProvider paymentServiceProvider) { + PaymentServiceProviderEntity provider = new PaymentServiceProviderEntity(); + provider.setLegalRegisterName(paymentServiceProvider.getLegalRegisterName()); + provider.setAbiCode(paymentServiceProvider.getAbiCode()); + provider.setLegalRegisterNumber(paymentServiceProvider.getLegalRegisterNumber()); + provider.setVatNumberGroup(paymentServiceProvider.isVatNumberGroup()); + provider.setBusinessRegisterNumber(paymentServiceProvider.getBusinessRegisterNumber()); + return provider; + } +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapperHelper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapperHelper.java new file mode 100644 index 0000000..88543fc --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapperHelper.java @@ -0,0 +1,87 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.GeoTaxonomyEntity; +import it.pagopa.selfcare.mscore.model.institution.DataProtectionOfficer; +import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.springframework.data.mongodb.core.query.Update; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +@NoArgsConstructor(access = AccessLevel.NONE) +public class InstitutionMapperHelper { + + + public static void addGeographicTaxonomies(List taxonomiesList, Update update) { + if (taxonomiesList != null && !taxonomiesList.isEmpty()) { + List list = taxonomiesList.stream().map(geographicTaxonomies -> { + GeoTaxonomyEntity entity = new GeoTaxonomyEntity(); + entity.setCode(geographicTaxonomies.getCode()); + entity.setDesc(geographicTaxonomies.getDesc()); + return entity; + }).collect(Collectors.toList()); + update.set(InstitutionEntity.Fields.geographicTaxonomies.name(), list); + } + } + + public static Map getNotNullField(InstitutionUpdate institutionUpdate) { + Map response = new HashMap<>(); + if(institutionUpdate.getInstitutionType() != null) { + response.put(InstitutionUpdate.Fields.institutionType.name(), institutionUpdate.getInstitutionType().name()); + } + response.put(InstitutionUpdate.Fields.description.name(), institutionUpdate.getDescription()); + response.put(InstitutionUpdate.Fields.parentDescription.name(), institutionUpdate.getParentDescription()); + response.put(InstitutionUpdate.Fields.digitalAddress.name(), institutionUpdate.getDigitalAddress()); + response.put(InstitutionUpdate.Fields.address.name(), institutionUpdate.getAddress()); + response.put(InstitutionUpdate.Fields.taxCode.name(), institutionUpdate.getTaxCode()); + response.put(InstitutionUpdate.Fields.zipCode.name(), institutionUpdate.getZipCode()); + response.put(InstitutionUpdate.Fields.rea.name(), institutionUpdate.getRea()); + response.put(InstitutionUpdate.Fields.shareCapital.name(), institutionUpdate.getShareCapital()); + response.put(InstitutionUpdate.Fields.businessRegisterPlace.name(), institutionUpdate.getBusinessRegisterPlace()); + response.put(InstitutionUpdate.Fields.supportEmail.name(), institutionUpdate.getSupportEmail()); + response.put(InstitutionUpdate.Fields.supportPhone.name(), institutionUpdate.getSupportPhone()); + response.put(InstitutionUpdate.Fields.imported.name(), institutionUpdate.isImported()); + response.put(InstitutionUpdate.Fields.delegation.name(), institutionUpdate.getDelegation()); + + if(institutionUpdate.getPaymentServiceProvider() != null) { + response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.abiCode.name()), + institutionUpdate.getPaymentServiceProvider().getAbiCode()); + response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.businessRegisterNumber.name()), + institutionUpdate.getPaymentServiceProvider().getBusinessRegisterNumber()); + response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.legalRegisterNumber.name()), + institutionUpdate.getPaymentServiceProvider().getLegalRegisterNumber()); + response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.legalRegisterName.name()), + institutionUpdate.getPaymentServiceProvider().getLegalRegisterName()); + response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.vatNumberGroup.name()), + institutionUpdate.getPaymentServiceProvider().isVatNumberGroup()); + } + + if(institutionUpdate.getDataProtectionOfficer() != null){ + response.put(constructProtectionOfficerInnerField(DataProtectionOfficer.Fields.pec.name()), + institutionUpdate.getDataProtectionOfficer().getPec()); + response.put(constructProtectionOfficerInnerField(DataProtectionOfficer.Fields.address.name()), + institutionUpdate.getDataProtectionOfficer().getAddress()); + response.put(constructProtectionOfficerInnerField(DataProtectionOfficer.Fields.email.name()), + institutionUpdate.getDataProtectionOfficer().getEmail()); + } + + response.values().removeIf(Objects::isNull); + return response; + } + + private static String constructProtectionOfficerInnerField(String name) { + return InstitutionUpdate.Fields.dataProtectionOfficer.name() + "." + name; + } + + private static String constructPaymentInnerField(String name) { + return InstitutionUpdate.Fields.businessRegisterPlace.name() + "." + name; + } +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/OnboardedProductMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/OnboardedProductMapper.java new file mode 100644 index 0000000..bd392bf --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/OnboardedProductMapper.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + +import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardedProductEntity; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface OnboardedProductMapper { + OnboardedProduct toOnboardedProduct(OnboardedProductEntity onboardedProductEntity); +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java new file mode 100644 index 0000000..fe31aad --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + +import it.pagopa.selfcare.mscore.connector.dao.model.PecNotificationEntity; +import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +import java.util.UUID; + +@Mapper(componentModel = "spring", imports = UUID.class) +public interface PecNotificationEntityMapper { + + @Mapping(target = "id", defaultExpression = "java(UUID.randomUUID().toString())") + PecNotificationEntity convertToPecNotificationEntity(PecNotification institution); + + PecNotification convertToPecNotification(PecNotificationEntity entity); +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserEntityMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserEntityMapper.java new file mode 100644 index 0000000..9da1c6a --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserEntityMapper.java @@ -0,0 +1,43 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + + +import it.pagopa.selfcare.mscore.connector.dao.model.UserEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.UserBindingEntity; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedUser; +import it.pagopa.selfcare.mscore.model.user.UserInfo; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; +import org.mapstruct.factory.Mappers; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import java.util.stream.Collectors; + +@Mapper(componentModel = "spring", imports = UUID.class) +public interface UserEntityMapper { + + OnboardedProductMapper productMapper = Mappers.getMapper(OnboardedProductMapper.class); + + OnboardedUser toOnboardedUser(UserEntity entity); + + @Mapping(target = "products", expression = "java(setProducts(entity.getBindings(), institutionId))") + UserInfo toUserInfoByFirstInstitution(UserEntity entity, String institutionId); + + @Named("setProducts") + default List setProducts(List bindings, String institutionId) { + if(Objects.nonNull(bindings) && !bindings.isEmpty()) { + UserBindingEntity filteredEntity = bindings.stream().filter(el -> institutionId.equals(el.getInstitutionId())).findFirst().orElse(null); + return Objects.nonNull(filteredEntity) ? + filteredEntity.getProducts().stream().map(productMapper::toOnboardedProduct).collect(Collectors.toList()) + : Collections.emptyList(); + } + return Collections.emptyList(); + } + + @Mapping(target = "id", defaultExpression = "java(UUID.randomUUID().toString())") + UserEntity toUserEntity(OnboardedUser user); +} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserInstitutionAggregationMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserInstitutionAggregationMapper.java new file mode 100644 index 0000000..e226111 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserInstitutionAggregationMapper.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + +import it.pagopa.selfcare.mscore.connector.dao.model.aggregation.UserInstitutionAggregationEntity; +import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionAggregation; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring", uses = {InstitutionEntityMapper.class}) +public interface UserInstitutionAggregationMapper { + + UserInstitutionAggregation constructUserInstitutionAggregation(UserInstitutionAggregationEntity entity); +} diff --git a/apps/institution-ms-new/connector/dao/src/main/resources/config/dao-config.properties b/apps/institution-ms-new/connector/dao/src/main/resources/config/dao-config.properties new file mode 100644 index 0000000..93dce21 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/main/resources/config/dao-config.properties @@ -0,0 +1,3 @@ +spring.data.mongodb.uri=${MONGODB_CONNECTION_URI::mongodb://localhost:27017/?readPreference=primary&appname=MongoDB%20Compass&directConnection=true&ssl=false}&appname=${MONGODB_APPNAME:selcMsCore} +spring.data.mongodb.database=${MONGODB_NAME_SELC_MSCORE:selcMsCore} +##spring.data.mongodb.auto-index-creation=true \ No newline at end of file diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilderTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilderTest.java new file mode 100644 index 0000000..b20f591 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilderTest.java @@ -0,0 +1,39 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.test.context.ContextConfiguration; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@ContextConfiguration(classes = {CriteriaBuilder.class}) +@ExtendWith(MockitoExtension.class) +class CriteriaBuilderTest { + + @Test + void testInIfNotEmpty() { + Criteria criteria = CriteriaBuilder.builder() + .inIfNotEmpty("colors", List.of("red", "green", "blue")) + .inIfNotEmpty("sizes", List.of("small", "medium", "large")) + .build(); + + org.bson.conversions.Bson bson = criteria.getCriteriaObject(); + assertEquals("Document{{colors=Document{{$in=[red, green, blue]}}, sizes=Document{{$in=[small, medium, large]}}}}", bson.toString()); + } + + @Test + void testIsIfNotNull() { + Criteria criteria = CriteriaBuilder.builder() + .isIfNotNull("quantity", 10) + .isIfNotNull("price", 19.99) + .build(); + + org.bson.conversions.Bson bson = criteria.getCriteriaObject(); + + assertEquals("Document{{quantity=10, price=19.99}}", bson.toString()); + } +} diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImplTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImplTest.java new file mode 100644 index 0000000..142f591 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImplTest.java @@ -0,0 +1,350 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationEntityMapper; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationEntityMapperImpl; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationInstitutionMapper; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationInstitutionMapperImpl; +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import it.pagopa.selfcare.mscore.constant.Order; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.model.delegation.*; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.function.Executable; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.support.PageableExecutionUtils; +import org.springframework.test.context.ContextConfiguration; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_DELEGATION_ERROR; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {DelegationConnectorImpl.class}) +@ExtendWith(MockitoExtension.class) +class DelegationConnectorImplTest { + + public static final int PAGE_SIZE = 0; + public static final int MAX_PAGE_SIZE = 100; + static Institution dummyInstitution; + static DelegationInstitution dummyDelegationEntity; + + static { + dummyInstitution = new Institution(); + dummyInstitution.setTaxCode("taxCode"); + dummyInstitution.setInstitutionType(InstitutionType.PT); + dummyDelegationEntity = new DelegationInstitution(); + dummyDelegationEntity.setId("id"); + dummyDelegationEntity.setProductId("productId"); + dummyDelegationEntity.setType(DelegationType.PT); + dummyDelegationEntity.setTo("To"); + dummyDelegationEntity.setFrom("From"); + dummyDelegationEntity.setInstitutionFromName("setInstitutionFromName"); + dummyDelegationEntity.setInstitutionFromRootName("setInstitutionFromRootName"); + dummyDelegationEntity.setInstitutions(List.of(dummyInstitution)); + } + + @InjectMocks + private DelegationConnectorImpl delegationConnectorImpl; + + @Mock + private DelegationRepository delegationRepository; + + @Mock + private MongoTemplate mongoTemplate; + + @Spy + private DelegationEntityMapper delegationMapper = new DelegationEntityMapperImpl(); + + @Spy + private DelegationInstitutionMapper delegationInstitutionMapper = new DelegationInstitutionMapperImpl(); + + @Test + void testSaveDelegation() { + DelegationEntity delegationEntity = new DelegationEntity(); + delegationEntity.setId("id"); + delegationEntity.setType(DelegationType.PT); + when(delegationRepository.save(Mockito.any())).thenReturn(delegationEntity); + Delegation response = delegationConnectorImpl.save(new Delegation()); + assertNotNull(response); + assertNotNull(response.getId()); + assertEquals(response.getId(), delegationEntity.getId()); + assertEquals(response.getType(), delegationEntity.getType()); + } + + @Test + void testSaveDelegationWithError() { + when(delegationRepository.save(any())).thenThrow(new MsCoreException(CREATE_DELEGATION_ERROR.getMessage(), CREATE_DELEGATION_ERROR.getCode())); + assertThrows(MsCoreException.class, () -> delegationConnectorImpl.save(new Delegation())); + verify(delegationRepository).save(any()); + } + + @Test + void testCheckIfExists() { + Delegation delegation = new Delegation(); + delegation.setTo("to"); + delegation.setFrom("from"); + delegation.setType(DelegationType.PT); + delegation.setProductId("prod"); + delegation.setStatus(DelegationState.DELETED); + when(delegationRepository.findByFromAndToAndProductIdAndTypeAndStatus(any(), any(), any(), any(), any())).thenReturn(Optional.of(new DelegationEntity())); + boolean response = delegationConnectorImpl.checkIfExistsWithStatus(delegation, DelegationState.DELETED); + assertTrue(response); + + } + + @Test + void find_shouldGetData() { + DelegationEntity delegationEntity = new DelegationEntity(); + delegationEntity.setId("id"); + delegationEntity.setProductId("productId"); + delegationEntity.setType(DelegationType.PT); + delegationEntity.setTo("To"); + delegationEntity.setFrom("From"); + delegationEntity.setInstitutionFromName("setInstitutionFromName"); + delegationEntity.setInstitutionFromRootName("setInstitutionFromRootName"); + + List delegationEntities = List.of(delegationEntity); + Page delegationEntityPage = new PageImpl<>(delegationEntities); + //When + + doReturn(delegationEntityPage) + .when(delegationRepository) + .find(any(), any(), any()); + + List response = delegationConnectorImpl.find(delegationEntity.getFrom(), + delegationEntity.getTo(), delegationEntity.getProductId(), null, null, Order.NONE, PAGE_SIZE, MAX_PAGE_SIZE); + + //Then + assertNotNull(response); + assertFalse(response.isEmpty()); + Delegation actual = response.get(0); + + assertEquals(actual.getId(), delegationEntity.getId()); + assertEquals(actual.getType(), delegationEntity.getType()); + assertEquals(actual.getProductId(), delegationEntity.getProductId()); + assertEquals(actual.getTo(), delegationEntity.getTo()); + assertEquals(actual.getFrom(), delegationEntity.getFrom()); + assertEquals(actual.getInstitutionFromName(), delegationEntity.getInstitutionFromName()); + assertEquals(actual.getInstitutionFromRootName(), delegationEntity.getInstitutionFromRootName()); + assertEquals(actual.getToTaxCode(), delegationEntity.getToTaxCode()); + assertEquals(actual.getFromTaxCode(), delegationEntity.getFromTaxCode()); + } + + @Test + void findByIdAndModifyStatus() { + DelegationEntity delegationEntity = new DelegationEntity(); + delegationEntity.setId("id"); + delegationEntity.setStatus(DelegationState.ACTIVE); + when(delegationRepository.findAndModify(any(), any(), any(), any())).thenReturn(delegationEntity); + Delegation delegation = delegationConnectorImpl.findByIdAndModifyStatus(delegationEntity.getId(), DelegationState.DELETED); + assertNotNull(delegation); + assertEquals(delegation.getId(), delegationEntity.getId()); + } + + @Test + void checkIfDelegationsAreActive_true() { + when(delegationRepository.findByToAndStatus(anyString(), any())).thenReturn(Optional.of(List.of(new DelegationEntity()))); + boolean response = delegationConnectorImpl.checkIfDelegationsAreActive("id"); + assertTrue(response); + } + + @Test + void checkIfDelegationsAreActive_false() { + when(delegationRepository.findByToAndStatus(anyString(), any())).thenReturn(Optional.of(Collections.emptyList())); + boolean response = delegationConnectorImpl.checkIfDelegationsAreActive("id"); + assertFalse(response); + } + + + @Test + void find_shouldGetDataPaginated() { + DelegationEntity delegationEntity = new DelegationEntity(); + delegationEntity.setId("id"); + delegationEntity.setProductId("productId"); + delegationEntity.setType(DelegationType.PT); + delegationEntity.setTo("To"); + delegationEntity.setFrom("From"); + delegationEntity.setInstitutionFromName("setInstitutionFromName"); + delegationEntity.setInstitutionFromRootName("setInstitutionFromRootName"); + + List delegationEntities = List.of(delegationEntity); + Page delegationEntityPage = new PageImpl<>(delegationEntities); + + //When + doReturn(delegationEntityPage) + .when(delegationRepository) + .find(any(), any(), any()); + + List response = delegationConnectorImpl.find(null, delegationEntity.getTo(), "productId", + null, null, Order.NONE, 0, 1); + + //Then + assertNotNull(response); + assertFalse(response.isEmpty()); + assertEquals(1, response.size()); + + Delegation actual = response.get(0); + + assertEquals(actual.getId(), delegationEntity.getId()); + assertEquals(actual.getType(), delegationEntity.getType()); + assertEquals(actual.getProductId(), delegationEntity.getProductId()); + assertEquals(actual.getTo(), delegationEntity.getTo()); + assertEquals(actual.getFrom(), delegationEntity.getFrom()); + assertEquals(actual.getFromTaxCode(), delegationEntity.getFromTaxCode()); + assertEquals(actual.getToTaxCode(), delegationEntity.getToTaxCode()); + + } + + @Test + void findAndActivate() { + DelegationEntity delegationEntity = new DelegationEntity(); + delegationEntity.setId("id"); + delegationEntity.setFrom("from"); + delegationEntity.setTo("to"); + delegationEntity.setProductId("prod-io"); + delegationEntity.setStatus(DelegationState.ACTIVE); + when(delegationRepository.findAndModify(any(), any(), any(), any())).thenReturn(delegationEntity); + Delegation delegation = delegationConnectorImpl.findAndActivate(delegationEntity.getFrom(), delegationEntity.getTo(), delegationEntity.getProductId()); + assertNotNull(delegation); + assertEquals(delegation.getId(), delegationEntity.getId()); + } + + private DelegationInstitution createAggregation(String pattern, String from, String to) { + Institution institution = new Institution(); + institution.setTaxCode("taxCode_" + pattern); + institution.setInstitutionType(InstitutionType.PT); + DelegationInstitution delegationEntity = new DelegationInstitution(); + delegationEntity.setId("id_" + pattern); + delegationEntity.setProductId("productId"); + delegationEntity.setType(DelegationType.PT); + delegationEntity.setTo(to); + delegationEntity.setFrom(from); + delegationEntity.setInstitutionFromName("name_" + from); + delegationEntity.setInstitutions(List.of(institution)); + return delegationEntity; + } + + @Test + void findAndCount_shouldGetData() { + + DelegationEntity delegationEntity = new DelegationEntity(); + delegationEntity.setId("id"); + delegationEntity.setProductId("productId"); + delegationEntity.setType(DelegationType.PT); + delegationEntity.setTo("To"); + delegationEntity.setFrom("From"); + delegationEntity.setInstitutionFromName("setInstitutionFromName"); + delegationEntity.setInstitutionFromRootName("setInstitutionFromRootName"); + + + List delegationEntities = List.of(delegationEntity); + Page delegationEntityPage = new PageImpl<>(delegationEntities); + + Pageable pageable = PageRequest.of(PAGE_SIZE, MAX_PAGE_SIZE); + Page result = PageableExecutionUtils.getPage(List.of(new Delegation()), pageable, () -> 1L); + PageInfo expectedPageInfo = new PageInfo(result.getSize(), result.getNumber(), result.getTotalElements(), result.getTotalPages()); + + //When + + doReturn(delegationEntityPage) + .when(delegationRepository) + .find(any(), any(), any()); + + doReturn(1L) + .when(mongoTemplate) + .count(any(), eq(DelegationEntity.class)); + + DelegationWithPagination response = delegationConnectorImpl.findAndCount(createDelegationParameters(delegationEntity.getFrom(), + delegationEntity.getTo(), delegationEntity.getProductId(), null, null, Order.NONE, PAGE_SIZE, MAX_PAGE_SIZE)); + + //Then + assertNotNull(response); + assertNotNull(response.getDelegations()); + assertNotNull(response.getPageInfo()); + assertFalse(response.getDelegations().isEmpty()); + Delegation actualDelegation = response.getDelegations().get(0); + PageInfo actualPageInfo = response.getPageInfo(); + + assertEquals(actualDelegation.getId(), delegationEntity.getId()); + assertEquals(actualDelegation.getType(), delegationEntity.getType()); + assertEquals(actualDelegation.getProductId(), delegationEntity.getProductId()); + assertEquals(actualDelegation.getTo(), delegationEntity.getTo()); + assertEquals(actualDelegation.getFrom(), delegationEntity.getFrom()); + assertEquals(actualDelegation.getInstitutionFromName(), delegationEntity.getInstitutionFromName()); + assertEquals(actualDelegation.getInstitutionFromRootName(), delegationEntity.getInstitutionFromRootName()); + assertEquals(actualPageInfo, expectedPageInfo); + } + private GetDelegationParameters createDelegationParameters(String from, String to, String productId, + String search, String taxCode, Order order, + Integer page, Integer size) { + return GetDelegationParameters.builder() + .from(from) + .to(to) + .productId(productId) + .search(search) + .taxCode(taxCode) + .order(order) + .page(page) + .size(size) + .build(); + } + + @Test + void updateDelegation() { + + String description = "description"; + String rootName = "rootName"; + String institutionId = "institutionId"; + + Institution institutionUpdate = new Institution(); + institutionUpdate.setId(institutionId); + institutionUpdate.setDescription(description); + institutionUpdate.setParentDescription(rootName); + institutionUpdate.setDelegation(true); + + //when + final Executable executable = () -> delegationConnectorImpl.updateDelegation(institutionUpdate); + + Assertions.assertDoesNotThrow(executable); + verify(delegationRepository, times(2)).updateMulti(any(), any(), any()); + + } + + @Test + void updateDelegation_noDelegation() { + + String description = "description"; + String institutionId = "institutionId"; + + Institution institutionUpdate = new Institution(); + institutionUpdate.setId(institutionId); + institutionUpdate.setDescription(description); + + //when + final Executable executable = () -> delegationConnectorImpl.updateDelegation(institutionUpdate); + + Assertions.assertDoesNotThrow(executable); + verify(delegationRepository, times(1)).updateMulti(any(), any(), any()); + + } +} diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepositoryTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepositoryTest.java new file mode 100644 index 0000000..028ce05 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepositoryTest.java @@ -0,0 +1,41 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.connector.dao.config.DaoConfigTest; +import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.test.context.ContextConfiguration; + +import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; +import static it.pagopa.selfcare.commons.utils.TestUtils.reflectionEqualsByName; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@DataMongoTest +@EnableAutoConfiguration +@ContextConfiguration(classes = {DelegationEntity.class, DaoConfigTest.class}) +class DelegationRepositoryTest { + + @Autowired + private DelegationRepository repository; + + @Test + void create() { + // Given + DelegationEntity delegationEntity = mockInstance(new DelegationEntity()); + delegationEntity.setFrom("from"); + delegationEntity.setTo("to"); + delegationEntity.setType(DelegationType.PT); + delegationEntity.setProductId("productId"); + // When + DelegationEntity savedDelegationEntity = repository.save(delegationEntity); + // Then + assertFalse(repository.findAll().isEmpty()); + assertNotNull(savedDelegationEntity); + reflectionEqualsByName(delegationEntity, savedDelegationEntity); + } + +} diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImplTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImplTest.java new file mode 100644 index 0000000..17b3531 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImplTest.java @@ -0,0 +1,739 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.*; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionEntityMapper; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionEntityMapperImpl; +import it.pagopa.selfcare.mscore.connector.dao.utils.TestUtils; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.SearchMode; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.*; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.data.mongodb.core.FindAndModifyOptions; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.test.context.ContextConfiguration; + +import java.time.OffsetDateTime; +import java.util.*; + +import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {InstitutionConnectorImpl.class}) +@ExtendWith(MockitoExtension.class) +class InstitutionConnectorImplTest { + + @InjectMocks + InstitutionConnectorImpl institutionConnectorImpl; + + @Mock + InstitutionRepository institutionRepository; + + @Spy + InstitutionEntityMapper institutionMapper = new InstitutionEntityMapperImpl(); + + @Captor + ArgumentCaptor queryArgumentCaptor; + + @Captor + ArgumentCaptor updateArgumentCaptor; + + @Captor + ArgumentCaptor findAndModifyOptionsArgumentCaptor; + + @Captor + ArgumentCaptor pageableArgumentCaptor; + + /** + * Method under test: {@link InstitutionConnectorImpl#findAll()} + */ + @Test + void testFindAll() { + when(institutionRepository.findAll()).thenReturn(new ArrayList<>()); + assertTrue(institutionConnectorImpl.findAll().isEmpty()); + verify(institutionRepository).findAll(); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findAll()} + */ + @Test + void testFindAll2() { + InstitutionEntity institutionEntity = TestUtils.createSimpleInstitutionEntity(); + + ArrayList institutionEntityList = new ArrayList<>(); + institutionEntityList.add(institutionEntity); + when(institutionRepository.findAll()).thenReturn(institutionEntityList); + assertEquals(1, institutionConnectorImpl.findAll().size()); + verify(institutionRepository).findAll(); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findAll()} + */ + @Test + void testFindAll4() { + when(institutionRepository.findAll()).thenThrow(new InvalidRequestException("An error occurred", "Code")); + assertThrows(InvalidRequestException.class, () -> institutionConnectorImpl.findAll()); + verify(institutionRepository).findAll(); + } + + @Test + void findById() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + institutionEntity.setId("507f1f77bcf86cd799439011"); + Optional response = institutionConnectorImpl.findByExternalId("id"); + Assertions.assertTrue(response.isEmpty()); + } + + @Test + void shouldSaveInstitution() { + List geographicTaxonomies = new ArrayList<>(); + geographicTaxonomies.add(new InstitutionGeographicTaxonomies()); + List onboardings = new ArrayList<>(); + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(new Billing()); + onboarding.setContract("contract"); + onboarding.setStatus(RelationshipState.ACTIVE); + onboarding.setCreatedAt(OffsetDateTime.now()); + onboarding.setProductId("productId"); + onboarding.setUpdatedAt(OffsetDateTime.now()); + onboarding.setPricingPlan("pricingPal"); + onboardings.add(onboarding); + + Institution institution = new Institution(); + institution.setExternalId("ext"); + institution.setId("507f1f77bcf86cd799439011"); + institution.setParentDescription("parentDescription"); + institution.setOnboarding(onboardings); + institution.setZipCode("zipCpde"); + institution.setRea("rea"); + institution.setGeographicTaxonomies(geographicTaxonomies); + + when(institutionRepository.save(any())).thenAnswer(arg -> arg.getArguments()[0]); + + Institution response = institutionConnectorImpl.save(institution); + Assertions.assertEquals(institution.getId(), response.getId()); + Assertions.assertEquals(institution.getExternalId(), response.getExternalId()); + Assertions.assertEquals(institution.getParentDescription(), response.getParentDescription()); + Assertions.assertEquals(institution.getRea(), response.getRea()); + Assertions.assertEquals(institution.getZipCode(), response.getZipCode()); + Assertions.assertEquals(institution.getOnboarding().size(), response.getOnboarding().size()); + + Onboarding responseOnboarding = institution.getOnboarding().get(0); + Assertions.assertEquals(onboarding.getContract(), responseOnboarding.getContract()); + Assertions.assertEquals(onboarding.getStatus(), responseOnboarding.getStatus()); + Assertions.assertEquals(onboarding.getCreatedAt(), responseOnboarding.getCreatedAt()); + Assertions.assertEquals(onboarding.getProductId(), responseOnboarding.getProductId()); + Assertions.assertEquals(onboarding.getUpdatedAt(), responseOnboarding.getUpdatedAt()); + Assertions.assertEquals(onboarding.getPricingPlan(), responseOnboarding.getPricingPlan()); + } + + @Test + void findByExternalIdTest() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + institutionEntity.setId("507f1f77bcf86cd799439011"); + when(institutionRepository.find(any(), any())).thenReturn(new ArrayList<>()); + Optional response = institutionConnectorImpl.findByExternalId("ext"); + Assertions.assertFalse(response.isPresent()); + } + + @Test + void findByExternalIdNotFoundTest() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + institutionEntity.setId("507f1f77bcf86cd799439011"); + Optional response = institutionConnectorImpl.findByExternalId("ext"); + Assertions.assertTrue(response.isEmpty()); + } + + @Test + void deleteById() { + doNothing().when(institutionRepository).deleteById(any()); + Assertions.assertDoesNotThrow(() -> institutionConnectorImpl.deleteById("507f1f77bcf86cd799439011")); + } + + @Test + void testFindById() { + when(institutionRepository.findById(any())).thenReturn(Optional.empty()); + assertThrows(ResourceNotFoundException.class, () -> institutionConnectorImpl.findById("42")); + } + + @Test + void testFindById2() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + List onboardings = new ArrayList<>(); + onboardings.add(new OnboardingEntity()); + institutionEntity.setAttributes(new ArrayList<>()); + institutionEntity.setOnboarding(onboardings); + institutionEntity.setGeographicTaxonomies(new ArrayList<>()); + institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); + institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); + when(institutionRepository.findById(any())).thenReturn(Optional.of(institutionEntity)); + assertNotNull(institutionConnectorImpl.findById("id")); + } + + @Test + void testFindAndUpdate() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + List onboardings = new ArrayList<>(); + onboardings.add(new OnboardingEntity()); + institutionEntity.setAttributes(new ArrayList<>()); + institutionEntity.setOnboarding(onboardings); + institutionEntity.setGeographicTaxonomies(new ArrayList<>()); + institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); + institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); + when(institutionRepository.findAndModify(any(), any(), any(), any())).thenReturn(institutionEntity); + List geographicTaxonomies = new ArrayList<>(); + InstitutionGeographicTaxonomies geographicTaxonomies1 = new InstitutionGeographicTaxonomies(); + geographicTaxonomies1.setCode("code"); + geographicTaxonomies1.setDesc("desc"); + geographicTaxonomies.add(geographicTaxonomies1); + Institution response = institutionConnectorImpl.findAndUpdate("institutionId", new Onboarding(), geographicTaxonomies, new InstitutionUpdate()); + assertNotNull(response); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} + */ + @Test + void testFindByGeotaxonomies() { + when(institutionRepository.find(org.mockito.Mockito.any(), org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); + assertTrue(institutionConnectorImpl.findByGeotaxonomies(new ArrayList<>(), SearchMode.ALL).isEmpty()); + verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} + */ + @Test + void testFindByGeotaxonomies2() { + InstitutionEntity institutionEntity = TestUtils.createSimpleInstitutionEntity(); + + ArrayList institutionEntityList = new ArrayList<>(); + institutionEntityList.add(institutionEntity); + when(institutionRepository.find(org.mockito.Mockito.any(), + (Class) org.mockito.Mockito.any())).thenReturn(institutionEntityList); + assertEquals(1, institutionConnectorImpl.findByGeotaxonomies(new ArrayList<>(), SearchMode.ALL).size()); + verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} + */ + @Test + void testFindByGeotaxonomies4() { + when(institutionRepository.find(org.mockito.Mockito.any(),org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); + assertTrue(institutionConnectorImpl.findByGeotaxonomies(new ArrayList<>(), SearchMode.ANY).isEmpty()); + verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} + */ + @Test + void testFindByGeotaxonomies5() { + when(institutionRepository.find(org.mockito.Mockito.any(), org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); + assertTrue(institutionConnectorImpl.findByGeotaxonomies(new ArrayList<>(), SearchMode.EXACT).isEmpty()); + verify(institutionRepository).find(org.mockito.Mockito.any(),org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} + */ + @Test + void testFindByGeotaxonomies6() { + when(institutionRepository.find(org.mockito.Mockito.any(), org.mockito.Mockito.any())) + .thenThrow(new InvalidRequestException("An error occurred", "Code")); + List list = new ArrayList<>(); + assertThrows(InvalidRequestException.class, + () -> institutionConnectorImpl.findByGeotaxonomies(list, SearchMode.ALL)); + verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByProductId} + */ + @Test + void testFindByProductId() { + when(institutionRepository.find(org.mockito.Mockito.any(),org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); + assertTrue(institutionConnectorImpl.findByProductId("42").isEmpty()); + verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByProductId} + */ + @Test + void testFindByProductId2() { + InstitutionEntity institutionEntity = TestUtils.createSimpleInstitutionEntity(); + + ArrayList institutionEntityList = new ArrayList<>(); + institutionEntityList.add(institutionEntity); + when(institutionRepository.find(org.mockito.Mockito.any(), + (Class) org.mockito.Mockito.any())).thenReturn(institutionEntityList); + assertEquals(1, institutionConnectorImpl.findByProductId("42").size()); + verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByProductId} + */ + @Test + void testFindByProductId4() { + when(institutionRepository.find(org.mockito.Mockito.any(), + (Class) org.mockito.Mockito.any())) + .thenThrow(new InvalidRequestException("An error occurred", ".")); + assertThrows(InvalidRequestException.class, () -> institutionConnectorImpl.findByProductId("42")); + verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findAllByIds(List)} + */ + @Test + void testFindAllByIds3() { + when(institutionRepository.findAllById(org.mockito.Mockito.any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + List ids = new ArrayList<>(); + assertThrows(ResourceNotFoundException.class, () -> institutionConnectorImpl.findAllByIds(ids)); + verify(institutionRepository).findAllById(org.mockito.Mockito.any()); + } + + @Test + void testFindAllByIds2() { + when(institutionRepository.findAllById(org.mockito.Mockito.any())).thenReturn(List.of(new InstitutionEntity())); + List ids = new ArrayList<>(); + assertDoesNotThrow(() -> institutionConnectorImpl.findAllByIds(ids)); + verify(institutionRepository).findAllById(org.mockito.Mockito.any()); + } + + @Test + void testFindWithFilter() { + when(institutionRepository.find(any(), any())).thenReturn(new ArrayList<>()); + List response = institutionConnectorImpl.findWithFilter("externalId", "productId", new ArrayList<>()); + assertNotNull(response); + } + + @Test + void testFindInstitutionProduct() { + when(institutionRepository.find(any(), any())).thenReturn(new ArrayList<>()); + assertThrows(ResourceNotFoundException.class, () -> institutionConnectorImpl.findByExternalIdAndProductId("externalId", "productId")); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByExternalIdsAndProductId(List, String)} + */ + @Test + void testFindByExternalIdAndProductId() { + when(institutionRepository.find(org.mockito.Mockito.any(),org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); + assertTrue(institutionConnectorImpl.findByExternalIdsAndProductId(new ArrayList<>(), "42").isEmpty()); + verify(institutionRepository).find( org.mockito.Mockito.any(),org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByExternalIdsAndProductId(List, String)} + */ + @Test + void testFindByExternalIdAndProductId2() { + when(institutionRepository.find( org.mockito.Mockito.any(),org.mockito.Mockito.any())) + .thenThrow(new InvalidRequestException("An error occurred", ".")); + List list = new ArrayList<>(); + assertThrows(InvalidRequestException.class, + () -> institutionConnectorImpl.findByExternalIdsAndProductId(list, "42")); + verify(institutionRepository).find(org.mockito.Mockito.any(),org.mockito.Mockito.any()); + } + + @Test + void findAndUpdateStatus() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + List onboardings = new ArrayList<>(); + onboardings.add(new OnboardingEntity()); + institutionEntity.setAttributes(new ArrayList<>()); + institutionEntity.setOnboarding(onboardings); + institutionEntity.setGeographicTaxonomies(new ArrayList<>()); + institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); + institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); + when(institutionRepository.findAndModify(any(), any(), any(), any())).thenReturn(institutionEntity); + institutionConnectorImpl.findAndUpdateStatus("institutionId", "tokenId", RelationshipState.ACTIVE); + assertNotNull(institutionEntity); + } + + @Test + void findAndUpdateStatus2() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + List onboardings = new ArrayList<>(); + onboardings.add(new OnboardingEntity()); + institutionEntity.setAttributes(new ArrayList<>()); + institutionEntity.setOnboarding(onboardings); + institutionEntity.setGeographicTaxonomies(new ArrayList<>()); + institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); + institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); + when(institutionRepository.findAndModify(any(), any(), any(), any())).thenReturn(institutionEntity); + institutionConnectorImpl.findAndUpdateStatus("institutionId", "tokenId", RelationshipState.DELETED); + assertNotNull(institutionEntity); + } + + @Test + void findAndRemoveOnboarding() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + List onboardings = new ArrayList<>(); + onboardings.add(new OnboardingEntity()); + institutionEntity.setAttributes(new ArrayList<>()); + institutionEntity.setOnboarding(onboardings); + institutionEntity.setGeographicTaxonomies(new ArrayList<>()); + institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); + institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); + when(institutionRepository.findAndModify(any(), any(), any(), any())).thenReturn(institutionEntity); + institutionConnectorImpl.findAndRemoveOnboarding("institutionId", new Onboarding()); + assertNotNull(institutionEntity); + } + + @Test + void updateOnboardedProductCreatedAt() { + // Given + String institutionIdMock = "InstitutionIdMock"; + String productIdMock = "ProductIdMock"; + OffsetDateTime createdAt = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); + InstitutionEntity updatedInstitutionMock = mockInstance(new InstitutionEntity()); + OnboardingEntity onboardingEntityMock = mockInstance(new OnboardingEntity()); + onboardingEntityMock.setProductId(productIdMock); + updatedInstitutionMock.setOnboarding(List.of(onboardingEntityMock)); + updatedInstitutionMock.setId(institutionIdMock); + updatedInstitutionMock.setInstitutionType(InstitutionType.PA); + updatedInstitutionMock.setOrigin(Origin.IPA); + when(institutionRepository.findAndModify(any(), any(), any(), any())) + .thenReturn(updatedInstitutionMock); + // When + Institution result = institutionConnectorImpl.updateOnboardedProductCreatedAt(institutionIdMock, productIdMock, createdAt); + // Then + assertNotNull(result); + assertEquals(result.getId(), institutionIdMock); + verify(institutionRepository, times(2)) + .findAndModify(queryArgumentCaptor.capture(), updateArgumentCaptor.capture(), findAndModifyOptionsArgumentCaptor.capture(), Mockito.eq(InstitutionEntity.class)); + List capturedQuery = queryArgumentCaptor.getAllValues(); + assertEquals(2, capturedQuery.size()); + assertSame(capturedQuery.get(0).getQueryObject().get(InstitutionEntity.Fields.id.name()), institutionIdMock); + assertSame(capturedQuery.get(1).getQueryObject().get(InstitutionEntity.Fields.id.name()), institutionIdMock); + assertEquals(2, updateArgumentCaptor.getAllValues().size()); + Update updateOnboardedProduct = updateArgumentCaptor.getAllValues().get(0); + Update updateInstitutionEntityUpdatedAt = updateArgumentCaptor.getAllValues().get(1); + assertEquals(1, updateOnboardedProduct.getArrayFilters().size()); + assertTrue(updateInstitutionEntityUpdatedAt.getArrayFilters().isEmpty()); + assertTrue(updateInstitutionEntityUpdatedAt.getUpdateObject().get("$set").toString().contains(InstitutionEntity.Fields.updatedAt.name())); + assertTrue(updateOnboardedProduct.getUpdateObject().get("$set").toString().contains("onboarding.$[current].createdAt") && + updateOnboardedProduct.getUpdateObject().get("$set").toString().contains("onboarding.$[current].updatedAt") && + updateOnboardedProduct.getUpdateObject().get("$set").toString().contains(createdAt.toString())); + verifyNoMoreInteractions(institutionRepository); + } + + @Test + void shouldFindOnboardingByIdAndProductId() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + institutionEntity.setOnboarding(List.of(new OnboardingEntity())); + when(institutionRepository.findByInstitutionIdAndOnboardingProductId(anyString(), anyString())) + .thenReturn(institutionEntity); + + List onboardings = institutionConnectorImpl + .findOnboardingByIdAndProductId("example", "example"); + + assertFalse(onboardings.isEmpty()); + } + + @Test + void shouldFindOnboardingByIdAndProductIdIfProductIsNull() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + institutionEntity.setOnboarding(List.of(new OnboardingEntity())); + when(institutionRepository.findById(anyString())) + .thenReturn(Optional.of(institutionEntity)); + + List onboardings = institutionConnectorImpl + .findOnboardingByIdAndProductId("example", null); + + assertFalse(onboardings.isEmpty()); + } + + @Test + void shouldFindByTaxCodeAndSubunitCode() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + + when(institutionRepository.find(any(), any())) + .thenReturn(List.of(institutionEntity)); + + List onboardings = institutionConnectorImpl + .findByTaxCodeAndSubunitCode("example", "example"); + + assertFalse(onboardings.isEmpty()); + } + + @Test + void shouldExistsByTaxCodeAndSubunitCodeAndProductAndStatusList() { + + when(institutionRepository.exists(any(), any())).thenReturn(Boolean.TRUE); + + Boolean exists = institutionConnectorImpl.existsByTaxCodeAndSubunitCodeAndProductAndStatusList("example", + "example", Optional.of("example"), List.of()); + + assertTrue(exists); + } + + @Test + void testRetrieveByProduct() { + String productId = "productId"; + Integer pageNumber = 0; + Integer sizeNumber = 5; + + BillingEntity billingEntity = createSimpleBillingEntity(); + DataProtectionOfficerEntity dataProtectionOfficerEntity = createSimpleDPOEntity(); + PaymentServiceProviderEntity paymentServiceProviderEntity = createSimpleServiceProviderEntity(); + OnboardingEntity onboardingEntity = createSimpleOnboardingEntity(productId, billingEntity); + InstitutionEntity institutionEntity = createSimpleInstitutionEntity(billingEntity, dataProtectionOfficerEntity, onboardingEntity, paymentServiceProviderEntity); + + BillingEntity billingEntity1 = createSimpleBillingEntity(); + DataProtectionOfficerEntity dataProtectionOfficerEntity1 = createSimpleDPOEntity(); + PaymentServiceProviderEntity paymentServiceProviderEntity1 = createSimpleServiceProviderEntity(); + OnboardingEntity onboardingEntity1 = createSimpleOnboardingEntity(productId, billingEntity1); + InstitutionEntity institutionEntity1 = createSimpleInstitutionEntity(billingEntity1, dataProtectionOfficerEntity1, onboardingEntity1, paymentServiceProviderEntity1); + + + List institutionEntityList = new ArrayList<>(); + institutionEntityList.add(institutionEntity1); + institutionEntityList.add(institutionEntity); + Page institutionEntityPage = new PageImpl<>(institutionEntityList); + + doReturn(institutionEntityPage) + .when(institutionRepository) + .find(any(), any(), any()); + + // When + List institutionsResult = institutionConnectorImpl.findInstitutionsByProductId(productId, + pageNumber, sizeNumber); + // Then + assertNotNull(institutionsResult); + assertEquals(2, institutionsResult.size()); + verify(institutionRepository, times(1)) + .find(queryArgumentCaptor.capture(), pageableArgumentCaptor.capture(), Mockito.eq(InstitutionEntity.class)); + + Pageable capturedPage = pageableArgumentCaptor.getValue(); + assertEquals(pageNumber, capturedPage.getPageNumber()); + verifyNoMoreInteractions(institutionRepository); + } + + @Test + void findBrokers() { + + final String productId = "productId"; + + BillingEntity billingEntity = createSimpleBillingEntity(); + DataProtectionOfficerEntity dataProtectionOfficerEntity = createSimpleDPOEntity(); + PaymentServiceProviderEntity paymentServiceProviderEntity = createSimpleServiceProviderEntity(); + OnboardingEntity onboardingEntity = createSimpleOnboardingEntity(productId, billingEntity); + InstitutionEntity institutionEntity = createSimpleInstitutionEntity(billingEntity, dataProtectionOfficerEntity, onboardingEntity, paymentServiceProviderEntity); + + BillingEntity billingEntity1 = createSimpleBillingEntity(); + DataProtectionOfficerEntity dataProtectionOfficerEntity1 = createSimpleDPOEntity(); + PaymentServiceProviderEntity paymentServiceProviderEntity1 = createSimpleServiceProviderEntity(); + OnboardingEntity onboardingEntity1 = createSimpleOnboardingEntity(productId, billingEntity1); + InstitutionEntity institutionEntity1 =createSimpleInstitutionEntity(billingEntity1, dataProtectionOfficerEntity1, onboardingEntity1, paymentServiceProviderEntity1); + + List institutionEntityList = List.of(institutionEntity, institutionEntity1); + + doReturn(institutionEntityList) + .when(institutionRepository) + .find(any(), any()); + + // When + List institutionsResult = institutionConnectorImpl.findBrokers(productId, InstitutionType.PT); + // Then + assertNotNull(institutionsResult); + assertEquals(2, institutionsResult.size()); + verify(institutionRepository, times(1)) + .find(queryArgumentCaptor.capture(), Mockito.eq(InstitutionEntity.class)); + verifyNoMoreInteractions(institutionRepository); + } + + private BillingEntity createSimpleBillingEntity() { + BillingEntity billingEntity = new BillingEntity(); + billingEntity.setPublicServices(true); + billingEntity.setRecipientCode("Recipient Code"); + billingEntity.setVatNumber("42"); + return billingEntity; + } + + private DataProtectionOfficerEntity createSimpleDPOEntity() { + DataProtectionOfficerEntity dataProtectionOfficerEntity = new DataProtectionOfficerEntity(); + dataProtectionOfficerEntity.setAddress("42 Main St"); + dataProtectionOfficerEntity.setEmail("jane.doe@example.org"); + dataProtectionOfficerEntity.setPec("Pec"); + return dataProtectionOfficerEntity; + } + + private PaymentServiceProviderEntity createSimpleServiceProviderEntity() { + PaymentServiceProviderEntity paymentServiceProviderEntity = new PaymentServiceProviderEntity(); + paymentServiceProviderEntity.setAbiCode("Abi Code"); + paymentServiceProviderEntity.setBusinessRegisterNumber("42"); + paymentServiceProviderEntity.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderEntity.setLegalRegisterNumber("42"); + paymentServiceProviderEntity.setVatNumberGroup(true); + return paymentServiceProviderEntity; + } + + private OnboardingEntity createSimpleOnboardingEntity(String productId, BillingEntity billingEntity) { + OnboardingEntity onboardingEntity = new OnboardingEntity(); + onboardingEntity.setBilling(billingEntity); + onboardingEntity.setClosedAt(null); + onboardingEntity.setContract("Contract"); + onboardingEntity.setCreatedAt(null); + onboardingEntity.setPricingPlan("Pricing Plan"); + onboardingEntity.setProductId(productId); + onboardingEntity.setStatus(RelationshipState.PENDING); + onboardingEntity.setTokenId("42"); + onboardingEntity.setUpdatedAt(null); + return onboardingEntity; + } + + private InstitutionEntity createSimpleInstitutionEntity(BillingEntity billingEntity, + DataProtectionOfficerEntity dpoEntity, + OnboardingEntity onboardingEntity, + PaymentServiceProviderEntity serviceProviderEntity) { + InstitutionEntity institutionEntity = new InstitutionEntity(); + institutionEntity.setAddress("42 Main St"); + institutionEntity.setAttributes(new ArrayList<>()); + institutionEntity.setBilling(billingEntity); + institutionEntity.setBusinessRegisterPlace("Business Register Place"); + institutionEntity.setCreatedAt(null); + institutionEntity.setDataProtectionOfficer(dpoEntity); + institutionEntity.setDescription("The characteristics of someone or something"); + institutionEntity.setDigitalAddress("42 Main St"); + institutionEntity.setExternalId("42"); + institutionEntity.setGeographicTaxonomies(new ArrayList<>()); + institutionEntity.setId("42"); + institutionEntity.setImported(true); + institutionEntity.setInstitutionType(InstitutionType.PA); + institutionEntity.setOnboarding(List.of(onboardingEntity)); + institutionEntity.setOrigin(Origin.MOCK); + institutionEntity.setOriginId("42"); + institutionEntity.setPaymentServiceProvider(serviceProviderEntity); + institutionEntity.setRea("Rea"); + institutionEntity.setShareCapital("Share Capital"); + institutionEntity.setSupportEmail("jane.doe@example.org"); + institutionEntity.setSupportPhone("6625550144"); + institutionEntity.setTaxCode("Tax Code"); + institutionEntity.setUpdatedAt(null); + institutionEntity.setZipCode("21654"); + return institutionEntity; + } + + @Test + void findByOriginOriginId() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + + when(institutionRepository.find(any(), any())) + .thenReturn(List.of(institutionEntity)); + + List onboardings = institutionConnectorImpl + .findByOriginAndOriginId("example", "example"); + + assertFalse(onboardings.isEmpty()); + } + + @Test + @DisplayName("Should return true when onboarding exists by filters") + void shouldReturnTrueWhenOnboardingExistsByFilters() { + // Given + VerifyOnboardingFilters filters = new VerifyOnboardingFilters("productId", "externalId", "taxCode", "origin", "originId", "subunitCode"); + filters.setValidRelationshipStates(List.of(RelationshipState.ACTIVE)); + when(institutionRepository.exists(any(Query.class), any())).thenReturn(true); + + // When + Boolean exists = institutionConnectorImpl.existsOnboardingByFilters(filters); + + // Then + assertTrue(exists); + } + + @Test + @DisplayName("Should return true when onboarding exists by filters when subunitCode is null") + void shouldReturnTrueWhenOnboardingExistsByFiltersAndSubunitCodeIsNull() { + // Given + VerifyOnboardingFilters filters = new VerifyOnboardingFilters("productId", "externalId", "taxCode", "origin", "originId", null); + filters.setValidRelationshipStates(List.of(RelationshipState.ACTIVE)); + when(institutionRepository.exists(any(Query.class), any())).thenReturn(true); + + // When + Boolean exists = institutionConnectorImpl.existsOnboardingByFilters(filters); + + // Then + assertTrue(exists); + } + + @Test + @DisplayName("Should return false when onboarding exists by filters when subunitCode is null") + void shouldReturnFalseWhenOnboardingExistsByFiltersAndSubunitCodeIsNull() { + // Given + VerifyOnboardingFilters filters = new VerifyOnboardingFilters("productId", "externalId", "taxCode", "origin", "originId", null); + filters.setValidRelationshipStates(List.of(RelationshipState.ACTIVE)); + when(institutionRepository.exists(any(Query.class), any())).thenReturn(false); + + // When + Boolean exists = institutionConnectorImpl.existsOnboardingByFilters(filters); + + // Then + assertFalse(exists); + } + + @Test + @DisplayName("Should return false when onboarding does not exist by filters") + void shouldReturnFalseWhenOnboardingDoesNotExistByFilters() { + // Given + VerifyOnboardingFilters filters = new VerifyOnboardingFilters("productId", "externalId", "taxCode", "origin", "originId", "subunitCode"); + filters.setValidRelationshipStates(List.of(RelationshipState.ACTIVE)); + + when(institutionRepository.exists(any(Query.class), any())).thenReturn(false); + + // When + Boolean exists = institutionConnectorImpl.existsOnboardingByFilters(filters); + + // Then + assertFalse(exists); + } + @Test + public void testFindAndDeleteOnboarding() { + + String institutionId = UUID.randomUUID().toString(); + String productId = "prod-io"; + + OnboardingEntity mockOnboarding = new OnboardingEntity(); + mockOnboarding.setProductId(productId); + mockOnboarding.setUpdatedAt(OffsetDateTime.now()); + mockOnboarding.setStatus(RelationshipState.ACTIVE); + + InstitutionEntity mockEntity = new InstitutionEntity(); + mockEntity.setId(institutionId); + mockEntity.setOnboarding(Collections.singletonList(mockOnboarding)); + + when(institutionRepository.findAndModify(any(Query.class), any(Update.class), + any(FindAndModifyOptions.class), eq(InstitutionEntity.class))) + .thenReturn(mockEntity); + + institutionConnectorImpl.findAndDeleteOnboarding(institutionId, productId); + + verify(institutionRepository, times(1)).findAndModify(any(Query.class), any(Update.class), any(FindAndModifyOptions.class), eq(InstitutionEntity.class)); + assertNotNull(mockEntity); + } +} \ No newline at end of file diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepositoryTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepositoryTest.java new file mode 100644 index 0000000..62a1be8 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepositoryTest.java @@ -0,0 +1,71 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.connector.dao.config.DaoConfigTest; +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.AttributesEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.GeoTaxonomyEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardingEntity; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.test.context.ContextConfiguration; + +import java.time.OffsetDateTime; +import java.util.List; + +import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; +import static it.pagopa.selfcare.commons.utils.TestUtils.reflectionEqualsByName; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@DataMongoTest +@EnableAutoConfiguration +@ContextConfiguration(classes = {InstitutionEntity.class, OnboardingEntity.class, InstitutionRepository.class, DaoConfigTest.class}) +class InstitutionRepositoryTest { + + @Autowired + private InstitutionRepository repository; + + + @AfterEach + void clear() { + repository.deleteAll(); + } + + @Test + void create() { + // Given + InstitutionEntity institutionEntity = mockInstance(new InstitutionEntity()); + institutionEntity.setOrigin(Origin.IPA); + institutionEntity.setInstitutionType(InstitutionType.PA); + institutionEntity.setCreatedAt(OffsetDateTime.parse("2020-11-01T02:15:30Z")); + institutionEntity.setUpdatedAt(OffsetDateTime.parse("2021-12-12T02:15:30Z")); + OnboardingEntity onboardingEntity1 = mockInstance(new OnboardingEntity(), 1); + onboardingEntity1.setProductId("prod-io"); + onboardingEntity1.setStatus(RelationshipState.ACTIVE); + onboardingEntity1.setCreatedAt(OffsetDateTime.parse("2020-11-01T02:15:30Z")); + onboardingEntity1.setUpdatedAt(null); + onboardingEntity1.setClosedAt(null); + OnboardingEntity onboardingEntity2 = mockInstance(new OnboardingEntity(), 2); + onboardingEntity1.setProductId("prod-pagopa"); + onboardingEntity2.setStatus(RelationshipState.ACTIVE); + onboardingEntity2.setCreatedAt(OffsetDateTime.parse("2021-12-12T02:15:30Z")); + onboardingEntity2.setUpdatedAt(null); + onboardingEntity2.setClosedAt(null); + institutionEntity.setOnboarding(List.of(onboardingEntity1, onboardingEntity2)); + institutionEntity.setGeographicTaxonomies(List.of(mockInstance(new GeoTaxonomyEntity()))); + institutionEntity.setAttributes(List.of(mockInstance(new AttributesEntity()))); + // When + InstitutionEntity savedInstitutionEntity = repository.save(institutionEntity); + // Then + assertFalse(repository.findAll().isEmpty()); + assertNotNull(savedInstitutionEntity); + reflectionEqualsByName(institutionEntity, savedInstitutionEntity); + } + +} diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImplTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImplTest.java new file mode 100644 index 0000000..79a58c6 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImplTest.java @@ -0,0 +1,139 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import com.mongodb.client.result.UpdateResult; +import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionAggregation; +import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionFilter; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.data.domain.Pageable; +import org.springframework.data.mongodb.core.FindAndModifyOptions; +import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.AggregationResults; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.data.mongodb.core.query.UpdateDefinition; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@ExtendWith(SpringExtension.class) +class MongoCustomConnectorImplTest { + @InjectMocks + private MongoCustomConnectorImpl mongoCustomConnector; + + @Mock + private MongoOperations mongoOperations; + + @Test + void testExist() { + when(mongoOperations.exists(any(), (Class) any())).thenReturn(true); + Query query = new Query(); + assertTrue(mongoCustomConnector.exists(query, Object.class)); + } + + @Test + void testCount() { + when(mongoOperations.count(any(), (Class) any())).thenReturn(10L); + Query query = new Query(); + assertEquals(10L, mongoCustomConnector.count(query, Object.class)); + } + + + @Test + void testFind() { + List list = new ArrayList<>(); + when(mongoOperations.find(any(), any())).thenReturn(list); + Query query = new Query(); + assertNotNull(mongoCustomConnector.find(query, Object.class)); + } + + @Test + void testFind2() { + List list = new ArrayList<>(); + when(mongoOperations.find(any(), any())).thenReturn(list); + Query query = new Query(); + Pageable page = Pageable.ofSize(3); + assertNotNull(mongoCustomConnector.find(query, page, Object.class)); + } + + @Test + void testFind3() { + Object a = new Object(); + List list = new ArrayList<>(); + list.add(a); + when(mongoOperations.count(any(), (Class) any())).thenReturn(1L); + when(mongoOperations.find(any(), any())).thenReturn(list); + Query query = new Query(); + Pageable page = Pageable.ofSize(3); + assertNotNull(mongoCustomConnector.find(query, page, Object.class)); + } + + @Test + void findAndModify() { + Object a = new Object(); + List list = new ArrayList<>(); + list.add(a); + when(mongoOperations.findAndModify(any(), any(), any(), (Class) any())).thenReturn(list); + Query query = new Query(); + UpdateDefinition updateDefinition = new Update(); + FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); + assertNotNull(mongoCustomConnector.findAndModify(query, updateDefinition, findAndModifyOptions, Object.class)); + } + + @Test + void findUserAndInstitution() { + AggregationResults results = mock(AggregationResults.class); + when(results.getUniqueMappedResult()).thenReturn(new Object()); + when(mongoOperations.aggregate((Aggregation) any(), anyString(), any())).thenReturn(results); + UserInstitutionFilter filter = new UserInstitutionFilter(); + filter.setUserId("userId"); + Assertions.assertDoesNotThrow(() -> mongoCustomConnector.findUserInstitutionAggregation(filter, UserInstitutionAggregation.class)); + + } + + @Test + void findUserAndInstitutionWithInstitutionId() { + AggregationResults results = mock(AggregationResults.class); + when(results.getUniqueMappedResult()).thenReturn(new Object()); + when(mongoOperations.aggregate((Aggregation) any(), anyString(), any())).thenReturn(results); + UserInstitutionFilter filter = new UserInstitutionFilter(); + filter.setUserId("userId"); + filter.setInstitutionId("institutionId"); + Assertions.assertDoesNotThrow(() -> mongoCustomConnector.findUserInstitutionAggregation(filter, UserInstitutionAggregation.class)); + + } + + @Test + void findUserAndInstitutionWithExternalId() { + AggregationResults results = mock(AggregationResults.class); + when(results.getUniqueMappedResult()).thenReturn(new Object()); + when(mongoOperations.aggregate((Aggregation) any(), anyString(), any())).thenReturn(results); + UserInstitutionFilter filter = new UserInstitutionFilter(); + filter.setUserId("userId"); + filter.setExternalId("externalId"); + Assertions.assertDoesNotThrow(() -> mongoCustomConnector.findUserInstitutionAggregation(filter, UserInstitutionAggregation.class)); + + } + + @Test + void updateMulti() { + UpdateResult updateResult = mock(UpdateResult.class); + when(mongoOperations.updateMulti(any(), any(), (Class) any())).thenReturn(updateResult); + Query query = new Query(); + UpdateDefinition updateDefinition = new Update(); + assertNotNull(mongoCustomConnector.updateMulti(query, updateDefinition, Object.class)); + } + +} + diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImplTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImplTest.java new file mode 100644 index 0000000..43d6f95 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImplTest.java @@ -0,0 +1,107 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.context.ContextConfiguration; + +import it.pagopa.selfcare.mscore.connector.dao.model.PecNotificationEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.PecNotificationEntityMapper; +import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; + +@ContextConfiguration(classes = {PecNotificationConnectorImpl.class}) +@ExtendWith(MockitoExtension.class) +class PecNotificationConnectorImplTest { + + @Mock + private PecNotificationRepository repository; + + @Mock + private PecNotificationEntityMapper pecNotificationMapper; + + @InjectMocks + private PecNotificationConnectorImpl pecNotificationConnector; + + private String institutionId; + private String productId; + private PecNotificationEntity pecNotificationEntity; + private PecNotification pecNotification; + + @BeforeEach + void setUp() { + institutionId = UUID.randomUUID().toString(); + productId = "prod-io"; + pecNotificationEntity = new PecNotificationEntity(); + pecNotificationEntity.setInstitutionId(institutionId); + pecNotificationEntity.setProductId(productId); + pecNotification = new PecNotification(); + } + + @Test + void findAndDeletePecNotification_success() { + when(repository.find(any(), eq(PecNotificationEntity.class))) + .thenReturn(Collections.singletonList(pecNotificationEntity)); + + boolean result = pecNotificationConnector.findAndDeletePecNotification(institutionId, productId); + + assertTrue(result); + verify(repository, times(1)).delete(pecNotificationEntity); + } + + @Test + void findAndDeletePecNotification_multipleEntries() { + when(repository.find(any(), eq(PecNotificationEntity.class))) + .thenReturn(List.of(pecNotificationEntity, pecNotificationEntity)); + + boolean result = pecNotificationConnector.findAndDeletePecNotification(institutionId, productId); + + assertFalse(result); + verify(repository, never()).delete(any()); + } + + @Test + void findAndDeletePecNotification_notExist() { + List pecNotificationList = Collections.emptyList(); + when(repository.find(any(), eq(PecNotificationEntity.class))) + .thenReturn(pecNotificationList); + + boolean result = pecNotificationConnector.findAndDeletePecNotification(institutionId, productId); + + assertFalse(result); + verify(repository, never()).delete(any()); + } + + @Test + void insertPecNotification_success() { + when(pecNotificationMapper.convertToPecNotificationEntity(pecNotification)).thenReturn(pecNotificationEntity); + when(repository.existsByInstitutionIdAndProductId(any(), any())).thenReturn(false); + + boolean result = pecNotificationConnector.insertPecNotification(pecNotification); + + assertTrue(result); + verify(repository, times(1)).insert(pecNotificationEntity); + } + + @Test + void insertPecNotification_alreadyExists() { + when(pecNotificationMapper.convertToPecNotificationEntity(pecNotification)).thenReturn(pecNotificationEntity); + when(repository.existsByInstitutionIdAndProductId(any(), any())).thenReturn(true); + + boolean result = pecNotificationConnector.insertPecNotification(pecNotification); + + assertFalse(result); + verify(repository, never()).insert(pecNotificationEntity); + + } + +} diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfigTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfigTest.java new file mode 100644 index 0000000..aef5628 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfigTest.java @@ -0,0 +1,31 @@ +package it.pagopa.selfcare.mscore.connector.dao.config; + +import com.mongodb.assertions.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Import; +import org.springframework.data.mongodb.MongoDatabaseFactory; +import org.springframework.test.context.junit.jupiter.SpringExtension; + + +@ExtendWith(SpringExtension.class) +@TestConfiguration +@Import(DaoConfig.class) +public class DaoConfigTest { + @InjectMocks + private DaoConfig daoConfig; + + @Mock + private MongoDatabaseFactory mongoDatabaseFactory; + + + @Test + void testCustomConversions() { + Assertions.assertNotNull(daoConfig.customConversions()); + } + +} + diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverterTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverterTest.java new file mode 100644 index 0000000..e7e5b52 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverterTest.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.connector.dao.config; + +import java.time.OffsetDateTime; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@ExtendWith(SpringExtension.class) +class OffsetDateTimeToStringConverterTest { + + @Test + void testConvert() { + String offsetDateTime = new OffsetDateTimeToStringConverter().convert(OffsetDateTime.now()); + Assertions.assertDoesNotThrow(() -> offsetDateTime); + } +} + diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverterTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverterTest.java new file mode 100644 index 0000000..fe89941 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverterTest.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.connector.dao.config; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.time.OffsetDateTime; + +class StringToOffsetDateTimeConverterTest { + /** + * Method under test: {@link StringToOffsetDateTimeConverter#convert(String)} + */ + @Test + void testConvert() { + OffsetDateTime offsetDateTime = new StringToOffsetDateTimeConverter().convert("2011-12-03T10:15:30+01:00"); + Assertions.assertDoesNotThrow(() -> offsetDateTime); + } +} + diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserMapperTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserMapperTest.java new file mode 100644 index 0000000..9c401f2 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserMapperTest.java @@ -0,0 +1,210 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.connector.dao.model.UserEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardedProductEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.UserBindingEntity; +import it.pagopa.selfcare.mscore.constant.Env; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedUser; +import it.pagopa.selfcare.mscore.model.user.UserBinding; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class UserMapperTest { + + private final UserEntityMapper userMapper = new UserEntityMapperImpl(); + /** + * Method under test: {@link UserEntityMapper#toOnboardedUser(UserEntity)} + */ + @Test + void testToOnboardedUser() { + UserEntity userEntity = new UserEntity(); + ArrayList userBindingEntityList = new ArrayList<>(); + userEntity.setBindings(userBindingEntityList); + userEntity.setCreatedAt(null); + userEntity.setId("42"); + userEntity.setUpdatedAt(null); + OnboardedUser actualToOnboardedUserResult = userMapper.toOnboardedUser(userEntity); + assertEquals("42", actualToOnboardedUserResult.getId()); + assertNull(actualToOnboardedUserResult.getCreatedAt()); + } + + /** + * Method under test: {@link UserEntityMapper#toOnboardedUser(UserEntity)} + */ + @Test + void testToOnboardedUser2() { + UserEntity userEntity = new UserEntity(); + userEntity.setCreatedAt(null); + userEntity.setId("42"); + userEntity.setUpdatedAt(null); + userEntity.setBindings(null); + OnboardedUser actualToOnboardedUserResult = userMapper.toOnboardedUser(userEntity); + assertEquals("42", actualToOnboardedUserResult.getId()); + assertNull(actualToOnboardedUserResult.getCreatedAt()); + } + + /** + * Method under test: {@link UserEntityMapper#toOnboardedUser(UserEntity)} + */ + @Test + void testToOnboardedUser3() { + UserBindingEntity userBindingEntity = new UserBindingEntity(); + userBindingEntity.setProducts(null); + + UserBindingEntity userBindingEntity1 = new UserBindingEntity(); + userBindingEntity1.setProducts(null); + + OnboardedProductEntity onboardedProductEntity = new OnboardedProductEntity(); + onboardedProductEntity.setContract("Contract"); + onboardedProductEntity.setCreatedAt(null); + onboardedProductEntity.setEnv(Env.ROOT); + onboardedProductEntity.setProductId("42"); + onboardedProductEntity.setProductRole("Product Role"); + onboardedProductEntity.setRelationshipId("42"); + onboardedProductEntity.setRole(PartyRole.MANAGER); + onboardedProductEntity.setStatus(RelationshipState.PENDING); + onboardedProductEntity.setTokenId("42"); + onboardedProductEntity.setUpdatedAt(null); + + ArrayList onboardedProductEntityList = new ArrayList<>(); + onboardedProductEntityList.add(onboardedProductEntity); + + UserBindingEntity userBindingEntity2 = new UserBindingEntity(); + userBindingEntity2.setProducts(onboardedProductEntityList); + + ArrayList userBindingEntityList = new ArrayList<>(); + userBindingEntityList.add(new UserBindingEntity()); + userBindingEntityList.add(userBindingEntity); + userBindingEntityList.add(userBindingEntity1); + userBindingEntityList.add(userBindingEntity2); + + UserEntity userEntity = new UserEntity(); + userEntity.setCreatedAt(null); + userEntity.setId("42"); + userEntity.setUpdatedAt(null); + userEntity.setBindings(userBindingEntityList); + OnboardedUser actualToOnboardedUserResult = userMapper.toOnboardedUser(userEntity); + List bindings = actualToOnboardedUserResult.getBindings(); + assertEquals(4, bindings.size()); + assertEquals("42", actualToOnboardedUserResult.getId()); + assertNull(actualToOnboardedUserResult.getCreatedAt()); + UserBinding getResult = bindings.get(3); + assertEquals(1, getResult.getProducts().size()); + assertNull(bindings.get(0).getInstitutionId()); + assertNull(getResult.getInstitutionId()); + assertNull(bindings.get(1).getInstitutionId()); + assertNull(bindings.get(2).getInstitutionId()); + } + + /** + * Method under test: {@link UserEntityMapper#toOnboardedUser(UserEntity)} + */ + @Test + void testToOnboardedUser4() { + List userBindingEntityList = new ArrayList<>(); + + UserEntity userEntity = new UserEntity(); + userEntity.setCreatedAt(null); + userEntity.setId("42"); + userEntity.setUpdatedAt(null); + userEntity.setBindings(userBindingEntityList); + OnboardedUser actualToOnboardedUserResult = userMapper.toOnboardedUser(userEntity); + assertTrue(actualToOnboardedUserResult.getBindings().isEmpty()); + assertEquals("42", actualToOnboardedUserResult.getId()); + assertNull(actualToOnboardedUserResult.getCreatedAt()); + } + + /** + * Method under test: {@link UserEntityMapper#toUserEntity(OnboardedUser)} + */ + @Test + void testToUserEntity() { + assertNull(userMapper.toUserEntity(new OnboardedUser()).getCreatedAt()); + } + + /** + * Method under test: {@link UserEntityMapper#toUserEntity(OnboardedUser)} + */ + @Test + void testToUserEntity2() { + OnboardedUser onboardedUser = new OnboardedUser(); + ArrayList userBindingList = new ArrayList<>(); + onboardedUser.setBindings(userBindingList); + onboardedUser.setId(null); + UserEntity actualToUserEntityResult = userMapper.toUserEntity(onboardedUser); + assertNull(actualToUserEntityResult.getCreatedAt()); + } + + /** + * Method under test: {@link UserEntityMapper#toUserEntity(OnboardedUser)} + */ + @Test + void testToUserEntity3() { + UserBinding userBinding = new UserBinding(); + userBinding.setProducts(null); + + UserBinding userBinding1 = new UserBinding(); + userBinding1.setProducts(null); + + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract("Contract"); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole("Product Role"); + onboardedProduct.setRelationshipId("42"); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setTokenId("42"); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding2 = new UserBinding(); + userBinding2.setProducts(onboardedProductList); + + ArrayList userBindingList = new ArrayList<>(); + userBindingList.add(new UserBinding()); + userBindingList.add(userBinding); + userBindingList.add(userBinding1); + userBindingList.add(userBinding2); + + OnboardedUser onboardedUser = new OnboardedUser(); + onboardedUser.setBindings(userBindingList); + onboardedUser.setId(null); + UserEntity actualToUserEntityResult = userMapper.toUserEntity(onboardedUser); + List bindings = actualToUserEntityResult.getBindings(); + assertEquals(4, bindings.size()); + assertNull(actualToUserEntityResult.getCreatedAt()); + UserBindingEntity getResult = bindings.get(3); + assertEquals(1, getResult.getProducts().size()); + assertNull(bindings.get(2).getInstitutionId()); + assertNull(getResult.getInstitutionId()); + assertNull(bindings.get(0).getInstitutionId()); + assertNull(bindings.get(1).getInstitutionId()); + } + + /** + * Method under test: {@link UserEntityMapper#toUserEntity(OnboardedUser)} + */ + @Test + void testToUserEntity4() { + OnboardedUser onboardedUser = new OnboardedUser(); + onboardedUser.setBindings(null); + onboardedUser.setId("foo"); + UserEntity actualToUserEntityResult = userMapper.toUserEntity(onboardedUser); + assertEquals("foo", actualToUserEntityResult.getId()); + assertNull(actualToUserEntityResult.getCreatedAt()); + } +} + diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/utils/TestUtils.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/utils/TestUtils.java new file mode 100644 index 0000000..f1c1500 --- /dev/null +++ b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/utils/TestUtils.java @@ -0,0 +1,155 @@ +package it.pagopa.selfcare.mscore.connector.dao.utils; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.BillingEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.DataProtectionOfficerEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.PaymentServiceProviderEntity; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.TokenType; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.Token; + +import java.util.ArrayList; + +public class TestUtils { + public static PaymentServiceProvider createSimplePaymentServiceProvider() { + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + return paymentServiceProvider; + } + + public static DataProtectionOfficer createSimpleDataProtectionOfficer() { + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + return dataProtectionOfficer; + } + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + + + public static InstitutionUpdate createSimpleInstitutionUpdatePA() { + + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setAddress("42 Main St"); + institutionUpdate.setBusinessRegisterPlace("Business Register Place"); + institutionUpdate.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); + institutionUpdate.setDescription("The characteristics of someone or something"); + institutionUpdate.setDigitalAddress("42 Main St"); + institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); + institutionUpdate.setImported(true); + institutionUpdate.setInstitutionType(InstitutionType.PA); + institutionUpdate.setPaymentServiceProvider(createSimplePaymentServiceProvider()); + institutionUpdate.setRea("Rea"); + institutionUpdate.setShareCapital("Share Capital"); + institutionUpdate.setSupportEmail("jane.doe@example.org"); + institutionUpdate.setSupportPhone("6625550144"); + institutionUpdate.setTaxCode("Tax Code"); + institutionUpdate.setZipCode("21654"); + return institutionUpdate; + } + + public static BillingEntity createSimpleBillingEntity() { + BillingEntity billingEntity = new BillingEntity(); + billingEntity.setPublicServices(true); + billingEntity.setRecipientCode("Recipient Code"); + billingEntity.setVatNumber("42"); + return billingEntity; + } + + public static DataProtectionOfficerEntity createSimpleDataProtectionOfficerEntity() { + DataProtectionOfficerEntity dataProtectionOfficerEntity = new DataProtectionOfficerEntity(); + dataProtectionOfficerEntity.setAddress("42 Main St"); + dataProtectionOfficerEntity.setEmail("jane.doe@example.org"); + dataProtectionOfficerEntity.setPec("Pec"); + return dataProtectionOfficerEntity; + } + + public static PaymentServiceProviderEntity createSimplePaymentServiceProviderEntity() { + PaymentServiceProviderEntity paymentServiceProviderEntity = new PaymentServiceProviderEntity(); + paymentServiceProviderEntity.setAbiCode("Abi Code"); + paymentServiceProviderEntity.setBusinessRegisterNumber("42"); + paymentServiceProviderEntity.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderEntity.setLegalRegisterNumber("42"); + paymentServiceProviderEntity.setVatNumberGroup(true); + return paymentServiceProviderEntity; + } + + public static InstitutionEntity createSimpleInstitutionEntity() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + institutionEntity.setAddress("42 Main St"); + institutionEntity.setAttributes(new ArrayList<>()); + institutionEntity.setBilling(createSimpleBillingEntity()); + institutionEntity.setBusinessRegisterPlace("Business Register Place"); + institutionEntity.setCreatedAt(null); + institutionEntity.setDataProtectionOfficer(createSimpleDataProtectionOfficerEntity()); + institutionEntity.setDescription("The characteristics of someone or something"); + institutionEntity.setDigitalAddress("42 Main St"); + institutionEntity.setExternalId("42"); + institutionEntity.setGeographicTaxonomies(new ArrayList<>()); + institutionEntity.setId("42"); + institutionEntity.setImported(true); + institutionEntity.setInstitutionType(InstitutionType.PA); + institutionEntity.setOnboarding(new ArrayList<>()); + institutionEntity.setOrigin(Origin.MOCK); + institutionEntity.setOriginId("42"); + institutionEntity.setPaymentServiceProvider(createSimplePaymentServiceProviderEntity()); + institutionEntity.setRea("Rea"); + institutionEntity.setShareCapital("Share Capital"); + institutionEntity.setSupportEmail("jane.doe@example.org"); + institutionEntity.setSupportPhone("6625550144"); + institutionEntity.setTaxCode("Tax Code"); + institutionEntity.setUpdatedAt(null); + institutionEntity.setZipCode("21654"); + return institutionEntity; + } + + public static Billing createSimpleBilling() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + return billing; + } + + public static Onboarding createSimpleOnboarding() { + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(createSimpleBilling()); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + return onboarding; + } + + public static Token createSimpleToken(InstitutionUpdate institutionUpdate) { + Token token = new Token(); + token.setChecksum("Checksum"); + token.setDeletedAt(null); + token.setContractSigned("Contract Signed"); + token.setContractTemplate("Contract Template"); + token.setCreatedAt(null); + token.setExpiringDate(null); + token.setId("42"); + token.setInstitutionId("42"); + token.setInstitutionUpdate(institutionUpdate); + token.setProductId("42"); + token.setStatus(RelationshipState.PENDING); + token.setType(TokenType.INSTITUTION); + token.setUpdatedAt(null); + token.setUsers(new ArrayList<>()); + return token; + } +} diff --git a/apps/institution-ms-new/connector/email/pom.xml b/apps/institution-ms-new/connector/email/pom.xml new file mode 100644 index 0000000..976bae7 --- /dev/null +++ b/apps/institution-ms-new/connector/email/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + selc-ms-core-connector + it.pagopa.selfcare + 1.0-SNAPSHOT + + + + selc-ms-core-connector-email + + + + org.springframework.boot + spring-boot-starter-mail + + + it.pagopa.selfcare + selc-ms-core-connector-azure-storage + + + org.apache.commons + commons-text + 1.10.0 + compile + + + + \ No newline at end of file diff --git a/apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImpl.java b/apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImpl.java new file mode 100644 index 0000000..947c749 --- /dev/null +++ b/apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImpl.java @@ -0,0 +1,100 @@ +package it.pagopa.selfcare.mscore.connector.email; + +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.api.EmailConnector; +import it.pagopa.selfcare.mscore.api.FileStorageConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.model.onboarding.MailTemplate; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.text.StringSubstitutor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.stereotype.Service; +import org.springframework.util.FileCopyUtils; +import org.springframework.util.StringUtils; + +import javax.activation.DataSource; +import javax.mail.internet.MimeMessage; +import javax.mail.util.ByteArrayDataSource; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import static it.pagopa.selfcare.mscore.constant.GenericError.ERROR_DURING_COMPRESS_FILE; +import static it.pagopa.selfcare.mscore.constant.GenericError.ERROR_DURING_SEND_MAIL; + +@Slf4j +@Service +public class EmailConnectorImpl implements EmailConnector { + + private final JavaMailSender mailSender; + private final FileStorageConnector fileStorageConnector; + private final ObjectMapper mapper; + private final CoreConfig coreConfig; + + @Autowired + public EmailConnectorImpl(JavaMailSender javaMailSender, + FileStorageConnector fileStorageConnector, + ObjectMapper mapper, + CoreConfig coreConfig) { + this.mailSender = javaMailSender; + this.fileStorageConnector = fileStorageConnector; + this.mapper = mapper; + this.coreConfig = coreConfig; + } + + @Override + public void sendMail(String templateName, List destinationMail, File pdf, String productName, Map mailParameters, String fileName) { + try { + log.info("START - sendMail to {}, for product {}", destinationMail, productName); + String template = fileStorageConnector.getTemplateFile(templateName); + MailTemplate mailTemplate = mapper.readValue(template, MailTemplate.class); + String html = StringSubstitutor.replace(mailTemplate.getBody(), mailParameters); + log.trace("sendMessage start"); + MimeMessage mimeMessage = mailSender.createMimeMessage(); + + MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8"); + + message.setSubject(productName + ": " + mailTemplate.getSubject()); + message.setFrom(coreConfig.getSenderMail()); + message.setTo(destinationMail.toArray(new String[0])); + message.setText(html, true); + if(pdf != null && StringUtils.hasText(fileName)) { + byte[] bytes = zipBytes(fileName, pdf); + DataSource source = new ByteArrayDataSource(bytes, "application/zip"); + message.addAttachment(fileName + ".zip", source); + log.info("sendMail to: {}, attached file: {}, for product {}", destinationMail, pdf.getName(), productName); + } + mailSender.send(mimeMessage); + log.info("END - sendMail to {}, for product {}", destinationMail, productName); + } catch (Exception e) { + log.error(ERROR_DURING_SEND_MAIL.getMessage() + ":", e.getMessage(), e); + throw new MsCoreException(ERROR_DURING_SEND_MAIL.getMessage(), ERROR_DURING_SEND_MAIL.getCode()); + } + log.trace("sendMessage end"); + } + + public byte[] zipBytes(String filename, File pdf) { + try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ZipOutputStream zos = new ZipOutputStream(baos)) { + ZipEntry entry = new ZipEntry(filename); + byte[] pdfToByte = FileCopyUtils.copyToByteArray(pdf); + zos.putNextEntry(entry); + zos.write(pdfToByte); + zos.closeEntry(); + zos.finish(); + return baos.toByteArray(); + } catch (IOException e) { + log.error(String.format(ERROR_DURING_COMPRESS_FILE.getMessage(), filename), e); + throw new MsCoreException(String.format(ERROR_DURING_COMPRESS_FILE.getMessage(), filename), + ERROR_DURING_COMPRESS_FILE.getCode()); + } + } +} + diff --git a/apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/config/EmailBaseConfig.java b/apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/config/EmailBaseConfig.java new file mode 100644 index 0000000..9f2b4da --- /dev/null +++ b/apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/config/EmailBaseConfig.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.connector.email.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@PropertySource("classpath:config/email.properties") +public class EmailBaseConfig { +} diff --git a/apps/institution-ms-new/connector/email/src/main/resources/config/email.properties b/apps/institution-ms-new/connector/email/src/main/resources/config/email.properties new file mode 100644 index 0000000..a5fe663 --- /dev/null +++ b/apps/institution-ms-new/connector/email/src/main/resources/config/email.properties @@ -0,0 +1,7 @@ +spring.mail.host=${SMTP_HOST} +spring.mail.port=${SMTP_PORT} +spring.mail.username=${SMTP_USR} +spring.mail.password=${SMTP_PSW} +spring.mail.properties.mail.smtp.auth=${SMTP_AUTH:true} +spring.mail.properties.mail.smtp.starttls.enable=${SMTP_SSL:true} +spring.mail.protocol=${MAIL_SERVER_PROTOCOL:smtps} \ No newline at end of file diff --git a/apps/institution-ms-new/connector/email/src/test/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImplTest.java b/apps/institution-ms-new/connector/email/src/test/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImplTest.java new file mode 100644 index 0000000..6cb7d39 --- /dev/null +++ b/apps/institution-ms-new/connector/email/src/test/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImplTest.java @@ -0,0 +1,101 @@ +package it.pagopa.selfcare.mscore.connector.email; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.api.FileStorageConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.model.onboarding.MailTemplate; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import javax.mail.internet.MimeMessage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.*; + +@ExtendWith(SpringExtension.class) +class EmailConnectorImplTest { + + @InjectMocks + private EmailConnectorImpl emailConnector; + + @Mock + private ObjectMapper mapper; + + @Mock + private FileStorageConnector fileStorageConnector; + + @Mock + private JavaMailSender javaMailSender; + + @Mock + private CoreConfig coreConfig; + + @Test + void testSendMail() throws IOException { + when(fileStorageConnector.getTemplateFile(any())).thenReturn("templateFile"); + MailTemplate mailTemplate = new MailTemplate(); + Path path = Files.createTempFile("contratto", ".pdf"); + File pdf = new File(path.toUri()); + String fileName = "text.pdf"; + byte [] bytes = emailConnector.zipBytes(fileName, pdf); + assertNotNull(bytes); + mailTemplate.setBody("body"); + mailTemplate.setSubject("subject"); + when(mapper.readValue("templateFile", MailTemplate.class)).thenReturn(mailTemplate); + + MimeMessage mimeMessage = mock(MimeMessage.class); + when(javaMailSender.createMimeMessage()).thenReturn(mimeMessage); + when(coreConfig.getSenderMail()).thenReturn("senderMail"); + + ArrayList destinationMail = new ArrayList<>(); + + Assertions.assertDoesNotThrow(() -> emailConnector.sendMail("Template Name", destinationMail, pdf, "Product Name", new HashMap<>(), "foo.txt")); + } + + @Test + void testSendMailWithoutAttachment() throws JsonProcessingException { + when(fileStorageConnector.getTemplateFile(any())).thenReturn("templateFile"); + MailTemplate mailTemplate = new MailTemplate(); + mailTemplate.setBody("body"); + mailTemplate.setSubject("subject"); + when(mapper.readValue("templateFile", MailTemplate.class)).thenReturn(mailTemplate); + + MimeMessage mimeMessage = mock(MimeMessage.class); + when(javaMailSender.createMimeMessage()).thenReturn(mimeMessage); + when(coreConfig.getSenderMail()).thenReturn("senderMail"); + + ArrayList destinationMail = new ArrayList<>(); + Assertions.assertDoesNotThrow(() -> emailConnector.sendMail("Template Name", destinationMail, null, "Product Name", new HashMap<>(), null)); + } + + @Test + void testSendMail2() { + FileStorageConnector fileStorageConnector = mock(FileStorageConnector.class); + when(fileStorageConnector.getTemplateFile(any())).thenReturn("Template File"); + ObjectMapper mapper = new ObjectMapper(); + EmailConnectorImpl emailConnectorImpl = new EmailConnectorImpl(null, fileStorageConnector, mapper, + new CoreConfig()); + ArrayList destinationMail = new ArrayList<>(); + File pdf = Paths.get(System.getProperty("java.io.tmpdir"), "test.txt").toFile(); + assertThrows(MsCoreException.class, () -> emailConnectorImpl.sendMail("Template Name", destinationMail, pdf, + "Product Name", new HashMap<>(), "foo.txt")); + verify(fileStorageConnector).getTemplateFile(any()); + } + +} + diff --git a/apps/institution-ms-new/connector/pom.xml b/apps/institution-ms-new/connector/pom.xml new file mode 100644 index 0000000..7220fdf --- /dev/null +++ b/apps/institution-ms-new/connector/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + selc-ms-core + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-connector + pom + + dao + rest + azure-storage + email + + + + + it.pagopa.selfcare + selc-ms-core-connector-api + + + \ No newline at end of file diff --git a/apps/institution-ms-new/connector/rest/docs/openapi/registry_proxy.json b/apps/institution-ms-new/connector/rest/docs/openapi/registry_proxy.json new file mode 100644 index 0000000..fa2a92c --- /dev/null +++ b/apps/institution-ms-new/connector/rest/docs/openapi/registry_proxy.json @@ -0,0 +1,2199 @@ +{ + "openapi" : "3.0.3", + "info" : { + "title" : "selc-party-registry-proxy", + "description" : "Party Registry Proxy API documentation", + "version" : "0.0.1-SNAPSHOT" + }, + "servers" : [ { + "url" : "{url}:{port}{basePath}", + "variables" : { + "url" : { + "default" : "http://localhost" + }, + "port" : { + "default" : "80" + }, + "basePath" : { + "default" : "" + } + } + } ], + "tags" : [ { + "name" : "GeographicTaxonomies", + "description" : "Geographic Taxonomies Controller" + }, { + "name" : "aoo", + "description" : "AOO Controller" + }, { + "name" : "category", + "description" : "Category operations" + }, { + "name" : "infocamere", + "description" : "Info Camere Controller" + }, { + "name" : "institution", + "description" : "Institution operations" + }, { + "name" : "insurance-companies", + "description" : "Ivass Controller" + }, { + "name" : "nationalRegistries", + "description" : "National Registries Controller" + }, { + "name" : "stations", + "description" : "Station Controller" + }, { + "name" : "uo", + "description" : "UO Controller" + } ], + "paths" : { + "/aoo" : { + "get" : { + "tags" : [ "aoo" ], + "summary" : "Retrieve all AOO from IPA", + "description" : "Returns the AOO list", + "operationId" : "findAllUsingGET", + "parameters" : [ { + "name" : "page", + "in" : "query", + "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "limit", + "in" : "query", + "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/AOOsResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/aoo/{codiceUniAoo}" : { + "get" : { + "tags" : [ "aoo" ], + "summary" : "Retrieve an AOO given its code", + "description" : "Returns an AOO", + "operationId" : "findByUnicodeUsingGET", + "parameters" : [ { + "name" : "codiceUniAoo", + "in" : "path", + "description" : "AOO unique identifier, the same of Id", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "categories", + "in" : "query", + "description" : "Filter from origin category", + "required" : false, + "style" : "form", + "explode" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/AOOResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/categories" : { + "get" : { + "tags" : [ "category" ], + "summary" : "Get all categories", + "description" : "Returns the categories list", + "operationId" : "findCategoriesUsingGET", + "parameters" : [ { + "name" : "origin", + "in" : "query", + "description" : "Describes which is the source of data", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + } + }, { + "name" : "page", + "in" : "query", + "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "limit", + "in" : "query", + "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CategoriesResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/origins/{origin}/categories/{code}" : { + "get" : { + "tags" : [ "category" ], + "summary" : "Get a category", + "description" : "Returns a category", + "operationId" : "findCategoryUsingGET", + "parameters" : [ { + "name" : "origin", + "in" : "path", + "description" : "Describes which is the source of data", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + } + }, { + "name" : "code", + "in" : "path", + "description" : "code", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CategoryResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/geotaxonomies" : { + "get" : { + "tags" : [ "GeographicTaxonomies" ], + "summary" : "retrieves the geographic taxonomies by description", + "description" : "retrieves the geographic taxonomies by description", + "operationId" : "retrieveGeoTaxonomiesByDescriptionUsingGET", + "parameters" : [ { + "name" : "description", + "in" : "query", + "description" : "geographic taxonomy description", + "required" : true, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "offset", + "in" : "query", + "description" : "identifies the page 0-based index, default to 0", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "limit", + "in" : "query", + "description" : "identifies the number of entries in a page, default to 10", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/GeographicTaxonomyResource" + } + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/geotaxonomies/{geotaxId}" : { + "get" : { + "tags" : [ "GeographicTaxonomies" ], + "summary" : "retrieves the geographic taxonomy by code", + "description" : "retrieves the geographic taxonomy by code", + "operationId" : "retrieveGeoTaxonomiesByCodeUsingGET", + "parameters" : [ { + "name" : "geotaxId", + "in" : "path", + "description" : "Geographic taxonomy unique identifier ", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/GeographicTaxonomyResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/info-camere/institutions" : { + "post" : { + "tags" : [ "infocamere" ], + "summary" : "Get institutions by legal tax id", + "description" : "Get the list of companies represented by the tax code of the person (physical or juridical) passed as a parameter", + "operationId" : "institutionsByLegalTaxIdUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/GetInstitutionsByLegalDto" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/BusinessesResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions" : { + "get" : { + "tags" : [ "institution" ], + "summary" : "Search institutions", + "description" : "Returns a list of Institutions.", + "operationId" : "searchUsingGET", + "parameters" : [ { + "name" : "search", + "in" : "query", + "description" : "if passed, the result is filtered based on the contained value.", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "page", + "in" : "query", + "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "limit", + "in" : "query", + "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "categories", + "in" : "query", + "description" : "Filter from origin category", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionsResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{id}" : { + "get" : { + "tags" : [ "institution" ], + "summary" : "Find institution by ID", + "description" : "Returns a single institution. If 'origin' param is filled, the ID to find is treated as 'originId' ($ref: '#/components/schemas/Institution'); otherwise is treated as 'id' ($ref: '#/components/schemas/Institution') ", + "operationId" : "findInstitutionUsingGET", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "The institution ID. It change semantic based on the origin param value (see notes)", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "origin", + "in" : "query", + "description" : "Describes which is the source of data", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + } + }, { + "name" : "categories", + "in" : "query", + "description" : "Filter from origin category", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/insurance-companies" : { + "get" : { + "tags" : [ "insurance-companies" ], + "summary" : "Search insurance company", + "description" : "Returns a list of insurance companies", + "operationId" : "searchUsingGET_1", + "parameters" : [ { + "name" : "search", + "in" : "query", + "description" : "Optional search field. Users can provide a search string to filter results", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "page", + "in" : "query", + "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "limit", + "in" : "query", + "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InsuranceCompaniesResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/insurance-companies/origin/{originId}" : { + "get" : { + "tags" : [ "insurance-companies" ], + "summary" : "Search insurance company by its taxCode", + "description" : "Returns only one insurance company.", + "operationId" : "searchByOriginIdUsingGET", + "parameters" : [ { + "name" : "originId", + "in" : "path", + "description" : "insurance company's IVASS unique identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InsuranceCompanyResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/insurance-companies/{taxId}" : { + "get" : { + "tags" : [ "insurance-companies" ], + "summary" : "Search insurance company by its taxCode", + "description" : "Returns only one insurance company.", + "operationId" : "searchByTaxCodeUsingGET", + "parameters" : [ { + "name" : "taxId", + "in" : "path", + "description" : "taxCode of insurance company", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InsuranceCompanyResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/national-registries/legal-address" : { + "get" : { + "tags" : [ "nationalRegistries" ], + "summary" : "Retrieve data from AdE and InfoCamere", + "description" : "Get the legal address of the business", + "operationId" : "legalAddressUsingGET", + "parameters" : [ { + "name" : "taxId", + "in" : "query", + "description" : "taxId", + "required" : true, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/LegalAddressResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/national-registries/verify-legal" : { + "get" : { + "tags" : [ "nationalRegistries" ], + "summary" : "Retrieve data from AdE and InfoCamere", + "description" : "verify if given taxId is legal of given institution identified with vatNumber", + "operationId" : "verifyLegalUsingGET", + "parameters" : [ { + "name" : "taxId", + "in" : "query", + "description" : "taxId", + "required" : true, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "vatNumber", + "in" : "query", + "description" : "vatNumber", + "required" : true, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/LegalVerificationResult" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/stations" : { + "get" : { + "tags" : [ "stations" ], + "summary" : "Search station", + "description" : "Returns a list of station.", + "operationId" : "searchUsingGET_2", + "parameters" : [ { + "name" : "search", + "in" : "query", + "description" : "Optional search field. Users can provide a search string to filter results", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "page", + "in" : "query", + "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "limit", + "in" : "query", + "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/StationsResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/stations/{taxId}" : { + "get" : { + "tags" : [ "stations" ], + "summary" : "Search station by its taxCode", + "description" : "Returns only one station.", + "operationId" : "searchByTaxCodeUsingGET_1", + "parameters" : [ { + "name" : "taxId", + "in" : "path", + "description" : "taxCode of station", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/StationResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/uo" : { + "get" : { + "tags" : [ "uo" ], + "summary" : "Retrieve all UO from IPA", + "description" : "Returns the UO list", + "operationId" : "findAllUsingGET_1", + "parameters" : [ { + "name" : "page", + "in" : "query", + "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "limit", + "in" : "query", + "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UOsResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/uo/{codiceUniAoo}" : { + "get" : { + "tags" : [ "uo" ], + "summary" : "Retrieve a UO given its code", + "description" : "Returns a UO", + "operationId" : "findByUnicodeUsingGET_1", + "parameters" : [ { + "name" : "codiceUniAoo", + "in" : "path", + "description" : "UO unique identifier, the same of Id", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "categories", + "in" : "query", + "description" : "Filter from origin category", + "required" : false, + "style" : "form", + "explode" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UOResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + } + }, + "components" : { + "schemas" : { + "AOOResource" : { + "title" : "AOOResource", + "type" : "object", + "properties" : { + "cap" : { + "type" : "string" + }, + "codAoo" : { + "type" : "string", + "description" : "AOO code" + }, + "codiceCatastaleComune" : { + "type" : "string", + "description" : "AOO land registry code" + }, + "codiceComuneISTAT" : { + "type" : "string", + "description" : "AOO istat code" + }, + "codiceFiscaleEnte" : { + "type" : "string", + "description" : "AOO fiscal code" + }, + "codiceIpa" : { + "type" : "string", + "description" : "AOO ipa code" + }, + "codiceUniAoo" : { + "type" : "string", + "description" : "AOO unique identifier, the same of Id" + }, + "cognomeResponsabile" : { + "type" : "string", + "description" : "AOO manager lastname" + }, + "dataAggiornamento" : { + "type" : "string", + "description" : "Identifies date of last update on the specific AOO" + }, + "dataIstituzione" : { + "type" : "string", + "description" : "Identifies date of first creation for AOO" + }, + "denominazioneAoo" : { + "type" : "string", + "description" : "AOO description" + }, + "denominazioneEnte" : { + "type" : "string", + "description" : "AOO parent description" + }, + "fax" : { + "type" : "string", + "description" : "AOO fax" + }, + "id" : { + "type" : "string" + }, + "indirizzo" : { + "type" : "string", + "description" : "AOO address" + }, + "mail1" : { + "type" : "string" + }, + "mailResponsabile" : { + "type" : "string", + "description" : "AOO manager email" + }, + "nomeResponsabile" : { + "type" : "string", + "description" : "AOO manager firstname" + }, + "origin" : { + "type" : "string", + "description" : "{swagger.model.*.origin}", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + }, + "protocolloInformatico" : { + "type" : "string", + "description" : "AOO IT protocol" + }, + "telefono" : { + "type" : "string", + "description" : "AOO phone number" + }, + "telefonoResponsabile" : { + "type" : "string", + "description" : "AOO manager phone number" + }, + "tipoMail1" : { + "type" : "string" + }, + "uriprotocolloInformatico" : { + "type" : "string" + } + } + }, + "AOOsResource" : { + "title" : "AOOsResource", + "required" : [ "count", "items" ], + "type" : "object", + "properties" : { + "count" : { + "type" : "integer", + "description" : "Total count of items", + "format" : "int64" + }, + "items" : { + "type" : "array", + "description" : "List of AOO resource", + "items" : { + "$ref" : "#/components/schemas/AOOResource" + } + } + } + }, + "BusinessResource" : { + "title" : "BusinessResource", + "type" : "object", + "properties" : { + "businessName" : { + "type" : "string" + }, + "businessTaxId" : { + "type" : "string" + } + } + }, + "BusinessesResource" : { + "title" : "BusinessesResource", + "type" : "object", + "properties" : { + "businesses" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BusinessResource" + } + }, + "legalTaxId" : { + "type" : "string" + }, + "requestDateTime" : { + "type" : "string" + } + } + }, + "CategoriesResource" : { + "title" : "CategoriesResource", + "required" : [ "items" ], + "type" : "object", + "properties" : { + "items" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/CategoryResource" + } + } + } + }, + "CategoryResource" : { + "title" : "CategoryResource", + "type" : "object", + "properties" : { + "code" : { + "type" : "string" + }, + "id" : { + "type" : "string" + }, + "kind" : { + "type" : "string" + }, + "name" : { + "type" : "string" + }, + "origin" : { + "type" : "string", + "description" : "Describes which is the source of data", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + } + } + }, + "GeographicTaxonomyResource" : { + "title" : "GeographicTaxonomyResource", + "type" : "object", + "properties" : { + "code" : { + "type" : "string", + "description" : "Geographic taxonomy unique identifier " + }, + "country" : { + "type" : "string", + "description" : "Geographic taxonomy country" + }, + "country_abbreviation" : { + "type" : "string", + "description" : "Geographic taxonomy country abbreviation" + }, + "desc" : { + "type" : "string", + "description" : "Geographic taxonomy description" + }, + "enabled" : { + "type" : "boolean", + "description" : "Geographic taxonomy enabled", + "example" : false + }, + "istat_code" : { + "type" : "string", + "description" : "Geographic taxonomy istat code" + }, + "province_abbreviation" : { + "type" : "string", + "description" : "Geographic taxonomy province abbreviation" + }, + "province_id" : { + "type" : "string", + "description" : "Geographic taxonomy province unique identifier" + }, + "region_id" : { + "type" : "string", + "description" : "Geographic taxonomy region unique identifier" + } + } + }, + "GetInstitutionsByLegalDto" : { + "title" : "GetInstitutionsByLegalDto", + "type" : "object", + "properties" : { + "filter" : { + "$ref" : "#/components/schemas/GetInstitutionsByLegalFilterDto" + } + } + }, + "GetInstitutionsByLegalFilterDto" : { + "title" : "GetInstitutionsByLegalFilterDto", + "type" : "object", + "properties" : { + "legalTaxId" : { + "type" : "string" + } + } + }, + "InstitutionResource" : { + "title" : "InstitutionResource", + "type" : "object", + "properties" : { + "address" : { + "type" : "string", + "description" : "Institution address" + }, + "aoo" : { + "type" : "string", + "description" : "Area organizzativa omogenea" + }, + "category" : { + "type" : "string", + "description" : "Institution category" + }, + "description" : { + "type" : "string", + "description" : "Institution description" + }, + "digitalAddress" : { + "type" : "string", + "description" : "Institution digital address" + }, + "id" : { + "type" : "string", + "description" : "Semantic id to recognize a party between origins (or externalId)" + }, + "istatCode" : { + "type" : "string", + "description" : "Institution istat Code" + }, + "o" : { + "type" : "string", + "description" : "o" + }, + "origin" : { + "type" : "string", + "description" : "Describes which is the source of data", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + }, + "originId" : { + "type" : "string", + "description" : "Id of the institution from its origin" + }, + "ou" : { + "type" : "string", + "description" : "ou" + }, + "taxCode" : { + "type" : "string", + "description" : "Institution fiscal code" + }, + "zipCode" : { + "type" : "string", + "description" : "Institution zipCode" + } + } + }, + "InstitutionsResource" : { + "title" : "InstitutionsResource", + "required" : [ "count", "items" ], + "type" : "object", + "properties" : { + "count" : { + "type" : "integer", + "format" : "int64" + }, + "items" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionResource" + } + } + } + }, + "InsuranceCompaniesResource" : { + "title" : "InsuranceCompaniesResource", + "required" : [ "count", "items" ], + "type" : "object", + "properties" : { + "count" : { + "type" : "integer", + "description" : "list of companies resource size", + "format" : "int64" + }, + "items" : { + "type" : "array", + "description" : "list of insurance companies resource", + "items" : { + "$ref" : "#/components/schemas/InsuranceCompanyResource" + } + } + } + }, + "InsuranceCompanyResource" : { + "title" : "InsuranceCompanyResource", + "type" : "object", + "properties" : { + "address" : { + "type" : "string", + "description" : "Identifies legal address of insurance company" + }, + "description" : { + "type" : "string", + "description" : "insurance company's name" + }, + "digitalAddress" : { + "type" : "string", + "description" : "insurance company's mail address" + }, + "id" : { + "type" : "string", + "description" : "insurance company's unique identifier" + }, + "origin" : { + "type" : "string", + "description" : "Describes which is the source of data", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + }, + "originId" : { + "type" : "string", + "description" : "insurance company's IVASS unique identifier" + }, + "registerType" : { + "type" : "string", + "description" : "Identifies register type for company" + }, + "taxCode" : { + "type" : "string", + "description" : "taxCode of insurance company" + }, + "workType" : { + "type" : "string", + "description" : "Identifies work type for company" + } + } + }, + "InvalidParam" : { + "title" : "InvalidParam", + "required" : [ "name", "reason" ], + "type" : "object", + "properties" : { + "name" : { + "type" : "string", + "description" : "Invalid parameter name." + }, + "reason" : { + "type" : "string", + "description" : "Invalid parameter reason." + } + } + }, + "LegalAddressResponse" : { + "title" : "LegalAddressResponse", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "zipCode" : { + "type" : "string" + } + } + }, + "LegalVerificationResult" : { + "title" : "LegalVerificationResult", + "type" : "object", + "properties" : { + "resultCode" : { + "type" : "string" + }, + "resultDetail" : { + "type" : "string" + }, + "verificationResult" : { + "type" : "boolean" + } + } + }, + "Problem" : { + "title" : "Problem", + "required" : [ "status", "title" ], + "type" : "object", + "properties" : { + "detail" : { + "type" : "string", + "description" : "Human-readable description of this specific problem." + }, + "instance" : { + "type" : "string", + "description" : "A URI that describes where the problem occurred." + }, + "invalidParams" : { + "type" : "array", + "description" : "A list of invalid parameters details.", + "items" : { + "$ref" : "#/components/schemas/InvalidParam" + } + }, + "status" : { + "type" : "integer", + "description" : "The HTTP status code.", + "format" : "int32", + "example" : 500 + }, + "title" : { + "type" : "string", + "description" : "Short human-readable summary of the problem." + }, + "type" : { + "type" : "string", + "description" : "A URL to a page with more details regarding the problem." + } + }, + "description" : "A \"problem detail\" as a way to carry machine-readable details of errors (https://datatracker.ietf.org/doc/html/rfc7807)" + }, + "StationResource" : { + "title" : "StationResource", + "type" : "object", + "properties" : { + "anacEnabled" : { + "type" : "boolean", + "description" : "Identifies if ANAC station is enabled", + "example" : false + }, + "anacEngaged" : { + "type" : "boolean", + "description" : "Identifies if ANAC station is engaged", + "example" : false + }, + "description" : { + "type" : "string", + "description" : "station's name" + }, + "digitalAddress" : { + "type" : "string", + "description" : "station's mail address" + }, + "id" : { + "type" : "string", + "description" : "station's unique identifier" + }, + "origin" : { + "type" : "string", + "description" : "Describes which is the source of data", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + }, + "originId" : { + "type" : "string", + "description" : "station's anac unique identifier" + }, + "taxCode" : { + "type" : "string", + "description" : "taxCode of station" + } + } + }, + "StationsResource" : { + "title" : "StationsResource", + "required" : [ "count", "items" ], + "type" : "object", + "properties" : { + "count" : { + "type" : "integer", + "description" : "list of station resource size", + "format" : "int64" + }, + "items" : { + "type" : "array", + "description" : "list of station resource", + "items" : { + "$ref" : "#/components/schemas/StationResource" + } + } + } + }, + "UOResource" : { + "title" : "UOResource", + "type" : "object", + "properties" : { + "cap" : { + "type" : "string" + }, + "codiceCatastaleComune" : { + "type" : "string", + "description" : "UO land registry code" + }, + "codiceComuneISTAT" : { + "type" : "string", + "description" : "UO istat code" + }, + "codiceFiscaleEnte" : { + "type" : "string", + "description" : "UO fiscal code" + }, + "codiceIpa" : { + "type" : "string", + "description" : "UO ipa code" + }, + "codiceUniAoo" : { + "type" : "string", + "description" : "AOO unique identifier, the same of Id" + }, + "codiceUniUo" : { + "type" : "string", + "description" : "UO unique identifier, the same of Id" + }, + "codiceUniUoPadre" : { + "type" : "string", + "description" : "UO parent code" + }, + "cognomeResponsabile" : { + "type" : "string", + "description" : "UO manager lastname" + }, + "dataAggiornamento" : { + "type" : "string", + "description" : "Identifies date of last update on the specific UO" + }, + "dataIstituzione" : { + "type" : "string", + "description" : "Identifies date of first creation for UO" + }, + "denominazioneEnte" : { + "type" : "string", + "description" : "UO parent description" + }, + "descrizioneUo" : { + "type" : "string", + "description" : "UO description" + }, + "fax" : { + "type" : "string", + "description" : "UO fax" + }, + "id" : { + "type" : "string" + }, + "indirizzo" : { + "type" : "string", + "description" : "UO address" + }, + "mail1" : { + "type" : "string" + }, + "mailResponsabile" : { + "type" : "string", + "description" : "UO manager email" + }, + "nomeResponsabile" : { + "type" : "string", + "description" : "UO manager firstname" + }, + "origin" : { + "type" : "string", + "description" : "Describes which is the source of data", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + }, + "telefono" : { + "type" : "string", + "description" : "UO phone number" + }, + "telefonoResponsabile" : { + "type" : "string", + "description" : "UO manager phone number" + }, + "tipoMail1" : { + "type" : "string" + }, + "url" : { + "type" : "string", + "description" : "UO url" + } + } + }, + "UOsResource" : { + "title" : "UOsResource", + "required" : [ "count", "items" ], + "type" : "object", + "properties" : { + "count" : { + "type" : "integer", + "description" : "Total count of items", + "format" : "int64" + }, + "items" : { + "type" : "array", + "description" : "List of UO resource", + "items" : { + "$ref" : "#/components/schemas/UOResource" + } + } + } + } + }, + "securitySchemes" : { + "bearerAuth" : { + "type" : "http", + "description" : "A bearer token in the format of a JWS and conformed to the specifications included in [RFC8725](https://tools.ietf.org/html/RFC8725)", + "scheme" : "bearer", + "bearerFormat" : "JWT" + } + } + } +} \ No newline at end of file diff --git a/apps/institution-ms-new/connector/rest/docs/openapi/selfcare-user-docs.json b/apps/institution-ms-new/connector/rest/docs/openapi/selfcare-user-docs.json new file mode 100644 index 0000000..2cbbda3 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/docs/openapi/selfcare-user-docs.json @@ -0,0 +1,1550 @@ +{ + "openapi" : "3.0.3", + "info" : { + "title" : "User API", + "version" : "1.0.0" + }, + "servers" : [ { + "url" : "http://localhost:8080", + "description" : "Auto generated value" + }, { + "url" : "http://0.0.0.0:8080", + "description" : "Auto generated value" + } ], + "paths" : { + "/authorize" : { + "get" : { + "tags" : [ "User Permission Controller" ], + "summary" : "Get permission for a user in an institution", + "parameters" : [ { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "permission", + "in" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/PermissionTypeEnum" + } + }, { + "name" : "productId", + "in" : "query", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "boolean" + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/institutions/{institutionId}" : { + "put" : { + "tags" : [ "Institution Controller" ], + "summary" : "The API updates the description in all occurrences of userInstitution, given a certain institutionId.", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UpdateDescriptionDto" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/institutions/{institutionId}/products/{productId}/createdAt" : { + "put" : { + "tags" : [ "Institution Controller" ], + "summary" : "The API updates user's onboarded product with createdAt passed in input", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "createdAt", + "in" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/LocalDateTime" + } + }, { + "name" : "userIds", + "in" : "query", + "required" : true, + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/institutions/{institutionId}/user-institutions" : { + "get" : { + "tags" : [ "Institution Controller" ], + "summary" : "The API retrieves users with optional filters in input as query params", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "productRoles", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "products", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "roles", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "states", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "userId", + "in" : "query", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserInstitutionResponse" + } + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/institutions/{institutionId}/users" : { + "get" : { + "tags" : [ "Institution Controller" ], + "summary" : "The API retrieves user's info including details of roles on products", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserProductResponse" + } + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "The API retrieves paged users with optional filters in input as query params", + "parameters" : [ { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "page", + "in" : "query", + "schema" : { + "format" : "int32", + "default" : "0", + "type" : "integer" + } + }, { + "name" : "productRoles", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "products", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "roles", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/PartyRole" + } + } + }, { + "name" : "size", + "in" : "query", + "schema" : { + "format" : "int32", + "default" : "100", + "type" : "integer" + } + }, { + "name" : "states", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "userId", + "in" : "query", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserInstitutionResponse" + } + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + }, + "post" : { + "tags" : [ "User Controller" ], + "summary" : "The createOrUpdateByFiscalCode function is used to create a new user or update an existing one.", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CreateUserDto" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "string" + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/emails" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "The API retrieves Users' emails using institution id and product id", + "parameters" : [ { + "name" : "institutionId", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/ids" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "Retrieve all users given their userIds", + "parameters" : [ { + "name" : "userIds", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserInstitutionResponse" + } + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/notification" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "Retrieve all SC-User for DataLake filtered by optional productId", + "parameters" : [ { + "name" : "page", + "in" : "query", + "schema" : { + "format" : "int32", + "default" : "0", + "type" : "integer" + } + }, { + "name" : "productId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "size", + "in" : "query", + "schema" : { + "format" : "int32", + "default" : "100", + "type" : "integer" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UsersNotificationResponse" + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/search" : { + "post" : { + "tags" : [ "User Controller" ], + "summary" : "Search user by fiscalCode", + "parameters" : [ { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/SearchUserDto" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserDetailResponse" + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{id}" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "Retrieves user given userId and optional ProductId", + "parameters" : [ { + "name" : "id", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "query", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserResponse" + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{id}/details" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "Retrieves user's information from pdv: name, familyName, email, fiscalCode and workContacts", + "parameters" : [ { + "name" : "id", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "field", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserDetailResponse" + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{id}/institution/{institutionId}/product/{productId}/status" : { + "put" : { + "tags" : [ "User Controller" ], + "summary" : "Service to update user product status", + "parameters" : [ { + "name" : "id", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "institutionId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "productRole", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "status", + "in" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/OnboardedProductState" + } + } ], + "responses" : { + "204" : { + "description" : "No Content" + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{id}/status" : { + "put" : { + "tags" : [ "User Controller" ], + "summary" : "Update user status with optional filter for institution, product, role and productRole", + "parameters" : [ { + "name" : "id", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "productRole", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "role", + "in" : "query", + "schema" : { + "$ref" : "#/components/schemas/PartyRole" + } + }, { + "name" : "status", + "in" : "query", + "schema" : { + "$ref" : "#/components/schemas/OnboardedProductState" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{id}/user-registry" : { + "put" : { + "tags" : [ "User Controller" ], + "summary" : "Service to update user in user-registry and send notification when user data gets updated", + "parameters" : [ { + "name" : "id", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UpdateUserRequest" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{userId}" : { + "post" : { + "tags" : [ "User Controller" ], + "summary" : "The createOrUpdateByUserId function is used to update existing user adding userRole.", + "parameters" : [ { + "name" : "userId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/AddUserRoleDto" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{userId}/institution/{institutionId}" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "The retrieveUsers function is used to retrieve a list of users from the UserInstitution collection and userRegistry.\nAt first it try to retrieve a UserInstitution document associated with a logged user (admin)\nIf this userInstitution object is not null, so user has AdminRole, it try to retriew the userInstitutions filtered by given institutionId, roles, states, products and productRoles\nand optional given personId, otherwise it do the same query using the logged user id instead of personId.\nAfter that it retrieve personal user data, foreach userId retrieved, from userRegistry and return a stream of UserDataResponse objects containing the requested user data.", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "userId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "personId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "productRoles", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "products", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "roles", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "states", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserDataResponse" + } + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{userId}/institutions" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "Retrieves products info and role which the user is enabled", + "parameters" : [ { + "name" : "userId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "states", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserInfoResponse" + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{userId}/institutions/{institutionId}/products/{productId}" : { + "delete" : { + "tags" : [ "User Controller" ], + "summary" : "Delete logically the association institution and product", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "userId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "204" : { + "description" : "No Content" + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + } + }, + "components" : { + "schemas" : { + "AddUserRoleDto" : { + "required" : [ "institutionId", "product" ], + "type" : "object", + "properties" : { + "institutionId" : { + "minLength" : 1, + "type" : "string" + }, + "product" : { + "$ref" : "#/components/schemas/Product" + }, + "institutionDescription" : { + "type" : "string" + }, + "institutionRootName" : { + "type" : "string" + }, + "userMailUuid" : { + "type" : "string" + }, + "hasToSendEmail" : { + "type" : "boolean" + } + } + }, + "CertifiableFieldResponseString" : { + "type" : "object", + "properties" : { + "value" : { + "type" : "string" + }, + "certified" : { + "$ref" : "#/components/schemas/CertificationEnum" + } + } + }, + "CertificationEnum" : { + "enum" : [ "NONE", "SPID" ], + "type" : "string" + }, + "CreateUserDto" : { + "required" : [ "institutionId", "user", "product" ], + "type" : "object", + "properties" : { + "institutionId" : { + "minLength" : 1, + "type" : "string" + }, + "user" : { + "$ref" : "#/components/schemas/User" + }, + "product" : { + "$ref" : "#/components/schemas/Product1" + }, + "institutionDescription" : { + "type" : "string" + }, + "institutionRootName" : { + "type" : "string" + }, + "hasToSendEmail" : { + "type" : "boolean" + } + } + }, + "Env" : { + "enum" : [ "ROOT", "DEV", "COLL", "PROD" ], + "type" : "string" + }, + "LocalDateTime" : { + "format" : "date-time", + "type" : "string", + "example" : "2022-03-10T12:15:50" + }, + "OnboardedProductResponse" : { + "type" : "object", + "properties" : { + "productId" : { + "type" : "string" + }, + "tokenId" : { + "type" : "string" + }, + "status" : { + "$ref" : "#/components/schemas/OnboardedProductState" + }, + "productRole" : { + "type" : "string" + }, + "role" : { + "$ref" : "#/components/schemas/PartyRole" + }, + "env" : { + "$ref" : "#/components/schemas/Env" + }, + "createdAt" : { + "$ref" : "#/components/schemas/LocalDateTime" + }, + "updatedAt" : { + "$ref" : "#/components/schemas/LocalDateTime" + } + } + }, + "OnboardedProductState" : { + "enum" : [ "ACTIVE", "PENDING", "TOBEVALIDATED", "SUSPENDED", "DELETED", "REJECTED" ], + "type" : "string" + }, + "PartyRole" : { + "enum" : [ "MANAGER", "DELEGATE", "SUB_DELEGATE", "OPERATOR" ], + "type" : "string" + }, + "PermissionTypeEnum" : { + "enum" : [ "ADMIN", "ANY" ], + "type" : "string" + }, + "Product" : { + "required" : [ "productId", "role", "productRoles" ], + "type" : "object", + "properties" : { + "productId" : { + "minLength" : 1, + "type" : "string" + }, + "role" : { + "$ref" : "#/components/schemas/PartyRole" + }, + "tokenId" : { + "type" : "string" + }, + "productRoles" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "Product1" : { + "required" : [ "productId", "role", "productRoles" ], + "type" : "object", + "properties" : { + "productId" : { + "minLength" : 1, + "type" : "string" + }, + "role" : { + "$ref" : "#/components/schemas/PartyRole" + }, + "tokenId" : { + "type" : "string" + }, + "productRoles" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "QueueEvent" : { + "enum" : [ "ADD", "UPDATE" ], + "type" : "string" + }, + "SearchUserDto" : { + "required" : [ "fiscalCode" ], + "type" : "object", + "properties" : { + "fiscalCode" : { + "type" : "string" + } + } + }, + "UpdateDescriptionDto" : { + "required" : [ "institutionDescription" ], + "type" : "object", + "properties" : { + "institutionDescription" : { + "minLength" : 1, + "type" : "string" + }, + "institutionRootName" : { + "type" : "string" + } + } + }, + "UpdateUserRequest" : { + "required" : [ "email" ], + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + }, + "familyName" : { + "type" : "string" + }, + "email" : { + "type" : "string" + } + } + }, + "User" : { + "required" : [ "fiscalCode", "institutionEmail" ], + "type" : "object", + "properties" : { + "birthDate" : { + "type" : "string" + }, + "familyName" : { + "type" : "string" + }, + "name" : { + "type" : "string" + }, + "fiscalCode" : { + "minLength" : 1, + "type" : "string" + }, + "institutionEmail" : { + "minLength" : 1, + "type" : "string" + } + } + }, + "UserDataResponse" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "userId" : { + "type" : "string" + }, + "institutionId" : { + "type" : "string" + }, + "institutionDescription" : { + "type" : "string" + }, + "institutionRootName" : { + "type" : "string" + }, + "userMailUuid" : { + "type" : "string" + }, + "role" : { + "type" : "string" + }, + "status" : { + "type" : "string" + }, + "products" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/OnboardedProductResponse" + } + }, + "userResponse" : { + "$ref" : "#/components/schemas/UserResponse" + } + } + }, + "UserDetailResponse" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "fiscalCode" : { + "type" : "string" + }, + "name" : { + "$ref" : "#/components/schemas/CertifiableFieldResponseString" + }, + "familyName" : { + "$ref" : "#/components/schemas/CertifiableFieldResponseString" + }, + "email" : { + "$ref" : "#/components/schemas/CertifiableFieldResponseString" + }, + "workContacts" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/WorkContactResponse" + } + } + } + }, + "UserInfoResponse" : { + "type" : "object", + "properties" : { + "userId" : { + "type" : "string" + }, + "institutions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserInstitutionRoleResponse" + } + } + } + }, + "UserInstitutionResponse" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "userId" : { + "type" : "string" + }, + "institutionId" : { + "type" : "string" + }, + "institutionDescription" : { + "type" : "string" + }, + "institutionRootName" : { + "type" : "string" + }, + "userMailUuid" : { + "type" : "string" + }, + "products" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/OnboardedProductResponse" + } + } + } + }, + "UserInstitutionRoleResponse" : { + "type" : "object", + "properties" : { + "institutionId" : { + "type" : "string" + }, + "institutionName" : { + "type" : "string" + }, + "institutionRootName" : { + "type" : "string" + }, + "role" : { + "$ref" : "#/components/schemas/PartyRole" + }, + "status" : { + "$ref" : "#/components/schemas/OnboardedProductState" + } + } + }, + "UserNotificationResponse" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "institutionId" : { + "type" : "string" + }, + "productId" : { + "type" : "string" + }, + "onboardingTokenId" : { + "type" : "string" + }, + "createdAt" : { + "$ref" : "#/components/schemas/LocalDateTime" + }, + "updatedAt" : { + "$ref" : "#/components/schemas/LocalDateTime" + }, + "eventType" : { + "$ref" : "#/components/schemas/QueueEvent" + }, + "user" : { + "$ref" : "#/components/schemas/UserToNotify" + } + } + }, + "UserProductResponse" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "name" : { + "type" : "string" + }, + "surname" : { + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "products" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/OnboardedProductResponse" + } + } + } + }, + "UserResponse" : { + "required" : [ "id", "name", "surname" ], + "type" : "object", + "properties" : { + "id" : { + "minLength" : 1, + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "name" : { + "pattern" : "\\S", + "type" : "string" + }, + "surname" : { + "pattern" : "\\S", + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "workContacts" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + } + } + } + }, + "UserToNotify" : { + "type" : "object", + "properties" : { + "userId" : { + "type" : "string" + }, + "name" : { + "type" : "string" + }, + "familyName" : { + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "role" : { + "$ref" : "#/components/schemas/PartyRole" + }, + "productRole" : { + "type" : "string" + }, + "relationshipStatus" : { + "$ref" : "#/components/schemas/OnboardedProductState" + } + } + }, + "UsersNotificationResponse" : { + "type" : "object", + "properties" : { + "users" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserNotificationResponse" + } + } + } + }, + "WorkContactResponse" : { + "type" : "object", + "properties" : { + "email" : { + "$ref" : "#/components/schemas/CertifiableFieldResponseString" + } + } + } + }, + "securitySchemes" : { + "SecurityScheme" : { + "type" : "http", + "description" : "Authentication", + "scheme" : "bearer", + "bearerFormat" : "JWT" + } + } + } +} \ No newline at end of file diff --git a/apps/institution-ms-new/connector/rest/docs/openapi/user_registry.json b/apps/institution-ms-new/connector/rest/docs/openapi/user_registry.json new file mode 100644 index 0000000..c6ac022 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/docs/openapi/user_registry.json @@ -0,0 +1,596 @@ +{ + "openapi" : "3.0.1", + "info" : { + "title" : "pdv-u-user-registry-api", + "description" : "User Registry API documentation", + "version" : "1.0-SNAPSHOT" + }, + "servers" : [ { + "url" : "https://api.uat.pdv.pagopa.it/{basePath}", + "variables" : { + "basePath" : { + "default" : "user-registry/v1" + } + } + } ], + "tags" : [ { + "name" : "user", + "description" : "User operations" + } ], + "paths" : { + "/users" : { + "patch" : { + "tags" : [ "user" ], + "summary" : "Upsert user", + "description" : "Update the given subset fields of an existing user by external id, if not present create a new one", + "operationId" : "saveUsingPATCH", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/SaveUserDto" + } + } + }, + "required" : true + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserId" + } + } + } + }, + "429" : { + "description" : "Too Many Requests", + "content" : { } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "403" : { + "description" : "Forbidden", + "content" : { } + } + }, + "security" : [ { + "api_key" : [ ] + } ] + } + }, + "/users/{id}" : { + "get" : { + "tags" : [ "user" ], + "summary" : "Find user", + "description" : "Retrieve the user by its internal id", + "operationId" : "findByIdUsingGET", + "parameters" : [ { + "name" : "fl", + "in" : "query", + "description" : "Field list. Subset of fields to be retrieved for the requested resource", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "id", + "in" : "path", + "description" : "User internal id", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserResource" + } + } + } + }, + "429" : { + "description" : "Too Many Requests", + "content" : { } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "403" : { + "description" : "Forbidden", + "content" : { } + } + }, + "security" : [ { + "api_key" : [ ] + } ] + }, + "delete" : { + "tags" : [ "user" ], + "summary" : "Delete user", + "description" : "Delete the user by its internal id", + "operationId" : "deleteByIdUsingDELETE", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "User internal id", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "429" : { + "description" : "Too Many Requests", + "content" : { } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "204" : { + "description" : "No Content", + "content" : { } + }, + "403" : { + "description" : "Forbidden", + "content" : { } + } + }, + "security" : [ { + "api_key" : [ ] + } ] + }, + "patch" : { + "tags" : [ "user" ], + "summary" : "Update user", + "description" : "Update the given subset fields of an existing user by its internal id, if not present an error is returned", + "operationId" : "updateUsingPATCH", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "User internal id", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/MutableUserFieldsDto" + } + } + }, + "required" : true + }, + "responses" : { + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "204" : { + "description" : "No Content", + "content" : { } + }, + "403" : { + "description" : "Forbidden", + "content" : { } + }, + "404" : { + "description" : "Not Found", + "content" : { } + }, + "429" : { + "description" : "Too Many Requests", + "content" : { } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "api_key" : [ ] + } ] + } + }, + "/users/search" : { + "post" : { + "tags" : [ "user" ], + "summary" : "Search user", + "description" : "Search a user given its fiscal code", + "operationId" : "searchUsingPOST", + "parameters" : [ { + "name" : "fl", + "in" : "query", + "description" : "Field list. Subset of fields to be retrieved for the requested resource", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserSearchDto" + } + } + }, + "required" : true + }, + "responses" : { + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserResource" + } + } + } + }, + "429" : { + "description" : "Too Many Requests", + "content" : { } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "403" : { + "description" : "Forbidden", + "content" : { } + } + }, + "security" : [ { + "api_key" : [ ] + } ] + } + } + }, + "components" : { + "schemas" : { + "UserSearchDto" : { + "title" : "UserSearchDto", + "required" : [ "fiscalCode" ], + "type" : "object", + "properties" : { + "fiscalCode" : { + "type" : "string", + "description" : "User fiscal code" + } + } + }, + "WorkContactResource" : { + "title" : "WorkContactResource", + "type" : "object", + "properties" : { + "email" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + } + } + }, + "CertifiableFieldResourceOfstring" : { + "title" : "CertifiableFieldResourceOfstring", + "required" : [ "certification", "value" ], + "type" : "object", + "properties" : { + "certification" : { + "type" : "string", + "description" : "Certified source of information", + "enum" : [ "NONE", "SPID" ] + }, + "value" : { + "type" : "string", + "description" : "Field value" + } + } + }, + "UserId" : { + "title" : "UserId", + "required" : [ "id" ], + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "User internal id", + "format" : "uuid" + } + } + }, + "MutableUserFieldsDto" : { + "title" : "MutableUserFieldsDto", + "type" : "object", + "properties" : { + "birthDate" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfLocalDate" + }, + "email" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "familyName" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "name" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "workContacts" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/WorkContactResource" + }, + "description" : "User work contacts" + } + } + }, + "CertifiableFieldResourceOfLocalDate" : { + "title" : "CertifiableFieldResourceOfLocalDate", + "required" : [ "certification", "value" ], + "type" : "object", + "properties" : { + "certification" : { + "type" : "string", + "description" : "Certified source of information", + "enum" : [ "NONE", "SPID" ] + }, + "value" : { + "type" : "string", + "description" : "Field value", + "format" : "date" + } + } + }, + "UserResource" : { + "title" : "UserResource", + "required" : [ "id" ], + "type" : "object", + "properties" : { + "birthDate" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfLocalDate" + }, + "email" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "familyName" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "fiscalCode" : { + "type" : "string", + "description" : "User fiscal code" + }, + "id" : { + "type" : "string", + "description" : "User internal id", + "format" : "uuid" + }, + "name" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "workContacts" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/WorkContactResource" + }, + "description" : "User work contacts" + } + } + }, + "SaveUserDto" : { + "title" : "SaveUserDto", + "required" : [ "fiscalCode" ], + "type" : "object", + "properties" : { + "birthDate" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfLocalDate" + }, + "email" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "familyName" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "fiscalCode" : { + "type" : "string", + "description" : "User fiscal code" + }, + "name" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "workContacts" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/WorkContactResource" + }, + "description" : "User work contacts" + } + } + }, + "Problem" : { + "title" : "Problem", + "required" : [ "status", "title" ], + "type" : "object", + "properties" : { + "detail" : { + "type" : "string", + "description" : "Human-readable description of this specific problem." + }, + "instance" : { + "type" : "string", + "description" : "A URI that describes where the problem occurred." + }, + "invalidParams" : { + "type" : "array", + "description" : "A list of invalid parameters details.", + "items" : { + "$ref" : "#/components/schemas/InvalidParam" + } + }, + "status" : { + "type" : "integer", + "description" : "The HTTP status code.", + "format" : "int32" + }, + "title" : { + "type" : "string", + "description" : "Short human-readable summary of the problem." + }, + "type" : { + "type" : "string", + "description" : "A URL to a page with more details regarding the problem." + } + }, + "description" : "A \"problem detail\" as a way to carry machine-readable details of errors (https://datatracker.ietf.org/doc/html/rfc7807)" + }, + "InvalidParam" : { + "title" : "InvalidParam", + "required" : [ "name", "reason" ], + "type" : "object", + "properties" : { + "name" : { + "type" : "string", + "description" : "Invalid parameter name." + }, + "reason" : { + "type" : "string", + "description" : "Invalid parameter reason." + } + } + } + }, + "securitySchemes" : { + "api_key" : { + "type" : "apiKey", + "name" : "x-api-key", + "in" : "header" + } + } + } +} \ No newline at end of file diff --git a/apps/institution-ms-new/connector/rest/pom.xml b/apps/institution-ms-new/connector/rest/pom.xml new file mode 100644 index 0000000..dd13b27 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/pom.xml @@ -0,0 +1,152 @@ + + + 4.0.0 + + selc-ms-core-connector + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-connector-rest + + + + it.pagopa.selfcare + selc-commons-connector-rest + + + it.pagopa.selfcare + selc-commons-connector-rest + test-jar + test + + + org.springframework.cloud + spring-cloud-contract-wiremock + test + + + io.github.openfeign + feign-okhttp + + + io.github.resilience4j + resilience4j-spring-boot2 + + + + + + + + org.openapitools + openapi-generator-maven-plugin + 6.3.0 + + + selfcare-user-registry + + generate + + process-resources + + ${project.basedir}/docs/openapi/user_registry.json + spring + spring-cloud + + false + false + + true + ${project.groupId}.user_registry.generated.openapi.v1 + ${project.groupId}.user_registry.generated.openapi.v1.dto + ${project.groupId}.user_registry.generated.openapi.v1.api + ${project.groupId}.user_registry.generated.openapi.v1.config + @lombok.Builder; @lombok.NoArgsConstructor; @lombok.AllArgsConstructor + java8 + true + true + none + source + false + false + true + + + + + selfcare-registry-proxy + + generate + + process-resources + + ${project.basedir}/docs/openapi/registry_proxy.json + spring + spring-cloud + + false + false + + true + ${project.groupId}.registry_proxy.generated.openapi.v1 + ${project.groupId}.registry_proxy.generated.openapi.v1.dto + ${project.groupId}.registry_proxy.generated.openapi.v1.api + ${project.groupId}.registry_proxy.generated.openapi.v1.config + @lombok.Builder; @lombok.NoArgsConstructor; @lombok.AllArgsConstructor + java8 + true + true + none + source + false + false + true + + + + + + + org.openapitools + openapi-generator-maven-plugin + 6.3.0 + + + user-ms + + generate + + process-resources + + ${project.basedir}/docs/openapi/selfcare-user-docs.json + spring + spring-cloud + + false + false + + true + ${project.groupId}.user.generated.openapi.v1 + ${project.groupId}.user.generated.openapi.v1.dto + ${project.groupId}.user.generated.openapi.v1.api + ${project.groupId}.user.generated.openapi.v1.config + @lombok.Builder; @lombok.NoArgsConstructor; @lombok.AllArgsConstructor + java8-localdatetime + true + true + none + source + false + false + true + + + + + + + + + diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImpl.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImpl.java new file mode 100644 index 0000000..0053c3c --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImpl.java @@ -0,0 +1,213 @@ +package it.pagopa.selfcare.mscore.connector.rest; + +import feign.FeignException; +import io.github.resilience4j.retry.annotation.Retry; +import it.pagopa.selfcare.commons.base.logging.LogUtils; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.connector.rest.client.PartyRegistryProxyRestClient; +import it.pagopa.selfcare.mscore.connector.rest.mapper.AooMapper; +import it.pagopa.selfcare.mscore.connector.rest.mapper.AsMapper; +import it.pagopa.selfcare.mscore.connector.rest.mapper.SaMapper; +import it.pagopa.selfcare.mscore.connector.rest.mapper.UoMapper; +import it.pagopa.selfcare.mscore.connector.rest.model.geotaxonomy.GeographicTaxonomiesResponse; +import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.*; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.registry_proxy.generated.openapi.v1.dto.InsuranceCompanyResource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import java.util.ArrayList; +import java.util.List; + +import static it.pagopa.selfcare.mscore.constant.CustomError.CREATE_INSTITUTION_NOT_FOUND; + +@Slf4j +@Service +public class PartyRegistryProxyConnectorImpl implements PartyRegistryProxyConnector { + + public static final String CODE_IS_REQUIRED = "Code is required"; + private final PartyRegistryProxyRestClient restClient; + private final AooMapper aooMapper; + private final UoMapper uoMapper; + + private final SaMapper saMapper; + private final AsMapper asMapper; + + public PartyRegistryProxyConnectorImpl(PartyRegistryProxyRestClient restClient, AooMapper aooMapper, UoMapper uoMapper, SaMapper saMapper, AsMapper asMapper) { + this.restClient = restClient; + this.aooMapper = aooMapper; + this.uoMapper = uoMapper; + this.saMapper = saMapper; + this.asMapper = asMapper; + } + + @Override + public InstitutionProxyInfo getInstitutionById(String id) { + try { + ProxyInstitutionResponse response = restClient.getInstitutionById(id); + if (response == null) { + throw new ResourceNotFoundException(String.format(CREATE_INSTITUTION_NOT_FOUND.getMessage(), id), CREATE_INSTITUTION_NOT_FOUND.getCode()); + } + return convertInstitutionProxyInfo(response); + } catch (FeignException e) { + throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); + } + } + + @Override + public CategoryProxyInfo getCategory(String origin, String code) { + try { + ProxyCategoryResponse response = restClient.getCategory(origin, code); + return convertCategoryProxyInfo(response); + } catch (FeignException e) { + throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); + } + } + + @Override + public List getInstitutionsByLegal(String taxId) { + try { + InstitutionsByLegalResponse response = restClient.getInstitutionsByLegal(toInstitutionsByLegalRequest(taxId)); + return toInstitutionsByLegalResponse(response); + } catch (FeignException e) { + throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); + } + } + + @Override + public NationalRegistriesProfessionalAddress getLegalAddress(String taxId) { + try { + return restClient.getLegalAddress(taxId); + } catch (FeignException e) { + log.error("LegalAddress not found for taxId {}", taxId); + throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); + } + } + + private List toInstitutionsByLegalResponse(InstitutionsByLegalResponse response) { + List list = new ArrayList<>(); + if (response.getBusinesses() != null && !response.getBusinesses().isEmpty()) { + response.getBusinesses().forEach(institutions -> { + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName(institutions.getBusinessName()); + institutionByLegal.setBusinessTaxId(institutions.getBusinessTaxId()); + list.add(institutionByLegal); + }); + } + return list; + } + + private InstitutionsByLegalRequest toInstitutionsByLegalRequest(String taxId) { + InstitutionsByLegalRequest institutions = new InstitutionsByLegalRequest(); + LegalFilter legalFilter = new LegalFilter(); + legalFilter.setLegalTaxId(taxId); + institutions.setFilter(legalFilter); + return institutions; + } + + private InstitutionProxyInfo convertInstitutionProxyInfo(ProxyInstitutionResponse response) { + InstitutionProxyInfo info = new InstitutionProxyInfo(); + info.setId(response.getId()); + info.setOriginId(response.getOriginId()); + info.setO(response.getO()); + info.setOu(response.getOu()); + info.setAoo(response.getAoo()); + info.setTaxCode(response.getTaxCode()); + info.setCategory(response.getCategory()); + info.setDescription(response.getDescription()); + info.setDigitalAddress(response.getDigitalAddress()); + info.setAddress(response.getAddress()); + info.setZipCode(response.getZipCode()); + info.setOrigin(response.getOrigin()); + info.setIstatCode(response.getIstatCode()); + return info; + } + + private CategoryProxyInfo convertCategoryProxyInfo(ProxyCategoryResponse response) { + CategoryProxyInfo info = new CategoryProxyInfo(); + info.setCode(response.getCode()); + info.setName(response.getName()); + info.setKind(response.getKind()); + info.setOrigin(response.getOrigin()); + return info; + } + + @Override + @Retry(name = "retryTimeout") + public GeographicTaxonomies getExtByCode(String code) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getExtByCode code = {}", code); + Assert.hasText(code, CODE_IS_REQUIRED); + GeographicTaxonomiesResponse result = restClient.getExtByCode(code); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getExtByCode result = {}", result); + return toGeoTaxonomies(result); + } + + @Override + public AreaOrganizzativaOmogenea getAooById(String aooId) { + log.debug("getAooById id = {}", aooId); + Assert.hasText(aooId, CODE_IS_REQUIRED); + AooResponse result = restClient.getAooById(aooId); + log.debug("getAooById id = {}", aooId); + return aooMapper.toEntity(result); + } + + @Override + public UnitaOrganizzativa getUoById(String uoId) { + log.debug("getUoById id = {}", uoId); + Assert.hasText(uoId, CODE_IS_REQUIRED); + UoResponse result = restClient.getUoById(uoId); + log.debug("getUoById id = {}", uoId); + return uoMapper.toEntity(result); + } + + @Override + public SaResource getSAFromAnac(String taxId) { + try { + log.debug("getSaByTaxId = {}", taxId); + Assert.hasText(taxId, "TaxId is required"); + PdndResponse result = restClient.getSaByTaxId(taxId); + log.debug("getSaByTaxId = {}", taxId); + if (result != null) { + return saMapper.toResource(result); + } + throw new ResourceNotFoundException(String.format(CREATE_INSTITUTION_NOT_FOUND.getMessage(), taxId), CREATE_INSTITUTION_NOT_FOUND.getCode()); + } catch (FeignException e) { + throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); + } + } + + @Override + public ASResource getASFromIvass(String ivassCode) { + try { + if (ivassCode.matches("\\w*")) { log.debug("getASFromIvass = {}", ivassCode); } + Assert.hasText(ivassCode, "IvassCode is required"); + ResponseEntity result = restClient._searchByOriginIdUsingGET(ivassCode); + if (result != null) { + return asMapper.toResource(result.getBody()); + } + throw new ResourceNotFoundException(String.format(CREATE_INSTITUTION_NOT_FOUND.getMessage(), ivassCode), CREATE_INSTITUTION_NOT_FOUND.getCode()); + } catch (FeignException e) { + throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); + } + } + + private GeographicTaxonomies toGeoTaxonomies(GeographicTaxonomiesResponse result) { + GeographicTaxonomies geographicTaxonomies = new GeographicTaxonomies(); + geographicTaxonomies.setDescription(result.getDescription()); + geographicTaxonomies.setGeotaxId(result.getGeotaxId()); + geographicTaxonomies.setEnable(result.isEnable()); + geographicTaxonomies.setRegionId(result.getRegionId()); + geographicTaxonomies.setProvinceId(result.getProvinceId()); + geographicTaxonomies.setProvinceAbbreviation(result.getProvinceAbbreviation()); + geographicTaxonomies.setCountry(result.getCountry()); + geographicTaxonomies.setCountryAbbreviation(result.getCountryAbbreviation()); + geographicTaxonomies.setIstatCode(result.getIstatCode()); + return geographicTaxonomies; + } +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImpl.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImpl.java new file mode 100644 index 0000000..7f73630 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImpl.java @@ -0,0 +1,38 @@ +package it.pagopa.selfcare.mscore.connector.rest; + +import it.pagopa.selfcare.commons.base.logging.LogUtils; +import it.pagopa.selfcare.mscore.api.ProductConnector; +import it.pagopa.selfcare.product.entity.Product; +import it.pagopa.selfcare.product.service.ProductService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +@Slf4j +@Service +public class ProductConnectorImpl implements ProductConnector { + + private final ProductService productService; + + public ProductConnectorImpl(ProductService productService) { + this.productService = productService; + } + + @Override + public Product getProductById(String productId) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getProductById productId = {}", productId); + Assert.hasText(productId, "A productId is required"); + Product result = productService.getProduct(productId); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getProductById result = {}", result); + return result; + } + + @Override + public Product getProductValidById(String productId) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getProductValidById productId = {}", productId); + Assert.hasText(productId, "A productId is required"); + Product result = productService.getProductIsValid(productId); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getProductValidById result = {}", result); + return result; + } +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImpl.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImpl.java new file mode 100644 index 0000000..0abeec9 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImpl.java @@ -0,0 +1,41 @@ +package it.pagopa.selfcare.mscore.connector.rest; + +import it.pagopa.selfcare.mscore.api.UserApiConnector; +import it.pagopa.selfcare.mscore.connector.rest.client.UserApiRestClient; +import it.pagopa.selfcare.mscore.connector.rest.client.UserInstitutionApiRestClient; +import it.pagopa.selfcare.mscore.connector.rest.mapper.UserMapperClient; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@Slf4j +public class UserApiConnectorImpl implements UserApiConnector { + + private final UserApiRestClient userApiRestClient; + + private final UserInstitutionApiRestClient userInstitutionApiRestClient; + + private final UserMapperClient userMapper; + + public UserApiConnectorImpl(UserApiRestClient userApiRestClient, UserInstitutionApiRestClient userInstitutionApiRestClient, UserMapperClient userMapper) { + this.userApiRestClient = userApiRestClient; + this.userInstitutionApiRestClient = userInstitutionApiRestClient; + this.userMapper = userMapper; + } + + @Override + public List getUserEmails(String institutionId, String productId){ + ResponseEntity> userEmails = userApiRestClient._usersEmailsGet(institutionId, productId); + return userEmails.getBody(); + } + + @Override + public void updateUserInstitution(String institutionId, InstitutionUpdate institutionUpdate){ + userInstitutionApiRestClient._institutionsInstitutionIdPut(institutionId, userMapper.toUpdateDescriptionDto(institutionUpdate)); + } + +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImpl.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImpl.java new file mode 100644 index 0000000..8059bf1 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImpl.java @@ -0,0 +1,124 @@ +package it.pagopa.selfcare.mscore.connector.rest; + +import it.pagopa.selfcare.commons.base.logging.LogUtils; +import it.pagopa.selfcare.mscore.api.UserRegistryConnector; +import it.pagopa.selfcare.mscore.connector.rest.client.UserRegistryRestClient; +import it.pagopa.selfcare.mscore.connector.rest.mapper.UserMapperClient; +import it.pagopa.selfcare.mscore.model.user.User; +import it.pagopa.selfcare.user_registry.generated.openapi.v1.dto.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import java.util.Map; +import java.util.Optional; + + +@Slf4j +@Service +public class UserRegistryConnectorImpl implements UserRegistryConnector { + + private final UserRegistryRestClient restClient; + private final UserMapperClient userMapper; + public static final String USERS_FIELD_LIST = "fiscalCode,name,familyName,workContacts"; + public static final String USERS_FIELD_LIST_WITHOUT_FISCAL_CODE = "name,familyName,workContacts"; + + @Autowired + public UserRegistryConnectorImpl(UserRegistryRestClient restClient, UserMapperClient userMapper) { + this.restClient = restClient; + this.userMapper = userMapper; + } + + @Override + public User getUserByInternalIdWithFiscalCode(String userId) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalIdWithFiscalCode userId = {}", userId); + Assert.hasText(userId, "A userId is required"); + ResponseEntity result = restClient._findByIdUsingGET(USERS_FIELD_LIST, userId); + User user = userMapper.toUser(result.getBody()); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalIdWithFiscalCode result = {}", result); + return user; + } + + @Override + public User getUserByInternalId(String userId) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalId userId = {}", userId); + Assert.hasText(userId, "A userId is required"); + ResponseEntity result = restClient._findByIdUsingGET(USERS_FIELD_LIST_WITHOUT_FISCAL_CODE, userId); + User user = userMapper.toUser(result.getBody()); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalId result = {}", result); + return user; + } + + @Override + public User getUserByInternalIdWithCustomFields(String userId, String fieldList) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalId userId = {}", userId); + Assert.hasText(userId, "A userId is required"); + ResponseEntity result = restClient._findByIdUsingGET(fieldList, userId); + User user = userMapper.toUser(result.getBody()); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalId result = {}", result); + return user; + } + + + @Override + public User getUserByFiscalCode(String fiscalCode) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByFiscalCode fiscalCode = {}", fiscalCode); + Assert.hasText(fiscalCode, "A userId is required"); + UserResource result = restClient._searchUsingPOST(USERS_FIELD_LIST, new UserSearchDto().fiscalCode(fiscalCode)) + .getBody(); + User user = userMapper.toUser(result); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByFiscalCode result = {}", result); + return user; + } + + @Override + public User persistUserUsingPatch(String name, String familyName, String fiscalCode, String email, String institutionId) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "persistUserByFiscalCode fiscalCode = {}", fiscalCode); + Assert.hasText(fiscalCode, "A fiscalCode is required"); + + SaveUserDto.SaveUserDtoBuilder saveUserDtoBuilder = SaveUserDto.builder() + .name(CertifiableFieldResourceOfstring.builder() + .value(name) + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .familyName(CertifiableFieldResourceOfstring.builder() + .value(familyName) + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .fiscalCode(fiscalCode); + + Optional.ofNullable(email).ifPresent(emailValue -> saveUserDtoBuilder + .workContacts(Map.of(institutionId, WorkContactResource.builder() + .email(CertifiableFieldResourceOfstring.builder() + .value(emailValue) + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .build()))); + + UserId result = restClient._saveUsingPATCH(saveUserDtoBuilder.build()).getBody(); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "persistUserByFiscalCode result = {}", result); + return userMapper.fromUserId(result); + } + + @Override + public User persistUserWorksContractUsingPatch(String fiscalCode, String email, String institutionId) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "persistUserByFiscalCode fiscalCode = {}", fiscalCode); + Assert.hasText(fiscalCode, "A fiscalCode is required"); + UserId result = restClient._saveUsingPATCH(SaveUserDto.builder() + .fiscalCode(fiscalCode) + .workContacts(Map.of(institutionId, WorkContactResource.builder() + .email(CertifiableFieldResourceOfstring.builder() + .value(email) + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .build())) + .build()) + .getBody(); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "persistUserByFiscalCode result = {}", result); + return userMapper.fromUserId(result); + } + + +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/PartyRegistryProxyRestClient.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/PartyRegistryProxyRestClient.java new file mode 100644 index 0000000..2297aa7 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/PartyRegistryProxyRestClient.java @@ -0,0 +1,47 @@ +package it.pagopa.selfcare.mscore.connector.rest.client; + +import it.pagopa.selfcare.mscore.connector.rest.model.geotaxonomy.GeographicTaxonomiesResponse; +import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.*; +import it.pagopa.selfcare.mscore.model.institution.NationalRegistriesProfessionalAddress; +import it.pagopa.selfcare.registry_proxy.generated.openapi.v1.api.InsuranceCompaniesApi; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +@FeignClient(name = "${rest-client.party-registry-proxy.serviceCode}", url = "${rest-client.party-registry-proxy.base-url}") +public interface PartyRegistryProxyRestClient extends InsuranceCompaniesApi { + + @GetMapping(value = "${rest-client.party-registry-proxy.getInstitutionById.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + ProxyInstitutionResponse getInstitutionById(@PathVariable("institutionId") String id); + + @GetMapping(value = "${rest-client.party-registry-proxy.getCategory.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + ProxyCategoryResponse getCategory(@PathVariable("origin") String origin, @PathVariable("code") String code); + + @PostMapping(value = "${rest-client.party-registry-proxy.getInstitutionsByLegal.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + InstitutionsByLegalResponse getInstitutionsByLegal(@RequestBody InstitutionsByLegalRequest institutions); + + @GetMapping(value = "${rest-client.party-registry-proxy.getLegalAddress.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + NationalRegistriesProfessionalAddress getLegalAddress(@RequestParam(value = "taxId") String taxId); + + @GetMapping(value = "${rest-client.party-registry-proxy.geo-taxonomies.getByCode.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + GeographicTaxonomiesResponse getExtByCode(@PathVariable(value = "geotax_id") String code); + + @GetMapping(value = "${rest-client.party-registry-proxy.aoo.getByCode.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + AooResponse getAooById(@PathVariable(value = "aooId") String aooId); + + @GetMapping(value = "${rest-client.party-registry-proxy.uo.getByCode.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + UoResponse getUoById(@PathVariable(value = "uoId") String uoId); + + @GetMapping(value = "${rest-client.party-registry-proxy.sa.getByTaxId.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + PdndResponse getSaByTaxId(@PathVariable(value = "taxId") String taxId); + +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserApiRestClient.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserApiRestClient.java new file mode 100644 index 0000000..8e26874 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserApiRestClient.java @@ -0,0 +1,8 @@ +package it.pagopa.selfcare.mscore.connector.rest.client; + +import it.pagopa.selfcare.user.generated.openapi.v1.api.UserControllerApi; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "${rest-client.user-ms.serviceCode}", url = "${rest-client.user-ms.base-url}") +public interface UserApiRestClient extends UserControllerApi { +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserInstitutionApiRestClient.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserInstitutionApiRestClient.java new file mode 100644 index 0000000..e1608dd --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserInstitutionApiRestClient.java @@ -0,0 +1,8 @@ +package it.pagopa.selfcare.mscore.connector.rest.client; + +import it.pagopa.selfcare.user.generated.openapi.v1.api.InstitutionControllerApi; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "${rest-client.user-ms.institution.serviceCode}", url = "${rest-client.user-ms.base-url}") +public interface UserInstitutionApiRestClient extends InstitutionControllerApi { +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserRegistryRestClient.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserRegistryRestClient.java new file mode 100644 index 0000000..2fff4d2 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserRegistryRestClient.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.connector.rest.client; + + +import it.pagopa.selfcare.user_registry.generated.openapi.v1.api.UserApi; +import org.springframework.cloud.openfeign.FeignClient; + + +@FeignClient(name = "${rest-client.user-registry.serviceCode}", url = "${rest-client.user-registry.base-url}") +public interface UserRegistryRestClient extends UserApi { + +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/FeignClientConfig.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/FeignClientConfig.java new file mode 100644 index 0000000..6a5691d --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/FeignClientConfig.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.connector.rest.config; + + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@PropertySource("classpath:config/feign-client.properties") +public class FeignClientConfig { + +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/PartyRegistryProxyRestClientConfig.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/PartyRegistryProxyRestClientConfig.java new file mode 100644 index 0000000..8b7e6ce --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/PartyRegistryProxyRestClientConfig.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.connector.rest.config; + +import it.pagopa.selfcare.commons.connector.rest.config.RestClientBaseConfig; +import it.pagopa.selfcare.mscore.connector.rest.client.PartyRegistryProxyRestClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@Import(RestClientBaseConfig.class) +@EnableFeignClients(clients = PartyRegistryProxyRestClient.class) +@PropertySource("classpath:config/party-registry-proxy-rest-client.properties") +public class PartyRegistryProxyRestClientConfig { + +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserApiRestClientConfig.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserApiRestClientConfig.java new file mode 100644 index 0000000..c3aa77c --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserApiRestClientConfig.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.connector.rest.config; + +import it.pagopa.selfcare.commons.connector.rest.config.RestClientBaseConfig; +import it.pagopa.selfcare.mscore.connector.rest.client.UserApiRestClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@Import(RestClientBaseConfig.class) +@EnableFeignClients(clients = UserApiRestClient.class) +@PropertySource("classpath:config/user-rest-client.properties") +public class UserApiRestClientConfig { +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserInstitutionApiRestClientConfig.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserInstitutionApiRestClientConfig.java new file mode 100644 index 0000000..f07eac2 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserInstitutionApiRestClientConfig.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.connector.rest.config; + +import it.pagopa.selfcare.commons.connector.rest.config.RestClientBaseConfig; +import it.pagopa.selfcare.mscore.connector.rest.client.UserInstitutionApiRestClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@Import(RestClientBaseConfig.class) +@EnableFeignClients(clients = UserInstitutionApiRestClient.class) +@PropertySource("classpath:config/user-rest-client.properties") +public class UserInstitutionApiRestClientConfig { +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserRegistryRestClientConfig.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserRegistryRestClientConfig.java new file mode 100644 index 0000000..727a484 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserRegistryRestClientConfig.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.connector.rest.config; + +import it.pagopa.selfcare.commons.connector.rest.config.RestClientBaseConfig; +import it.pagopa.selfcare.mscore.connector.rest.client.UserRegistryRestClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@Import({RestClientBaseConfig.class}) +@EnableFeignClients(clients = UserRegistryRestClient.class) +@PropertySource("classpath:config/user-registry-rest-client.properties") +class UserRegistryRestClientConfig { +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoder.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoder.java new file mode 100644 index 0000000..00fb137 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoder.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.connector.rest.decoder; + +import feign.Response; +import feign.codec.ErrorDecoder; +import it.pagopa.selfcare.mscore.exception.BadGatewayException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.exception.ServiceUnavailableException; + +public class FeignErrorDecoder extends ErrorDecoder.Default { + + @Override + public Exception decode(String methodKey, Response response) { + if (response.status() == 503 || response.status() == 504) + throw new ServiceUnavailableException(); + if(response.status() >= 500 && response.status() <= 509) + throw new BadGatewayException(response.reason()); + if(response.status() == 404) + throw new ResourceNotFoundException(response.reason(), "0000"); + + return super.decode(methodKey, response); + } +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AooMapper.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AooMapper.java new file mode 100644 index 0000000..882107b --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AooMapper.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.connector.rest.mapper; + +import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.AooResponse; +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface AooMapper { + + AreaOrganizzativaOmogenea toEntity(AooResponse response); +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AsMapper.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AsMapper.java new file mode 100644 index 0000000..3be6ac2 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AsMapper.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.connector.rest.mapper; + +import it.pagopa.selfcare.mscore.model.institution.ASResource; +import it.pagopa.selfcare.registry_proxy.generated.openapi.v1.dto.InsuranceCompanyResource; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@Mapper(componentModel = "spring") +public interface AsMapper { + @Mapping(target = "origin", source="origin.value") + ASResource toResource(InsuranceCompanyResource response); +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/SaMapper.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/SaMapper.java new file mode 100644 index 0000000..3bf756f --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/SaMapper.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.connector.rest.mapper; + +import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.PdndResponse; +import it.pagopa.selfcare.mscore.model.institution.SaResource; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface SaMapper { + + SaResource toResource(PdndResponse response); +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UoMapper.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UoMapper.java new file mode 100644 index 0000000..ebf2ef0 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UoMapper.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.connector.rest.mapper; + +import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.AooResponse; +import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.UoResponse; +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface UoMapper { + + UnitaOrganizzativa toEntity(UoResponse response); +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UserMapperClient.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UserMapperClient.java new file mode 100644 index 0000000..ea13619 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UserMapperClient.java @@ -0,0 +1,26 @@ +package it.pagopa.selfcare.mscore.connector.rest.mapper; + +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import it.pagopa.selfcare.mscore.model.user.User; +import it.pagopa.selfcare.user.generated.openapi.v1.dto.UpdateDescriptionDto; +import it.pagopa.selfcare.user_registry.generated.openapi.v1.dto.UserId; +import it.pagopa.selfcare.user_registry.generated.openapi.v1.dto.UserResource; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + + + + +@Mapper(componentModel = "spring") +public interface UserMapperClient { + + User toUser (UserResource userResource); + + @Mapping(target = "id", source = "userId.id") + User fromUserId (UserId userId); + + @Mapping(target = "institutionDescription", source = "description") + @Mapping(target = "institutionRootName", source = "parentDescription") + UpdateDescriptionDto toUpdateDescriptionDto (InstitutionUpdate institutionUpdate); + +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/geotaxonomy/GeographicTaxonomiesResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/geotaxonomy/GeographicTaxonomiesResponse.java new file mode 100644 index 0000000..1672eab --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/geotaxonomy/GeographicTaxonomiesResponse.java @@ -0,0 +1,24 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.geotaxonomy; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class GeographicTaxonomiesResponse { + @JsonProperty("code") + private String geotaxId; //REQUIRED + @JsonProperty("desc") + private String description; + @JsonProperty("istat_code")//REQUIRED + private String istatCode; + @JsonProperty("province_id") + private String provinceId; + @JsonProperty("province_abbreviation") + private String provinceAbbreviation; + @JsonProperty("region_id") + private String regionId; + private String country; + @JsonProperty("country_abbreviation") + private String countryAbbreviation; + private boolean enable; //REQUIRED +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AooResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AooResponse.java new file mode 100644 index 0000000..84d8d44 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AooResponse.java @@ -0,0 +1,38 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import com.fasterxml.jackson.annotation.JsonProperty; +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class AooResponse { + + private String id; + private String codiceIpa; + private String denominazioneEnte; + private String codiceFiscaleEnte; + private String codiceUniAoo; + private String denominazioneAoo; + private String mail1; + private String codAoo; + private Origin origin; + + private String dataIstituzione; + private String nomeResponsabile; + private String cognomeResponsabile; + private String mailResponsabile; + private String telefonoResponsabile; + private String codiceComuneISTAT; + private String codiceCatastaleComune; + private String CAP; + private String indirizzo; + private String telefono; + private String fax; + private String tipoMail1; + private String protocolloInformatico; + private String URIProtocolloInformatico; + private String dataAggiornamento; +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AsResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AsResponse.java new file mode 100644 index 0000000..ab04dfa --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AsResponse.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; + +@Data +public class AsResponse { + private String id; + private String originId; + private String taxCode; + private String description; + private String digitalAddress; + private String workType; + private String registerType; + private String address; + private Origin origin; +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/Institutions.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/Institutions.java new file mode 100644 index 0000000..3a620d4 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/Institutions.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import lombok.Data; + +@Data +public class Institutions { + private String businessName; + private String businessTaxId; +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalRequest.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalRequest.java new file mode 100644 index 0000000..1339e17 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalRequest.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import lombok.Data; + +@Data +public class InstitutionsByLegalRequest { + + private LegalFilter filter; +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalResponse.java new file mode 100644 index 0000000..a02dee3 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalResponse.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import lombok.Data; + +import java.util.List; + +@Data +public class InstitutionsByLegalResponse { + + private List businesses; + private String legalTaxId; + private String requestDateTime; + +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/LegalFilter.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/LegalFilter.java new file mode 100644 index 0000000..77ffb46 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/LegalFilter.java @@ -0,0 +1,8 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import lombok.Data; + +@Data +public class LegalFilter { + private String legalTaxId; +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/PdndResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/PdndResponse.java new file mode 100644 index 0000000..bc25aa1 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/PdndResponse.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import lombok.Data; + +@Data +public class PdndResponse { + private String id; + private String originId; + private boolean anacEngaged; + private boolean anacEnabled; + private String taxCode; + private String description; + private String digitalAddress; +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyCategoryResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyCategoryResponse.java new file mode 100644 index 0000000..bb1802a --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyCategoryResponse.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import lombok.Data; + +@Data +public class ProxyCategoryResponse { + private String code; + private String name; + private String kind; + private String origin; +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyInstitutionResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyInstitutionResponse.java new file mode 100644 index 0000000..d3245d4 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyInstitutionResponse.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import lombok.Data; + +@Data +public class ProxyInstitutionResponse { + private String id; + private String originId; + private String o; + private String ou; + private String aoo; + private String taxCode; + private String category; + private String description; + private String digitalAddress; + private String address; + private String zipCode; + private String origin; + private String istatCode; +} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/UoResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/UoResponse.java new file mode 100644 index 0000000..27befd6 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/UoResponse.java @@ -0,0 +1,35 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; + +@Data +public class UoResponse { + + private String id; + private String codiceIpa; + private String denominazioneEnte; + private String codiceFiscaleEnte; + private String codiceFiscaleSfe; + private String codiceUniUo; + private String codiceUniUoPadre; + private String codiceUniAoo; + private String descrizioneUo; + private String mail1; + private Origin origin; + + private String dataIstituzione; + private String nomeResponsabile; + private String cognomeResponsabile; + private String mailResponsabile; + private String telefonoResponsabile; + private String codiceComuneISTAT; + private String codiceCatastaleComune; + private String CAP; + private String indirizzo; + private String telefono; + private String fax; + private String tipoMail1; + private String url; + private String dataAggiornamento; +} diff --git a/apps/institution-ms-new/connector/rest/src/main/resources/config/feign-client.properties b/apps/institution-ms-new/connector/rest/src/main/resources/config/feign-client.properties new file mode 100644 index 0000000..cf0dfbb --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/resources/config/feign-client.properties @@ -0,0 +1,2 @@ +feign.okhttp.enabled=true +feign.autoconfiguration.jackson.enabled=true \ No newline at end of file diff --git a/apps/institution-ms-new/connector/rest/src/main/resources/config/party-registry-proxy-rest-client.properties b/apps/institution-ms-new/connector/rest/src/main/resources/config/party-registry-proxy-rest-client.properties new file mode 100644 index 0000000..e7f395d --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/resources/config/party-registry-proxy-rest-client.properties @@ -0,0 +1,21 @@ +rest-client.party-registry-proxy.serviceCode=party-registry-proxy +rest-client.party-registry-proxy.base-url=${USERVICE_PARTY_REGISTRY_PROXY_URL} +rest-client.party-registry-proxy.getInstitutionById.path=/institutions/{institutionId} +rest-client.party-registry-proxy.getCategory.path=/origins/{origin}/categories/{code} +rest-client.party-registry-proxy.getInstitutionsByLegal.path=/info-camere/institutions +rest-client.party-registry-proxy.getLegalAddress.path=/national-registries/legal-address +rest-client.party-registry-proxy.geo-taxonomies.getByCode.path=/geotaxonomies/{geotax_id} +rest-client.party-registry-proxy.aoo.getByCode.path=/aoo/{aooId} +rest-client.party-registry-proxy.uo.getByCode.path=/uo/{uoId} +rest-client.party-registry-proxy.sa.getByTaxId.path=/stations/{taxId} + +feign.client.config.party-registry-proxy.requestInterceptors[0]=it.pagopa.selfcare.commons.connector.rest.interceptor.AuthorizationHeaderInterceptor +feign.client.config.party-registry-proxy.requestInterceptors[1]=it.pagopa.selfcare.commons.connector.rest.interceptor.PartyTraceIdInterceptor +feign.client.config.party-registry-proxy.connectTimeout=${PARTY_REGISTRY_PROXY_CLIENT_CONNECT_TIMEOUT:${REST_CLIENT_CONNECT_TIMEOUT:5000}} +feign.client.config.party-registry-proxy.readTimeout=${PARTY_REGISTRY_PROXY_CLIENT_READ_TIMEOUT:${REST_CLIENT_READ_TIMEOUT:5000}} +feign.client.config.party-registry-proxy.loggerLevel=${PARTY_REGISTRY_PROXY_LOG_LEVEL:${REST_CLIENT_LOG_LEVEL:FULL}} + +feign.client.config.party-registry-proxy.errorDecoder=it.pagopa.selfcare.mscore.connector.rest.decoder.FeignErrorDecoder + + + diff --git a/apps/institution-ms-new/connector/rest/src/main/resources/config/user-registry-rest-client.properties b/apps/institution-ms-new/connector/rest/src/main/resources/config/user-registry-rest-client.properties new file mode 100644 index 0000000..5285e06 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/resources/config/user-registry-rest-client.properties @@ -0,0 +1,3 @@ +rest-client.user-registry.serviceCode=user-registry +rest-client.user-registry.base-url=${USERVICE_USER_REGISTRY_URL} +feign.client.config.user-registry.defaultRequestHeaders.x-api-key[0]=${USER_REGISTRY_API_KEY} diff --git a/apps/institution-ms-new/connector/rest/src/main/resources/config/user-rest-client.properties b/apps/institution-ms-new/connector/rest/src/main/resources/config/user-rest-client.properties new file mode 100644 index 0000000..b15e498 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/main/resources/config/user-rest-client.properties @@ -0,0 +1,14 @@ +rest-client.user-ms.base-url=${SELFCARE_USER_URL:http://localhost:8080} +rest-client.user-ms.serviceCode=user-ms +rest-client.user-ms.institution.serviceCode=user-institution-ms +rest-client.user-permission.serviceCode=user-permission +feign.client.config.user-ms.requestInterceptors[0]=it.pagopa.selfcare.commons.connector.rest.interceptor.AuthorizationHeaderInterceptor +feign.client.config.user-ms.connectTimeout=${SELFCARE_USER_REST_CLIENT_CONNECT_TIMEOUT:${REST_CLIENT_CONNECT_TIMEOUT:5000}} +feign.client.config.user-ms.readTimeout=${SELFCARE_USER_REST_CLIENT_READ_TIMEOUT:${REST_CLIENT_READ_TIMEOUT:5000}} +feign.client.config.user-ms.loggerLevel=${SELFCARE_USER_REST_CLIENT_LOGGER_LEVEL:${REST_CLIENT_LOGGER_LEVEL:FULL}} +feign.client.config.user-ms.errorDecoder=it.pagopa.selfcare.mscore.connector.rest.decoder.FeignErrorDecoder +feign.client.config.user-institution-ms.requestInterceptors[0]=it.pagopa.selfcare.commons.connector.rest.interceptor.AuthorizationHeaderInterceptor +feign.client.config.user-institution-ms.connectTimeout=${SELFCARE_USER_REST_CLIENT_CONNECT_TIMEOUT:${REST_CLIENT_CONNECT_TIMEOUT:5000}} +feign.client.config.user-institution-ms.readTimeout=${SELFCARE_USER_REST_CLIENT_READ_TIMEOUT:${REST_CLIENT_READ_TIMEOUT:5000}} +feign.client.config.user-institution-ms.loggerLevel=${SELFCARE_USER_REST_CLIENT_LOGGER_LEVEL:${REST_CLIENT_LOGGER_LEVEL:FULL}} +feign.client.config.user-institution-ms.errorDecoder=it.pagopa.selfcare.mscore.connector.rest.decoder.FeignErrorDecoder diff --git a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImplTest.java b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImplTest.java new file mode 100644 index 0000000..0c86b3b --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImplTest.java @@ -0,0 +1,591 @@ +package it.pagopa.selfcare.mscore.connector.rest; + +import feign.FeignException; +import it.pagopa.selfcare.mscore.connector.rest.client.PartyRegistryProxyRestClient; +import it.pagopa.selfcare.mscore.connector.rest.mapper.*; +import it.pagopa.selfcare.mscore.connector.rest.model.geotaxonomy.GeographicTaxonomiesResponse; +import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.*; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.registry_proxy.generated.openapi.v1.dto.InsuranceCompanyResource; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.function.Executable; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.ArrayList; +import java.util.List; + +import static it.pagopa.selfcare.commons.utils.TestUtils.checkNotNullFields; +import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(SpringExtension.class) +class PartyRegistryProxyConnectorImplTest { + @InjectMocks + private PartyRegistryProxyConnectorImpl partyRegistryProxyConnectorImpl; + + @Mock + private PartyRegistryProxyRestClient partyRegistryProxyRestClient; + + @Spy + private AooMapper aooMapper = new AooMapperImpl(); + + @Spy + private UoMapper uoMapper = new UoMapperImpl(); + + @Spy + private SaMapper saMapper = new SaMapperImpl(); + @Spy + private AsMapper asMapper = new AsMapperImpl(); + + private final static AooResponse aooResponse; + private final static UoResponse uoResponse; + private final static PdndResponse pdndResponse; + private final static InsuranceCompanyResource asResponse; + + static { + aooResponse = new AooResponse(); + aooResponse.setCodAoo("codAoo"); + aooResponse.setId("id"); + aooResponse.setOrigin(Origin.IPA); + + uoResponse = new UoResponse(); + uoResponse.setCodiceUniUo("codiceUniUo"); + uoResponse.setId("id"); + uoResponse.setOrigin(Origin.IPA); + pdndResponse = mockInstance(new PdndResponse()); + asResponse = mockInstance(new InsuranceCompanyResource()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionById(String)} + */ + @Test + void testGetInstitutionById() { + ProxyInstitutionResponse proxyInstitutionResponse = new ProxyInstitutionResponse(); + proxyInstitutionResponse.setAddress("42 Main St"); + proxyInstitutionResponse.setAoo("Aoo"); + proxyInstitutionResponse.setCategory("Category"); + proxyInstitutionResponse.setDescription("The characteristics of someone or something"); + proxyInstitutionResponse.setDigitalAddress("42 Main St"); + proxyInstitutionResponse.setId("42"); + proxyInstitutionResponse.setO("foo"); + proxyInstitutionResponse.setOrigin("Origin"); + proxyInstitutionResponse.setOriginId("42"); + proxyInstitutionResponse.setOu("Ou"); + proxyInstitutionResponse.setTaxCode("Tax Code"); + proxyInstitutionResponse.setZipCode("21654"); + when(partyRegistryProxyRestClient.getInstitutionById(any())).thenReturn(proxyInstitutionResponse); + InstitutionProxyInfo actualInstitutionById = partyRegistryProxyConnectorImpl.getInstitutionById("42"); + assertEquals("42 Main St", actualInstitutionById.getAddress()); + assertEquals("21654", actualInstitutionById.getZipCode()); + assertEquals("Tax Code", actualInstitutionById.getTaxCode()); + assertEquals("Ou", actualInstitutionById.getOu()); + assertEquals("42", actualInstitutionById.getOriginId()); + assertEquals("Origin", actualInstitutionById.getOrigin()); + assertEquals("foo", actualInstitutionById.getO()); + assertEquals("42", actualInstitutionById.getId()); + assertEquals("42 Main St", actualInstitutionById.getDigitalAddress()); + assertEquals("The characteristics of someone or something", actualInstitutionById.getDescription()); + assertEquals("Category", actualInstitutionById.getCategory()); + assertEquals("Aoo", actualInstitutionById.getAoo()); + verify(partyRegistryProxyRestClient).getInstitutionById(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionById(String)} + */ + @Test + void testGetInstitutionById2() { + when(partyRegistryProxyRestClient.getInstitutionById(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionById("42")); + verify(partyRegistryProxyRestClient).getInstitutionById(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionById(String)} + */ + @Test + void testGetInstitutionById3() { + ProxyInstitutionResponse proxyInstitutionResponse = new ProxyInstitutionResponse(); + proxyInstitutionResponse.setAddress("42 Main St"); + proxyInstitutionResponse.setAoo("Aoo"); + proxyInstitutionResponse.setCategory("Category"); + proxyInstitutionResponse.setDescription("The characteristics of someone or something"); + proxyInstitutionResponse.setDigitalAddress("42 Main St"); + proxyInstitutionResponse.setId("42"); + proxyInstitutionResponse.setO("foo"); + proxyInstitutionResponse.setOrigin("Origin"); + proxyInstitutionResponse.setOriginId("42"); + proxyInstitutionResponse.setOu("Ou"); + proxyInstitutionResponse.setTaxCode("Tax Code"); + proxyInstitutionResponse.setZipCode("21654"); + when(partyRegistryProxyRestClient.getInstitutionById(any())).thenReturn(proxyInstitutionResponse); + InstitutionProxyInfo actualInstitutionById = partyRegistryProxyConnectorImpl.getInstitutionById("42"); + assertEquals("42 Main St", actualInstitutionById.getAddress()); + assertEquals("21654", actualInstitutionById.getZipCode()); + assertEquals("Tax Code", actualInstitutionById.getTaxCode()); + assertEquals("Ou", actualInstitutionById.getOu()); + assertEquals("42", actualInstitutionById.getOriginId()); + assertEquals("Origin", actualInstitutionById.getOrigin()); + assertEquals("foo", actualInstitutionById.getO()); + assertEquals("42", actualInstitutionById.getId()); + assertEquals("42 Main St", actualInstitutionById.getDigitalAddress()); + assertEquals("The characteristics of someone or something", actualInstitutionById.getDescription()); + assertEquals("Category", actualInstitutionById.getCategory()); + assertEquals("Aoo", actualInstitutionById.getAoo()); + verify(partyRegistryProxyRestClient).getInstitutionById(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionById(String)} + */ + @Test + void testGetInstitutionById4() { + when(partyRegistryProxyRestClient.getInstitutionById(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionById("42")); + verify(partyRegistryProxyRestClient).getInstitutionById(any()); + } + + @Test + void testGetInstitutionById5() { + FeignException feignException = mock(FeignException.class); + when(partyRegistryProxyRestClient.getInstitutionById(any())) + .thenThrow(feignException); + assertThrows(MsCoreException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionById("42")); + verify(partyRegistryProxyRestClient).getInstitutionById(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getCategory(String, String)} + */ + @Test + void testGetCategory() { + ProxyCategoryResponse proxyCategoryResponse = new ProxyCategoryResponse(); + proxyCategoryResponse.setCode("Code"); + proxyCategoryResponse.setKind("Kind"); + proxyCategoryResponse.setName("Name"); + proxyCategoryResponse.setOrigin("Origin"); + when(partyRegistryProxyRestClient.getCategory(any(), any())).thenReturn(proxyCategoryResponse); + CategoryProxyInfo actualCategory = partyRegistryProxyConnectorImpl.getCategory("Origin", "Code"); + assertEquals("Code", actualCategory.getCode()); + assertEquals("Origin", actualCategory.getOrigin()); + assertEquals("Name", actualCategory.getName()); + assertEquals("Kind", actualCategory.getKind()); + verify(partyRegistryProxyRestClient).getCategory(any(), any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getCategory(String, String)} + */ + @Test + void testGetCategory2() { + when(partyRegistryProxyRestClient.getCategory(any(), any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, + () -> partyRegistryProxyConnectorImpl.getCategory("Origin", "Code")); + verify(partyRegistryProxyRestClient).getCategory(any(), any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getCategory(String, String)} + */ + @Test + void testGetCategory3() { + ProxyCategoryResponse proxyCategoryResponse = new ProxyCategoryResponse(); + proxyCategoryResponse.setCode("Code"); + proxyCategoryResponse.setKind("Kind"); + proxyCategoryResponse.setName("Name"); + proxyCategoryResponse.setOrigin("Origin"); + when(partyRegistryProxyRestClient.getCategory(any(), any())).thenReturn(proxyCategoryResponse); + CategoryProxyInfo actualCategory = partyRegistryProxyConnectorImpl.getCategory("Origin", "Code"); + assertEquals("Code", actualCategory.getCode()); + assertEquals("Origin", actualCategory.getOrigin()); + assertEquals("Name", actualCategory.getName()); + assertEquals("Kind", actualCategory.getKind()); + verify(partyRegistryProxyRestClient).getCategory(any(), any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getCategory(String, String)} + */ + @Test + void testGetCategory4() { + when(partyRegistryProxyRestClient.getCategory(any(), any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, + () -> partyRegistryProxyConnectorImpl.getCategory("Origin", "Code")); + verify(partyRegistryProxyRestClient).getCategory(any(), any()); + } + + @Test + void testGetCategory5() { + FeignException feignException = mock(FeignException.class); + when(partyRegistryProxyRestClient.getCategory(any(), any())) + .thenThrow(feignException); + assertThrows(MsCoreException.class, () -> partyRegistryProxyConnectorImpl.getCategory("origin", "code")); + verify(partyRegistryProxyRestClient).getCategory(any(), any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal() { + InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); + institutionsByLegalResponse.setBusinesses(new ArrayList<>()); + institutionsByLegalResponse.setLegalTaxId("42"); + institutionsByLegalResponse.setRequestDateTime("2020-03-01"); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenReturn(institutionsByLegalResponse); + assertTrue(partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42").isEmpty()); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal2() { + Institutions institutions = new Institutions(); + institutions.setBusinessName("Business Name"); + institutions.setBusinessTaxId("42"); + + ArrayList institutionsList = new ArrayList<>(); + institutionsList.add(institutions); + + InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); + institutionsByLegalResponse.setBusinesses(institutionsList); + institutionsByLegalResponse.setLegalTaxId("42"); + institutionsByLegalResponse.setRequestDateTime("2020-03-01"); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenReturn(institutionsByLegalResponse); + List actualInstitutionsByLegal = partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42"); + assertEquals(1, actualInstitutionsByLegal.size()); + InstitutionByLegal getResult = actualInstitutionsByLegal.get(0); + assertEquals("Business Name", getResult.getBusinessName()); + assertEquals("42", getResult.getBusinessTaxId()); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal3() { + Institutions institutions = new Institutions(); + institutions.setBusinessName("Business Name"); + institutions.setBusinessTaxId("42"); + + Institutions institutions1 = new Institutions(); + institutions1.setBusinessName("Business Name"); + institutions1.setBusinessTaxId("42"); + + ArrayList institutionsList = new ArrayList<>(); + institutionsList.add(institutions1); + institutionsList.add(institutions); + + InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); + institutionsByLegalResponse.setBusinesses(institutionsList); + institutionsByLegalResponse.setLegalTaxId("42"); + institutionsByLegalResponse.setRequestDateTime("2020-03-01"); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenReturn(institutionsByLegalResponse); + List actualInstitutionsByLegal = partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42"); + assertEquals(2, actualInstitutionsByLegal.size()); + InstitutionByLegal getResult = actualInstitutionsByLegal.get(0); + assertEquals("42", getResult.getBusinessTaxId()); + InstitutionByLegal getResult1 = actualInstitutionsByLegal.get(1); + assertEquals("42", getResult1.getBusinessTaxId()); + assertEquals("Business Name", getResult1.getBusinessName()); + assertEquals("Business Name", getResult.getBusinessName()); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal4() { + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42")); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal5() { + InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); + institutionsByLegalResponse.setBusinesses(new ArrayList<>()); + institutionsByLegalResponse.setLegalTaxId("42"); + institutionsByLegalResponse.setRequestDateTime("2020-03-01"); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenReturn(institutionsByLegalResponse); + assertTrue(partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42").isEmpty()); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal6() { + Institutions institutions = new Institutions(); + institutions.setBusinessName("Business Name"); + institutions.setBusinessTaxId("42"); + + ArrayList institutionsList = new ArrayList<>(); + institutionsList.add(institutions); + + InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); + institutionsByLegalResponse.setBusinesses(institutionsList); + institutionsByLegalResponse.setLegalTaxId("42"); + institutionsByLegalResponse.setRequestDateTime("2020-03-01"); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenReturn(institutionsByLegalResponse); + List actualInstitutionsByLegal = partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42"); + assertEquals(1, actualInstitutionsByLegal.size()); + InstitutionByLegal getResult = actualInstitutionsByLegal.get(0); + assertEquals("Business Name", getResult.getBusinessName()); + assertEquals("42", getResult.getBusinessTaxId()); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal7() { + Institutions institutions = new Institutions(); + institutions.setBusinessName("Business Name"); + institutions.setBusinessTaxId("42"); + + Institutions institutions1 = new Institutions(); + institutions1.setBusinessName("Business Name"); + institutions1.setBusinessTaxId("42"); + + ArrayList institutionsList = new ArrayList<>(); + institutionsList.add(institutions1); + institutionsList.add(institutions); + + InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); + institutionsByLegalResponse.setBusinesses(institutionsList); + institutionsByLegalResponse.setLegalTaxId("42"); + institutionsByLegalResponse.setRequestDateTime("2020-03-01"); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenReturn(institutionsByLegalResponse); + List actualInstitutionsByLegal = partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42"); + assertEquals(2, actualInstitutionsByLegal.size()); + InstitutionByLegal getResult = actualInstitutionsByLegal.get(0); + assertEquals("42", getResult.getBusinessTaxId()); + InstitutionByLegal getResult1 = actualInstitutionsByLegal.get(1); + assertEquals("42", getResult1.getBusinessTaxId()); + assertEquals("Business Name", getResult1.getBusinessName()); + assertEquals("Business Name", getResult.getBusinessName()); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal8() { + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42")); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + @Test + void testGetInstitutionsByLegal9() { + FeignException feignException = mock(FeignException.class); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenThrow(feignException); + assertThrows(MsCoreException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42")); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + @Test + void testGetInstitutionsByLegal10() { + InstitutionsByLegalResponse response = new InstitutionsByLegalResponse(); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())).thenReturn(response); + assertNotNull(partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42")); + } + + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getLegalAddress(String)} + */ + @Test + void testGetLegalAddress() { + NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); + nationalRegistriesProfessionalAddress.setAddress("42 Main St"); + nationalRegistriesProfessionalAddress.setZipCode("21654"); + when(partyRegistryProxyRestClient.getLegalAddress(any())) + .thenReturn(nationalRegistriesProfessionalAddress); + assertSame(nationalRegistriesProfessionalAddress, partyRegistryProxyConnectorImpl.getLegalAddress("42")); + verify(partyRegistryProxyRestClient).getLegalAddress(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getLegalAddress(String)} + */ + @Test + void testGetLegalAddress2() { + when(partyRegistryProxyRestClient.getLegalAddress(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getLegalAddress("id")); + } + + @Test + void testGetLegalAddress3() { + FeignException feignException = mock(FeignException.class); + when(partyRegistryProxyRestClient.getLegalAddress(any())) + .thenThrow(feignException); + assertThrows(MsCoreException.class, () -> partyRegistryProxyConnectorImpl.getLegalAddress("42")); + verify(partyRegistryProxyRestClient).getLegalAddress(any()); + } + + @Test + void testGetInstitutionByIdThrow() { + when(partyRegistryProxyRestClient.getInstitutionById(any())).thenReturn(null); + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionById("id")); + verify(partyRegistryProxyRestClient).getInstitutionById(any()); + } + + + @Test + void getExtByCode() { + GeographicTaxonomiesResponse geographicTaxonomiesResponse = new GeographicTaxonomiesResponse(); + geographicTaxonomiesResponse.setGeotaxId("Code"); + geographicTaxonomiesResponse.setCountry("GB"); + geographicTaxonomiesResponse.setCountryAbbreviation("GB"); + geographicTaxonomiesResponse.setDescription("The characteristics of someone or something"); + geographicTaxonomiesResponse.setEnable(true); + geographicTaxonomiesResponse.setIstatCode(""); + geographicTaxonomiesResponse.setProvinceId("Province"); + geographicTaxonomiesResponse.setProvinceAbbreviation("Province Abbreviation"); + geographicTaxonomiesResponse.setRegionId("us-east-2"); + when(partyRegistryProxyRestClient.getExtByCode(any())).thenReturn(geographicTaxonomiesResponse); + GeographicTaxonomies actualExtByCode = partyRegistryProxyConnectorImpl.getExtByCode("Code"); + assertEquals("Code", actualExtByCode.getGeotaxId()); + assertTrue(actualExtByCode.isEnable()); + assertEquals("The characteristics of someone or something", actualExtByCode.getDescription()); + verify(partyRegistryProxyRestClient).getExtByCode(any()); + } + + @Test + void getExtByCode_notFound() { + when(partyRegistryProxyRestClient.getExtByCode(any())).thenThrow(new ResourceNotFoundException("", "")); + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getExtByCode("Code")); + } + + @Test + void shouldGetAoo() { + when(partyRegistryProxyRestClient.getAooById(anyString())) + .thenReturn(aooResponse); + + AreaOrganizzativaOmogenea aoo = partyRegistryProxyConnectorImpl.getAooById("example"); + assertEquals(aoo.getCodAoo(), aooResponse.getCodAoo()); + assertEquals(aoo.getId(), aooResponse.getId()); + assertEquals(aoo.getOrigin(), aooResponse.getOrigin()); + } + + @Test + void shouldGetUo() { + when(partyRegistryProxyRestClient.getUoById(anyString())) + .thenReturn(uoResponse); + + UnitaOrganizzativa uo = partyRegistryProxyConnectorImpl.getUoById("example"); + assertEquals(uo.getCodiceUniUo(), uoResponse.getCodiceUniUo()); + assertEquals(uo.getId(), uoResponse.getId()); + assertEquals(uo.getOrigin(), uoResponse.getOrigin()); + } + + @Test + void shouldGetSa() { + when(partyRegistryProxyRestClient.getUoById(anyString())) + .thenReturn(uoResponse); + + UnitaOrganizzativa uo = partyRegistryProxyConnectorImpl.getUoById("example"); + assertEquals(uo.getCodiceUniUo(), uoResponse.getCodiceUniUo()); + assertEquals(uo.getId(), uoResponse.getId()); + assertEquals(uo.getOrigin(), uoResponse.getOrigin()); + } + + @Test + void getSAFromAnac() { + //given + String taxId = "taxId"; + when(partyRegistryProxyRestClient.getSaByTaxId(anyString())).thenReturn(pdndResponse); + //when + SaResource result = partyRegistryProxyConnectorImpl.getSAFromAnac(taxId); + //then + checkNotNullFields(result); + verify(partyRegistryProxyRestClient, times(1)).getSaByTaxId(taxId); + } + + @Test + void getSAFromAnacNotFound() { + //given + String taxId = "taxId"; + when(partyRegistryProxyRestClient.getSaByTaxId(anyString())).thenThrow(ResourceNotFoundException.class); + //when + Executable executable = () -> partyRegistryProxyConnectorImpl.getSAFromAnac(taxId); + //then + assertThrows(ResourceNotFoundException.class, executable); + verify(partyRegistryProxyRestClient, times(1)).getSaByTaxId(taxId); + } + + @Test + void getASFromIvass() { + //given + ResponseEntity response = new ResponseEntity<>(asResponse, HttpStatus.FOUND); + String ivassCode = "ivassCode"; + when(partyRegistryProxyRestClient._searchByOriginIdUsingGET(anyString())).thenReturn(response); + //when + ASResource result = partyRegistryProxyConnectorImpl.getASFromIvass(ivassCode); + //then + checkNotNullFields(result); + verify(partyRegistryProxyRestClient, times(1))._searchByOriginIdUsingGET(ivassCode); + } + + @Test + void getASFromIvassNotFound() { + //given + String ivassCode = "ivassCode"; + when(partyRegistryProxyRestClient._searchByOriginIdUsingGET(anyString())).thenReturn(null); + + //when + Executable executable = () -> partyRegistryProxyConnectorImpl.getASFromIvass(ivassCode); + //then + assertThrows(ResourceNotFoundException.class, executable); + verify(partyRegistryProxyRestClient, times(1))._searchByOriginIdUsingGET(ivassCode); + } + + @Test + void shouldThrowResourceNotFoundExceptionWhenIvassCodeNotFound() { + String ivassCode = "12345"; + + when(partyRegistryProxyRestClient._searchByOriginIdUsingGET(ivassCode)).thenReturn(null); + + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getASFromIvass(ivassCode)); + } +} + diff --git a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImplTest.java b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImplTest.java new file mode 100644 index 0000000..a19eff0 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImplTest.java @@ -0,0 +1,56 @@ +package it.pagopa.selfcare.mscore.connector.rest; + +import it.pagopa.selfcare.product.entity.Product; +import it.pagopa.selfcare.product.entity.ProductStatus; +import it.pagopa.selfcare.product.service.ProductService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {ProductConnectorImpl.class}) +@ExtendWith(SpringExtension.class) +class ProductConnectorImplTest { + @Autowired + private ProductConnectorImpl productConnectorImpl; + + @MockBean + private ProductService productService; + + /** + * Method under test: {@link ProductConnectorImpl#getProductById(String)} + */ + @Test + void testGetProductById() { + Product product = dummyProduct(); + when(productService.getProduct(any())).thenReturn(product); + assertSame(product, productConnectorImpl.getProductById("42")); + verify(productService).getProduct(any()); + } + + @Test + void testGetProductValid() { + Product product = dummyProduct(); + when(productService.getProductIsValid(any())).thenReturn(product); + assertSame(product, productConnectorImpl.getProductValidById("42")); + verify(productService).getProductIsValid(any()); + } + + private Product dummyProduct(){ + Product product = new Product(); + product.setContractTemplatePath("Contract Template Path"); + product.setContractTemplateVersion("1.0.2"); + product.setId("42"); + product.setParentId("42"); + product.setRoleMappings(null); + product.setStatus(ProductStatus.ACTIVE); + product.setTitle("Dr"); + return product; + } +} + diff --git a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImplTest.java b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImplTest.java new file mode 100644 index 0000000..aba11a2 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImplTest.java @@ -0,0 +1,85 @@ +package it.pagopa.selfcare.mscore.connector.rest; + +import it.pagopa.selfcare.mscore.connector.rest.client.UserApiRestClient; +import it.pagopa.selfcare.mscore.connector.rest.client.UserInstitutionApiRestClient; +import it.pagopa.selfcare.mscore.connector.rest.mapper.UserMapperClient; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import it.pagopa.selfcare.user.generated.openapi.v1.dto.UpdateDescriptionDto; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.function.Executable; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {UserApiConnectorImpl.class}) +@ExtendWith(SpringExtension.class) +class UserApiConnectorImplTest { + + @Autowired + private UserApiConnectorImpl userApiConnector; + + @MockBean + private UserApiRestClient userApiRestClient; + + @MockBean + private UserInstitutionApiRestClient userInstitutionApiRestClient; + + @MockBean + private UserMapperClient userMapperClient; + + @Test + void getUserEmailsByInstitutionAndProduct(){ + //given + final String institutionId = "institutionId"; + final String productId = "productId"; + ResponseEntity> emails = new ResponseEntity<>(List.of("email"), HttpStatus.OK); + + when(userApiRestClient._usersEmailsGet(anyString(), anyString())).thenReturn(emails); + + //when + List userEmails = userApiConnector.getUserEmails(institutionId, productId); + //then + assertFalse(userEmails.isEmpty()); + verify(userApiRestClient, times(1))._usersEmailsGet(institutionId, productId); + + } + + @Test + void updateUserInstitution(){ + //given + final String institutionId = "institutionId"; + final String description = "description"; + final String rootName = "rootName"; + + UpdateDescriptionDto descriptionDto = new UpdateDescriptionDto(); + descriptionDto.setInstitutionDescription(description); + descriptionDto.setInstitutionRootName(rootName); + + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDescription(description); + institutionUpdate.setParentDescription(rootName); + + when(userMapperClient.toUpdateDescriptionDto(any())).thenReturn(descriptionDto); + + //when + final Executable executable = () -> userApiConnector.updateUserInstitution(institutionId, institutionUpdate); + + //then + Assertions.assertDoesNotThrow(executable); + verify(userInstitutionApiRestClient)._institutionsInstitutionIdPut(institutionId, descriptionDto); + } + + + +} \ No newline at end of file diff --git a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImplTest.java b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImplTest.java new file mode 100644 index 0000000..f10640f --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImplTest.java @@ -0,0 +1,155 @@ +package it.pagopa.selfcare.mscore.connector.rest; + + +import it.pagopa.selfcare.mscore.connector.rest.client.UserRegistryRestClient; +import it.pagopa.selfcare.mscore.connector.rest.mapper.UserMapperClientImpl; +import it.pagopa.selfcare.mscore.model.user.User; +import it.pagopa.selfcare.user_registry.generated.openapi.v1.dto.*; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.Map; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {UserRegistryConnectorImpl.class, UserMapperClientImpl.class}) +@ExtendWith(SpringExtension.class) +class UserRegistryConnectorImplTest { + @Autowired + private UserRegistryConnectorImpl userRegistryConnector; + + @MockBean + private UserRegistryRestClient userRegistryRestClient; + + @Test + void getUserByInternalIdWithCustomFields(){ + UserResource userResource = new UserResource(); + userResource.setFiscalCode("42"); + ResponseEntity userIdResponseEntity = ResponseEntity.ok(userResource); + when(userRegistryRestClient._findByIdUsingGET(any(), any())).thenReturn(userIdResponseEntity); + User user = userRegistryConnector.getUserByInternalIdWithCustomFields("42","workContacts"); + assertEquals(user.getFiscalCode(), userResource.getFiscalCode()); + verify(userRegistryRestClient)._findByIdUsingGET("workContacts", "42"); + + } + + /** + * Method under test: {@link UserRegistryConnectorImpl#getUserByFiscalCode(String)} + */ + @Test + void testGetUserByFiscalCode() { + UserResource userResource = new UserResource(); + userResource.setFiscalCode("42"); + ResponseEntity userIdResponseEntity = ResponseEntity.ok(userResource); + when(userRegistryRestClient._searchUsingPOST(any(), any())).thenReturn(userIdResponseEntity); + User user = userRegistryConnector.getUserByFiscalCode("42"); + assertEquals(user.getFiscalCode(), userResource.getFiscalCode()); + verify(userRegistryRestClient)._searchUsingPOST("fiscalCode,name,familyName,workContacts", UserSearchDto.builder().fiscalCode("42").build()); + } + + @Test + void testGetUserByInternalIdWithFiscalCode() { + UUID id = UUID.randomUUID(); + UserResource userResource = new UserResource(); + userResource.setId(id); + ResponseEntity userIdResponseEntity = ResponseEntity.ok(userResource); + when(userRegistryRestClient._findByIdUsingGET(any(), any())).thenReturn(userIdResponseEntity); + User user = userRegistryConnector.getUserByInternalIdWithFiscalCode(id.toString()); + assertEquals(user.getId(), userResource.getId().toString()); + verify(userRegistryRestClient)._findByIdUsingGET("fiscalCode,name,familyName,workContacts", id.toString()); + } + + @Test + void testPersistUserUsingPatch() { + UUID id = UUID.randomUUID(); + UserId userId = new UserId(); + userId.setId(id); + ResponseEntity userIdResponseEntity = ResponseEntity.ok(userId); + when(userRegistryRestClient._saveUsingPATCH(any())).thenReturn(userIdResponseEntity); + User user = userRegistryConnector.persistUserUsingPatch("name", "familyName", "fiscalCode", "email","institutionId"); + assertEquals(user.getId(), id.toString()); + SaveUserDto saveUserDto = SaveUserDto.builder() + .name(CertifiableFieldResourceOfstring.builder() + .value("name") + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .familyName(CertifiableFieldResourceOfstring.builder() + .value("familyName") + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .fiscalCode("fiscalCode") + .workContacts(Map.of("institutionId", WorkContactResource.builder() + .email(CertifiableFieldResourceOfstring.builder() + .value("email") + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .build())) + .build(); + verify(userRegistryRestClient)._saveUsingPATCH(saveUserDto); + } + + @Test + void testPersistUserUsingPatchWithEmailNull() { + UUID id = UUID.randomUUID(); + UserId userId = new UserId(); + userId.setId(id); + ResponseEntity userIdResponseEntity = ResponseEntity.ok(userId); + when(userRegistryRestClient._saveUsingPATCH(any())).thenReturn(userIdResponseEntity); + User user = userRegistryConnector.persistUserUsingPatch("name", "familyName", "fiscalCode", null,"institutionId"); + assertEquals(user.getId(), id.toString()); + SaveUserDto saveUserDto = SaveUserDto.builder() + .name(CertifiableFieldResourceOfstring.builder() + .value("name") + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .familyName(CertifiableFieldResourceOfstring.builder() + .value("familyName") + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .fiscalCode("fiscalCode") + .build(); + verify(userRegistryRestClient)._saveUsingPATCH(saveUserDto); + } + + @Test + void persistUserWorksContractUsingPatch() { + UUID id = UUID.randomUUID(); + UserId userId = new UserId(); + userId.setId(id); + ResponseEntity userIdResponseEntity = ResponseEntity.ok(userId); + when(userRegistryRestClient._saveUsingPATCH(any())).thenReturn(userIdResponseEntity); + User user = userRegistryConnector.persistUserWorksContractUsingPatch( "fiscalCode", "email","institutionId"); + assertEquals(user.getId(), id.toString()); + SaveUserDto saveUserDto = SaveUserDto.builder() + .fiscalCode("fiscalCode") + .workContacts(Map.of("institutionId", WorkContactResource.builder() + .email(CertifiableFieldResourceOfstring.builder() + .value("email") + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .build())) + .build(); + verify(userRegistryRestClient)._saveUsingPATCH(saveUserDto); + } + + @Test + void testGetUserById(){ + UUID id = UUID.randomUUID(); + UserResource userResource = new UserResource(); + userResource.setId(id); + ResponseEntity userIdResponseEntity = ResponseEntity.ok(userResource); + when(userRegistryRestClient._findByIdUsingGET(any(), any())).thenReturn(userIdResponseEntity); + User user = userRegistryConnector.getUserByInternalId(id.toString()); + assertEquals(user.getId(), userResource.getId().toString()); + verify(userRegistryRestClient)._findByIdUsingGET("name,familyName,workContacts", id.toString()); + } + +} + diff --git a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoderTest.java b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoderTest.java new file mode 100644 index 0000000..0c50989 --- /dev/null +++ b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoderTest.java @@ -0,0 +1,90 @@ +package it.pagopa.selfcare.mscore.connector.rest.decoder; + +import feign.Request; +import feign.Response; +import it.pagopa.selfcare.mscore.exception.BadGatewayException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.function.Executable; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; + +import static feign.Util.UTF_8; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class FeignErrorDecoderTest { + FeignErrorDecoder feignDecoder = new FeignErrorDecoder(); + + private final Map> headers = new LinkedHashMap<>(); + + @Test + void testDecodeToResourceNotFound() { + //given + Response response = Response.builder() + .status(404) + .reason("ResourceNotFound") + .request(Request.create(Request.HttpMethod.GET, "/api", Collections.emptyMap(), null, UTF_8)) + .headers(headers) + .body("hello world", UTF_8) + .build(); + //when + Executable executable = () -> feignDecoder.decode("", response); + //then + assertThrows(ResourceNotFoundException.class, executable); + } + + @ParameterizedTest + @ValueSource(ints = {500,502,509}) + void testDecodeToBadGateway(int status) { + //given + Response response = Response.builder() + .status(status) + .reason("Bad Gateway") + .request(Request.create(Request.HttpMethod.GET, "/api", Collections.emptyMap(), null, UTF_8)) + .headers(headers) + .body("hello world", UTF_8) + .build(); + //when + Executable executable = () -> feignDecoder.decode("", response); + //then + assertThrows(BadGatewayException.class, executable); + } + + @ParameterizedTest + @ValueSource(ints = {504,503,509}) + void testDecodeServiceUnvailable() { + //given + Response response = Response.builder() + .status(504) + .reason("Service Unvailable") + .request(Request.create(Request.HttpMethod.GET, "/api", Collections.emptyMap(), null, UTF_8)) + .headers(headers) + .body("hello world", UTF_8) + .build(); + //when + Executable executable = () -> feignDecoder.decode("", response); + //then + } + + @Test + void testDecodeDefault() { + //given + Response response = Response.builder() + .status(200) + .reason("OK") + .request(Request.create(Request.HttpMethod.GET, "/api", Collections.emptyMap(), null, UTF_8)) + .headers(headers) + .body("hello world", UTF_8) + .build(); + //when + Executable executable = () -> feignDecoder.decode("", response); + //then + assertDoesNotThrow(executable); + } +} diff --git a/apps/institution-ms-new/core/pom.xml b/apps/institution-ms-new/core/pom.xml new file mode 100644 index 0000000..ff21c08 --- /dev/null +++ b/apps/institution-ms-new/core/pom.xml @@ -0,0 +1,88 @@ + + + 4.0.0 + + selc-ms-core + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-core + + + + it.pagopa.selfcare + selc-ms-core-connector-api + + + + + com.openhtmltopdf + openhtmltopdf-core + 1.0.10 + + + + + com.openhtmltopdf + openhtmltopdf-pdfbox + 1.0.10 + + + + com.openhtmltopdf + openhtmltopdf-svg-support + 1.0.10 + + + xalan + serializer + + + xalan + xalan + + + + + + org.springframework.boot + spring-boot-starter-freemarker + + + + + com.openhtmltopdf + openhtmltopdf-slf4j + 1.0.10 + + + org.jsoup + jsoup + 1.15.3 + + + org.apache.commons + commons-text + 1.10.0 + compile + + + + org.springframework.data + spring-data-commons + + + io.github.openfeign + feign-core + + + + software.amazon.awssdk + ses + 2.20.88 + + + + diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStream.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStream.java new file mode 100644 index 0000000..d09fae0 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStream.java @@ -0,0 +1,28 @@ +package it.pagopa.selfcare.mscore.core; + +import com.openhtmltopdf.extend.FSStream; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.util.Objects; + +public class ClassPathStream implements FSStream { + + private final String uri; + + public ClassPathStream(String path) { + this.uri = path; + } + + @Override + public InputStream getStream() { + return this.getClass().getResourceAsStream(uri); + } + + @Override + public Reader getReader() { + return new InputStreamReader(Objects.requireNonNull(this.getClass().getResourceAsStream(uri)), StandardCharsets.UTF_8); + } +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactory.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactory.java new file mode 100644 index 0000000..c3b1ef2 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactory.java @@ -0,0 +1,26 @@ +package it.pagopa.selfcare.mscore.core; + +import com.openhtmltopdf.extend.FSStream; +import com.openhtmltopdf.extend.FSStreamFactory; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import lombok.extern.slf4j.Slf4j; + +import java.net.URI; +import java.net.URISyntaxException; + +import static it.pagopa.selfcare.mscore.constant.GenericError.GENERIC_ERROR; + +@Slf4j +public class ClassPathStreamFactory implements FSStreamFactory { + @Override + public FSStream getUrl(String url) { + URI fullUri; + try { + fullUri = new URI(url); + return new ClassPathStream(fullUri.getPath()); + } catch (URISyntaxException e) { + log.error("URISintaxException in ClassPathStreamFactory: ",e); + throw new InvalidRequestException(GENERIC_ERROR.getMessage(), GENERIC_ERROR.getCode()); + } + } +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ContractService.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ContractService.java new file mode 100644 index 0000000..b698fc4 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ContractService.java @@ -0,0 +1,74 @@ +package it.pagopa.selfcare.mscore.core; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.module.SimpleModule; +import it.pagopa.selfcare.mscore.api.FileStorageConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.model.onboarding.ResourceResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.util.UUID; + +import static it.pagopa.selfcare.mscore.constant.GenericError.UNABLE_TO_DOWNLOAD_FILE; + +@Slf4j +@Service +public class ContractService { + private final FileStorageConnector fileStorageConnector; + private final CoreConfig coreConfig; + private final ObjectMapper mapper; + + public ContractService(FileStorageConnector fileStorageConnector, + CoreConfig coreConfig) { + this.fileStorageConnector = fileStorageConnector; + this.coreConfig = coreConfig; + this.mapper = new ObjectMapper(); + SimpleModule simpleModule = new SimpleModule(); + simpleModule.addSerializer(OffsetDateTime.class, new JsonSerializer<>() { + @Override + public void serialize(OffsetDateTime offsetDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeString(DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(offsetDateTime)); + } + }); + mapper.registerModule(simpleModule); + } + + public ResourceResponse getFile(String path) { + return fileStorageConnector.getFile(path); + } + + public File getLogoFile() { + StringBuilder stringBuilder = new StringBuilder(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + stringBuilder.append("_").append(UUID.randomUUID()).append("_logo"); + try { + Path path = Files.createTempFile(stringBuilder.toString(), ".png"); + Files.write(path, fileStorageConnector.getTemplateFile(coreConfig.getLogoPath()).getBytes(StandardCharsets.UTF_8)); + return path.toFile(); + } catch (IOException e) { + throw new InvalidRequestException(String.format(UNABLE_TO_DOWNLOAD_FILE.getMessage(), coreConfig.getLogoPath()), UNABLE_TO_DOWNLOAD_FILE.getCode()); + } + } + + public String uploadContract(String tokenId, MultipartFile contract) { + return fileStorageConnector.uploadContract(tokenId, contract); + + } + + public void deleteContract(String fileName, String tokenId) { + fileStorageConnector.removeContract(fileName, tokenId); + } +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationService.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationService.java new file mode 100644 index 0000000..304adec --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationService.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.Order; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; +import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; + +import java.util.List; +import java.util.Optional; + +public interface DelegationService { + + Delegation createDelegation(Delegation delegation); + boolean checkIfExistsWithStatus(Delegation delegation, DelegationState status); + List getDelegations(String from, String to, String productId, String search, String taxCode, Optional order, Optional page, Optional size); + Delegation createDelegationFromInstitutionsTaxCode(Delegation delegation); + void deleteDelegationByDelegationId(String delegationId); + DelegationWithPagination getDelegationsV2(GetDelegationParameters delegationParameters); + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java new file mode 100644 index 0000000..69e9b5c --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java @@ -0,0 +1,162 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.DelegationConnector; +import it.pagopa.selfcare.mscore.constant.CustomError; +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.Order; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; +import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Optional; + +import static it.pagopa.selfcare.mscore.constant.CustomError.INSTITUTION_TAX_CODE_NOT_FOUND; +import static it.pagopa.selfcare.mscore.constant.GenericError.*; +@Slf4j +@Service +public class DelegationServiceImpl implements DelegationService { + + private static final int DEFAULT_DELEGATIONS_PAGE_SIZE = 10000; + private final DelegationConnector delegationConnector; + private final MailNotificationService notificationService; + private final InstitutionService institutionService; + + public DelegationServiceImpl(DelegationConnector delegationConnector, + MailNotificationService notificationService, + InstitutionService institutionService) { + this.delegationConnector = delegationConnector; + this.notificationService = notificationService; + this.institutionService = institutionService; + } + + @Override + public Delegation createDelegation(Delegation delegation) { + + setTaxCodesByInstitutionIds(delegation); + + Delegation savedDelegation = checkIfExistsAndSaveDelegation(delegation); + + try { + notificationService.sendMailForDelegation(delegation.getInstitutionFromName(), delegation.getProductId(), delegation.getTo()); + } catch (Exception e) { + log.error(SEND_MAIL_FOR_DELEGATION_ERROR.getMessage() + ":", e.getMessage(), e); + } + return savedDelegation; + } + + private Delegation checkIfExistsAndSaveDelegation(Delegation delegation) { + if(checkIfExistsWithStatus(delegation, DelegationState.ACTIVE)) { + throw new ResourceConflictException(String.format(CustomError.CREATE_DELEGATION_CONFLICT.getMessage()), + CustomError.CREATE_DELEGATION_CONFLICT.getCode()); + } + + Delegation savedDelegation; + try { + if(checkIfExistsWithStatus(delegation, DelegationState.DELETED)){ + savedDelegation = delegationConnector.findAndActivate(delegation.getFrom(), delegation.getTo(), delegation.getProductId()); + } else { + delegation.setCreatedAt(OffsetDateTime.now()); + delegation.setUpdatedAt(OffsetDateTime.now()); + delegation.setStatus(DelegationState.ACTIVE); + savedDelegation = delegationConnector.save(delegation); + } + institutionService.updateInstitutionDelegation(delegation.getTo(), true); + } catch (Exception e) { + throw new MsCoreException(CREATE_DELEGATION_ERROR.getMessage(), CREATE_DELEGATION_ERROR.getCode()); + } + return savedDelegation; + } + + private void setTaxCodesByInstitutionIds(Delegation delegation){ + /* + Retrieve both delegator's and partner's institutions to set taxCodeFrom and taxCodeTo + */ + Institution institutionTo = institutionService.retrieveInstitutionById(delegation.getTo()); + Institution institutionFrom = institutionService.retrieveInstitutionById(delegation.getFrom()); + + delegation.setToTaxCode(institutionTo.getTaxCode()); + delegation.setBrokerType(institutionTo.getInstitutionType()); + + delegation.setFromTaxCode(institutionFrom.getTaxCode()); + delegation.setInstitutionType(institutionFrom.getInstitutionType()); + } + + @Override + public Delegation createDelegationFromInstitutionsTaxCode(Delegation delegation) { + + List institutionsTo = institutionService.getInstitutions(delegation.getToTaxCode(), delegation.getToSubunitCode()); + // TODO: remove filter when getInstitutions API will be fixed. + /* + If we call getInstitutions by empty subunitCode parameter, we have to filter retrieved list for institution + with blank subunitCode field, otherwise we take first element returned by api. + */ + Institution partner = institutionsTo.stream() + .filter(institution -> StringUtils.hasText(delegation.getToSubunitCode()) || !StringUtils.hasText(institution.getSubunitCode())) + .findFirst() + .orElseThrow(() -> new ResourceNotFoundException(String.format(INSTITUTION_TAX_CODE_NOT_FOUND.getMessage(), delegation.getTo()), + INSTITUTION_TAX_CODE_NOT_FOUND.getCode())); + delegation.setTo(partner.getId()); + delegation.setBrokerType(partner.getInstitutionType()); + + // TODO: remove filter when getInstitutions API will be fixed. + /* + If we call getInstitutions by empty subunitCode parameter, we have to filter retrieved list for institution + with blank subunitCode field, otherwise we take first element returned by api. + */ + List institutionsFrom = institutionService.getInstitutions(delegation.getFromTaxCode(), delegation.getFromSubunitCode()); + Institution from = institutionsFrom.stream() + .filter(institution -> StringUtils.hasText(delegation.getFromSubunitCode()) || !StringUtils.hasText(institution.getSubunitCode())) + .findFirst() + .orElseThrow(() -> new ResourceNotFoundException(String.format(INSTITUTION_TAX_CODE_NOT_FOUND.getMessage(), delegation.getTo()), + INSTITUTION_TAX_CODE_NOT_FOUND.getCode())); + delegation.setFrom(from.getId()); + delegation.setInstitutionType(from.getInstitutionType()); + + return checkIfExistsAndSaveDelegation(delegation); + } + + @Override + public void deleteDelegationByDelegationId(String delegationId) { + String institutionId; + try{ + Delegation delegation = delegationConnector.findByIdAndModifyStatus(delegationId, DelegationState.DELETED); + institutionId = delegation.getTo(); + } catch (Exception e) { + throw new MsCoreException(DELETE_DELEGATION_ERROR.getMessage(), DELETE_DELEGATION_ERROR.getCode()); + } + try{ + if(!delegationConnector.checkIfDelegationsAreActive(institutionId)) { + institutionService.updateInstitutionDelegation(institutionId, false); + } + } catch (Exception e) { + delegationConnector.findByIdAndModifyStatus(delegationId, DelegationState.ACTIVE); + throw new MsCoreException(DELETE_DELEGATION_ERROR.getMessage(), DELETE_DELEGATION_ERROR.getCode()); + } + } + + @Override + public boolean checkIfExistsWithStatus(Delegation delegation, DelegationState status) { + return delegationConnector.checkIfExistsWithStatus(delegation, status); + } + + @Override + public List getDelegations(String from, String to, String productId, String search, String taxCode, + Optional order, Optional page, Optional size) { + int pageSize = size.filter(s -> s > 0).filter(s -> s <= DEFAULT_DELEGATIONS_PAGE_SIZE).orElse(DEFAULT_DELEGATIONS_PAGE_SIZE); + return delegationConnector.find(from, to, productId, search, taxCode, order.orElse(Order.NONE), page.orElse(0), pageSize); + } + + @Override + public DelegationWithPagination getDelegationsV2(GetDelegationParameters delegationParameters) { + return delegationConnector.findAndCount(delegationParameters); + } +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalService.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalService.java new file mode 100644 index 0000000..1ae1408 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalService.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.institution.GeographicTaxonomies; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; + +import java.util.List; + +public interface ExternalService { + + Institution getInstitutionByExternalId(String externalId); + + Institution retrieveInstitutionProduct(String externalId, String productId); + + List retrieveInstitutionGeoTaxonomiesByExternalId(String externalId); + + List retrieveInstitutionProductsByExternalId(String externalId, List states); + + List retrieveInstitutionByIds(List ids); +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalServiceImpl.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalServiceImpl.java new file mode 100644 index 0000000..0e74f49 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalServiceImpl.java @@ -0,0 +1,49 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.institution.GeographicTaxonomies; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@Slf4j +public class ExternalServiceImpl implements ExternalService { + + private final InstitutionService institutionService; + + public ExternalServiceImpl(InstitutionService institutionService) { + this.institutionService = institutionService; + } + + @Override + public Institution getInstitutionByExternalId(String externalId) { + return institutionService.retrieveInstitutionByExternalId(externalId); + } + + @Override + public Institution retrieveInstitutionProduct(String externalId, String productId) { + return institutionService.retrieveInstitutionProduct(externalId, productId); + } + + @Override + public List retrieveInstitutionProductsByExternalId(String externalId, List states) { + Institution institution = institutionService.retrieveInstitutionByExternalId(externalId); + return institutionService.retrieveInstitutionProducts(institution, states); + } + + @Override + public List retrieveInstitutionByIds(List ids) { + return institutionService.retrieveInstitutionByIds(ids); + } + + @Override + public List retrieveInstitutionGeoTaxonomiesByExternalId(String externalId) { + log.info("Retrieving geographic taxonomies for institution having externalId {}", externalId); + Institution institution = institutionService.retrieveInstitutionByExternalId(externalId); + return institutionService.retrieveInstitutionGeoTaxonomies(institution); + } +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionService.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionService.java new file mode 100644 index 0000000..7a1e1fa --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionService.java @@ -0,0 +1,70 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.commons.base.security.SelfCareUser; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.SearchMode; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import it.pagopa.selfcare.mscore.model.institution.*; + +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Optional; + +public interface InstitutionService { + + List getOnboardingInstitutionByProductId(String institutionId, String productId); + + Institution retrieveInstitutionById(String id); + + Institution retrieveInstitutionByExternalId(String institutionExternalId); + + List getInstitutions(String taxCode, String subunitCode, String origin, String originId); + + List getInstitutions(String taxCode, String subunitCode); + + Institution createInstitutionFromIpa(String taxCode, InstitutionPaSubunitType subunitType, String subunitCode, List geographicTaxonomies, InstitutionType institutionType); + + Institution createInstitutionFromPda(Institution institution, String injectionInstitutionType); + + Institution createInstitutionByExternalId(String externalId); + + Institution createInstitutionFromAnac(Institution institution); + + Institution createInstitutionFromIvass(Institution institution); + + Institution createInstitutionFromInfocamere(Institution institution); + + Institution createPgInstitution(String taxId, String description, boolean existsInRegistry, SelfCareUser selfCareUser); + + Institution createInstitution(Institution institution); + + List retrieveInstitutionProducts(Institution institution, List states); + + Institution retrieveInstitutionProduct(String externalId, String productId); + + void retrieveInstitutionsWithFilter(String externalId, String productId, List validRelationshipStates); + + List retrieveInstitutionGeoTaxonomies(Institution institution); + + Optional retrieveGeoTaxonomies(String code); + + List findInstitutionsByGeoTaxonomies(String geoTaxonomies, SearchMode searchMode); + + List findInstitutionsByProductId(String productId); + + List retrieveInstitutionByIds(List ids); + + Institution updateInstitution(String institutionId, InstitutionUpdate institutionUpdate, String userId); + + void updateInstitutionDelegation(String institutionId, boolean delegation); + + List retrieveInstitutionByExternalIds(List validInstitutionList, String productId); + + void updateCreatedAt(String institutionId, String productId, OffsetDateTime createdAt, OffsetDateTime activatedAt); + + List getInstitutionsByProductId(String productId, Integer page, Integer size); + + List getInstitutionBrokers(String productId, InstitutionType type); + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImpl.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImpl.java new file mode 100644 index 0000000..bb24f19 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImpl.java @@ -0,0 +1,404 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.commons.base.security.SelfCareUser; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.api.DelegationConnector; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.api.UserApiConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.constant.*; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; +import it.pagopa.selfcare.mscore.core.strategy.CreateInstitutionStrategy; +import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.*; +import lombok.extern.slf4j.Slf4j; +import org.owasp.encoder.Encode; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + +import java.time.OffsetDateTime; +import java.util.*; + +import static it.pagopa.selfcare.mscore.constant.GenericError.*; + +@Slf4j +@Service +public class InstitutionServiceImpl implements InstitutionService { + + private final InstitutionConnector institutionConnector; + private final UserApiConnector userApiConnector; + private final DelegationConnector delegationConnector; + private final PartyRegistryProxyConnector partyRegistryProxyConnector; + private final CoreConfig coreConfig; + private final InstitutionMapper institutionMapper; + private final CreateInstitutionStrategyFactory createInstitutionStrategyFactory; + + public InstitutionServiceImpl(PartyRegistryProxyConnector partyRegistryProxyConnector, + InstitutionConnector institutionConnector, + UserApiConnector userApiConnector, DelegationConnector delegationConnector, + CoreConfig coreConfig, + InstitutionMapper institutionMapper, + CreateInstitutionStrategyFactory createInstitutionStrategyFactory) { + this.partyRegistryProxyConnector = partyRegistryProxyConnector; + this.institutionConnector = institutionConnector; + this.userApiConnector = userApiConnector; + this.delegationConnector = delegationConnector; + this.coreConfig = coreConfig; + this.institutionMapper = institutionMapper; + this.createInstitutionStrategyFactory = createInstitutionStrategyFactory; + } + + @Override + public List getOnboardingInstitutionByProductId(String institutionId, String productId) { + return institutionConnector.findOnboardingByIdAndProductId(institutionId, productId); + } + + @Override + public List getInstitutionsByProductId(String productId, Integer page, Integer size) { + return institutionConnector.findInstitutionsByProductId(productId, page, size); + } + + @Override + public Institution retrieveInstitutionById(String id) { + return institutionConnector.findById(id); + } + + @Override + public Institution retrieveInstitutionByExternalId(String institutionExternalId) { + Optional opt = institutionConnector.findByExternalId(institutionExternalId); + if (opt.isEmpty()) { + throw new ResourceNotFoundException(String.format(CustomError.INSTITUTION_NOT_FOUND.getMessage(), "UNDEFINED", institutionExternalId), CustomError.INSTITUTION_NOT_FOUND.getCode()); + } + log.info("founded institution having externalId: {}", institutionExternalId); + return opt.get(); + } + + @Override + public void retrieveInstitutionsWithFilter(String externalId, String productId, List validRelationshipStates) { + List list = institutionConnector.findWithFilter(externalId, productId, validRelationshipStates); + if (list == null || list.isEmpty()) { + throw new ResourceNotFoundException(String.format(CustomError.INSTITUTION_NOT_ONBOARDED.getMessage(), externalId, productId), + CustomError.INSTITUTION_NOT_ONBOARDED.getCode()); + } + } + + @Override + public List getInstitutions(String taxCode, String subunitCode, String origin, String originId) { + if (StringUtils.hasText(taxCode) && (StringUtils.hasText(origin) || StringUtils.hasText(originId))) { + throw new InvalidRequestException(GenericError.GET_INSTITUTIONS_REQUEST_ERROR.getMessage(), GenericError.GET_INSTITUTIONS_REQUEST_ERROR.getCode()); + } + + if (StringUtils.hasText(taxCode)) { + return institutionConnector.findByTaxCodeAndSubunitCode(taxCode, subunitCode); + } else { + return institutionConnector.findByOriginAndOriginId(origin, originId); + } + + } + + @Override + public Institution createInstitutionFromIpa(String taxCode, InstitutionPaSubunitType subunitType, String subunitCode, List geographicTaxonomies, InstitutionType institutionType) { + CreateInstitutionStrategy institutionStrategy = createInstitutionStrategyFactory.createInstitutionStrategyIpa(); + return institutionStrategy.createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(taxCode) + .subunitCode(subunitCode) + .subunitType(subunitType) + .geographicTaxonomies(geographicTaxonomies) + .institutionType(institutionType) + .build()); + } + + @Override + public List getInstitutions(String taxCode, String subunitCode) { + return institutionConnector.findByTaxCodeAndSubunitCode(taxCode, subunitCode); + } + + @Override + public Institution createInstitutionFromPda(Institution institution, String injectionInstitutionType) { + CreateInstitutionStrategy institutionStrategy = createInstitutionStrategyFactory.createInstitutionStrategyPda(injectionInstitutionType); + return institutionStrategy.createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .description(institution.getDescription()) + .build()); + } + + @Override + public Institution createInstitution(Institution institution) { + return createInstitutionStrategyFactory.createInstitutionStrategy(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .subunitCode(institution.getSubunitCode()) + .subunitType(Optional.ofNullable(institution.getSubunitType()) + .map(InstitutionPaSubunitType::valueOf) + .orElse(null)) + .build()); + } + + @Override + public Institution createInstitutionFromAnac(Institution institution) { + return createInstitutionStrategyFactory.createInstitutionStrategyAnac(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .subunitCode(institution.getSubunitCode()) + .subunitType(Optional.ofNullable(institution.getSubunitType()) + .map(InstitutionPaSubunitType::valueOf) + .orElse(null)) + .build()); + } + + @Override + public Institution createInstitutionFromIvass(Institution institution) { + return createInstitutionStrategyFactory.createInstitutionStrategyIvass(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .ivassCode(institution.getOriginId()) + .build()); + } + + @Override + public Institution createInstitutionFromInfocamere(Institution institution) { + CreateInstitutionStrategy institutionStrategy = createInstitutionStrategyFactory.createInstitutionStrategyInfocamere(institution); + return institutionStrategy.createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .description(institution.getDescription()) + .build()); + } + + @Override + public Institution createInstitutionByExternalId(String externalId) { + checkIfAlreadyExists(externalId); + + InstitutionProxyInfo institutionProxyInfo = partyRegistryProxyConnector.getInstitutionById(externalId); + + log.debug("institution from proxy: {}", institutionProxyInfo); + log.info("getInstitution {}", institutionProxyInfo.getId()); + CategoryProxyInfo categoryProxyInfo = partyRegistryProxyConnector.getCategory(institutionProxyInfo.getOrigin(), institutionProxyInfo.getCategory()); + log.info("category from proxy: {}", categoryProxyInfo); + + Institution newInstitution = institutionMapper.fromInstitutionProxyInfo(institutionProxyInfo); + + newInstitution.setExternalId(externalId); + newInstitution.setOrigin(Origin.IPA.getValue()); + newInstitution.setCreatedAt(OffsetDateTime.now()); + + Attributes attributes = new Attributes(); + attributes.setOrigin(categoryProxyInfo.getOrigin()); + attributes.setCode(categoryProxyInfo.getCode()); + attributes.setDescription(categoryProxyInfo.getName()); + newInstitution.setAttributes(List.of(attributes)); + try { + return institutionConnector.save(newInstitution); + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + } + + @Override + public Institution createPgInstitution(String taxId, String description, boolean existsInRegistry, SelfCareUser selfCareUser) { + return institutionConnector.findByExternalId(taxId) + .orElseGet(() -> createNewInstitution(taxId, description, existsInRegistry, selfCareUser)); + + } + + private Institution createNewInstitution(String taxId, String description, boolean existsInRegistry, SelfCareUser selfCareUser) { + Institution newInstitution = new Institution(); + newInstitution.setExternalId(taxId); + newInstitution.setDescription(description); + newInstitution.setInstitutionType(InstitutionType.PG); + newInstitution.setTaxCode(taxId); + newInstitution.setCreatedAt(OffsetDateTime.now()); + newInstitution.setOriginId(taxId); + + if (existsInRegistry) { + if (coreConfig.isInfoCamereEnable()) { + List institutionByLegal = partyRegistryProxyConnector.getInstitutionsByLegal(selfCareUser.getFiscalCode()); + institutionByLegal.stream() + .filter(i -> taxId.equalsIgnoreCase(i.getBusinessTaxId())) + .findFirst() + .ifPresentOrElse(institution -> newInstitution.setDescription(institution.getBusinessName()), + () -> { + throw new InvalidRequestException(String.format(CustomError.INSTITUTION_LEGAL_NOT_FOUND.getMessage(), taxId), CustomError.INSTITUTION_LEGAL_NOT_FOUND.getCode()); + }); + + NationalRegistriesProfessionalAddress professionalAddress = partyRegistryProxyConnector.getLegalAddress(taxId); + if (professionalAddress != null) { + newInstitution.setAddress(professionalAddress.getAddress()); + newInstitution.setZipCode(professionalAddress.getZipCode()); + } + } + newInstitution.setOrigin(Origin.INFOCAMERE.getValue()); + } else { + newInstitution.setOrigin(Origin.ADE.getValue()); + } + return institutionConnector.save(newInstitution); + } + + @Override + public List retrieveInstitutionProducts(Institution institution, List states) { + List onboardingList; + if (institution.getOnboarding() != null) { + if (states != null && !states.isEmpty()) { + onboardingList = institution.getOnboarding().stream() + .filter(onboarding -> states.contains(onboarding.getStatus())) + .toList(); + } else { + onboardingList = institution.getOnboarding(); + } + if (!onboardingList.isEmpty()) { + return onboardingList; + } + } + throw new ResourceNotFoundException(String.format(CustomError.PRODUCTS_NOT_FOUND_ERROR.getMessage(), institution.getId()), CustomError.PRODUCTS_NOT_FOUND_ERROR.getCode()); + } + + @Override + public Institution retrieveInstitutionProduct(String externalId, String productId) { + return institutionConnector.findByExternalIdAndProductId(externalId, productId); + } + + @Override + public List retrieveInstitutionGeoTaxonomies(Institution institution) { + log.info("Retrieving geographic taxonomies for institution {}", institution.getId()); + if (institution.getGeographicTaxonomies() != null) { + List geographicTaxonomies = institution.getGeographicTaxonomies().stream() + .map(institutionGeoTax -> retrieveGeoTaxonomies(institutionGeoTax.getCode()) + .orElseThrow(() -> new MsCoreException(String.format(CustomError.GEO_TAXONOMY_CODE_NOT_FOUND.getMessage(), institutionGeoTax.getCode()), CustomError.GEO_TAXONOMY_CODE_NOT_FOUND.getCode()))) + .toList(); + if (!geographicTaxonomies.isEmpty()) { + return geographicTaxonomies; + } + } + throw new MsCoreException(String.format("GeographicTaonomies for institution %s not found", institution.getId()), "0000"); + } + + @Override + public Optional retrieveGeoTaxonomies(String code) { + try { + return Optional.of(partyRegistryProxyConnector.getExtByCode(code)); + } catch (ResourceNotFoundException e) { + return Optional.empty(); + } + } + + @Override + public Institution updateInstitution(String institutionId, InstitutionUpdate institutionUpdate, String userId) { + Institution outdatedInstitution = institutionConnector.findById(institutionId); + + List geographicTaxonomies = retrieveGeographicTaxonomies(institutionUpdate); + Institution updatedInstitution = institutionConnector.findAndUpdate(institutionId, null, geographicTaxonomies, institutionUpdate); + + if(Objects.nonNull(institutionUpdate.getDescription())) { + try { + delegationConnector.updateDelegation(updatedInstitution); + } catch (Exception e) { + log.error(UPDATE_DELEGATION_ERROR.getMessage() + ":", e.getMessage(), e); + rollbackInstitution(outdatedInstitution); + throw new MsCoreException(PUT_INSTITUTION_ERROR.getMessage(), PUT_INSTITUTION_ERROR.getCode()); + } + try { + userApiConnector.updateUserInstitution(institutionId, institutionUpdate); + } catch (Exception e) { + log.error(String.format(UPDATE_USER_INSTITUTION_ERROR.getMessage(), Encode.forJava(institutionId)) + ":", e.getMessage(), e); + rollbackInstitution(outdatedInstitution); + delegationConnector.updateDelegation(outdatedInstitution); + throw new MsCoreException(PUT_INSTITUTION_ERROR.getMessage(), PUT_INSTITUTION_ERROR.getCode()); + } + } + return updatedInstitution; + } + + private void rollbackInstitution(Institution institution) { + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDescription(institution.getDescription()); + institutionUpdate.setParentDescription(institution.getParentDescription()); + institutionConnector.findAndUpdate(institution.getId(), null, null, institutionUpdate); + } + + + @Override + public void updateInstitutionDelegation(String institutionId, boolean delegation) { + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDelegation(delegation); + institutionConnector.findAndUpdate(institutionId, null, null, institutionUpdate); + } + + private List retrieveGeographicTaxonomies(InstitutionUpdate institutionUpdate) { + if (institutionUpdate.getGeographicTaxonomies() != null) { + return institutionUpdate.getGeographicTaxonomies() + .stream() + .map(geoTaxonomy -> retrieveGeoTaxonomies(geoTaxonomy.getCode()) + .orElseThrow(() -> new MsCoreException(String.format(CustomError.GEO_TAXONOMY_CODE_NOT_FOUND.getMessage(), geoTaxonomy.getCode()), geoTaxonomy.getCode()))) + .map(geo -> new InstitutionGeographicTaxonomies(geo.getGeotaxId(), geo.getDescription())) + .toList(); + } + return Collections.emptyList(); + } + + @Override + public List retrieveInstitutionByExternalIds(List validInstitutionList, String productId) { + List institutionsExternalId = institutionConnector.findByExternalIdsAndProductId(validInstitutionList, productId); + validInstitutionList.removeIf(validInstitution -> institutionsExternalId.contains(validInstitution.getId())); + return validInstitutionList; + } + + @Override + public List findInstitutionsByGeoTaxonomies(String geoTaxonomies, SearchMode searchMode) { + List geo = Arrays.stream(geoTaxonomies.split(",")) + .filter(StringUtils::hasText).toList(); + validateGeoTaxonomies(geo, searchMode); + return institutionConnector.findByGeotaxonomies(geo, searchMode); + } + + private void validateGeoTaxonomies(List geoTaxonomies, SearchMode searchMode) { + if (geoTaxonomies.isEmpty() && searchMode != SearchMode.EXACT) { + throw new InvalidRequestException("Empty geographic taxonomies filter is valid only when searchMode is exact", "0000"); + } + } + + @Override + public List findInstitutionsByProductId(String productId) { + List institutions = institutionConnector.findByProductId(productId); + if (institutions.isEmpty()) { + throw new ResourceNotFoundException(String.format("Institutions with productId %s not found", productId), "0000"); + } + return institutions; + } + + @Override + public List retrieveInstitutionByIds(List ids) { + return institutionConnector.findAllByIds(ids); + } + + @Override + public void updateCreatedAt(String institutionId, String productId, OffsetDateTime createdAt, OffsetDateTime activatedAt) { + log.trace("updateCreatedAt start"); + log.debug("updateCreatedAt institutionId = {}, productId = {}, createdAt = {}, activatedAt = {}", institutionId, productId, createdAt, activatedAt); + Assert.hasText(institutionId, "An institution ID is required."); + Assert.hasText(productId, "A product ID is required."); + Assert.notNull(createdAt, "A createdAt date is required."); + + institutionConnector.updateOnboardedProductCreatedAt(institutionId, productId, createdAt); + + log.trace("updateCreatedAt end"); + } + + public void checkIfAlreadyExists(String externalId) { + log.info("START - check institution {} already exists", externalId); + Optional opt = institutionConnector.findByExternalId(externalId); + if (opt.isPresent()) { + throw new ResourceConflictException(String.format(CustomError.CREATE_INSTITUTION_CONFLICT.getMessage(), externalId), CustomError.CREATE_INSTITUTION_CONFLICT.getCode()); + } + } + + @Override + public List getInstitutionBrokers(String productId, InstitutionType type) { + return institutionConnector.findBrokers(productId, type); + } +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationService.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationService.java new file mode 100644 index 0000000..bb5bd08 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationService.java @@ -0,0 +1,7 @@ +package it.pagopa.selfcare.mscore.core; + +public interface MailNotificationService { + + void sendMailForDelegation(String institutionName, String productId, String partnerId); + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImpl.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImpl.java new file mode 100644 index 0000000..e56534d --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImpl.java @@ -0,0 +1,76 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.EmailConnector; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.ProductConnector; +import it.pagopa.selfcare.mscore.api.UserApiConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.core.util.MailParametersMapper; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.product.entity.Product; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@Slf4j +@Service +@RequiredArgsConstructor +public class MailNotificationServiceImpl implements MailNotificationService { + + private static final String MAIL_PARAMETER_LOG = "mailParameters: {}"; + private static final String DESTINATION_MAIL_LOG = "destinationMails: {}"; + private final InstitutionConnector institutionConnector; + private final UserApiConnector userApiConnector; + private final ProductConnector productConnector; + private final UserNotificationService userNotificationService; + private final EmailConnector emailConnector; + private final MailParametersMapper mailParametersMapper; + private final CoreConfig coreConfig; + + public void sendMailForDelegation(String institutionName, String productId, String partnerId) { + try { + Map mailParameters; + Product product = productConnector.getProductById(productId); + Institution partnerInstitution = institutionConnector.findById(partnerId); + if(Objects.isNull(product) || Objects.isNull(partnerInstitution)) { + log.error("create-delegation-email-notification :: Impossible to send email. Error: partner institution or product is null"); + return; + } + mailParameters = mailParametersMapper.getDelegationNotificationParameter(institutionName, product.getTitle(), partnerInstitution.getDescription()); + log.debug(MAIL_PARAMETER_LOG, mailParameters); + List userDestinationMail = getUsersEmailByInstitutionAndProductV2(partnerInstitution.getId(), productId); + log.info(DESTINATION_MAIL_LOG, userDestinationMail); + userNotificationService.sendDelegationUserNotification(userDestinationMail, mailParametersMapper.getDelegationUserNotificationPath(), product.getTitle(), mailParameters); + log.info("create-delegation-user-email-notification :: Email successful sent"); + + if (coreConfig.isEnableSendDelegationMail()) { + List institutionDestinationMail = getDestinationMails(partnerInstitution); + log.info(DESTINATION_MAIL_LOG, institutionDestinationMail); + emailConnector.sendMail(mailParametersMapper.getDelegationNotificationPath(), institutionDestinationMail, null, product.getTitle(), mailParameters, null); + log.info("create-delegation-institution-email-notification :: Email successful sent"); + } + } catch (Exception e) { + log.error("create-delegation-email-notification :: Impossible to send email. Error: {}", e.getMessage(), e); + } + } + + private List getDestinationMails(Institution institution) { + if (coreConfig.isSendEmailToInstitution()) { + return List.of(institution.getDigitalAddress()); + } else { + return List.of(coreConfig.getInstitutionAlternativeEmail()); + } + } + + + private List getUsersEmailByInstitutionAndProductV2(String institutionId, String productId){ + if (coreConfig.isSendEmailToInstitution()) { + return userApiConnector.getUserEmails(institutionId, productId); + } + return List.of(coreConfig.getInstitutionAlternativeEmail()); + } +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingDao.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingDao.java new file mode 100644 index 0000000..21b1705 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingDao.java @@ -0,0 +1,27 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.user.UserToOnboard; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@Slf4j +public class OnboardingDao { + + private final InstitutionConnector institutionConnector; + + public OnboardingDao(InstitutionConnector institutionConnector) { + this.institutionConnector = institutionConnector; + } + + + + public void rollbackPersistOnboarding(String institutionId, Onboarding onboarding) { + institutionConnector.findAndRemoveOnboarding(institutionId, onboarding); + log.debug("rollback persistOnboarding"); + } +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingService.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingService.java new file mode 100644 index 0000000..5cd32a2 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingService.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; + +public interface OnboardingService { + + void verifyOnboardingInfo(String externalId, String productId); + + void verifyOnboardingInfoSubunit(String taxCode, String subunitCode, String productId); + + void verifyOnboardingInfoByFilters(VerifyOnboardingFilters filters); + + Institution persistOnboarding(String institutionId, String productId, Onboarding onboarding, StringBuilder httpStatus); + + void deleteOnboardedInstitution(String institutionId, String productId); +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java new file mode 100644 index 0000000..91e636f --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java @@ -0,0 +1,167 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PecNotificationConnector; +import it.pagopa.selfcare.mscore.constant.CustomError; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.core.util.UtilEnumList; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; +import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; +import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; + +import static it.pagopa.selfcare.mscore.constant.GenericError.*; + +@Slf4j +@Service +public class OnboardingServiceImpl implements OnboardingService { + private final OnboardingDao onboardingDao; + private final InstitutionService institutionService; + private final InstitutionConnector institutionConnector; + private final PecNotificationConnector pecNotificationConnector; + private Integer sendingFrequencyPecNotification; + private String epochDatePecNotification; + private LocalDate currentDate = LocalDate.now(); + + public OnboardingServiceImpl(OnboardingDao onboardingDao, + InstitutionService institutionService, + InstitutionConnector institutionConnector, + PecNotificationConnector pecNotificationConnector, + @Value("${mscore.sending-frequency-pec-notification}") Integer sendingFrequencyPecNotification, + @Value("${mscore.epoch-date-pec-notification}") String epochDatePecNotification) { + + this.onboardingDao = onboardingDao; + this.institutionService = institutionService; + this.institutionConnector = institutionConnector; + this.pecNotificationConnector = pecNotificationConnector; + this.sendingFrequencyPecNotification = sendingFrequencyPecNotification; + this.epochDatePecNotification = epochDatePecNotification; + } + + @Override + public void verifyOnboardingInfo(String externalId, String productId) { + institutionService.retrieveInstitutionsWithFilter(externalId, productId, UtilEnumList.VALID_RELATIONSHIP_STATES); + } + + @Override + public void verifyOnboardingInfoSubunit(String taxCode, String subunitCode, String productId) { + Boolean existsOnboardingValid = institutionConnector.existsByTaxCodeAndSubunitCodeAndProductAndStatusList(taxCode, + subunitCode, Optional.ofNullable(productId), UtilEnumList.VALID_RELATIONSHIP_STATES); + if (Boolean.FALSE.equals(existsOnboardingValid)) { + throw new ResourceNotFoundException(String.format(CustomError.INSTITUTION_NOT_ONBOARDED.getMessage(), taxCode, productId), + CustomError.INSTITUTION_NOT_ONBOARDED.getCode()); + } + } + + @Override + public void verifyOnboardingInfoByFilters(VerifyOnboardingFilters filters) { + filters.setValidRelationshipStates(UtilEnumList.VALID_RELATIONSHIP_STATES); + + Boolean existsOnboardingValid = institutionConnector.existsOnboardingByFilters(filters); + if (Boolean.FALSE.equals(existsOnboardingValid)) { + throw new ResourceNotFoundException(CustomError.INSTITUTION_NOT_ONBOARDED_BY_FILTERS.getMessage(), + CustomError.INSTITUTION_NOT_ONBOARDED_BY_FILTERS.getCode()); + } + } + + public void insertPecNotification(String institutionId, String productId, String digitalAddress) { + + PecNotification pecNotification = new PecNotification(); + pecNotification.setId(UUID.randomUUID().toString()); + pecNotification.setCreatedAt(OffsetDateTime.now()); + pecNotification.setProductId(productId); + pecNotification.setInstitutionId(institutionId); + pecNotification.setModuleDayOfTheEpoch(calculateModuleDayOfTheEpoch()); + pecNotification.setDigitalAddress(digitalAddress); + + if (!pecNotificationConnector.insertPecNotification(pecNotification)){ + throw new InvalidRequestException(INVALID_INSERT_PEC_NOTIFICATION_ERROR.getMessage(), INVALID_INSERT_PEC_NOTIFICATION_ERROR.getCode()); + } + + } + + public int calculateModuleDayOfTheEpoch() { + LocalDate epochStart = LocalDate.parse(this.epochDatePecNotification); + long daysDiff = ChronoUnit.DAYS.between(epochStart, this.currentDate); + int moduleDayOfTheEpoch = (int) (daysDiff % this.sendingFrequencyPecNotification); + return moduleDayOfTheEpoch; + } + + @Override + public Institution persistOnboarding(String institutionId, String + productId, Onboarding onboarding, StringBuilder httpStatus) { + + Institution institution = persistAndGetInstitution(institutionId, productId, onboarding, httpStatus); + this.insertPecNotification(institutionId, productId, institution.getDigitalAddress()); + return institution; + } + + private Institution persistAndGetInstitution(String institutionId, String productId, Onboarding onboarding, StringBuilder httpStatus) { + log.trace("persistForUpdate start"); + log.debug("persistForUpdate institutionId = {}, productId = {}", institutionId, productId); + onboarding.setStatus(RelationshipState.ACTIVE); + onboarding.setProductId(productId); + + if (Objects.isNull(onboarding.getCreatedAt())) { + onboarding.setCreatedAt(OffsetDateTime.now()); + } + + //Verify if onboarding exists, in case onboarding must fail + final Institution institution = institutionConnector.findById(institutionId); + + if (Optional.ofNullable(institution.getOnboarding()).flatMap(onboardings -> onboardings.stream() + .filter(item -> item.getProductId().equals(productId) && UtilEnumList.VALID_RELATIONSHIP_STATES.contains(item.getStatus())) + .findAny()).isPresent()) { + + httpStatus.append(HttpStatus.OK.value()); + return institution; + } + + try { + //If not exists, persist a new onboarding for product + final Institution institutionUpdated = institutionConnector.findAndUpdate(institutionId, onboarding, List.of(), null); + + log.trace("persistForUpdate end"); + httpStatus.append(HttpStatus.CREATED.value()); + return institutionUpdated; + } catch (Exception e) { + onboardingDao.rollbackPersistOnboarding(institutionId, onboarding); + log.info("rollbackPersistOnboarding completed for institution {} and product {}", institutionId, productId); + throw new InvalidRequestException(ONBOARDING_OPERATION_ERROR.getMessage() + " " + e.getMessage(), + ONBOARDING_OPERATION_ERROR.getCode()); + } + } + + @Override + public void deleteOnboardedInstitution(String institutionId, String productId) { + + log.trace("persist logic delete Onboarding - start"); + institutionConnector.findAndDeleteOnboarding(institutionId, productId); + log.trace("persist logic delete Onboarding - end"); + + log.trace("persist delete PecNotification - start"); + boolean isDeleted = pecNotificationConnector.findAndDeletePecNotification(institutionId, productId); + if (!isDeleted) { + throw new InvalidRequestException(DELETE_NOTIFICATION_OPERATION_ERROR.getMessage(), + ONBOARDING_OPERATION_ERROR.getCode()); + } + log.trace("persist delete PecNotification - end"); + + } + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationService.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationService.java new file mode 100644 index 0000000..a556224 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationService.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.core; + +import java.util.List; +import java.util.Map; + +public interface UserNotificationService { + + void sendDelegationUserNotification(List to, String templateName, String productName, Map mailParameters); + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImpl.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImpl.java new file mode 100644 index 0000000..13c212e --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImpl.java @@ -0,0 +1,70 @@ +package it.pagopa.selfcare.mscore.core; + +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.api.FileStorageConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.model.onboarding.MailTemplate; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.text.StringSubstitutor; +import org.springframework.mail.MailPreparationException; +import org.springframework.stereotype.Service; +import software.amazon.awssdk.services.ses.SesClient; +import software.amazon.awssdk.services.ses.model.*; + +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +@RequiredArgsConstructor +public class UserNotificationServiceImpl implements UserNotificationService { + + + private final CoreConfig coreConfig; + private final SesClient sesClient; + private final FileStorageConnector fileStorageConnector; + private final ObjectMapper mapper; + + @Override + public void sendDelegationUserNotification(List to, String templateName, String productName, Map mailParameters) { + try { + String template = fileStorageConnector.getTemplateFile(templateName); + MailTemplate mailTemplate = mapper.readValue(template, MailTemplate.class); + String html = StringSubstitutor.replace(mailTemplate.getBody(), mailParameters); + + Destination destination = Destination.builder() + .toAddresses(to) + .build(); + + Content content = Content.builder() + .data(html) + .build(); + + Content sub = Content.builder() + .data(productName + ": " + mailTemplate.getSubject()) + .build(); + + Body body = Body.builder() + .html(content) + .build(); + + Message msg = Message.builder() + .subject(sub) + .body(body) + .build(); + + SendEmailRequest emailRequest = SendEmailRequest.builder() + .destination(destination) + .message(msg) + .source(coreConfig.getSenderMail()) + .build(); + + sesClient.sendEmail(emailRequest); + } catch (Exception e) { + log.error("Error sending mail to: {} for product: {}", String.join(",", to), productName); + throw new MailPreparationException(e); + } + } + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/CloudTemplateLoader.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/CloudTemplateLoader.java new file mode 100644 index 0000000..3756d12 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/CloudTemplateLoader.java @@ -0,0 +1,28 @@ +package it.pagopa.selfcare.mscore.core.config; + +import freemarker.cache.URLTemplateLoader; +import lombok.extern.slf4j.Slf4j; + +import java.net.MalformedURLException; +import java.net.URISyntaxException; +import java.net.URL; + +@Slf4j +class CloudTemplateLoader extends URLTemplateLoader { + private final URL root; + + public CloudTemplateLoader(URL root) { + super(); + this.root = root; + } + + @Override + protected URL getURL(String template) { + try { + return root.toURI().resolve(template).toURL(); + } catch (MalformedURLException | URISyntaxException e) { + log.error(e.getMessage(), e); + } + return null; + } +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/FreeMarkerConfig.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/FreeMarkerConfig.java new file mode 100644 index 0000000..e57541d --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/FreeMarkerConfig.java @@ -0,0 +1,71 @@ +package it.pagopa.selfcare.mscore.core.config; + +import freemarker.template.TemplateException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; +import org.springframework.aop.interceptor.SimpleAsyncUncaughtExceptionHandler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration; +import org.springframework.boot.task.TaskExecutorBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.scheduling.annotation.AsyncConfigurer; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.security.task.DelegatingSecurityContextAsyncTaskExecutor; + +import java.net.URL; +import java.util.Properties; + +@Slf4j +@Configuration +@PropertySource("classpath:config/azure-storage-config.properties") +@EnableAsync +@EnableAutoConfiguration(exclude = FreeMarkerAutoConfiguration.class) +class FreeMarkerConfig implements AsyncConfigurer { + + private final URL rootTemplateUrl; + + + @Autowired + public FreeMarkerConfig(@Value("${blob-storage.checkout-template-container}") URL rootTemplateUrl) { + log.trace("Initializing {}", FreeMarkerConfig.class.getSimpleName()); + this.rootTemplateUrl = rootTemplateUrl; + } + + + @Bean + public freemarker.template.Configuration customFreeMarkerConfiguration() throws TemplateException { + Properties settings = new Properties(); + settings.put("recognize_standard_file_extensions", "true"); + settings.setProperty("localized_lookup", "false"); + freemarker.template.Configuration configuration = new freemarker.template.Configuration(freemarker.template.Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS); + configuration.setTemplateLoader(new CloudTemplateLoader(rootTemplateUrl)); + configuration.setSettings(settings); + return configuration; + } + + + @Bean + public SimpleAsyncUncaughtExceptionHandler simpleAsyncUncaughtExceptionHandler() { + return new SimpleAsyncUncaughtExceptionHandler(); + } + + + @Override + public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { + return simpleAsyncUncaughtExceptionHandler(); + } + + + @Bean + public DelegatingSecurityContextAsyncTaskExecutor taskExecutor(TaskExecutorBuilder taskExecutorBuilder) { + final ThreadPoolTaskExecutor delegate = taskExecutorBuilder.build(); + delegate.initialize(); + return new DelegatingSecurityContextAsyncTaskExecutor(delegate); + } + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MdcTaskDecorator.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MdcTaskDecorator.java new file mode 100644 index 0000000..26e8320 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MdcTaskDecorator.java @@ -0,0 +1,32 @@ +package it.pagopa.selfcare.mscore.core.config; + +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; +import org.springframework.core.task.TaskDecorator; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Slf4j +@Component +public class MdcTaskDecorator implements TaskDecorator { + + public MdcTaskDecorator() { + log.trace("Initializing {}", MdcTaskDecorator.class.getSimpleName()); + } + + + @Override + public Runnable decorate(Runnable runnable) { + Map contextMap = MDC.getCopyOfContextMap(); + return () -> { + try { + MDC.setContextMap(contextMap); + runnable.run(); + } finally { + MDC.clear(); + } + }; + } + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MsCoreConfig.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MsCoreConfig.java new file mode 100644 index 0000000..0481a4d --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MsCoreConfig.java @@ -0,0 +1,44 @@ +package it.pagopa.selfcare.mscore.core.config; + +import it.pagopa.selfcare.azurestorage.AzureBlobClient; +import it.pagopa.selfcare.azurestorage.AzureBlobClientDefault; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.product.service.ProductService; +import it.pagopa.selfcare.product.service.ProductServiceCacheable; +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; +import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.ses.SesClient; + +@Configuration +@RequiredArgsConstructor +public class MsCoreConfig { + + private final CoreConfig config; + + @Bean + public ProductService productService(){ + AzureBlobClient azureBlobClient = new AzureBlobClientDefault(config.getBlobStorage().getConnectionStringProduct(), config.getBlobStorage().getContainerProduct()); + try{ + return new ProductServiceCacheable(azureBlobClient, config.getBlobStorage().getFilepathProduct()); + } catch(IllegalArgumentException e){ + throw new IllegalArgumentException("Found an issue when trying to serialize product json string!!"); + } + } + + @Bean + public SesClient sesClient() { + + StaticCredentialsProvider staticCredentials = StaticCredentialsProvider + .create(AwsBasicCredentials.create(config.getAwsSesSecretId(), config.getAwsSesSecretKey())); + + return SesClient.builder() + .region(Region.of(config.getAwsSesRegion())) + .credentialsProvider(staticCredentials) + .build(); + } + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/InstitutionMapper.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/InstitutionMapper.java new file mode 100644 index 0000000..0cae269 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/InstitutionMapper.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.core.mapper; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.InstitutionProxyInfo; +import it.pagopa.selfcare.mscore.model.institution.NationalRegistriesProfessionalAddress; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@Mapper(componentModel = "spring") +public interface InstitutionMapper { + + @Mapping(target = "id", ignore = true) + @Mapping(target = "origin", ignore = true) + Institution fromInstitutionProxyInfo(InstitutionProxyInfo proxyInfo); + + Institution fromProfessionalAddress(NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress); +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/TokenMapper.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/TokenMapper.java new file mode 100644 index 0000000..495c7ba --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/TokenMapper.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.core.mapper; + +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.onboarding.Token; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@Mapper(componentModel = "spring") +public interface TokenMapper { + + @Mapping(target = "id" , source = "onboarding.tokenId") + @Mapping(target = "institutionId" , source = "institutionId") + @Mapping(target = "productId" , source = "productId") + @Mapping(target = "createdAt" , source = "onboarding.createdAt") + @Mapping(target = "updatedAt" , source = "onboarding.createdAt") + @Mapping(target = "status" , source = "onboarding.status") + @Mapping(target = "contractSigned" , source = "onboarding.contract") + Token toToken(Onboarding onboarding, String institutionId, String productId); + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategy.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategy.java new file mode 100644 index 0000000..f937ff7 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategy.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.model.institution.Institution; + +import java.util.Objects; + +public interface CreateInstitutionStrategy { + + String TYPE_MAIL_PEC = "Pec"; + + default String getExternalId(CreateInstitutionStrategyInput strategyInput) { + return Objects.isNull(strategyInput.getSubunitCode()) + ? strategyInput.getTaxCode() + : String.format("%s_%s", strategyInput.getTaxCode(), strategyInput.getSubunitCode()); + } + + Institution createInstitution(CreateInstitutionStrategyInput strategyInput); + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyAnac.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyAnac.java new file mode 100644 index 0000000..735eaba --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyAnac.java @@ -0,0 +1,59 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.SaResource; +import lombok.extern.slf4j.Slf4j; + +import java.time.OffsetDateTime; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; + +@Slf4j +public class CreateInstitutionStrategyAnac extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { + private final PartyRegistryProxyConnector partyRegistryProxyConnector; + + private Institution institution; + + public CreateInstitutionStrategyAnac(PartyRegistryProxyConnector partyRegistryProxyConnector, + InstitutionConnector institutionConnector) { + super(institutionConnector); + this.partyRegistryProxyConnector = partyRegistryProxyConnector; + } + + public void setInstitution(Institution institution) { + this.institution = institution; + } + + @Override + public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { + + checkIfAlreadyExistsByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), strategyInput.getSubunitCode()); + + SaResource saResource = partyRegistryProxyConnector.getSAFromAnac(strategyInput.getTaxCode()); + + institution = addFieldsToInstitution(saResource); + try { + return institutionConnector.save(institution); + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + } + + private Institution addFieldsToInstitution(SaResource saResource) { + + institution.setExternalId(institution.getTaxCode()); + institution.setOrigin(Origin.ANAC.getValue()); + institution.setOriginId(saResource.getTaxCode()); + institution.setCreatedAt(OffsetDateTime.now()); + institution.setDigitalAddress(saResource.getDigitalAddress()); + institution.setDescription(saResource.getDescription()); + + return institution; + } + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyCommon.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyCommon.java new file mode 100644 index 0000000..efbf858 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyCommon.java @@ -0,0 +1,38 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.constant.CustomError; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +import static it.pagopa.selfcare.mscore.constant.CustomError.CREATE_INSTITUTION_ORIGIN_CONFLICT; + +@Slf4j +@Component +public class CreateInstitutionStrategyCommon { + protected final InstitutionConnector institutionConnector; + + public CreateInstitutionStrategyCommon(InstitutionConnector institutionConnector) { + this.institutionConnector = institutionConnector; + } + + protected void checkIfAlreadyExistsByTaxCodeAndSubunitCode(String taxCode, String subunitCode) { + List institutions = institutionConnector.findByTaxCodeAndSubunitCode(taxCode, subunitCode); + if (!institutions.isEmpty()) + throw new ResourceConflictException(String + .format(CustomError.CREATE_INSTITUTION_IPA_CONFLICT.getMessage(), taxCode, subunitCode), + CustomError.CREATE_INSTITUTION_CONFLICT.getCode()); + } + + protected void checkIfAlreadyExistByOriginAndOriginId(String origin, String originId) { + List institutions = institutionConnector.findByOriginAndOriginId(origin, originId); + if (!institutions.isEmpty()) + throw new ResourceConflictException(String.format( + CREATE_INSTITUTION_ORIGIN_CONFLICT.getMessage(), origin, originId), + CREATE_INSTITUTION_ORIGIN_CONFLICT.getCode()); + } +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyInfocamere.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyInfocamere.java new file mode 100644 index 0000000..655e9b7 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyInfocamere.java @@ -0,0 +1,95 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.NationalRegistriesProfessionalAddress; +import it.pagopa.selfcare.mscore.utils.MaskDataUtils; +import lombok.extern.slf4j.Slf4j; +import org.owasp.encoder.Encode; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; + +import java.time.OffsetDateTime; +import java.util.List; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; +import static it.pagopa.selfcare.mscore.constant.GenericError.INSTITUTION_INFOCAMERE_NOTFOUND; + +@Slf4j +@Component +public class CreateInstitutionStrategyInfocamere extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { + + private final PartyRegistryProxyConnector partyRegistryProxyConnector; + + private Institution institution; + + public CreateInstitutionStrategyInfocamere(PartyRegistryProxyConnector partyRegistryProxyConnector, + InstitutionConnector institutionConnector) { + super(institutionConnector); + this.partyRegistryProxyConnector = partyRegistryProxyConnector; + } + + + @Override + public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { + Institution toSavedOrUpdate; + List institutions = institutionConnector.findByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), null); + if (institutions.isEmpty()) { + //Institution does not exists, it will be created + try { + NationalRegistriesProfessionalAddress professionalAddress = partyRegistryProxyConnector.getLegalAddress(strategyInput.getTaxCode()); + fillInstitutionFromInfocamereData(strategyInput.getTaxCode(), strategyInput.getDescription(), professionalAddress); + } catch (MsCoreException ex) { + if (ex.getCode().equalsIgnoreCase(String.valueOf(HttpStatus.NOT_FOUND.value()))) { + log.warn(String.format(INSTITUTION_INFOCAMERE_NOTFOUND.getMessage(), Encode.forJava(MaskDataUtils.maskString(strategyInput.getTaxCode())))); + fillInstitutionRawData(strategyInput); + } else { + throw ex; + } + } catch (ResourceNotFoundException ex) { + log.warn(String.format(INSTITUTION_INFOCAMERE_NOTFOUND.getMessage(), Encode.forJava(MaskDataUtils.maskString(strategyInput.getTaxCode())))); + fillInstitutionRawData(strategyInput); + } + + toSavedOrUpdate = institution; + } else { + //Institution exists but description could be updated + toSavedOrUpdate = institutions.get(0); + toSavedOrUpdate.setDescription(strategyInput.getDescription()); + toSavedOrUpdate.setUpdatedAt(OffsetDateTime.now()); + } + + try { + return institutionConnector.save(toSavedOrUpdate); + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + } + + private void fillInstitutionRawData(CreateInstitutionStrategyInput strategyInput) { + institution.setExternalId(getExternalId(strategyInput)); + institution.setOrigin(Origin.ADE.getValue()); + institution.setOriginId(strategyInput.getTaxCode()); + institution.setCreatedAt(OffsetDateTime.now()); + } + + private void fillInstitutionFromInfocamereData(String taxCode, String description, NationalRegistriesProfessionalAddress professionalAddress) { + institution.setAddress(professionalAddress.getAddress()); + institution.setZipCode(professionalAddress.getZipCode()); + institution.setTaxCode(taxCode); + institution.setDescription(description); + institution.setExternalId(taxCode); + institution.setOrigin(Origin.INFOCAMERE.getValue()); + institution.setOriginId(taxCode); + institution.setCreatedAt(OffsetDateTime.now()); + } + + public void setInstitution(Institution institution) { + this.institution = institution; + } +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIpa.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIpa.java new file mode 100644 index 0000000..974f58e --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIpa.java @@ -0,0 +1,200 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; +import it.pagopa.selfcare.mscore.model.institution.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; + +@Slf4j +@Component +public class CreateInstitutionStrategyIpa extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { + + private final PartyRegistryProxyConnector partyRegistryProxyConnector; + static final String DESCRIPTION_TO_REPLACE_REGEX = " - (COMUNE|PROVINCIA)"; + private final InstitutionMapper institutionMapper; + + public CreateInstitutionStrategyIpa(PartyRegistryProxyConnector partyRegistryProxyConnector, + InstitutionConnector institutionConnector, + InstitutionMapper institutionMapper) { + super(institutionConnector); + this.partyRegistryProxyConnector = partyRegistryProxyConnector; + this.institutionMapper = institutionMapper; + } + + + @Override + public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { + + checkIfAlreadyExistsByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), strategyInput.getSubunitCode()); + + final InstitutionPaSubunitType subunitType = strategyInput.getSubunitType(); + final InstitutionProxyInfo institutionProxyInfo = partyRegistryProxyConnector.getInstitutionById(strategyInput.getTaxCode()); + final CategoryProxyInfo categoryProxyInfo = partyRegistryProxyConnector.getCategory(institutionProxyInfo.getOrigin(), institutionProxyInfo.getCategory()); + + Institution institution; + if (InstitutionPaSubunitType.AOO.equals(subunitType)) { + Institution institutionEC = getOrSaveInstitutionEc(strategyInput, institutionProxyInfo, categoryProxyInfo); + institution = mappingToInstitutionIPAAoo(strategyInput, institutionEC.getId(), institutionProxyInfo, categoryProxyInfo); + } else if (InstitutionPaSubunitType.UO.equals(subunitType)) { + Institution institutionEC = getOrSaveInstitutionEc(strategyInput, institutionProxyInfo, categoryProxyInfo); + institution = mappingToInstitutionIPAUo(strategyInput, institutionEC.getId(), institutionProxyInfo, categoryProxyInfo); + } else { + log.info("createInstitution :: unsupported subunitType {}", subunitType); + institution = getInstitutionEC(strategyInput.getTaxCode(), institutionProxyInfo, categoryProxyInfo, strategyInput.getInstitutionType()); + } + + institution.setGeographicTaxonomies(strategyInput.getGeographicTaxonomies()); + + try { + return institutionConnector.save(institution); + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + } + + private Institution getOrSaveInstitutionEc(CreateInstitutionStrategyInput strategyInput, + InstitutionProxyInfo institutionProxyInfo, + CategoryProxyInfo categoryProxyInfo) { + try { + Optional opt = institutionConnector.findByExternalId(strategyInput.getTaxCode()); + if (opt.isEmpty()) { + Institution institutionEC = getInstitutionEC(strategyInput.getTaxCode(), institutionProxyInfo, categoryProxyInfo, InstitutionType.PA); + return institutionConnector.save(institutionEC); + } else { + return opt.get(); + } + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + } + + private Institution getInstitutionEC(String taxCode, InstitutionProxyInfo institutionProxyInfo, CategoryProxyInfo categoryProxyInfo, InstitutionType institutionType) { + + Institution newInstitution = institutionMapper.fromInstitutionProxyInfo(institutionProxyInfo); + GeographicTaxonomies geotax = partyRegistryProxyConnector.getExtByCode(institutionProxyInfo.getIstatCode()); + + newInstitution.setExternalId(taxCode); + newInstitution.setInstitutionType(Objects.requireNonNullElse(institutionType, InstitutionType.PA)); + newInstitution.setOrigin(Origin.IPA.getValue()); + newInstitution.setCreatedAt(OffsetDateTime.now()); + newInstitution.setCity(Optional.ofNullable(geotax.getDescription()) + .map(s -> s.replaceAll(DESCRIPTION_TO_REPLACE_REGEX, "")) + .orElse(null)); + newInstitution.setCounty(geotax.getProvinceAbbreviation()); + newInstitution.setCountry(geotax.getCountryAbbreviation()); + + Attributes attributes = new Attributes(); + attributes.setOrigin(categoryProxyInfo.getOrigin()); + attributes.setCode(categoryProxyInfo.getCode()); + attributes.setDescription(categoryProxyInfo.getName()); + newInstitution.setAttributes(List.of(attributes)); + + return newInstitution; + } + + + private Institution mappingToInstitutionIPAAoo(CreateInstitutionStrategyInput strategyInput, + String rootParentInstitutionId, + InstitutionProxyInfo institutionProxyInfo, + CategoryProxyInfo categoryProxyInfo) { + + AreaOrganizzativaOmogenea areaOrganizzativaOmogenea = partyRegistryProxyConnector.getAooById(strategyInput.getSubunitCode()); + GeographicTaxonomies geotax = partyRegistryProxyConnector.getExtByCode(areaOrganizzativaOmogenea.getCodiceComuneISTAT()); + Institution newInstitution = new Institution(); + newInstitution.setInstitutionType(InstitutionType.PA); + newInstitution.setOriginId(areaOrganizzativaOmogenea.getId()); + newInstitution.setDescription(areaOrganizzativaOmogenea.getDenominazioneAoo()); + newInstitution.setDigitalAddress(TYPE_MAIL_PEC.equals(areaOrganizzativaOmogenea.getTipoMail1()) + ? areaOrganizzativaOmogenea.getMail1() : institutionProxyInfo.getDigitalAddress()); + newInstitution.setAddress(areaOrganizzativaOmogenea.getIndirizzo()); + newInstitution.setZipCode(areaOrganizzativaOmogenea.getCAP()); + newInstitution.setTaxCode(areaOrganizzativaOmogenea.getCodiceFiscaleEnte()); + newInstitution.setSubunitCode(strategyInput.getSubunitCode()); + newInstitution.setSubunitType(InstitutionPaSubunitType.AOO.name()); + newInstitution.setParentDescription(institutionProxyInfo.getDescription()); + newInstitution.setRootParentId(rootParentInstitutionId); + newInstitution.setExternalId(getExternalId(strategyInput)); + newInstitution.setOrigin(Optional.ofNullable(areaOrganizzativaOmogenea.getOrigin()) + .map(Origin::name) + .orElse(null)); + newInstitution.setCreatedAt(OffsetDateTime.now()); + newInstitution.setCounty(geotax.getProvinceAbbreviation()); + newInstitution.setCountry(geotax.getCountryAbbreviation()); + newInstitution.setCity(Optional.ofNullable(geotax.getDescription()) + .map(s -> s.replaceAll(DESCRIPTION_TO_REPLACE_REGEX, "")) + .orElse(null)); + newInstitution.setIstatCode(areaOrganizzativaOmogenea.getCodiceComuneISTAT()); + Attributes attributes = new Attributes(); + attributes.setOrigin(categoryProxyInfo.getOrigin()); + attributes.setCode(categoryProxyInfo.getCode()); + attributes.setDescription(categoryProxyInfo.getName()); + newInstitution.setAttributes(List.of(attributes)); + + return newInstitution; + } + + private Institution mappingToInstitutionIPAUo(CreateInstitutionStrategyInput strategyInput, + String rootParentInstitutionId, + InstitutionProxyInfo institutionProxyInfo, + CategoryProxyInfo categoryProxyInfo) { + + UnitaOrganizzativa unitaOrganizzativa = partyRegistryProxyConnector.getUoById(strategyInput.getSubunitCode()); + GeographicTaxonomies geotax = partyRegistryProxyConnector.getExtByCode(unitaOrganizzativa.getCodiceComuneISTAT()); + Institution newInstitution = new Institution(); + newInstitution.setInstitutionType(InstitutionType.PA); + newInstitution.setOriginId(unitaOrganizzativa.getId()); + newInstitution.setDescription(unitaOrganizzativa.getDescrizioneUo()); + newInstitution.setDigitalAddress(TYPE_MAIL_PEC.equals(unitaOrganizzativa.getTipoMail1()) + ? unitaOrganizzativa.getMail1() : institutionProxyInfo.getDigitalAddress()); + newInstitution.setAddress(unitaOrganizzativa.getIndirizzo()); + newInstitution.setZipCode(unitaOrganizzativa.getCAP()); + newInstitution.setTaxCode(unitaOrganizzativa.getCodiceFiscaleEnte()); + newInstitution.setSubunitCode(strategyInput.getSubunitCode()); + newInstitution.setSubunitType(InstitutionPaSubunitType.UO.name()); + newInstitution.setParentDescription(institutionProxyInfo.getDescription()); + newInstitution.setRootParentId(rootParentInstitutionId); + newInstitution.setCity(Optional.ofNullable(geotax.getDescription()) + .map(s -> s.replaceAll(DESCRIPTION_TO_REPLACE_REGEX, "")) + .orElse(null)); + newInstitution.setCounty(geotax.getProvinceAbbreviation()); + newInstitution.setCountry(geotax.getCountryAbbreviation()); + newInstitution.setIstatCode(unitaOrganizzativa.getCodiceComuneISTAT()); + if (StringUtils.isNotBlank(unitaOrganizzativa.getCodiceUniAoo())) { + PaAttributes paAttributes = new PaAttributes(); + paAttributes.setAooParentCode(unitaOrganizzativa.getCodiceUniAoo()); + newInstitution.setPaAttributes(paAttributes); + } + + newInstitution.setExternalId(getExternalId(strategyInput)); + newInstitution.setOrigin(Optional.ofNullable(unitaOrganizzativa.getOrigin()) + .map(Origin::name) + .orElse(null)); + newInstitution.setCreatedAt(OffsetDateTime.now()); + + Attributes attributes = new Attributes(); + attributes.setOrigin(categoryProxyInfo.getOrigin()); + attributes.setCode(categoryProxyInfo.getCode()); + attributes.setDescription(categoryProxyInfo.getName()); + newInstitution.setAttributes(List.of(attributes)); + + return newInstitution; + } + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIvass.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIvass.java new file mode 100644 index 0000000..565d6da --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIvass.java @@ -0,0 +1,58 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.model.institution.ASResource; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.extern.slf4j.Slf4j; + +import java.time.OffsetDateTime; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; + +@Slf4j +public class CreateInstitutionStrategyIvass extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { + private final PartyRegistryProxyConnector partyRegistryProxyConnector; + + private Institution institution; + + public CreateInstitutionStrategyIvass(PartyRegistryProxyConnector partyRegistryProxyConnector, + InstitutionConnector institutionConnector) { + super(institutionConnector); + this.partyRegistryProxyConnector = partyRegistryProxyConnector; + } + + public void setInstitution(Institution institution) { + this.institution = institution; + } + + @Override + public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { + checkIfAlreadyExistByOriginAndOriginId(Origin.IVASS.name(), strategyInput.getIvassCode()); + + ASResource asResource = partyRegistryProxyConnector.getASFromIvass(strategyInput.getIvassCode()); + + institution = addFieldsToInstitution(asResource); + try { + return institutionConnector.save(institution); + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + } + + private Institution addFieldsToInstitution(ASResource asResource) { + institution.setTaxCode(asResource.getTaxCode()); + institution.setExternalId(asResource.getOriginId()); + institution.setOrigin(Origin.IVASS.getValue()); + institution.setOriginId(asResource.getOriginId()); + institution.setCreatedAt(OffsetDateTime.now()); + institution.setDigitalAddress(asResource.getDigitalAddress()); + institution.setDescription(asResource.getDescription()); + + return institution; + } + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPda.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPda.java new file mode 100644 index 0000000..ffeb97f --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPda.java @@ -0,0 +1,136 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.constant.CustomError; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.utils.MaskDataUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; + +import java.time.OffsetDateTime; +import java.util.List; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; + +@Slf4j +@Component +public class CreateInstitutionStrategyPda extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { + + private final PartyRegistryProxyConnector partyRegistryProxyConnector; + + private final InstitutionMapper institutionMapper; + + private String injectionInstitutionType; + + public CreateInstitutionStrategyPda(PartyRegistryProxyConnector partyRegistryProxyConnector, + InstitutionConnector institutionConnector, + InstitutionMapper institutionMapper) { + super(institutionConnector); + this.partyRegistryProxyConnector = partyRegistryProxyConnector; + this.institutionMapper = institutionMapper; + } + + + @Override + public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { + checkIfAlreadyExistsByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), strategyInput.getSubunitCode()); + + Institution institution; + try { + institution = searchInstitutionOnIpa(strategyInput.getTaxCode()); + } catch (ResourceNotFoundException ex) { + institution = searchInstitutionOnInfocamere(strategyInput); + } + + try { + return institutionConnector.save(institution); + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + } + + private Institution searchInstitutionOnIpa(String taxCode) { + InstitutionProxyInfo institutionProxyInfo; + Institution institution = null; + try { + institutionProxyInfo = partyRegistryProxyConnector.getInstitutionById(taxCode); + if (institutionProxyInfo != null) { + final CategoryProxyInfo categoryProxyInfo = partyRegistryProxyConnector.getCategory(institutionProxyInfo.getOrigin(), institutionProxyInfo.getCategory()); + institution = mapInstitutionFromIpa(taxCode, institutionProxyInfo, categoryProxyInfo); + } + } catch (MsCoreException ex) { + if(ex.getCode().equalsIgnoreCase(String.valueOf(HttpStatus.NOT_FOUND.value()))) { + log.debug("Institution with taxCode: {} not found in IPA", MaskDataUtils.maskString(taxCode)); + throw new ResourceNotFoundException(CustomError.INSTITUTION_NOT_FOUND_IN_REGISTRY.getMessage(), CustomError.INSTITUTION_NOT_FOUND_IN_REGISTRY.getCode()); + } + + throw ex; + } catch (ResourceNotFoundException ex) { + log.debug("Institution with taxCode: {} not found in IPA", MaskDataUtils.maskString(taxCode)); + throw ex; + } + + return institution; + } + + private Institution searchInstitutionOnInfocamere(CreateInstitutionStrategyInput strategyInput){ + try { + NationalRegistriesProfessionalAddress professionalAddress = partyRegistryProxyConnector.getLegalAddress(strategyInput.getTaxCode()); + return getInstitutionFromInfocamere(strategyInput.getTaxCode(), strategyInput.getDescription(), professionalAddress); + } catch (MsCoreException ex) { + if(ex.getCode().equalsIgnoreCase(String.valueOf(HttpStatus.NOT_FOUND.value()))) { + log.warn("Institution with taxCode {} not found in registry INFOCAMERE", MaskDataUtils.maskString(strategyInput.getTaxCode())); + throw new ResourceNotFoundException(String.format(CustomError.INSTITUTION_NOT_FOUND_IN_REGISTRY.getMessage(), strategyInput.getDescription()), CustomError.INSTITUTION_NOT_FOUND_IN_REGISTRY.getCode()); + } + throw ex; + } + } + + private Institution getInstitutionFromInfocamere(String taxCode, String description, NationalRegistriesProfessionalAddress professionalAddress) { + Institution newInstitution = institutionMapper.fromProfessionalAddress(professionalAddress); + newInstitution.setTaxCode(taxCode); + newInstitution.setDescription(description); + newInstitution.setExternalId(taxCode); + newInstitution.setOrigin(Origin.INFOCAMERE.getValue()); + if(injectionInstitutionType.equalsIgnoreCase(InstitutionType.PT.name())) { + newInstitution.setInstitutionType(InstitutionType.PT); + }else{ + newInstitution.setInstitutionType(InstitutionType.PG); + } + newInstitution.setOriginId(taxCode); + newInstitution.setCreatedAt(OffsetDateTime.now()); + newInstitution.setImported(true); + + return newInstitution; + } + + private Institution mapInstitutionFromIpa(String taxCode, InstitutionProxyInfo institutionProxyInfo, CategoryProxyInfo categoryProxyInfo) { + + Institution newInstitution = institutionMapper.fromInstitutionProxyInfo(institutionProxyInfo); + newInstitution.setExternalId(taxCode); + newInstitution.setOrigin(Origin.IPA.getValue()); + newInstitution.setCreatedAt(OffsetDateTime.now()); + newInstitution.setImported(true); + newInstitution.setInstitutionType(InstitutionType.PA); + + Attributes attributes = new Attributes(); + attributes.setOrigin(categoryProxyInfo.getOrigin()); + attributes.setCode(categoryProxyInfo.getCode()); + attributes.setDescription(categoryProxyInfo.getName()); + newInstitution.setAttributes(List.of(attributes)); + + return newInstitution; + } + + public void setInjectionInstitutionType(String injectionInstitutionType) { + this.injectionInstitutionType = injectionInstitutionType; + } +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyRaw.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyRaw.java new file mode 100644 index 0000000..d59ab73 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyRaw.java @@ -0,0 +1,44 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import org.springframework.stereotype.Component; + +import java.time.OffsetDateTime; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; + +@Component +public class CreateInstitutionStrategyRaw extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { + + private Institution institution; + + public CreateInstitutionStrategyRaw(InstitutionConnector institutionConnector) { + super(institutionConnector); + } + + @Override + public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { + + checkIfAlreadyExistsByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), strategyInput.getSubunitCode()); + + institution.setExternalId(getExternalId(strategyInput)); + institution.setOrigin(Origin.SELC.getValue()); + institution.setOriginId("SELC_" + institution.getExternalId()); + institution.setCreatedAt(OffsetDateTime.now()); + + try { + return institutionConnector.save(institution); + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + + } + + public void setInstitution(Institution institution) { + this.institution = institution; + } +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/factory/CreateInstitutionStrategyFactory.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/factory/CreateInstitutionStrategyFactory.java new file mode 100644 index 0000000..1481f00 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/factory/CreateInstitutionStrategyFactory.java @@ -0,0 +1,60 @@ +package it.pagopa.selfcare.mscore.core.strategy.factory; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; +import it.pagopa.selfcare.mscore.core.strategy.*; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +public class CreateInstitutionStrategyFactory { + + private final InstitutionConnector institutionConnector; + private final PartyRegistryProxyConnector partyRegistryProxyConnector; + private final InstitutionMapper institutionMapper; + + public CreateInstitutionStrategyFactory(InstitutionConnector institutionConnector, + PartyRegistryProxyConnector partyRegistryProxyConnector, + InstitutionMapper institutionMapper) { + this.institutionConnector = institutionConnector; + this.partyRegistryProxyConnector = partyRegistryProxyConnector; + this.institutionMapper = institutionMapper; + } + + public CreateInstitutionStrategy createInstitutionStrategy(Institution institution) { + CreateInstitutionStrategyRaw strategy = new CreateInstitutionStrategyRaw(institutionConnector); + strategy.setInstitution(institution); + return strategy; + } + + public CreateInstitutionStrategy createInstitutionStrategyIpa() { + return new CreateInstitutionStrategyIpa(partyRegistryProxyConnector, institutionConnector, institutionMapper); + } + + public CreateInstitutionStrategy createInstitutionStrategyAnac(Institution institution) { + CreateInstitutionStrategyAnac strategy = new CreateInstitutionStrategyAnac(partyRegistryProxyConnector, institutionConnector); + strategy.setInstitution(institution); + return strategy; + } + public CreateInstitutionStrategy createInstitutionStrategyIvass(Institution institution) { + CreateInstitutionStrategyIvass strategy = new CreateInstitutionStrategyIvass(partyRegistryProxyConnector, institutionConnector); + strategy.setInstitution(institution); + return strategy; + } + + public CreateInstitutionStrategy createInstitutionStrategyPda(String injectionInstitutionType) { + CreateInstitutionStrategyPda strategy = new CreateInstitutionStrategyPda(partyRegistryProxyConnector, institutionConnector, institutionMapper); + strategy.setInjectionInstitutionType(injectionInstitutionType); + return strategy; + } + + public CreateInstitutionStrategy createInstitutionStrategyInfocamere(Institution institution) { + CreateInstitutionStrategyInfocamere strategy = new CreateInstitutionStrategyInfocamere(partyRegistryProxyConnector, institutionConnector); + strategy.setInstitution(institution); + return strategy; + } + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/input/CreateInstitutionStrategyInput.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/input/CreateInstitutionStrategyInput.java new file mode 100644 index 0000000..2232202 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/input/CreateInstitutionStrategyInput.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.core.strategy.input; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Builder +@Data +public class CreateInstitutionStrategyInput { + + private String taxCode; + private String ivassCode; + private String description; + private InstitutionPaSubunitType subunitType; + private List geographicTaxonomies; + private String subunitCode; + private InstitutionType institutionType; +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/Constants.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/Constants.java new file mode 100644 index 0000000..bd6c2a5 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/Constants.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.core.util; + +public class Constants { + public static final String PRICING_PLAN_PREMIUM_CHECKBOX = "pricingPlanPremiumCheckbox"; + public static final String PRICING_PLAN_PREMIUM = "pricingPlanPremium"; + public static final String PRICING_PLAN_PREMIUM_BASE = "pricingPlanPremiumBase"; + public static final String PRICING_PLAN_PREMIUM_BASE_CHECKBOX = "pricingPlanPremiumBaseCheckbox"; + public static final String PRICING_PLAN_BASE_CHECKBOX = "pricingPlanBaseCheckbox"; + public static final String PRICING_PLAN_FAST_CHECKBOX = "pricingPlanFastCheckbox"; + public static final String PRICING_PLAN = "pricingPlan"; + public static final String INSTITUTION_REA = "institutionREA"; + public static final String INSTITUTION_SHARE_CAPITAL = "institutionShareCapital"; + public static final String INSTITUTION_BUSINESS_REGISTER_PLACE = "institutionBusinessRegisterPlace"; +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/InstitutionPaSubunitType.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/InstitutionPaSubunitType.java new file mode 100644 index 0000000..1145e7f --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/InstitutionPaSubunitType.java @@ -0,0 +1,5 @@ +package it.pagopa.selfcare.mscore.core.util; + +public enum InstitutionPaSubunitType { + AOO, UO +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapper.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapper.java new file mode 100644 index 0000000..0b84580 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapper.java @@ -0,0 +1,32 @@ +package it.pagopa.selfcare.mscore.core.util; + +import it.pagopa.selfcare.mscore.config.MailTemplateConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +public class MailParametersMapper { + + @Autowired + MailTemplateConfig mailTemplateConfig; + + public Map getDelegationNotificationParameter(String institutionName, String productName, String partnerName) { + Map map = new HashMap<>(); + map.put(mailTemplateConfig.getNotificationProductName(), productName); + map.put(mailTemplateConfig.getInstitutionDescription(), institutionName); + map.put(mailTemplateConfig.getDelegationPartnerName(), partnerName); + return map; + } + + public String getDelegationNotificationPath() { + return mailTemplateConfig.getDelegationNotificationPath(); + } + + public String getDelegationUserNotificationPath() { + return mailTemplateConfig.getDelegationUserNotificationPath(); + } + +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtils.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtils.java new file mode 100644 index 0000000..bae37c8 --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtils.java @@ -0,0 +1,65 @@ +package it.pagopa.selfcare.mscore.core.util; + +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.user.UserBinding; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import static it.pagopa.selfcare.mscore.constant.CustomError.ONBOARDING_INFO_INSTITUTION_NOT_FOUND; +import static it.pagopa.selfcare.mscore.core.util.UtilEnumList.ONBOARDING_INFO_DEFAULT_RELATIONSHIP_STATES; + +@Slf4j +@NoArgsConstructor(access = AccessLevel.NONE) +public class OnboardingInfoUtils { + + public static List convertStatesToRelationshipsState(String[] states) { + return Arrays.stream(states) + .map(RelationshipState::valueOf) + .collect(Collectors.toList()); + } + + public static List getUserInstitutionsWithProductStatusIn(List userInstitutionToBeFiltered, List relationshipStateList) { + List result = new ArrayList<>(); + for(UserBinding userBinding: userInstitutionToBeFiltered){ + List products = userBinding.getProducts().stream().filter(product -> relationshipStateList.contains(product.getStatus())).collect(Collectors.toList()); + if(!products.isEmpty()){ + userBinding.setProducts(products); + result.add(userBinding); + } + } + if (result.isEmpty()) { + throw new ResourceNotFoundException(String.format(ONBOARDING_INFO_INSTITUTION_NOT_FOUND.getMessage(), "states : " + StringUtils.join(relationshipStateList, ", ")), ONBOARDING_INFO_INSTITUTION_NOT_FOUND.getCode()); + } + return result; + } + + public static Institution findOnboardingLinkedToProductWithStateIn(UserBinding userBinding, Institution onboardedInstitution, List relationshipStateList) { + List onboardings = new ArrayList<>(); + for(OnboardedProduct product: userBinding.getProducts()){ + onboardings.addAll(onboardedInstitution.getOnboarding().stream().filter(onboarding -> product.getProductId().equalsIgnoreCase(onboarding.getProductId()) + && relationshipStateList.contains(onboarding.getStatus())) + .collect(Collectors.toList())); + } + onboardedInstitution.setOnboarding(onboardings); + return onboardedInstitution; + } + + public static List getRelationShipStateList(String[] states) { + if (states == null || states.length == 0) { + return ONBOARDING_INFO_DEFAULT_RELATIONSHIP_STATES; + } else { + return convertStatesToRelationshipsState(states); + } + } +} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/UtilEnumList.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/UtilEnumList.java new file mode 100644 index 0000000..b3a619a --- /dev/null +++ b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/UtilEnumList.java @@ -0,0 +1,32 @@ +package it.pagopa.selfcare.mscore.core.util; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.NONE) +public class UtilEnumList { + + public static final List PRODUCT_RELATIONSHIP_STATES = + List.of(RelationshipState.PENDING, + RelationshipState.REJECTED, + RelationshipState.TOBEVALIDATED); + public static final List VALID_RELATIONSHIP_STATES = + List.of(RelationshipState.ACTIVE, + RelationshipState.SUSPENDED); + public static final List ONBOARDING_INFO_DEFAULT_RELATIONSHIP_STATES = + List.of(RelationshipState.ACTIVE, + RelationshipState.PENDING); + + public static final List VERIFY_TOKEN_RELATIONSHIP_STATES = + List.of(RelationshipState.TOBEVALIDATED, + RelationshipState.PENDING); + + public static final List ADMIN_PARTY_ROLE = + List.of(PartyRole.MANAGER, + PartyRole.SUB_DELEGATE, + PartyRole.DELEGATE); +} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactoryTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactoryTest.java new file mode 100644 index 0000000..3f74040 --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactoryTest.java @@ -0,0 +1,30 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +@ExtendWith(SpringExtension.class) +class ClassPathStreamFactoryTest { + + @InjectMocks + private ClassPathStreamFactory classPathStreamFactory; + + @Test + void getUrl() { + assertNotNull(classPathStreamFactory.getUrl("url")); + } + + + @Test + void getUrl2() { + assertThrows(InvalidRequestException.class, () -> classPathStreamFactory.getUrl("a b c")); + } + +} + diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamTest.java new file mode 100644 index 0000000..7434371 --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamTest.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.core; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class ClassPathStreamTest { + + @Test + void testConstructor() { + assertNull((new ClassPathStream("Path")).getStream()); + } + + @Test + void testGetReader() { + assertThrows(NullPointerException.class, () ->(new ClassPathStream("Path")).getReader()); + } + + +} + diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ContractServiceTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ContractServiceTest.java new file mode 100644 index 0000000..e795845 --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ContractServiceTest.java @@ -0,0 +1,63 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.FileStorageConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.model.onboarding.ResourceResponse; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.web.multipart.MultipartFile; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class ContractServiceTest { + + @InjectMocks + private ContractService contractService; + + @Mock + private FileStorageConnector fileStorageConnector; + + @Mock + private CoreConfig coreConfig; + + @Test + void getLogoFile() { + when(coreConfig.getLogoPath()).thenReturn("42"); + when(fileStorageConnector.getTemplateFile(any())).thenReturn("42"); + assertNotNull(contractService.getLogoFile()); + } + + @Test + void getLogoFile1() { + when(coreConfig.getLogoPath()).thenReturn("42"); + InvalidRequestException ioException = mock(InvalidRequestException.class); + when(fileStorageConnector.getTemplateFile(any())).thenThrow(ioException); + assertThrows(InvalidRequestException.class, () -> contractService.getLogoFile()); + } + + @Test + void getFile() { + when(fileStorageConnector.getFile(any())).thenReturn(new ResourceResponse()); + assertNotNull(contractService.getFile("path")); + } + + @Test + void deleteContract() { + doNothing().when(fileStorageConnector).removeContract(any(), any()); + assertDoesNotThrow(() -> contractService.deleteContract("fileName", "tokenId")); + } + + @Test + void uploadContract() { + when(fileStorageConnector.uploadContract(any(), any())).thenReturn("fileName"); + MultipartFile file = mock(MultipartFile.class); + assertDoesNotThrow(() -> contractService.uploadContract("fileName", file)); + } +} + diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java new file mode 100644 index 0000000..8ab55f5 --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java @@ -0,0 +1,385 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.api.DelegationConnector; +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.Order; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; +import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; +import it.pagopa.selfcare.mscore.model.delegation.PageInfo; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.function.Executable; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.List; +import java.util.Optional; + +import static it.pagopa.selfcare.mscore.constant.GenericError.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class DelegationServiceImplTest { + @Mock + private DelegationConnector delegationConnector; + + @InjectMocks + private DelegationServiceImpl delegationServiceImpl; + + @Mock + private MailNotificationService mailNotificationService; + + @Mock + private InstitutionService institutionService; + + private static final Delegation dummyDelegationProdIo; + private static final Delegation dummyDelegationProdPagopa; + + private static final Delegation dummyDelegationTaxCode; + + static { + dummyDelegationProdIo = new Delegation(); + dummyDelegationProdIo.setId("id"); + dummyDelegationProdIo.setTo("to"); + dummyDelegationProdIo.setFrom("from"); + dummyDelegationProdIo.setProductId("prod-io"); + + dummyDelegationProdPagopa = new Delegation(); + dummyDelegationProdPagopa.setId("id"); + dummyDelegationProdPagopa.setProductId("prod-pagopa"); + dummyDelegationProdPagopa.setTo("taxCodeTo"); + dummyDelegationProdPagopa.setFrom("from"); + + dummyDelegationTaxCode = new Delegation(); + dummyDelegationTaxCode.setToTaxCode("taxCodeTo"); + dummyDelegationTaxCode.setFromTaxCode("taxCodeFrom"); + dummyDelegationTaxCode.setProductId("prod-pagopa"); + dummyDelegationTaxCode.setId("id"); + } + + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationWithProductProdIo() { + Institution institutionTo = new Institution(); + institutionTo.setId("idTo"); + institutionTo.setTaxCode("taxCodeTo"); + institutionTo.setInstitutionType(InstitutionType.PA); + Institution institutionFrom = new Institution(); + institutionTo.setId("idFrom"); + institutionTo.setTaxCode("taxCodeFrom"); + institutionTo.setInstitutionType(InstitutionType.PT); + when(delegationConnector.save(dummyDelegationProdIo)).thenAnswer(arg ->arg.getArguments()[0]); + when(institutionService.retrieveInstitutionById(dummyDelegationProdIo.getFrom())).thenReturn(institutionFrom); + when(institutionService.retrieveInstitutionById(dummyDelegationProdIo.getTo())).thenReturn(institutionTo); + doNothing().when(mailNotificationService).sendMailForDelegation(any(), any(), any()); + doNothing().when(institutionService).updateInstitutionDelegation(any(),anyBoolean()); + Delegation response = delegationServiceImpl.createDelegation(dummyDelegationProdIo); + verify(delegationConnector).save(dummyDelegationProdIo); + assertNotNull(response); + assertNotNull(response.getId()); + assertEquals(dummyDelegationProdIo.getId(), response.getId()); + assertEquals(institutionTo.getTaxCode(), response.getToTaxCode()); + assertEquals(institutionFrom.getTaxCode(), response.getFromTaxCode()); + assertEquals(institutionTo.getInstitutionType(), response.getBrokerType()); + assertEquals(institutionFrom.getInstitutionType(), response.getInstitutionType()); + } + + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationWithSendMailError() { + Institution institution = new Institution(); + institution.setId("id"); + when(institutionService.retrieveInstitutionById(any())).thenReturn(institution); + doThrow(new MsCoreException(SEND_MAIL_FOR_DELEGATION_ERROR.getMessage(), SEND_MAIL_FOR_DELEGATION_ERROR.getCode())) + .when(mailNotificationService) + .sendMailForDelegation(any(), any(), any()); + assertDoesNotThrow(() -> delegationServiceImpl.createDelegation(dummyDelegationProdPagopa)); + verify(mailNotificationService).sendMailForDelegation(any(), any(), any()); + } + + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationWithError() { + Institution institution = new Institution(); + institution.setId("id"); + when(institutionService.retrieveInstitutionById(any())).thenReturn(institution); + when(delegationConnector.save(any())).thenThrow(new MsCoreException(CREATE_DELEGATION_ERROR.getMessage(), CREATE_DELEGATION_ERROR.getCode())); + assertThrows(MsCoreException.class, () -> delegationServiceImpl.createDelegation(dummyDelegationProdIo)); + verify(delegationConnector).save(any()); + } + + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationWithConflict() { + Institution institution = new Institution(); + institution.setId("id"); + when(institutionService.retrieveInstitutionById(dummyDelegationProdIo.getTo())).thenReturn(institution); + when(institutionService.retrieveInstitutionById(dummyDelegationProdIo.getFrom())).thenReturn(institution); + when(delegationServiceImpl.checkIfExistsWithStatus(dummyDelegationProdIo, DelegationState.ACTIVE)).thenReturn(true); + assertThrows(ResourceConflictException.class, () -> delegationServiceImpl.createDelegation(dummyDelegationProdIo)); + verifyNoMoreInteractions(delegationConnector); + } + + /** + * Method under test: {@link DelegationService#checkIfExistsWithStatus(Delegation, DelegationState)} + */ + @Test + void testCheckIfExists() { + Delegation delegation = new Delegation(); + when(delegationConnector.checkIfExistsWithStatus(any(), any())).thenReturn(true); + boolean check = delegationServiceImpl.checkIfExistsWithStatus(delegation, DelegationState.ACTIVE); + assertTrue(check); + } + + /** + * Method under test: {@link DelegationServiceImpl#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} + */ + @Test + void find_shouldGetData() { + //Given + Delegation delegation = new Delegation(); + delegation.setId("id"); + when(delegationConnector.find(any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(List.of(delegation)); + //When + List response = delegationServiceImpl.getDelegations("from", "to", "productId", null, + null, Optional.empty(), Optional.of(0), Optional.of(100)); + //Then + verify(delegationConnector).find(any(), any(), any(), any(), any(), any(), any(), any()); + + assertNotNull(response); + assertFalse(response.isEmpty()); + assertEquals(delegation.getId(), response.get(0).getId()); + } + + /** + * Method under test: {@link DelegationServiceImpl#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} + */ + @Test + void find_shouldGetData_fullMode() { + //Given + Delegation delegation = new Delegation(); + delegation.setId("id"); + when(delegationConnector.find(any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(List.of(delegation)); + //When + List response = delegationServiceImpl.getDelegations("from", null, "productId", null, + null, Optional.of(Order.DESC), Optional.of(0), Optional.of(0)); + //Then + verify(delegationConnector).find(any(), any(), any(), any(), any(), any(), any(), any()); + + assertNotNull(response); + assertFalse(response.isEmpty()); + assertEquals(delegation.getId(), response.get(0).getId()); + } + + /** + * Method under test: {@link DelegationServiceImpl#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} + */ + @Test + void find_shouldGetData_fullMode_defaultPage() { + //Given + Delegation delegation = new Delegation(); + delegation.setId("id"); + when(delegationConnector.find(any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(List.of(delegation)); + //When + List response = delegationServiceImpl.getDelegations("from", null, "productId", null, + null, Optional.of(Order.DESC), Optional.empty(), Optional.empty()); + //Then + verify(delegationConnector).find(any(), any(), any(), any(), any(), any(), any(), any()); + + assertNotNull(response); + assertFalse(response.isEmpty()); + assertEquals(delegation.getId(), response.get(0).getId()); + } + + /** + * Method under test: {@link DelegationServiceImpl#getDelegationsV2(GetDelegationParameters)} + */ + @Test + void getDelegationsV2_shouldGetData() { + //Given + Delegation delegation = new Delegation(); + delegation.setId("id"); + DelegationWithPagination delegationWithPagination = new DelegationWithPagination(List.of(delegation), new PageInfo(10, 0, 10, 1)); + when(delegationConnector.findAndCount(any())).thenReturn(delegationWithPagination); + GetDelegationParameters delegationParameters = createDelegationParameters("from", "to", "productId", null, + null, null, 0, 100); + + //When + DelegationWithPagination response = delegationServiceImpl.getDelegationsV2(delegationParameters); + //Then + ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(GetDelegationParameters.class); + verify(delegationConnector).findAndCount(argumentCaptor.capture()); + assertNotNull(argumentCaptor); + assertEquals(argumentCaptor.getValue(), delegationParameters); + + assertNotNull(response); + assertNotNull(response.getDelegations()); + assertNotNull(response.getPageInfo()); + assertFalse(response.getDelegations().isEmpty()); + assertEquals(delegation.getId(), response.getDelegations().get(0).getId()); + } + + @Test + void testCreateDelegationFromTaxCode() { + Institution institutionTo = new Institution(); + institutionTo.setId("id"); + institutionTo.setTaxCode("taxCodeTo"); + when(delegationConnector.save(any())).thenReturn(dummyDelegationTaxCode); + Institution institutionFrom = new Institution(); + institutionFrom.setId("id"); + institutionFrom.setTaxCode("taxCodeFrom"); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getToTaxCode(), dummyDelegationTaxCode.getToSubunitCode())).thenReturn(List.of(institutionTo)); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getFromTaxCode(), dummyDelegationTaxCode.getFromSubunitCode())).thenReturn(List.of(institutionFrom)); + doNothing().when(institutionService).updateInstitutionDelegation(any(),anyBoolean()); + Delegation response = delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationTaxCode); + verify(delegationConnector).save(any()); + assertNotNull(response); + assertNotNull(response.getId()); + assertEquals(dummyDelegationTaxCode.getId(), response.getId()); + assertEquals(institutionTo.getTaxCode(), response.getToTaxCode()); + assertEquals(institutionFrom.getTaxCode(), response.getFromTaxCode()); + assertEquals(institutionTo.getInstitutionType(), response.getInstitutionType()); + assertEquals(institutionFrom.getInstitutionType(), response.getBrokerType()); + } + + @Test + void testCreateDelegationFromTaxCodeWithSubunitCode() { + Institution institutionTo = new Institution(); + institutionTo.setId("id"); + institutionTo.setTaxCode("taxCodeTo"); + Institution institutionFrom = new Institution(); + institutionFrom.setId("id"); + institutionFrom.setTaxCode("taxCodeFrom"); + when(delegationConnector.findAndActivate(anyString(), anyString(), anyString())).thenReturn(dummyDelegationTaxCode); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getToTaxCode(), dummyDelegationTaxCode.getToSubunitCode())).thenReturn(List.of(institutionTo)); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getFromTaxCode(), dummyDelegationTaxCode.getFromSubunitCode())).thenReturn(List.of(institutionFrom)); + doNothing().when(institutionService).updateInstitutionDelegation(any(),anyBoolean()); + when(delegationConnector.checkIfExistsWithStatus(dummyDelegationTaxCode, DelegationState.ACTIVE)).thenReturn(false); + when(delegationConnector.checkIfExistsWithStatus(dummyDelegationTaxCode, DelegationState.DELETED)).thenReturn(true); + Delegation response = delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationTaxCode); + verify(delegationConnector).findAndActivate(anyString(), anyString(), anyString()); + assertNotNull(response); + assertNotNull(response.getId()); + assertEquals(dummyDelegationTaxCode.getId(), response.getId()); + assertEquals(dummyDelegationTaxCode.getFromTaxCode(), response.getFromTaxCode()); + assertEquals(dummyDelegationTaxCode.getToTaxCode(), response.getToTaxCode()); + } + + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationFromTaxCodeWithError() { + Institution institution = new Institution(); + institution.setId("id"); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getToTaxCode(), null)).thenReturn(List.of(institution)); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getFromTaxCode(), null)).thenReturn(List.of(institution)); + when(delegationConnector.save(any())).thenThrow(new MsCoreException(CREATE_DELEGATION_ERROR.getMessage(), CREATE_DELEGATION_ERROR.getCode())); + assertThrows(MsCoreException.class, () -> delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationTaxCode)); + verify(delegationConnector).save(any()); + } + + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationFromTaxCodeWithResourceNotFoundException() { + when(institutionService.getInstitutions(any(), any())).thenReturn(List.of()); + assertThrows(ResourceNotFoundException.class, () -> delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationProdPagopa)); + } + + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationFromTaxCodeConflict() { + Institution institution = new Institution(); + institution.setId("id"); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getToTaxCode(), dummyDelegationProdPagopa.getToSubunitCode())).thenReturn(List.of(institution)); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getFromTaxCode(), dummyDelegationProdPagopa.getFromSubunitCode())).thenReturn(List.of(institution)); + when(delegationConnector.checkIfExistsWithStatus(dummyDelegationTaxCode, DelegationState.ACTIVE)).thenReturn(true); + assertThrows(ResourceConflictException.class, () -> delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationTaxCode)); + } + + @Test + void testDeleteDelegationByDelegationId_whenDelegationisNotActive() { + Delegation delegation = new Delegation(); + delegation.setTo("id"); + delegation.setStatus(DelegationState.DELETED); + when(delegationConnector.findByIdAndModifyStatus("id", DelegationState.DELETED)).thenReturn(delegation); + when(delegationConnector.checkIfDelegationsAreActive("id")).thenReturn(false); + Executable executable = () -> delegationServiceImpl.deleteDelegationByDelegationId("id"); + assertDoesNotThrow(executable); + verify(institutionService).updateInstitutionDelegation("id", false); + } + + @Test + void testDeleteDelegationByDelegationId_whenDelegationisActive() { + Delegation delegation = new Delegation(); + delegation.setTo("id"); + delegation.setStatus(DelegationState.DELETED); + when(delegationConnector.findByIdAndModifyStatus("id", DelegationState.DELETED)).thenReturn(delegation); + when(delegationConnector.checkIfDelegationsAreActive("id")).thenReturn(true); + Executable executable = () -> delegationServiceImpl.deleteDelegationByDelegationId("id"); + assertDoesNotThrow(executable); + verify(institutionService, times(0)).updateInstitutionDelegation("id", false); + } + + @Test + void testDeleteDelegationByDelegationId_whenFindAndModifyStatusThrowsException() { + Delegation delegation = new Delegation(); + delegation.setTo("id"); + delegation.setStatus(DelegationState.DELETED); + when(delegationConnector.findByIdAndModifyStatus("id", DelegationState.DELETED)) + .thenThrow(new MsCoreException(DELETE_DELEGATION_ERROR.getMessage(), DELETE_DELEGATION_ERROR.getCode())); + assertThrows(MsCoreException.class, () -> delegationServiceImpl.deleteDelegationByDelegationId("id")); + verify(delegationConnector, times(0)).checkIfDelegationsAreActive(any()); + } + + @Test + void testDeleteDelegationByDelegationId_whenUpdateInstitutionDelegationThrowsException() { + Delegation delegation = new Delegation(); + delegation.setTo("id"); + delegation.setStatus(DelegationState.DELETED); + when(delegationConnector.findByIdAndModifyStatus("id", DelegationState.DELETED)).thenReturn(delegation); + when(delegationConnector.checkIfDelegationsAreActive("id")).thenReturn(false); + doThrow(new MsCoreException(DELETE_DELEGATION_ERROR.getMessage(), DELETE_DELEGATION_ERROR.getCode())) + .when(institutionService).updateInstitutionDelegation("id", false); + assertThrows(MsCoreException.class, () -> delegationServiceImpl.deleteDelegationByDelegationId("id")); + verify(delegationConnector, times(1)).findByIdAndModifyStatus("id", DelegationState.ACTIVE); + } + + + private GetDelegationParameters createDelegationParameters(String from, String to, String productId, + String search, String taxCode, Order order, + Integer page, Integer size) { + return GetDelegationParameters.builder() + .from(from) + .to(to) + .productId(productId) + .search(search) + .taxCode(taxCode) + .order(order) + .page(page) + .size(size) + .build(); + } + +} \ No newline at end of file diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ExternalServiceImplTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ExternalServiceImplTest.java new file mode 100644 index 0000000..fe5732c --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ExternalServiceImplTest.java @@ -0,0 +1,170 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.model.institution.GeographicTaxonomies; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class ExternalServiceImplTest { + + @InjectMocks + private ExternalServiceImpl externalServiceImpl; + + @Mock + private InstitutionService institutionService; + + + /** + * Method under test: {@link ExternalServiceImpl#getInstitutionByExternalId(String)} + */ + @Test + void testGetInstitutionByExternalId() { + Institution institution = new Institution(); + when(institutionService.retrieveInstitutionByExternalId(any())).thenReturn(institution); + assertSame(institution, externalServiceImpl.getInstitutionByExternalId("42")); + verify(institutionService).retrieveInstitutionByExternalId(any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#getInstitutionByExternalId(String)} + */ + @Test + void testGetInstitutionByExternalId2() { + Institution institution = new Institution(); + when(institutionService.retrieveInstitutionByExternalId(any())).thenReturn(institution); + assertSame(institution, externalServiceImpl.getInstitutionByExternalId("42")); + verify(institutionService).retrieveInstitutionByExternalId(any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#getInstitutionByExternalId(String)} + */ + @Test + void testGetInstitutionByExternalId3() { + when(institutionService.retrieveInstitutionByExternalId(any())) + .thenThrow(new InvalidRequestException("An error occurred", "Code")); + assertThrows(InvalidRequestException.class, () -> externalServiceImpl.getInstitutionByExternalId("42")); + verify(institutionService).retrieveInstitutionByExternalId(any()); + } + + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProduct(String, String)} + */ + @Test + void testRetrieveInstitutionProduct() { + Institution institution = new Institution(); + when(institutionService.retrieveInstitutionProduct(any(), any())).thenReturn(institution); + assertSame(institution, externalServiceImpl.retrieveInstitutionProduct("42", "42")); + verify(institutionService).retrieveInstitutionProduct(any(), any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProduct(String, String)} + */ + @Test + void testRetrieveInstitutionProduct2() { + Institution institution = new Institution(); + when(institutionService.retrieveInstitutionProduct(any(), any())).thenReturn(institution); + assertSame(institution, externalServiceImpl.retrieveInstitutionProduct("42", "42")); + verify(institutionService).retrieveInstitutionProduct(any(), any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProduct(String, String)} + */ + @Test + void testRetrieveInstitutionProduct3() { + when(institutionService.retrieveInstitutionProduct(any(), any())) + .thenThrow(new InvalidRequestException("An error occurred", "Code")); + assertThrows(InvalidRequestException.class, () -> externalServiceImpl.retrieveInstitutionProduct("42", "42")); + verify(institutionService).retrieveInstitutionProduct(any(), any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProductsByExternalId(String, List)} + */ + @Test + void testRetrieveInstitutionProductsByExternalId() { + when(institutionService.retrieveInstitutionByExternalId(any())).thenReturn(new Institution()); + ArrayList onboardingList = new ArrayList<>(); + when(institutionService.retrieveInstitutionProducts(any(), any())) + .thenReturn(onboardingList); + List actualRetrieveInstitutionProductsByExternalIdResult = externalServiceImpl + .retrieveInstitutionProductsByExternalId("42", new ArrayList<>()); + assertSame(onboardingList, actualRetrieveInstitutionProductsByExternalIdResult); + assertTrue(actualRetrieveInstitutionProductsByExternalIdResult.isEmpty()); + verify(institutionService).retrieveInstitutionByExternalId(any()); + verify(institutionService).retrieveInstitutionProducts(any(), any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProductsByExternalId(String, List)} + */ + @Test + void testRetrieveInstitutionProductsByExternalId2() { + when(institutionService.retrieveInstitutionByExternalId(any())) + .thenThrow(new InvalidRequestException("An error occurred", "Code")); + List list = new ArrayList<>(); + assertThrows(InvalidRequestException.class, + () -> externalServiceImpl.retrieveInstitutionProductsByExternalId("42", list)); + verify(institutionService).retrieveInstitutionByExternalId(any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionByIds(List)} + */ + @Test + void testRetrieveInstitutionByIds() { + ArrayList institutionList = new ArrayList<>(); + when(institutionService.retrieveInstitutionByIds(any())).thenReturn(institutionList); + List actualRetrieveInstitutionByIdsResult = externalServiceImpl + .retrieveInstitutionByIds(new ArrayList<>()); + assertSame(institutionList, actualRetrieveInstitutionByIdsResult); + assertTrue(actualRetrieveInstitutionByIdsResult.isEmpty()); + verify(institutionService).retrieveInstitutionByIds(any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionByIds(List)} + */ + @Test + void testRetrieveInstitutionByIds2() { + when(institutionService.retrieveInstitutionByIds(any())) + .thenThrow(new InvalidRequestException("An error occurred", "Code")); + List ids = new ArrayList<>(); + assertThrows(InvalidRequestException.class, + () -> externalServiceImpl.retrieveInstitutionByIds(ids)); + verify(institutionService).retrieveInstitutionByIds(any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionGeoTaxonomiesByExternalId(String)} + */ + @Test + void testRetrieveInstitutionGeoTaxonomiesByExternalId() { + when(institutionService.retrieveInstitutionByExternalId(any())).thenReturn(new Institution()); + ArrayList geographicTaxonomiesList = new ArrayList<>(); + when(institutionService.retrieveInstitutionGeoTaxonomies(any())) + .thenReturn(geographicTaxonomiesList); + List actualRetrieveInstitutionGeoTaxonomiesByExternalIdResult = externalServiceImpl + .retrieveInstitutionGeoTaxonomiesByExternalId("42"); + assertSame(geographicTaxonomiesList, actualRetrieveInstitutionGeoTaxonomiesByExternalIdResult); + assertTrue(actualRetrieveInstitutionGeoTaxonomiesByExternalIdResult.isEmpty()); + verify(institutionService).retrieveInstitutionByExternalId(any()); + verify(institutionService).retrieveInstitutionGeoTaxonomies(any()); + } +} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplPdaTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplPdaTest.java new file mode 100644 index 0000000..f0ede7e --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplPdaTest.java @@ -0,0 +1,33 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.core.strategy.CreateInstitutionStrategy; +import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +public class InstitutionServiceImplPdaTest { + @InjectMocks + private InstitutionServiceImpl institutionServiceImpl; + @Mock + private CreateInstitutionStrategyFactory createInstitutionStrategyFactory; + + @Mock + private CreateInstitutionStrategy createInstitutionStrategy; + + @Test + void testCreateInstitutionFromPda() { + when(createInstitutionStrategyFactory.createInstitutionStrategyPda(any())).thenReturn(createInstitutionStrategy); + when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); + Institution institution = institutionServiceImpl.createInstitutionFromPda(new Institution(), "EC"); + assertNotNull(institution); + } +} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplTest.java new file mode 100644 index 0000000..0fc09af --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplTest.java @@ -0,0 +1,1102 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.commons.base.security.SelfCareUser; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.api.DelegationConnector; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.api.UserApiConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.SearchMode; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapperImpl; +import it.pagopa.selfcare.mscore.core.mapper.TokenMapper; +import it.pagopa.selfcare.mscore.core.mapper.TokenMapperImpl; +import it.pagopa.selfcare.mscore.core.strategy.CreateInstitutionStrategy; +import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.TokenUser; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.function.Executable; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class InstitutionServiceImplTest { + @Mock + private InstitutionConnector institutionConnector; + + @Mock + private DelegationConnector delegationConnector; + + @Mock + private UserApiConnector userApiConnector; + + @InjectMocks + private InstitutionServiceImpl institutionServiceImpl; + + @Mock + private PartyRegistryProxyConnector partyRegistryProxyConnector; + + @Mock + private CoreConfig coreConfig; + + @Mock + private CreateInstitutionStrategyFactory createInstitutionStrategyFactory; + + @Mock + private CreateInstitutionStrategy createInstitutionStrategy; + + @Spy + private InstitutionMapper institutionMapper = new InstitutionMapperImpl(); + + @Spy + private TokenMapper tokenMapper = new TokenMapperImpl(); + + + private static final InstitutionProxyInfo dummyInstitutionProxyInfo; + private static final CategoryProxyInfo dummyCategoryProxyInfo; + + static { + dummyInstitutionProxyInfo = new InstitutionProxyInfo(); + dummyInstitutionProxyInfo.setAddress("42 Main St"); + dummyInstitutionProxyInfo.setAoo("Aoo"); + dummyInstitutionProxyInfo.setCategory("Category"); + dummyInstitutionProxyInfo.setDescription("The characteristics of someone or something"); + dummyInstitutionProxyInfo.setDigitalAddress("42 Main St"); + dummyInstitutionProxyInfo.setId("42"); + dummyInstitutionProxyInfo.setO("foo"); + dummyInstitutionProxyInfo.setOrigin("Origin"); + dummyInstitutionProxyInfo.setOriginId("42"); + dummyInstitutionProxyInfo.setOu("Ou"); + dummyInstitutionProxyInfo.setTaxCode("Tax Code"); + dummyInstitutionProxyInfo.setZipCode("21654"); + + dummyCategoryProxyInfo = new CategoryProxyInfo(); + dummyCategoryProxyInfo.setCode("Code"); + dummyCategoryProxyInfo.setKind("Kind"); + dummyCategoryProxyInfo.setName("Name"); + dummyCategoryProxyInfo.setOrigin("Origin"); + } + + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionById(String)} + */ + @Test + void testRetrieveInstitutionById() { + Institution institution = new Institution(); + when(institutionConnector.findById(any())).thenReturn(institution); + assertSame(institution, institutionServiceImpl.retrieveInstitutionById("42")); + verify(institutionConnector).findById(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionById(String)} + */ + @Test + void testRetrieveInstitutionById2() { + when(institutionConnector.findById(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.retrieveInstitutionById("42")); + verify(institutionConnector).findById(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalId(String)} + */ + @Test + void testRetrieveInstitutionByExternalId() { + Institution institution = new Institution(); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.of(institution)); + assertSame(institution, institutionServiceImpl.retrieveInstitutionByExternalId("42")); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalId(String)} + */ + @Test + void testRetrieveInstitutionByExternalId2() { + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.retrieveInstitutionByExternalId("42")); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalId(String)} + */ + @Test + void testRetrieveInstitutionByExternalId3() { + when(institutionConnector.findByExternalId(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.retrieveInstitutionByExternalId("42")); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} + */ + @Test + void shouldThrowExceptionOnCreateInstitutionByExternalIdWhenInstitutionFounded() { + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.of(new Institution())); + assertThrows(ResourceConflictException.class, () -> institutionServiceImpl.createInstitutionByExternalId("42")); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} + */ + @Test + void testCreateInstitutionByExternalId2() { + Institution institution = new Institution(); + when(institutionConnector.save(any())).thenReturn(institution); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + assertSame(institution, institutionServiceImpl.createInstitutionByExternalId("42")); + verify(institutionConnector).save(any()); + verify(institutionConnector).findByExternalId(any()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} + */ + @Test + void shouldThrowExceptionOnCreationInstitutionByExternalIdWhenSaveAlreadyExists() { + when(institutionConnector.save(any())) + .thenThrow(new ResourceConflictException("An error occurred", "START - check institution {} already exists")); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + assertThrows(MsCoreException.class, () -> institutionServiceImpl.createInstitutionByExternalId("42")); + verify(institutionConnector).save(any()); + verify(institutionConnector).findByExternalId(any()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + } + + + /** + * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} + */ + @Test + void shouldThrowExceptionOnCreationInstitutionByExternalIdIfAlreadyExists() { + when(institutionConnector.findByExternalId(any())) + .thenThrow(new InvalidRequestException("An error occurred", "START - check institution {} already exists")); + assertThrows(InvalidRequestException.class, () -> institutionServiceImpl.createInstitutionByExternalId("42")); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} + */ + @Test + void testCreateInstitutionByExternalId6() { + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + Institution institution = new Institution(); + when(institutionConnector.save(any())).thenReturn(institution); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + assertSame(institution, institutionServiceImpl.createInstitutionByExternalId("42")); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(institutionConnector).save(any()); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitutionNotFoundInstitution() { + String taxId = "taxId"; + Institution institution = new Institution(); + institution.setTaxCode(taxId); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName("test name"); + institutionByLegal.setBusinessTaxId(taxId); + when(partyRegistryProxyConnector.getInstitutionsByLegal(any())).thenReturn(List.of(institutionByLegal)); + NationalRegistriesProfessionalAddress professionalAddress = new NationalRegistriesProfessionalAddress(); + professionalAddress.setAddress("via di prova"); + professionalAddress.setZipCode("00100"); + when(partyRegistryProxyConnector.getLegalAddress(taxId)).thenReturn(professionalAddress); + when(institutionConnector.save(any())).thenReturn(institution); + when(coreConfig.isInfoCamereEnable()).thenReturn(true); + Institution response = institutionServiceImpl.createPgInstitution(taxId, "42", true, mock(SelfCareUser.class)); + assertEquals(response.getTaxCode(), taxId); + verify(institutionConnector).findByExternalId(any()); + verify(institutionConnector).save(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitutionFoundedInstitution() { + String taxId = "taxId"; + Institution institution = new Institution(); + institution.setId("institutionId"); + institution.setTaxCode(taxId); + institution.setExternalId(taxId); + when(institutionConnector.findByExternalId(taxId)).thenReturn(Optional.of(institution)); + Institution response = institutionServiceImpl.createPgInstitution(taxId, "42", true, mock(SelfCareUser.class)); + assertEquals(response.getId(), institution.getId()); + assertEquals(response.getTaxCode(), taxId); + assertEquals(response.getExternalId(), taxId); + verify(institutionConnector).findByExternalId(any()); + verify(institutionConnector, never()).save(any()); + } + + @Test + void testGetOnboardingInstitutionByProductId() { + List onboardings = new ArrayList<>(); + when(institutionConnector.findOnboardingByIdAndProductId(any(), any())).thenReturn(onboardings); + List onboardingList = institutionServiceImpl.getOnboardingInstitutionByProductId("id", "id"); + assertTrue(onboardingList.isEmpty()); + } + + @Test + void testGetInstitutionsWithTaxCodeSubunitCode() { + List institutionList = new ArrayList<>(); + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())).thenReturn(institutionList); + List institutions = institutionServiceImpl.getInstitutions("id", "id", null, null); + assertTrue(institutions.isEmpty()); + Mockito.verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); + } + + @Test + void testGetInstitutionsWithOriginOriginId() { + List institutionList = new ArrayList<>(); + when(institutionConnector.findByOriginAndOriginId(any(), any())).thenReturn(institutionList); + List institutions = institutionServiceImpl.getInstitutions(null, null, "id", "id"); + assertTrue(institutions.isEmpty()); + Mockito.verify(institutionConnector).findByOriginAndOriginId(any(), any()); + } + + @Test + void testGetInstitutionsFails() { + assertThrows(InvalidRequestException.class, () -> institutionServiceImpl.getInstitutions("id", "id", "id", "id")); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createInstitutionFromIpa(String, InstitutionPaSubunitType, String, List, InstitutionType)} + */ + @Test + void testCreateInstitutionFromIpa() { + when(createInstitutionStrategyFactory.createInstitutionStrategyIpa()).thenReturn(createInstitutionStrategy); + when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); + Institution institution = institutionServiceImpl.createInstitutionFromIpa("id", InstitutionPaSubunitType.AOO,"id", List.of(), InstitutionType.PA); + assertNotNull(institution); + } + + @Test + void testCreateInstitution() { + when(createInstitutionStrategyFactory.createInstitutionStrategy(any())).thenReturn(createInstitutionStrategy); + when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); + Institution institution = institutionServiceImpl.createInstitution(new Institution()); + assertNotNull(institution); + } + + @Test + void testCreateInstitutionFromAnac() { + when(createInstitutionStrategyFactory.createInstitutionStrategyAnac(any())).thenReturn(createInstitutionStrategy); + when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); + Institution institution = institutionServiceImpl.createInstitutionFromAnac(new Institution()); + assertNotNull(institution); + } + + @Test + void testCreateInstitutionFromIvass() { + when(createInstitutionStrategyFactory.createInstitutionStrategyIvass(any())).thenReturn(createInstitutionStrategy); + when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); + Institution institution = institutionServiceImpl.createInstitutionFromIvass(new Institution()); + assertNotNull(institution); + } + + + @Test + void testCreateInstitutionFromInfocamere() { + when(createInstitutionStrategyFactory.createInstitutionStrategyInfocamere(any())).thenReturn(createInstitutionStrategy); + when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); + Institution institution = institutionServiceImpl.createInstitutionFromInfocamere(new Institution()); + assertNotNull(institution); + } + + /** + * Method under test: {@link InstitutionServiceImpl#getInstitutionsByProductId(String, Integer, Integer)} + */ + @Test + void testInstitutionsInstitutionsByProductId() { + List institutions = new ArrayList<>(); + when(institutionConnector.findInstitutionsByProductId(any(), any(), any())).thenReturn(institutions); + List institutionsResult = institutionServiceImpl.getInstitutionsByProductId("id", 0, 1); + assertTrue(institutionsResult.isEmpty()); + } + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitution4() { + Institution institution = new Institution(); + when(institutionConnector.save(any())).thenReturn(institution); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName("START - check institution {} already exists"); + institutionByLegal.setBusinessTaxId("42"); + + SelfCareUser selfCareUser = mock(SelfCareUser.class); + Institution institutionResult = institutionServiceImpl.createPgInstitution("42", "42", false, selfCareUser); + assertSame(institution, institutionResult); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitution2() { + Institution institution = new Institution(); + when(coreConfig.isInfoCamereEnable()).thenReturn(true); + List list = new ArrayList<>(); + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName("START - check institution {} already exists"); + institutionByLegal.setBusinessTaxId("42"); + list.add(institutionByLegal); + when(partyRegistryProxyConnector.getInstitutionsByLegal(any())).thenReturn(list); + when(institutionConnector.save(any())).thenReturn(institution); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + + SelfCareUser selfCareUser = mock(SelfCareUser.class); + assertSame(institution, institutionServiceImpl.createPgInstitution("42", "42", true, selfCareUser)); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitution5() { + when(institutionConnector.findByExternalId(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "START - check institution {} already exists")); + assertThrows(ResourceNotFoundException.class, + () -> institutionServiceImpl.createPgInstitution("42", "42", true, mock(SelfCareUser.class))); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitution6() { + Institution institution = new Institution(); + when(institutionConnector.save(any())).thenReturn(institution); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName("START - check institution {} already exists"); + institutionByLegal.setBusinessTaxId("42"); + + SelfCareUser selfCareUser = mock(SelfCareUser.class); + assertSame(institution, institutionServiceImpl.createPgInstitution("42", "42", false, selfCareUser)); + verify(institutionConnector).save(any()); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitution7() { + when(institutionConnector.save(any())) + .thenThrow(new ResourceConflictException("An error occurred", "START - check institution {} already exists")); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName("START - check institution {} already exists"); + institutionByLegal.setBusinessTaxId("42"); + + SelfCareUser selfCareUser = mock(SelfCareUser.class); + assertThrows(ResourceConflictException.class, + () -> institutionServiceImpl.createPgInstitution("42", "42", true, selfCareUser)); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitution9() { + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName("START - check institution {} already exists"); + institutionByLegal.setBusinessTaxId("42"); + + NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); + nationalRegistriesProfessionalAddress.setAddress("42 Main St"); + nationalRegistriesProfessionalAddress.setZipCode("21654"); + Institution institution = new Institution(); + when(institutionConnector.save(any())).thenReturn(institution); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + SelfCareUser selfCareUser = mock(SelfCareUser.class); + assertSame(institution, institutionServiceImpl.createPgInstitution("42", "42", true, selfCareUser)); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitution14() { + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName("START - check institution {} already exists"); + institutionByLegal.setBusinessTaxId("42"); + + NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); + nationalRegistriesProfessionalAddress.setAddress("42 Main St"); + nationalRegistriesProfessionalAddress.setZipCode("21654"); + Institution institution = new Institution(); + when(institutionConnector.save(any())).thenReturn(institution); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + SelfCareUser selfCareUser = mock(SelfCareUser.class); + assertSame(institution, institutionServiceImpl.createPgInstitution("42", "42", false, selfCareUser)); + verify(institutionConnector).save(any()); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionProducts(Institution, List)} + */ + @Test + void testRetrieveInstitutionProducts() { + Institution institution = new Institution(); + Onboarding onboarding = new Onboarding(); + onboarding.setStatus(RelationshipState.PENDING); + List list = new ArrayList<>(); + list.add(RelationshipState.PENDING); + institution.setOnboarding(List.of(onboarding)); + assertEquals(1, institutionServiceImpl.retrieveInstitutionProducts(institution, list).size()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionProducts(Institution, List)} + */ + @Test + void testRetrieveInstitutionProducts3() { + Institution institution = new Institution(); + Onboarding onboarding = new Onboarding(); + onboarding.setStatus(RelationshipState.PENDING); + institution.setOnboarding(List.of(onboarding)); + List list = new ArrayList<>(); + assertEquals(1, institutionServiceImpl.retrieveInstitutionProducts(institution, list).size()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionProduct(String, String)} + */ + @Test + void testRetrieveInstitutionProduct2() { + + Institution institution = new Institution(); + when(institutionConnector.findByExternalIdAndProductId(any(), any())).thenReturn(institution); + + + assertSame(institution, institutionServiceImpl.retrieveInstitutionProduct("42", "42")); + verify(institutionConnector).findByExternalIdAndProductId(any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionGeoTaxonomies(Institution)} + */ + @Test + void testRetrieveInstitutionGeoTaxonomies2() { + + Institution institution = new Institution(); + institution.setGeographicTaxonomies(new ArrayList<>()); + Assertions.assertThrows(MsCoreException.class, () -> institutionServiceImpl.retrieveInstitutionGeoTaxonomies(institution)); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionGeoTaxonomies(Institution)} + */ + @Test + void testRetrieveInstitutionGeoTaxonomies4() { + GeographicTaxonomies geographicTaxonomies = new GeographicTaxonomies(); + geographicTaxonomies.setGeotaxId("Code"); + geographicTaxonomies.setCountry("GB"); + geographicTaxonomies.setCountryAbbreviation("GB"); + geographicTaxonomies.setDescription("The characteristics of someone or something"); + geographicTaxonomies.setEnable(true); + geographicTaxonomies.setIstatCode(""); + geographicTaxonomies.setProvinceId("Province"); + geographicTaxonomies.setProvinceAbbreviation("Province Abbreviation"); + geographicTaxonomies.setRegionId("us-east-2"); + + when(partyRegistryProxyConnector.getExtByCode(any())).thenReturn(geographicTaxonomies); + + ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); + institutionGeographicTaxonomiesList.add(new InstitutionGeographicTaxonomies( + "Retrieving geographic taxonomies for institution {}", "The characteristics of someone or something")); + + Institution institution = new Institution(); + institution.setGeographicTaxonomies(institutionGeographicTaxonomiesList); + assertEquals(1, institutionServiceImpl.retrieveInstitutionGeoTaxonomies(institution).size()); + verify(partyRegistryProxyConnector).getExtByCode(any()); + } + + /** + * Method under test: {@link InstitutionService#updateInstitution(String, InstitutionUpdate, String)} + */ + @Test + void updateInstitution_shouldThrowExceptionIfGeotaxNotFound() { + + when(partyRegistryProxyConnector.getExtByCode(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + + ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); + institutionGeographicTaxonomiesList + .add(new InstitutionGeographicTaxonomies("Code", "The characteristics of someone or something")); + + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setAddress("42 Main St"); + institutionUpdate.setBusinessRegisterPlace("Business Register Place"); + institutionUpdate + .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); + institutionUpdate.setDescription("The characteristics of someone or something"); + institutionUpdate.setDigitalAddress("42 Main St"); + institutionUpdate.setGeographicTaxonomies(institutionGeographicTaxonomiesList); + institutionUpdate.setImported(true); + institutionUpdate.setInstitutionType(InstitutionType.PA); + institutionUpdate + .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); + institutionUpdate.setRea("Rea"); + institutionUpdate.setShareCapital("Share Capital"); + institutionUpdate.setSupportEmail("jane.doe@example.org"); + institutionUpdate.setSupportPhone("6625550144"); + institutionUpdate.setTaxCode("Tax Code"); + institutionUpdate.setZipCode("21654"); + assertThrows(MsCoreException.class, + () -> institutionServiceImpl.updateInstitution("42", institutionUpdate, "42")); + verify(partyRegistryProxyConnector).getExtByCode(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#updateInstitutionDelegation(String, boolean)} (String, InstitutionUpdate, String)} + */ + @Test + void testUpdateInstitutionDelegation() { + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDelegation(true); + assertDoesNotThrow( + () -> institutionServiceImpl.updateInstitutionDelegation("42", true)); + verify(institutionConnector).findAndUpdate("42", null, null, institutionUpdate); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalIds(List, String)} + */ + @Test + void testRetrieveInstitutionByExternalIds2() { + + when(institutionConnector.findByExternalIdsAndProductId(any(), any())).thenReturn(List.of()); + + ArrayList validInstitutionList = new ArrayList<>(); + List actualRetrieveInstitutionByExternalIdsResult = institutionServiceImpl + .retrieveInstitutionByExternalIds(validInstitutionList, "42"); + + assertSame(validInstitutionList, actualRetrieveInstitutionByExternalIdsResult); + assertTrue(actualRetrieveInstitutionByExternalIdsResult.isEmpty()); + verify(institutionConnector).findByExternalIdsAndProductId(any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalIds(List, String)} + */ + @Test + void testRetrieveInstitutionByExternalIds3() { + + when(institutionConnector.findByExternalIdsAndProductId(any(), any())).thenReturn(List.of()); + + ArrayList validInstitutionList = new ArrayList<>(); + validInstitutionList.add(new ValidInstitution("42", "The characteristics of someone or something")); + List actualRetrieveInstitutionByExternalIdsResult = institutionServiceImpl + .retrieveInstitutionByExternalIds(validInstitutionList, "42"); + assertSame(validInstitutionList, actualRetrieveInstitutionByExternalIdsResult); + assertEquals(1, actualRetrieveInstitutionByExternalIdsResult.size()); + verify(institutionConnector).findByExternalIdsAndProductId(any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalIds(List, String)} + */ + @Test + void testRetrieveInstitutionByExternalIds4() { + + + when(institutionConnector.findByExternalIdsAndProductId(any(), any())).thenReturn(new ArrayList<>()); + + ArrayList validInstitutionList = new ArrayList<>(); + validInstitutionList.add(new ValidInstitution("42", "The characteristics of someone or something")); + validInstitutionList.add(new ValidInstitution("42", "The characteristics of someone or something")); + List actualRetrieveInstitutionByExternalIdsResult = institutionServiceImpl + .retrieveInstitutionByExternalIds(validInstitutionList, "42"); + assertSame(validInstitutionList, actualRetrieveInstitutionByExternalIdsResult); + assertEquals(2, actualRetrieveInstitutionByExternalIdsResult.size()); + verify(institutionConnector).findByExternalIdsAndProductId(any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalIds(List, String)} + */ + @Test + void testRetrieveInstitutionByExternalIds5() { + + ArrayList stringList = new ArrayList<>(); + stringList.add("42"); + + when(institutionConnector.findByExternalIdsAndProductId(any(), any())).thenReturn(stringList); + + ArrayList validInstitutionList = new ArrayList<>(); + validInstitutionList.add(new ValidInstitution("42", "The characteristics of someone or something")); + List actualRetrieveInstitutionByExternalIdsResult = institutionServiceImpl + .retrieveInstitutionByExternalIds(validInstitutionList, "42"); + assertSame(validInstitutionList, actualRetrieveInstitutionByExternalIdsResult); + assertTrue(actualRetrieveInstitutionByExternalIdsResult.isEmpty()); + verify(institutionConnector).findByExternalIdsAndProductId(any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#findInstitutionsByGeoTaxonomies(String, SearchMode)} + */ + @Test + void testFindInstitutionsByGeoTaxonomies3() { + + ArrayList institutionList = new ArrayList<>(); + when(institutionConnector.findByGeotaxonomies(any(), any())) + .thenReturn(institutionList); + List actualFindInstitutionsByGeoTaxonomiesResult = institutionServiceImpl + .findInstitutionsByGeoTaxonomies("Geo Taxonomies", SearchMode.ALL); + assertSame(institutionList, actualFindInstitutionsByGeoTaxonomiesResult); + assertTrue(actualFindInstitutionsByGeoTaxonomiesResult.isEmpty()); + verify(institutionConnector).findByGeotaxonomies(any(), any()); + } + + @Test + void testFindInstitutionsByGeoTaxonomies1() { + assertThrows(InvalidRequestException.class, () -> institutionServiceImpl.findInstitutionsByGeoTaxonomies("", SearchMode.ALL)); + } + + /** + * Method under test: {@link InstitutionServiceImpl#findInstitutionsByProductId(String)} + */ + @Test + void testFindInstitutionsByProductId2() { + when(institutionConnector.findByProductId(any())).thenReturn(new ArrayList<>()); + assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.findInstitutionsByProductId("42")); + } + + + /** + * Method under test: {@link InstitutionServiceImpl#findInstitutionsByProductId(String)} + */ + @Test + void testFindInstitutionsByProductId3() { + when(institutionConnector.findByProductId(any())).thenReturn(List.of(new Institution())); + assertDoesNotThrow(() -> institutionServiceImpl.findInstitutionsByProductId("42")); + } + + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByIds(List)} + */ + @Test + void testRetrieveInstitutionByIds2() { + + ArrayList institutionList = new ArrayList<>(); + when(institutionConnector.findAllByIds(any())).thenReturn(institutionList); + + List actualRetrieveInstitutionByIdsResult = institutionServiceImpl + .retrieveInstitutionByIds(new ArrayList<>()); + assertSame(institutionList, actualRetrieveInstitutionByIdsResult); + assertTrue(actualRetrieveInstitutionByIdsResult.isEmpty()); + verify(institutionConnector).findAllByIds(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionProduct(String, String)} + */ + @Test + void testGetInstitutionProduct2() { + when(institutionConnector.findByExternalIdAndProductId(any(), any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.retrieveInstitutionProduct("42", "42")); + verify(institutionConnector).findByExternalIdAndProductId(any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveGeoTaxonomies(String)} + */ + @Test + void testGetGeoTaxonomies() { + GeographicTaxonomies geographicTaxonomies = new GeographicTaxonomies(); + geographicTaxonomies.setGeotaxId("Code"); + geographicTaxonomies.setCountry("GB"); + geographicTaxonomies.setCountryAbbreviation("GB"); + geographicTaxonomies.setDescription("The characteristics of someone or something"); + geographicTaxonomies.setEnable(true); + geographicTaxonomies.setIstatCode(""); + geographicTaxonomies.setProvinceId("Province"); + geographicTaxonomies.setProvinceAbbreviation("Province Abbreviation"); + geographicTaxonomies.setRegionId("us-east-2"); + when(partyRegistryProxyConnector.getExtByCode(any())).thenReturn(geographicTaxonomies); + Optional optionalGeographicTaxonomies = institutionServiceImpl.retrieveGeoTaxonomies("Code"); + assertTrue(optionalGeographicTaxonomies.isPresent()); + assertSame(geographicTaxonomies,optionalGeographicTaxonomies.get()); + verify(partyRegistryProxyConnector).getExtByCode(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveGeoTaxonomies(String)} + */ + @Test + void getGeoTaxonomies_whenGeoTaxIsEmpty() { + when(partyRegistryProxyConnector.getExtByCode(any())) + .thenThrow(new ResourceNotFoundException("","")); + assertTrue(institutionServiceImpl.retrieveGeoTaxonomies("Code").isEmpty()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionsWithFilter(String, String, List)} + */ + @Test + void testRetrieveInstitutionsWithFilter() { + when(institutionConnector.findWithFilter(any(), any(), any())) + .thenReturn(new ArrayList<>()); + List list = List.of(RelationshipState.ACTIVE); + assertThrows(ResourceNotFoundException.class, + () -> institutionServiceImpl.retrieveInstitutionsWithFilter("42", "42", list)); + verify(institutionConnector).findWithFilter(any(), any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionsWithFilter(String, String, List)} + */ + @Test + void testRetrieveInstitutionsWithFilter2() { + ArrayList institutionList = new ArrayList<>(); + institutionList.add(new Institution()); + when(institutionConnector.findWithFilter(any(), any(), any())) + .thenReturn(institutionList); + institutionServiceImpl.retrieveInstitutionsWithFilter("42", "42", new ArrayList<>()); + verify(institutionConnector).findWithFilter(any(), any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionsWithFilter(String, String, List)} + */ + @Test + void testRetrieveInstitutionsWithFilter3() { + when(institutionConnector.findWithFilter(any(), any(), any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + List list = List.of(RelationshipState.ACTIVE); + assertThrows(ResourceNotFoundException.class, + () -> institutionServiceImpl.retrieveInstitutionsWithFilter("42", "42", list)); + verify(institutionConnector).findWithFilter(any(), any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionsWithFilter(String, String, List)} + */ + @Test + void testRetrieveInstitutionsWithFilter6() { + + when(institutionConnector.findWithFilter(any(), any(), any())) + .thenReturn(List.of(new Institution())); + + institutionServiceImpl.retrieveInstitutionsWithFilter("42", "42", new ArrayList<>()); + verify(institutionConnector).findWithFilter(any(), any(), any()); + } + + @Test + void testUpdateInstitutionDescription() { + //given + final String institutionId = "id"; + + Institution updatedInstitution = new Institution(); + updatedInstitution.setId(institutionId); + updatedInstitution.setDescription("newDesc"); + updatedInstitution.setParentDescription("newRootName"); + + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDescription("newDesc"); + institutionUpdate.setParentDescription("newRootName"); + + //when + when(institutionConnector.findById(institutionId)).thenReturn(new Institution()); + when(institutionConnector.findAndUpdate(institutionId, null, Collections.emptyList(), institutionUpdate)).thenReturn(updatedInstitution); + + //then + Institution result = institutionServiceImpl.updateInstitution(institutionId, institutionUpdate, "userId"); + verify(delegationConnector).updateDelegation(updatedInstitution); + verify(userApiConnector).updateUserInstitution(institutionId, institutionUpdate); + assertEquals(result, updatedInstitution); + } + + @Test + void testUpdateInstitutionDescription_updateDelegationsFails() { + //given + final String institutionId = "id"; + + Institution outdatedInstitution = new Institution(); + outdatedInstitution.setId(institutionId); + outdatedInstitution.setDescription("oldDesc"); + outdatedInstitution.setParentDescription("oldRootName"); + + Institution updatedInstitution = new Institution(); + updatedInstitution.setId(institutionId); + updatedInstitution.setDescription("newDesc"); + updatedInstitution.setParentDescription("newRootName"); + + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDescription("newDesc"); + institutionUpdate.setParentDescription("newRootName"); + + InstitutionUpdate institutionRollback = new InstitutionUpdate(); + institutionRollback.setDescription("oldDesc"); + institutionRollback.setParentDescription("oldRootName"); + + //when + when(institutionConnector.findById(institutionId)).thenReturn(outdatedInstitution); + when(institutionConnector.findAndUpdate(institutionId, null, Collections.emptyList(), institutionUpdate)).thenReturn(updatedInstitution); + doThrow(new RuntimeException()).when(delegationConnector).updateDelegation(updatedInstitution); + + Executable executable = () -> institutionServiceImpl.updateInstitution(institutionId, institutionUpdate, "userId"); + // Then + assertThrows(MsCoreException.class, executable); + verify(institutionConnector).findAndUpdate(institutionId,null, null, institutionRollback); + verifyNoInteractions(userApiConnector); + } + + @Test + void testUpdateInstitutionDescription_updateUserInstitutionFails() { + //given + final String institutionId = "id"; + + Institution outdatedInstitution = new Institution(); + outdatedInstitution.setId(institutionId); + outdatedInstitution.setDescription("oldDesc"); + outdatedInstitution.setParentDescription("oldRootName"); + + Institution updatedInstitution = new Institution(); + updatedInstitution.setId(institutionId); + updatedInstitution.setDescription("newDesc"); + updatedInstitution.setParentDescription("newRootName"); + + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDescription("newDesc"); + institutionUpdate.setParentDescription("newRootName"); + + InstitutionUpdate institutionRollback = new InstitutionUpdate(); + institutionRollback.setDescription("oldDesc"); + institutionRollback.setParentDescription("oldRootName"); + + //when + when(institutionConnector.findById(institutionId)).thenReturn(outdatedInstitution); + when(institutionConnector.findAndUpdate(institutionId, null, Collections.emptyList(), institutionUpdate)).thenReturn(updatedInstitution); + doThrow(new RuntimeException()).when(userApiConnector).updateUserInstitution(institutionId, institutionUpdate); + + Executable executable = () -> institutionServiceImpl.updateInstitution(institutionId, institutionUpdate, "userId"); + + //then + assertThrows(MsCoreException.class, executable); + verify(institutionConnector).findAndUpdate(institutionId,null, null, institutionRollback); + verify(delegationConnector).updateDelegation(outdatedInstitution); + } + + @Test + void updateInstitution_noDescription(){ + //when + when(institutionConnector.findById(any())).thenReturn(new Institution()); + when(institutionConnector.findAndUpdate(any(), any(), any(), any())).thenReturn(new Institution()); + + institutionServiceImpl.updateInstitution("id", new InstitutionUpdate(), "userId"); + + // Then + verifyNoInteractions(delegationConnector); + verifyNoInteractions(userApiConnector); + } + + @Test + void updateCreatedAt() { + // Given + String institutionIdMock = "institutionIdMock"; + String productIdMock = "productId"; + OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); + OffsetDateTime activatedAtMock = OffsetDateTime.parse("2020-11-02T02:15:30+01:00"); + + Onboarding onboardingMock1 = mockInstance(new Onboarding()); + onboardingMock1.setStatus(RelationshipState.ACTIVE); + onboardingMock1.setClosedAt(null); + onboardingMock1.setCreatedAt(OffsetDateTime.parse("2023-11-01T02:15:30+01:00")); + Onboarding onboardingMock2 = mockInstance(new Onboarding()); + onboardingMock2.setProductId(productIdMock); + onboardingMock2.setTokenId("222e4444-e99b-11d3-a446-422114890100"); + onboardingMock2.setStatus(RelationshipState.ACTIVE); + onboardingMock2.setClosedAt(null); + onboardingMock1.setCreatedAt(OffsetDateTime.parse("2020-11-01T02:15:30+01:00")); + Onboarding onboardingMock3 = mockInstance(new Onboarding()); + onboardingMock3.setStatus(RelationshipState.ACTIVE); + onboardingMock3.setClosedAt(null); + onboardingMock1.setCreatedAt(OffsetDateTime.parse("2022-12-11T02:15:30+01:00")); + + Institution updatedInstitutionMock = mockInstance(new Institution()); + updatedInstitutionMock.setId("123e4567-e89b-12d3-a456-426614174000"); + updatedInstitutionMock.setExternalId("00099991238"); + updatedInstitutionMock.setDigitalAddress("DigitalAddress@example.com"); + updatedInstitutionMock.setInstitutionType(InstitutionType.PA); + updatedInstitutionMock.setTaxCode(updatedInstitutionMock.getExternalId()); + updatedInstitutionMock.setOnboarding(List.of(onboardingMock1, onboardingMock2, onboardingMock3)); + updatedInstitutionMock.setGeographicTaxonomies(Collections.emptyList()); + updatedInstitutionMock.setPaymentServiceProvider(null); + updatedInstitutionMock.setDataProtectionOfficer(null); + updatedInstitutionMock.setImported(false); + updatedInstitutionMock.setCreatedAt(OffsetDateTime.parse("2019-11-01T02:15:30+01:00")); + updatedInstitutionMock.setUpdatedAt(OffsetDateTime.now()); + + TokenUser tokenUserMock1 = mockInstance(new TokenUser()); + tokenUserMock1.setUserId("999e9999-e89b-12d3-a456-426614174000"); + TokenUser tokenUserMock2 = mockInstance(new TokenUser()); + tokenUserMock2.setUserId("321e9876-e89b-12d3-a456-426614174000"); + tokenUserMock2.setRole(PartyRole.DELEGATE); + + when(institutionConnector.updateOnboardedProductCreatedAt(institutionIdMock, productIdMock, createdAtMock)) + .thenReturn(updatedInstitutionMock); + + // When + institutionServiceImpl.updateCreatedAt(institutionIdMock, productIdMock, createdAtMock, activatedAtMock); + // Then + verify(institutionConnector, times(1)) + .updateOnboardedProductCreatedAt(institutionIdMock, productIdMock, createdAtMock); + verifyNoMoreInteractions(institutionConnector); + } + + @Test + void updateCreatedAt_nullInstitutionId() { + // Given + String productIdMock = "productId"; + OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); + // When + Executable executable = () -> institutionServiceImpl.updateCreatedAt(null, productIdMock, createdAtMock, null); + // Then + IllegalArgumentException illegalArgumentException = assertThrows(IllegalArgumentException.class, executable); + assertEquals("An institution ID is required.", illegalArgumentException.getMessage()); + verifyNoInteractions(institutionConnector); + } + + @Test + void updateCreatedAt_nullProductId() { + // Given + String institutionIdMock = "institutionId"; + OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); + // When + Executable executable = () -> institutionServiceImpl.updateCreatedAt(institutionIdMock, null, createdAtMock, null); + // Then + IllegalArgumentException illegalArgumentException = assertThrows(IllegalArgumentException.class, executable); + assertEquals("A product ID is required.", illegalArgumentException.getMessage()); + verifyNoInteractions(institutionConnector); + } + + @Test + void updateCreatedAt_nullCreatedAt() { + // Given + String institutionIdMock = "institutionId"; + String productIdMock = "producttId"; + // When + Executable executable = () -> institutionServiceImpl.updateCreatedAt(institutionIdMock, productIdMock, null, null); + // Then + IllegalArgumentException illegalArgumentException = assertThrows(IllegalArgumentException.class, executable); + assertEquals("A createdAt date is required.", illegalArgumentException.getMessage()); + verifyNoInteractions(institutionConnector); + + } + + @Test + void updateCreatedAt_onboardingNotFound() { + // Given + String institutionIdMock = "institutionId"; + String productIdMock = "producttId"; + OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); + OffsetDateTime activatedAtMock = OffsetDateTime.parse("2020-11-02T02:15:30+01:00"); + + Institution institutionMock = mockInstance(new Institution()); + institutionMock.setOnboarding(Collections.emptyList()); + when(institutionConnector.updateOnboardedProductCreatedAt(institutionIdMock, productIdMock, createdAtMock)) + .thenThrow(ResourceNotFoundException.class); + // When + Executable executable = () -> institutionServiceImpl.updateCreatedAt(institutionIdMock, productIdMock, createdAtMock, activatedAtMock); + // Then + assertThrows(ResourceNotFoundException.class, executable); + } + + /** + * Method under test: {@link InstitutionServiceImpl#getInstitutionBrokers(String, InstitutionType)} + */ + @Test + void getInstitutionBrokers() { + + Institution institution = new Institution(); + institution.setId("id"); + when(institutionConnector.findBrokers(any(), any())).thenReturn(List.of(institution)); + List institutions = institutionServiceImpl.getInstitutionBrokers("42", InstitutionType.PT); + assertNotNull(institutions); + assertFalse(institutions.isEmpty()); + assertNotNull(institutions.get(0)); + assertEquals(institutions.get(0).getId(), institution.getId()); + verify(institutionConnector).findBrokers(any(), any()); + + } + + /** + * Method under test: {@link InstitutionServiceImpl#getInstitutions(String, String)} + */ + @Test + void getInstitutionsByTaxCode() { + + Institution institution = new Institution(); + institution.setId("id"); + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())).thenReturn(List.of(institution)); + List institutions = institutionServiceImpl.getInstitutions("1111111", null); + assertNotNull(institutions); + assertFalse(institutions.isEmpty()); + assertNotNull(institutions.get(0)); + assertEquals(institutions.get(0).getId(), institution.getId()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); + + } + +} + diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImplTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImplTest.java new file mode 100644 index 0000000..f5e82e3 --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImplTest.java @@ -0,0 +1,105 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.EmailConnector; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.ProductConnector; +import it.pagopa.selfcare.mscore.api.UserApiConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.config.MailTemplateConfig; +import it.pagopa.selfcare.mscore.core.util.MailParametersMapper; +import it.pagopa.selfcare.mscore.model.CertifiedField; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.WorkContact; +import it.pagopa.selfcare.mscore.model.user.User; +import it.pagopa.selfcare.product.entity.Product; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class MailNotificationServiceImplTest { + + @InjectMocks + private MailNotificationServiceImpl notificationService; + + @Mock + private InstitutionConnector institutionConnector; + + @Mock + private ProductConnector productConnector; + + @Mock + private MailTemplateConfig mailTemplateConfig; + + @Mock + private EmailConnector emailConnector; + + @Mock + private MailParametersMapper mailParametersMapper; + + @Mock + private CoreConfig coreConfig; + + + @Mock + private UserApiConnector userApiConnector; + @Mock + private UserNotificationService userNotificationService; + + private static final User user; + + static { + user = new User(); + user.setId("1"); + user.setFiscalCode("ABC123XYZ"); + user.setName(new CertifiedField<>()); + user.setFamilyName(new CertifiedField<>()); + user.setEmail(new CertifiedField<>()); + + Map workContacts1 = new HashMap<>(); + WorkContact workContact = new WorkContact(); + CertifiedField email = new CertifiedField<>(); + email.setValue("email"); + workContact.setEmail(email); + workContacts1.put("id",workContact); + + user.setWorkContacts(workContacts1); + } + + @Test + void sendNotificationDelegationMail() { + Product product = new Product(); + product.setId("productId"); + product.setTitle("test"); + Institution institution = new Institution(); + institution.setId("institutionID"); + institution.setDigitalAddress("test@test.com"); + List userEmails = List.of("userEmail"); + + when(productConnector.getProductById(anyString())).thenReturn(product); + when(institutionConnector.findById(anyString())).thenReturn(institution); + when(userApiConnector.getUserEmails(institution.getId(), product.getId())).thenReturn(userEmails); + when(coreConfig.isSendEmailToInstitution()).thenReturn(true); + when(coreConfig.isEnableSendDelegationMail()).thenReturn(true); + Assertions.assertDoesNotThrow(() -> notificationService.sendMailForDelegation("institutionName", "productId", "partnerId")); + } + + @Test + void sendNotificationDelegationMailWithEmptyProduct() { + Institution institution = new Institution(); + institution.setDigitalAddress("test@test.com"); + when(productConnector.getProductById(anyString())).thenReturn(null); + when(institutionConnector.findById(anyString())).thenReturn(institution); + Assertions.assertDoesNotThrow(() -> notificationService.sendMailForDelegation("institutionName", "productId", "partnerId")); + } +} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingDaoTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingDaoTest.java new file mode 100644 index 0000000..b6283d2 --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingDaoTest.java @@ -0,0 +1,37 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +@ExtendWith(SpringExtension.class) +class OnboardingDaoTest { + + @Mock + private InstitutionConnector institutionConnector; + + @InjectMocks + private OnboardingDao onboardingDao; + + + @Test + void rollbackPersistOnboarding() { + + final String institutionId = "institutionId"; + final Onboarding onboarding = new Onboarding(); + onboarding.setProductId("productId"); + + onboardingDao.rollbackPersistOnboarding(institutionId, onboarding); + + verify(institutionConnector, times(1)) + .findAndRemoveOnboarding(institutionId, onboarding); + } + +} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java new file mode 100644 index 0000000..6fda8ba --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java @@ -0,0 +1,325 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PecNotificationConnector; +import it.pagopa.selfcare.mscore.api.ProductConnector; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.core.mapper.TokenMapper; +import it.pagopa.selfcare.mscore.core.mapper.TokenMapperImpl; +import it.pagopa.selfcare.mscore.core.util.UtilEnumList; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.onboarding.*; +import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.*; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.HttpStatus; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.util.ReflectionTestUtils; + + +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.List; +import java.util.UUID; + +import static it.pagopa.selfcare.mscore.constant.GenericError.DELETE_NOTIFICATION_OPERATION_ERROR; +import static it.pagopa.selfcare.mscore.constant.GenericError.ONBOARDING_OPERATION_ERROR; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {OnboardingServiceImpl.class}) +@ExtendWith(MockitoExtension.class) +class OnboardingServiceImplTest { + + @Mock + private OnboardingDao onboardingDao; + + @InjectMocks + private OnboardingServiceImpl onboardingServiceImpl; + + @Mock + private InstitutionService institutionService; + + @Mock + private InstitutionConnector institutionConnector; + + @Mock + private ProductConnector productConnector; + + @Mock + private UserNotificationService userNotificationService; + + @Mock + private PecNotificationConnector pecNotificationConnector; + + @Spy + private TokenMapper tokenMapper = new TokenMapperImpl(); + + /** + * Method under test: {@link OnboardingServiceImpl#verifyOnboardingInfo(String, String)} + */ + @Test + void testVerifyOnboardingInfo() { + doNothing().when(institutionService) + .retrieveInstitutionsWithFilter(any(), any(), any()); + onboardingServiceImpl.verifyOnboardingInfo("42", "42"); + verify(institutionService).retrieveInstitutionsWithFilter(any(), any(), + any()); + } + + /** + * Method under test: {@link OnboardingServiceImpl#verifyOnboardingInfoSubunit(String, String, String)} + */ + @Test + void shouldNothingWhenVerifyOnboardingInfoSubunit() { + when(institutionConnector.existsByTaxCodeAndSubunitCodeAndProductAndStatusList(any(), any(), any(), any())) + .thenReturn(true); + onboardingServiceImpl.verifyOnboardingInfoSubunit("42", "42", "example"); + verify(institutionConnector).existsByTaxCodeAndSubunitCodeAndProductAndStatusList(any(), any(), any(), any()); + } + + @Test + void VerifyOnboardingInfoSubunitResourceNotFound() { + when(institutionConnector.existsByTaxCodeAndSubunitCodeAndProductAndStatusList(any(), any(), any(), any())) + .thenReturn(false); + assertThrows(ResourceNotFoundException.class, () -> onboardingServiceImpl.verifyOnboardingInfoSubunit("42", "42", "example")); + + } + + @Test + void testVerifyOnboardingInfoByFilter() { + // Arrange + when(institutionConnector.existsOnboardingByFilters(Mockito.any())).thenReturn(true); + + VerifyOnboardingFilters verifyOnboardingFilters = new VerifyOnboardingFilters("Product", "", "", "Origin", "OriginId", ""); + // Act + onboardingServiceImpl.verifyOnboardingInfoByFilters(verifyOnboardingFilters); + + // Assert that nothing has changed + verify(institutionConnector).existsOnboardingByFilters(Mockito.any()); + } + + @Test + void testVerifyOnboardingInfoByFilterNotFound() { + // Arrange + when(institutionConnector.existsOnboardingByFilters(Mockito.any())).thenReturn(false); + + VerifyOnboardingFilters verifyOnboardingFilters = new VerifyOnboardingFilters("Product", "", "", "Origin", "OriginId", ""); + // Act + Assertions.assertThrows(ResourceNotFoundException.class, () -> onboardingServiceImpl.verifyOnboardingInfoByFilters(verifyOnboardingFilters)); + + // Assert that nothing has changed + verify(institutionConnector).existsOnboardingByFilters(Mockito.any()); + } + + /** + * Method under test: {@link OnboardingServiceImpl#verifyOnboardingInfo(String, String)} + */ + @Test + void testVerifyOnboardingInfo5() { + doThrow(new InvalidRequestException("An error occurred", "Code")).when(institutionService) + .retrieveInstitutionsWithFilter(any(), any(), any()); + assertThrows(InvalidRequestException.class, () -> onboardingServiceImpl.verifyOnboardingInfo("42", "42")); + verify(institutionService).retrieveInstitutionsWithFilter(any(), any(), + any()); + } + + @Test + void persistOnboarding_whenUserExistsOnRegistry() { + + ReflectionTestUtils.setField(onboardingServiceImpl, "sendingFrequencyPecNotification", 30); + ReflectionTestUtils.setField(onboardingServiceImpl, "epochDatePecNotification", "2024-01-01"); + + Onboarding onboarding = dummyOnboarding(); + onboarding.setStatus(UtilEnumList.VALID_RELATIONSHIP_STATES.get(0)); + Institution institution = new Institution(); + institution.setId("institutionId"); + institution.setOnboarding(List.of(onboarding, dummyOnboarding())); + + when(pecNotificationConnector.insertPecNotification(any(PecNotification.class))).thenReturn(true); + when(institutionConnector.findById(institution.getId())).thenReturn(institution); + + String institutionId = institution.getId(); + + String productId = onboarding.getProductId(); + Onboarding onb = new Onboarding(); + + StringBuilder statusCode = new StringBuilder(); + + onboardingServiceImpl.persistOnboarding(institutionId, + productId, onb, statusCode); + + assertEquals(HttpStatus.OK.value(), Integer.parseInt(statusCode.toString())); + } + + + + /** + * Method under test: {@link OnboardingServiceImpl#persistOnboarding(String, String, Onboarding)} + */ + @Test + void persistOnboarding_shouldRollback() { + + String pricingPlan = "pricingPlan"; + String productId = "productId"; + Onboarding onboarding = dummyOnboarding(); + onboarding.setStatus(UtilEnumList.VALID_RELATIONSHIP_STATES.get(0)); + + Onboarding onboardingToPersist = new Onboarding(); + onboardingToPersist.setPricingPlan(pricingPlan); + onboardingToPersist.setProductId(productId); + onboardingToPersist.setBilling(new Billing()); + + Institution institution = new Institution(); + institution.setId("institutionId"); + institution.setOnboarding(List.of(onboarding)); + + + when(institutionConnector.findById(institution.getId())).thenReturn(institution); + when(institutionConnector.findAndUpdate(any(), any(), any(), any())).thenThrow(new RuntimeException()); + String institutionId = institution.getId(); + + Assertions.assertThrows(InvalidRequestException.class, () -> onboardingServiceImpl.persistOnboarding( + institutionId, productId, onboardingToPersist, new StringBuilder())); + + verify(onboardingDao, times(1)) + .rollbackPersistOnboarding(any(), any()); + } + + /** + * Method under test: {@link OnboardingServiceImpl#persistOnboarding(String, String, Onboarding)} + */ + @Test + void persistOnboarding_whenUserNotExistsOnRegistry() { + + ReflectionTestUtils.setField(onboardingServiceImpl, "sendingFrequencyPecNotification", 30); + ReflectionTestUtils.setField(onboardingServiceImpl, "epochDatePecNotification", "2024-01-01"); + + String pricingPlan = "pricingPlan"; + String productId = "productId"; + Billing billing = new Billing(); + billing.setVatNumber("vatNumber"); + billing.setPublicServices(false); + billing.setRecipientCode("recipientCode"); + billing.setTaxCodeInvoicing("taxCodeInvoicing"); + Onboarding onboarding = dummyOnboarding(); + onboarding.setStatus(UtilEnumList.VALID_RELATIONSHIP_STATES.get(0)); + + Onboarding onboardingToPersist = new Onboarding(); + onboardingToPersist.setPricingPlan(pricingPlan); + onboardingToPersist.setProductId(productId); + onboardingToPersist.setBilling(billing); + onboardingToPersist.setIsAggregator(true); + + Institution institution = new Institution(); + institution.setId("institutionId"); + institution.setOnboarding(List.of(onboarding)); + institution.setDigitalAddress("test@junit.pagopa"); + + Token token = new Token(); + token.setId(onboarding.getTokenId()); + token.setInstitutionId("institutionId"); + token.setProductId(productId); + token.setCreatedAt(onboarding.getCreatedAt()); + token.setUpdatedAt(onboarding.getUpdatedAt()); + token.setStatus(onboarding.getStatus()); + token.setContractSigned(onboarding.getContract()); + + when(pecNotificationConnector.insertPecNotification(any(PecNotification.class))).thenReturn(true); + when(institutionConnector.findById(institution.getId())).thenReturn(institution); + when(institutionConnector.findAndUpdate(any(), any(), any(), any())).thenReturn(institution); + + StringBuilder statusCode = new StringBuilder(); + + onboardingServiceImpl.persistOnboarding(institution.getId(), productId, onboardingToPersist, statusCode); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Onboarding.class); + verify(institutionConnector, times(1)) + .findAndUpdate(any(), captor.capture(), any(), any()); + Onboarding actual = captor.getValue(); + assertEquals(billing, actual.getBilling()); + assertEquals(actual.getCreatedAt().getDayOfYear(), LocalDate.now().getDayOfYear()); + assertEquals(HttpStatus.CREATED.value(), Integer.parseInt(statusCode.toString())); + + ArgumentCaptor< PecNotification > argCaptor = ArgumentCaptor.forClass(PecNotification.class); + verify(pecNotificationConnector, times(1)). insertPecNotification(argCaptor.capture()); + assertEquals(productId, argCaptor.getValue().getProductId()); + assertEquals("institutionId", argCaptor.getValue().getInstitutionId()); + assertEquals("test@junit.pagopa", argCaptor.getValue().getDigitalAddress()); + } + + private Onboarding dummyOnboarding() { + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(new Billing()); + onboarding.setTokenId("42"); + onboarding.setPricingPlan("C3"); + onboarding.setProductId("42"); + return onboarding; + } + + @Test + void deleteOnboardedInstitution_success() { + + String institutionId = UUID.randomUUID().toString(); + String productId = UUID.randomUUID().toString(); + + Onboarding onboarding = new Onboarding(); + onboarding.setProductId(productId); + onboarding.setStatus(RelationshipState.DELETED); + + when(pecNotificationConnector.findAndDeletePecNotification(institutionId, productId)).thenReturn(true); + + onboardingServiceImpl.deleteOnboardedInstitution(institutionId, productId); + + verify(institutionConnector, times(1)).findAndDeleteOnboarding(institutionId, productId); + verify(pecNotificationConnector, times(1)).findAndDeletePecNotification(institutionId, productId); + } + + @Test + void deleteOnboardedInstitution_deletePecNotificationFails() { + + String institutionId = UUID.randomUUID().toString(); + String productId = "prod-io"; + + Onboarding onboarding = new Onboarding(); + onboarding.setProductId(productId); + onboarding.setStatus(RelationshipState.DELETED); + + when(pecNotificationConnector.findAndDeletePecNotification(institutionId, productId)).thenReturn(false); + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> { + onboardingServiceImpl.deleteOnboardedInstitution(institutionId, productId); + }); + + assertEquals(DELETE_NOTIFICATION_OPERATION_ERROR.getMessage(), exception.getMessage()); + assertEquals(ONBOARDING_OPERATION_ERROR.getCode(), exception.getCode()); + + verify(institutionConnector, times(1)).findAndDeleteOnboarding(institutionId, productId); + verify(pecNotificationConnector, times(1)).findAndDeletePecNotification(institutionId, productId); + } + + @Test + public void testCalculateModuleDayOfTheEpoch() { + LocalDate mockCurrentDate = LocalDate.of(2024, 2, 1); // 31 days after epoch + + ReflectionTestUtils.setField(onboardingServiceImpl, "sendingFrequencyPecNotification", 30); + ReflectionTestUtils.setField(onboardingServiceImpl, "epochDatePecNotification", "2024-01-01"); + ReflectionTestUtils.setField(onboardingServiceImpl, "currentDate", mockCurrentDate); + + int result = onboardingServiceImpl.calculateModuleDayOfTheEpoch(); + + LocalDate epochStart = LocalDate.parse("2024-01-01"); + long daysDiff = ChronoUnit.DAYS.between(epochStart, mockCurrentDate); + int expected = (int) (daysDiff % 30); + + assertEquals(expected, result); + } +} + diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/TestUtils.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/TestUtils.java new file mode 100644 index 0000000..1a58b10 --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/TestUtils.java @@ -0,0 +1,331 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.Env; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.TokenType; +import it.pagopa.selfcare.mscore.model.CertifiedField; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.*; +import it.pagopa.selfcare.mscore.model.user.User; +import it.pagopa.selfcare.mscore.model.user.UserBinding; +import it.pagopa.selfcare.mscore.model.user.UserToOnboard; + +import java.util.ArrayList; +import java.util.List; + +public class TestUtils { + + public static ContractImported dummyContractImported() { + + ContractImported contractImported = new ContractImported(); + contractImported.setContractType("Contract Type"); + contractImported.setFileName("foo.txt"); + contractImported.setFilePath("/directory/foo.txt"); + return contractImported; + } + + public static Token dummyToken() { + Token token = new Token(); + token.setChecksum("Checksum"); + token.setDeletedAt(null); + token.setContractSigned("Contract Signed"); + token.setContractTemplate("Contract Template"); + token.setCreatedAt(null); + token.setExpiringDate(null); + token.setId("42"); + token.setInstitutionId("42"); + token.setInstitutionUpdate(new InstitutionUpdate()); + token.setProductId("42"); + token.setStatus(RelationshipState.PENDING); + token.setType(TokenType.INSTITUTION); + token.setUpdatedAt(null); + TokenUser user = new TokenUser(); + user.setUserId("id"); + user.setRole(PartyRole.MANAGER); + token.setUsers(List.of(user)); + return token; + } + + public static OnboardingRequest dummyOnboardingRequest() { + OnboardingRequest onboardingRequest = new OnboardingRequest(); + onboardingRequest.setInstitutionExternalId("42"); + onboardingRequest.setPricingPlan("Pricing Plan"); + onboardingRequest.setProductId("prod-io"); + onboardingRequest.setProductName("Product Name"); + onboardingRequest.setSignContract(true); + onboardingRequest.setTokenType(TokenType.INSTITUTION); + onboardingRequest.setBillingRequest(new Billing()); + onboardingRequest.setUsers(new ArrayList<>()); + return onboardingRequest; + } + + public static InstitutionUpdate createSimpleInstitutionUpdate() { + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setAddress("42 Main St"); + institutionUpdate.setBusinessRegisterPlace("Business Register Place"); + institutionUpdate + .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); + institutionUpdate.setDescription("The characteristics of someone or something"); + institutionUpdate.setDigitalAddress("42 Main St"); + institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); + institutionUpdate.setImported(true); + institutionUpdate.setInstitutionType(InstitutionType.PA); + institutionUpdate + .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); + institutionUpdate.setRea("Rea"); + institutionUpdate.setShareCapital("Share Capital"); + institutionUpdate.setSupportEmail("jane.doe@example.org"); + institutionUpdate.setSupportPhone("6625550144"); + institutionUpdate.setTaxCode("Tax Code"); + institutionUpdate.setZipCode("21654"); + return institutionUpdate; + } + + public static InstitutionUpdate createSimpleInstitutionUpdatePT() { + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setAddress("42 Main St"); + institutionUpdate.setBusinessRegisterPlace("Business Register Place"); + institutionUpdate + .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); + institutionUpdate.setDescription("The characteristics of someone or something"); + institutionUpdate.setDigitalAddress("42 Main St"); + institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); + institutionUpdate.setImported(true); + institutionUpdate.setInstitutionType(InstitutionType.PT); + institutionUpdate + .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); + institutionUpdate.setRea("Rea"); + institutionUpdate.setShareCapital("Share Capital"); + institutionUpdate.setSupportEmail("jane.doe@example.org"); + institutionUpdate.setSupportPhone("6625550144"); + institutionUpdate.setTaxCode("Tax Code"); + institutionUpdate.setZipCode("21654"); + return institutionUpdate; + } + public static InstitutionUpdate createSimpleInstitutionUpdateSA() { + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setAddress("42 Main St"); + institutionUpdate.setBusinessRegisterPlace("Business Register Place"); + institutionUpdate + .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); + institutionUpdate.setDescription("The characteristics of someone or something"); + institutionUpdate.setDigitalAddress("42 Main St"); + institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); + institutionUpdate.setImported(true); + institutionUpdate.setInstitutionType(InstitutionType.SA); + institutionUpdate + .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); + institutionUpdate.setRea("Rea"); + institutionUpdate.setShareCapital("Share Capital"); + institutionUpdate.setSupportEmail("jane.doe@example.org"); + institutionUpdate.setSupportPhone("6625550144"); + institutionUpdate.setTaxCode("Tax Code"); + institutionUpdate.setZipCode("21654"); + return institutionUpdate; + } + + public static AdditionalInformations createSimpleAdditionalInformations(String type) { + AdditionalInformations additionalInformations = new AdditionalInformations(); + switch (type) { + case "ipa": + additionalInformations.setIpa(true); + additionalInformations.setBelongRegulatedMarket(false); + additionalInformations.setEstablishedByRegulatoryProvision(false); + additionalInformations.setAgentOfPublicService(false); + break; + case "regulatedMarket": + additionalInformations.setIpa(false); + additionalInformations.setBelongRegulatedMarket(true); + additionalInformations.setEstablishedByRegulatoryProvision(false); + additionalInformations.setAgentOfPublicService(false); + break; + case "establishedByRegulatoryProvision": + additionalInformations.setIpa(false); + additionalInformations.setBelongRegulatedMarket(false); + additionalInformations.setEstablishedByRegulatoryProvision(true); + additionalInformations.setAgentOfPublicService(false); + break; + case "agentOfPublicService": + additionalInformations.setIpa(false); + additionalInformations.setBelongRegulatedMarket(false); + additionalInformations.setEstablishedByRegulatoryProvision(false); + additionalInformations.setAgentOfPublicService(true); + break; + default: + additionalInformations.setIpa(false); + additionalInformations.setBelongRegulatedMarket(false); + additionalInformations.setEstablishedByRegulatoryProvision(false); + additionalInformations.setAgentOfPublicService(false); + } + + return additionalInformations; + } + + public static DataProtectionOfficer createSimpleDataProtectionOfficer() { + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + return dataProtectionOfficer; + } + + public static PaymentServiceProvider createSimplePaymentServiceProvider() { + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + return paymentServiceProvider; + } + + public static Billing createSimpleBilling() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + return billing; + } + + public static Contract createSimpleContract() { + + Contract contract = new Contract(); + contract.setPath("Path"); + contract.setVersion("1.0.2"); + return contract; + } + + public static Institution dummyInstitution() { + Institution institution = new Institution(); + institution.setId("institutionId"); + institution.setDescription("description"); + institution.setParentDescription("parentDescription"); + institution.setAddress("42 Main St"); + institution.setBusinessRegisterPlace("Business Register Place"); + institution + .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setImported(true); + institution.setInstitutionType(InstitutionType.PA); + institution + .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); + institution.setRea("Rea"); + institution.setShareCapital("Share Capital"); + institution.setSupportEmail("jane.doe@example.org"); + institution.setSupportPhone("6625550144"); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + return institution; + } + + public static User createSimpleUser() { + User user = new User(); + user.setId("1"); + user.setFiscalCode("ABC123XYZ"); + CertifiedField nome = new CertifiedField<>(); + nome.setValue("nome"); + user.setName(nome); + user.setFamilyName(nome); + user.setEmail(nome); + return user; + } + + public static InstitutionUpdate createDummyInstitutionUpdate(){ + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setAddress("42 Main St"); + institutionUpdate.setBusinessRegisterPlace("Business Register Place"); + institutionUpdate.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); + institutionUpdate.setDescription("The characteristics of someone or something"); + institutionUpdate.setDigitalAddress("42 Main St"); + institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); + institutionUpdate.setImported(true); + institutionUpdate.setInstitutionType(InstitutionType.PA); + institutionUpdate.setPaymentServiceProvider(createSimplePaymentServiceProvider()); + institutionUpdate.setRea("Rea"); + institutionUpdate.setShareCapital("Share Capital"); + institutionUpdate.setSupportEmail("jane.doe@example.org"); + institutionUpdate.setSupportPhone("4105551212"); + institutionUpdate.setTaxCode("Tax Code"); + institutionUpdate.setZipCode("21654"); + return institutionUpdate; + }public static InstitutionUpdate createDummyInstitutionUpdateGSP(){ + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setAddress("42 Main St"); + institutionUpdate.setBusinessRegisterPlace("Business Register Place"); + institutionUpdate.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); + institutionUpdate.setDescription("The characteristics of someone or something"); + institutionUpdate.setDigitalAddress("42 Main St"); + institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); + institutionUpdate.setImported(true); + institutionUpdate.setInstitutionType(InstitutionType.GSP); + institutionUpdate.setPaymentServiceProvider(createSimplePaymentServiceProvider()); + institutionUpdate.setRea("Rea"); + institutionUpdate.setShareCapital("Share Capital"); + institutionUpdate.setSupportEmail("jane.doe@example.org"); + institutionUpdate.setSupportPhone("4105551212"); + institutionUpdate.setTaxCode("Tax Code"); + institutionUpdate.setZipCode("21654"); + return institutionUpdate; + } + + public static OnboardingRequest createDummyOnboardingRequest(){ + OnboardingRequest onboardingRequest = new OnboardingRequest(); + onboardingRequest.setBillingRequest(createSimpleBilling()); + onboardingRequest.setContract(createSimpleContract()); + onboardingRequest.setInstitutionExternalId("42"); + onboardingRequest.setInstitutionUpdate(createDummyInstitutionUpdate()); + onboardingRequest.setPricingPlan("Pricing Plan"); + onboardingRequest.setProductId("42"); + onboardingRequest.setProductName("Product Name"); + onboardingRequest.setSignContract(true); + onboardingRequest.setContractFilePath("/example"); + + return onboardingRequest; + } + public static OnboardedUser dummyOnboardedUser(){ + OnboardedUser onboardedUser = new OnboardedUser(); + onboardedUser.setId("42"); + onboardedUser.setBindings(new ArrayList<>()); + return onboardedUser; + } + + public static UserBinding dummyUserBinding (){ + UserBinding userBinding = new UserBinding(); + userBinding.setInstitutionId("42"); + userBinding.setInstitutionName("Name"); + userBinding.setInstitutionRootName("RootName"); + userBinding.setProducts(new ArrayList<>()); + return userBinding; + } + + public static OnboardedProduct dummyOnboardedProduct(){ + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setProductId("prod-interop"); + onboardedProduct.setProductRole("productRole"); + onboardedProduct.setRole(PartyRole.DELEGATE); + onboardedProduct.setStatus(RelationshipState.ACTIVE); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setRelationshipId("RelId"); + onboardedProduct.setTokenId("tokenId"); + return onboardedProduct; + } + + public static UserToOnboard dummyUserToOnboard(){ + UserToOnboard userToOnboard = new UserToOnboard(); + userToOnboard.setEmail("prof.einstein@example.org"); + userToOnboard.setEnv(Env.COLL); + userToOnboard.setId("it.pagopa.selfcare.mscore.model.user.UserToOnboard"); + userToOnboard.setName("42"); + userToOnboard.setProductRole("42"); + userToOnboard.setRole(PartyRole.SUB_DELEGATE); + userToOnboard.setSurname("it.pagopa.selfcare.mscore.model.user.UserToOnboard"); + userToOnboard.setTaxCode("42"); + return userToOnboard; + } +} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImplTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImplTest.java new file mode 100644 index 0000000..f3619c3 --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImplTest.java @@ -0,0 +1,61 @@ +package it.pagopa.selfcare.mscore.core; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.api.FileStorageConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.model.onboarding.MailTemplate; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import software.amazon.awssdk.services.ses.SesClient; +import software.amazon.awssdk.services.ses.model.SendEmailRequest; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class UserNotificationServiceImplTest { + + @InjectMocks + private UserNotificationServiceImpl userNotificationService; + + @Mock + private FileStorageConnector fileStorageConnector; + + @Mock + private ObjectMapper objectMapper; + + @Mock + private CoreConfig coreConfig; + + @Mock + private SesClient sesClient; + + + @Test + void sendDelegationUserNotification() throws JsonProcessingException { + final String to = "id"; + when(fileStorageConnector.getTemplateFile(any())).thenReturn("template"); + MailTemplate mailTemplate = new MailTemplate(); + mailTemplate.setBody(Base64.getEncoder().encodeToString("test".getBytes(StandardCharsets.UTF_8))); + mailTemplate.setSubject(Base64.getEncoder().encodeToString("test".getBytes(StandardCharsets.UTF_8))); + when(objectMapper.readValue(anyString(),any(Class.class))).thenReturn(mailTemplate); + assertDoesNotThrow(() -> userNotificationService.sendDelegationUserNotification(List.of(to),"institution","product", new HashMap<>())); + + ArgumentCaptor actual = ArgumentCaptor.forClass(SendEmailRequest.class); + verify(sesClient, times(1)).sendEmail(actual.capture()); + assertEquals(to, actual.getValue().destination().toAddresses().get(0)); + } +} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPdaTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPdaTest.java new file mode 100644 index 0000000..6db228d --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPdaTest.java @@ -0,0 +1,236 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapperImpl; +import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import it.pagopa.selfcare.mscore.model.institution.CategoryProxyInfo; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.InstitutionProxyInfo; +import it.pagopa.selfcare.mscore.model.institution.NationalRegistriesProfessionalAddress; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.List; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +public class CreateInstitutionStrategyPdaTest { + @InjectMocks + CreateInstitutionStrategyFactory strategyFactory; + @Mock + InstitutionConnector institutionConnector; + @Mock + PartyRegistryProxyConnector partyRegistryProxyConnector; + @Spy + InstitutionMapper institutionMapper = new InstitutionMapperImpl(); + + private static final InstitutionProxyInfo dummyInstitutionProxyInfo; + private static final CategoryProxyInfo dummyCategoryProxyInfo; + private static final AreaOrganizzativaOmogenea dummyAreaOrganizzativaOmogenea; + + static { + dummyInstitutionProxyInfo = new InstitutionProxyInfo(); + dummyInstitutionProxyInfo.setAddress("42 Main St"); + dummyInstitutionProxyInfo.setAoo("Aoo"); + dummyInstitutionProxyInfo.setCategory("Category"); + dummyInstitutionProxyInfo.setDescription("The characteristics of someone or something"); + dummyInstitutionProxyInfo.setDigitalAddress("42 Main St"); + dummyInstitutionProxyInfo.setId("42"); + dummyInstitutionProxyInfo.setO("foo"); + dummyInstitutionProxyInfo.setOrigin("Origin"); + dummyInstitutionProxyInfo.setOriginId("42"); + dummyInstitutionProxyInfo.setOu("Ou"); + dummyInstitutionProxyInfo.setTaxCode("Tax Code"); + dummyInstitutionProxyInfo.setZipCode("21654"); + + dummyCategoryProxyInfo = new CategoryProxyInfo(); + dummyCategoryProxyInfo.setCode("Code"); + dummyCategoryProxyInfo.setKind("Kind"); + dummyCategoryProxyInfo.setName("Name"); + dummyCategoryProxyInfo.setOrigin("Origin"); + + dummyAreaOrganizzativaOmogenea = new AreaOrganizzativaOmogenea(); + dummyAreaOrganizzativaOmogenea.setOrigin(Origin.IPA); + dummyAreaOrganizzativaOmogenea.setDenominazioneAoo("Aoo"); + dummyAreaOrganizzativaOmogenea.setIndirizzo("Address"); + dummyAreaOrganizzativaOmogenea.setCAP("12345"); + dummyAreaOrganizzativaOmogenea.setCodiceFiscaleEnte(dummyInstitutionProxyInfo.getTaxCode()); + dummyAreaOrganizzativaOmogenea.setCodAoo("AOO"); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldThrowConflictCreateInstitutionForECFromIpaWithPda() { + + Institution institutionToReturn = new Institution(); + institutionToReturn.setId("id"); + institutionToReturn.setDescription("test"); + + //Given + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) + .thenReturn(List.of(new Institution())); + + + //When + assertThrows(ResourceConflictException.class, () -> strategyFactory.createInstitutionStrategyPda("EC") + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode("test") + .build())); + + verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionForECFromIpaWithPda() { + + Institution institutionToReturn = new Institution(); + institutionToReturn.setId("id"); + institutionToReturn.setDescription("test"); + + //Given + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(institutionConnector.save(any())).thenReturn(institutionToReturn); + + //When + Institution actual = strategyFactory.createInstitutionStrategyPda("EC") + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode("test") + .build()); + + assertThat(actual.getId()).isEqualTo(institutionToReturn.getId()); + assertThat(actual.getDescription()).isEqualTo(institutionToReturn.getDescription()); + + verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionForECFromInfocamereWithPda() { + + Institution institutionToReturn = new Institution(); + institutionToReturn.setId("id"); + institutionToReturn.setDescription("test"); + + NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); + nationalRegistriesProfessionalAddress.setZipCode("test"); + nationalRegistriesProfessionalAddress.setAddress("test"); + + //Given + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getInstitutionById(any())).thenThrow(new MsCoreException("NOT_FOUND", "404")); + when(partyRegistryProxyConnector.getLegalAddress(any())).thenReturn(nationalRegistriesProfessionalAddress); + when(institutionConnector.save(any())).thenReturn(institutionToReturn); + + //When + Institution actual = strategyFactory.createInstitutionStrategyPda("EC") + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode("test") + .build()); + + assertThat(actual.getId()).isEqualTo(institutionToReturn.getId()); + assertThat(actual.getDescription()).isEqualTo(institutionToReturn.getDescription()); + + verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(partyRegistryProxyConnector).getLegalAddress(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionForECFromInfocamereWithPda2() { + + Institution institutionToReturn = new Institution(); + institutionToReturn.setId("id"); + institutionToReturn.setDescription("test"); + + NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); + nationalRegistriesProfessionalAddress.setZipCode("test"); + nationalRegistriesProfessionalAddress.setAddress("test"); + + //Given + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getInstitutionById(any())).thenThrow(new ResourceNotFoundException("NOT_FOUND", "404")); + when(partyRegistryProxyConnector.getLegalAddress(any())).thenReturn(nationalRegistriesProfessionalAddress); + when(institutionConnector.save(any())).thenReturn(institutionToReturn); + + //When + Institution actual = strategyFactory.createInstitutionStrategyPda("EC") + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode("test") + .build()); + + assertThat(actual.getId()).isEqualTo(institutionToReturn.getId()); + assertThat(actual.getDescription()).isEqualTo(institutionToReturn.getDescription()); + + verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(partyRegistryProxyConnector).getLegalAddress(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldThrowErrorWhenInstitutionDoesNotExistsOnIpaAndInfocamere() { + + Institution institutionToReturn = new Institution(); + institutionToReturn.setId("id"); + institutionToReturn.setDescription("test"); + + NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); + nationalRegistriesProfessionalAddress.setZipCode("test"); + nationalRegistriesProfessionalAddress.setAddress("test"); + + //Given + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getInstitutionById(any())).thenThrow(new MsCoreException("NOT_FOUND", "404")); + when(partyRegistryProxyConnector.getLegalAddress(any())).thenThrow(new MsCoreException("NOT_FOUND", "404")); + + //When + assertThrows(ResourceNotFoundException.class, () -> strategyFactory.createInstitutionStrategyPda("EC") + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode("test") + .build())); + verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(partyRegistryProxyConnector).getLegalAddress(any()); + } +} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyTest.java new file mode 100644 index 0000000..366f238 --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyTest.java @@ -0,0 +1,643 @@ +package it.pagopa.selfcare.mscore.core.strategy; + + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapperImpl; +import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import it.pagopa.selfcare.mscore.core.util.TestUtils; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; +import it.pagopa.selfcare.mscore.model.institution.*; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class CreateInstitutionStrategyTest { + + @InjectMocks + CreateInstitutionStrategyFactory strategyFactory; + + @Mock + InstitutionConnector institutionConnector; + @Mock + PartyRegistryProxyConnector partyRegistryProxyConnector; + @Spy + InstitutionMapper institutionMapper = new InstitutionMapperImpl(); + + @InjectMocks + CreateInstitutionStrategyIvass createInstitutionStrategyIvass; + + + private static final InstitutionProxyInfo dummyInstitutionProxyInfo; + private static final CategoryProxyInfo dummyCategoryProxyInfo; + + private static final AreaOrganizzativaOmogenea dummyAreaOrganizzativaOmogenea; + private static final GeographicTaxonomies dummyGeotaxonomies; + private static final InstitutionGeographicTaxonomies dummyInstitutionGeotaxonomies; + + static { + dummyInstitutionProxyInfo = new InstitutionProxyInfo(); + dummyInstitutionProxyInfo.setAddress("42 Main St"); + dummyInstitutionProxyInfo.setAoo("Aoo"); + dummyInstitutionProxyInfo.setCategory("Category"); + dummyInstitutionProxyInfo.setDescription("The characteristics of someone or something"); + dummyInstitutionProxyInfo.setDigitalAddress("42 Main St"); + dummyInstitutionProxyInfo.setId("42"); + dummyInstitutionProxyInfo.setO("foo"); + dummyInstitutionProxyInfo.setOrigin("Origin"); + dummyInstitutionProxyInfo.setOriginId("42"); + dummyInstitutionProxyInfo.setOu("Ou"); + dummyInstitutionProxyInfo.setTaxCode("Tax Code"); + dummyInstitutionProxyInfo.setZipCode("21654"); + dummyInstitutionProxyInfo.setIstatCode("ecIstatCode"); + + dummyCategoryProxyInfo = new CategoryProxyInfo(); + dummyCategoryProxyInfo.setCode("Code"); + dummyCategoryProxyInfo.setKind("Kind"); + dummyCategoryProxyInfo.setName("Name"); + dummyCategoryProxyInfo.setOrigin("Origin"); + + dummyAreaOrganizzativaOmogenea = new AreaOrganizzativaOmogenea(); + dummyAreaOrganizzativaOmogenea.setOrigin(Origin.IPA); + dummyAreaOrganizzativaOmogenea.setDenominazioneAoo("Aoo"); + dummyAreaOrganizzativaOmogenea.setIndirizzo("Address"); + dummyAreaOrganizzativaOmogenea.setCAP("12345"); + dummyAreaOrganizzativaOmogenea.setCodiceFiscaleEnte(dummyInstitutionProxyInfo.getTaxCode()); + dummyAreaOrganizzativaOmogenea.setCodAoo("AOO"); + dummyAreaOrganizzativaOmogenea.setCodiceComuneISTAT("codIstatAOO"); + + dummyGeotaxonomies = new GeographicTaxonomies(); + dummyGeotaxonomies.setDescription("nomeCittΓ  - COMUNE"); + dummyGeotaxonomies.setProvinceAbbreviation("proAbbrv"); + dummyGeotaxonomies.setCountryAbbreviation("countryAbbrv"); + + dummyInstitutionGeotaxonomies = new InstitutionGeographicTaxonomies(); + dummyInstitutionGeotaxonomies.setCode("code"); + dummyInstitutionGeotaxonomies.setDesc("desc"); + } + + private UnitaOrganizzativa dummyUnitaOrganizzativa() { + + UnitaOrganizzativa dummyUnitaOrganizzativa = new UnitaOrganizzativa(); + dummyUnitaOrganizzativa.setOrigin(Origin.IPA); + dummyUnitaOrganizzativa.setDescrizioneUo("Uo"); + dummyUnitaOrganizzativa.setIndirizzo("Address"); + dummyUnitaOrganizzativa.setCAP("12345"); + dummyUnitaOrganizzativa.setCodiceFiscaleEnte(dummyInstitutionProxyInfo.getTaxCode()); + dummyUnitaOrganizzativa.setCodiceUniUo("UO"); + dummyUnitaOrganizzativa.setCodiceUniAoo("AOO"); + dummyUnitaOrganizzativa.setCodiceComuneISTAT("codIstatUO"); + return dummyUnitaOrganizzativa; + } + + @Test + void shouldThrowExceptionOnCreateInstitutionFromIpaIfAlreadyExists() { + + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) + .thenReturn(List.of(new Institution())); + assertThrows(ResourceConflictException.class, () -> strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder().subunitType(InstitutionPaSubunitType.AOO) + .build())); + + } + + @Test + void shouldThrowMsCoreExceptionWhenInstitutionAlreadyExists() { + String origin = "IVASS"; + String originId = "12345"; + + when(institutionConnector.findByOriginAndOriginId(origin, originId)).thenReturn(List.of(new Institution())); + + assertThrows(ResourceConflictException.class, () -> strategyFactory.createInstitutionStrategyIvass(new Institution()) + .createInstitution(CreateInstitutionStrategyInput.builder() + .ivassCode(originId) + .build())); + } + + @Test + void shouldThrowExceptionOnCreateInstitutionIfAlreadyExists() { + + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) + .thenReturn(List.of(new Institution())); + assertThrows(ResourceConflictException.class, () -> strategyFactory.createInstitutionStrategy(new Institution()) + .createInstitution(CreateInstitutionStrategyInput.builder() + .build())); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionFromAnac() { + + Institution institution = TestUtils.dummyInstitutionSa(); + SaResource saResource = new SaResource(); + saResource.setOriginId("originId"); + saResource.setTaxCode("taxCode"); + saResource.setDescription("desc"); + saResource.setDigitalAddress("test@test.it"); + when(partyRegistryProxyConnector.getSAFromAnac(any())).thenReturn(saResource); + when(institutionConnector.save(any())).thenReturn(institution); + //When + Institution actual = strategyFactory.createInstitutionStrategyAnac(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .build()); + + //Then + assertThat(actual.getDescription()).isEqualTo(institution.getDescription()); + assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(institution.getAddress()); + assertThat(actual.getZipCode()).isEqualTo(institution.getZipCode()); + assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); + assertThat(actual.getSubunitCode()).isNull(); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.SA); + assertThat(actual.getSubunitType()).isNull(); + + verify(institutionConnector).save(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionFromIvass() { + + Institution institution = TestUtils.dummyInstitutionAs(); + ASResource asResource = new ASResource(); + asResource.setOriginId("originId"); + asResource.setTaxCode("taxCode"); + asResource.setDescription("desc"); + asResource.setDigitalAddress("test@test.it"); + when(partyRegistryProxyConnector.getASFromIvass(any())).thenReturn(asResource); + when(institutionConnector.save(any())).thenReturn(institution); + //When + Institution actual = strategyFactory.createInstitutionStrategyIvass(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .build()); + + //Then + assertThat(actual.getDescription()).isEqualTo(institution.getDescription()); + assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(institution.getAddress()); + assertThat(actual.getZipCode()).isEqualTo(institution.getZipCode()); + assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); + assertThat(actual.getSubunitCode()).isNull(); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.AS); + assertThat(actual.getSubunitType()).isNull(); + + verify(institutionConnector).save(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitution() { + //Given + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), any())) + .thenReturn(List.of()); + + Institution institution = TestUtils.dummyInstitutionGsp(); + + //When + Institution actual = strategyFactory.createInstitutionStrategy(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .build()); + + //Then + assertThat(actual.getDescription()).isEqualTo(institution.getDescription()); + assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(institution.getAddress()); + assertThat(actual.getZipCode()).isEqualTo(institution.getZipCode()); + assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); + assertThat(actual.getSubunitCode()).isNull(); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.GSP); + assertThat(actual.getSubunitType()).isNull(); + + verify(institutionConnector).save(any()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionFromIpaAoo() { + //Given + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(partyRegistryProxyConnector.getAooById(any())).thenReturn(dummyAreaOrganizzativaOmogenea); + when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies).thenReturn(dummyGeotaxonomies); + //When + Institution actual = strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(dummyAreaOrganizzativaOmogenea.getCodiceFiscaleEnte()) + .subunitType(InstitutionPaSubunitType.AOO) + .subunitCode(dummyAreaOrganizzativaOmogenea.getCodAoo()) + .geographicTaxonomies(List.of(dummyInstitutionGeotaxonomies)) + .build()); + + //Then + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PA); + assertThat(actual.getOriginId()).isEqualTo(dummyAreaOrganizzativaOmogenea.getId()); + assertThat(actual.getDescription()).isEqualTo(dummyAreaOrganizzativaOmogenea.getDenominazioneAoo()); + assertThat(actual.getDigitalAddress()).isEqualTo(dummyInstitutionProxyInfo.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(dummyAreaOrganizzativaOmogenea.getIndirizzo()); + assertThat(actual.getZipCode()).isEqualTo(dummyAreaOrganizzativaOmogenea.getCAP()); + assertThat(actual.getTaxCode()).isEqualTo(dummyAreaOrganizzativaOmogenea.getCodiceFiscaleEnte()); + assertThat(actual.getSubunitCode()).isEqualTo(dummyAreaOrganizzativaOmogenea.getCodAoo()); + assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.AOO.name()); + assertThat(actual.getParentDescription()).isEqualTo(dummyInstitutionProxyInfo.getDescription()); + assertThat(actual.getCity()).isEqualTo(dummyGeotaxonomies.getDescription().replace(" - COMUNE", "")); + assertThat(actual.getGeographicTaxonomies().size()).isEqualTo(1); + assertThat(actual.getGeographicTaxonomies().get(0).getCode()).isEqualTo(dummyInstitutionGeotaxonomies.getCode()); + + verify(institutionConnector, times(2)).save(any()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyInstitutionProxyInfo.getIstatCode()); + verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyAreaOrganizzativaOmogenea.getCodiceComuneISTAT()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionFromIpaUo() { + + UnitaOrganizzativa dummyUnitaOrganizzativa = dummyUnitaOrganizzativa(); + + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(partyRegistryProxyConnector.getUoById(any())).thenReturn(dummyUnitaOrganizzativa); + when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies).thenReturn(dummyGeotaxonomies); + + Institution actual = strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()) + .subunitType(InstitutionPaSubunitType.UO) + .subunitCode(dummyUnitaOrganizzativa.getCodiceUniUo()) + .build()); + + //Then + assertThat(actual.getOriginId()).isEqualTo(dummyUnitaOrganizzativa.getId()); + assertThat(actual.getDescription()).isEqualTo(dummyUnitaOrganizzativa.getDescrizioneUo()); + + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PA); + assertThat(actual.getDigitalAddress()).isEqualTo(dummyInstitutionProxyInfo.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(dummyUnitaOrganizzativa.getIndirizzo()); + assertThat(actual.getZipCode()).isEqualTo(dummyUnitaOrganizzativa.getCAP()); + assertThat(actual.getTaxCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()); + assertThat(actual.getSubunitCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniUo()); + assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.UO.name()); + assertThat(actual.getParentDescription()).isEqualTo(dummyInstitutionProxyInfo.getDescription()); + assertThat(actual.getPaAttributes().getAooParentCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniAoo()); + assertThat(actual.getCity()).isEqualTo(dummyGeotaxonomies.getDescription().replace(" - COMUNE", "")); + + verify(institutionConnector, times(2)).save(any()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyInstitutionProxyInfo.getIstatCode()); + verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyUnitaOrganizzativa.getCodiceComuneISTAT()); + + } + + @Test + void createAooFromIpa_nullGeotax() { + //Given + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(partyRegistryProxyConnector.getAooById(any())).thenReturn(dummyAreaOrganizzativaOmogenea); + when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies).thenReturn(new GeographicTaxonomies()); + //When + Institution actual = strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(dummyAreaOrganizzativaOmogenea.getCodiceFiscaleEnte()) + .subunitType(InstitutionPaSubunitType.AOO) + .subunitCode(dummyAreaOrganizzativaOmogenea.getCodAoo()) + .build()); + + //Then + assertThat(actual.getCity()).isEqualTo(null); + verify(institutionConnector, times(2)).save(any()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyInstitutionProxyInfo.getIstatCode()); + verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyAreaOrganizzativaOmogenea.getCodiceComuneISTAT()); + + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionFromIpaUoRetrievingExistingEc() { + + UnitaOrganizzativa dummyUnitaOrganizzativa = dummyUnitaOrganizzativa(); + + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(partyRegistryProxyConnector.getUoById(any())).thenReturn(dummyUnitaOrganizzativa); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.of(new Institution())); + when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies); + Institution actual = strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()) + .subunitType(InstitutionPaSubunitType.UO) + .subunitCode(dummyUnitaOrganizzativa.getCodiceUniUo()) + .build()); + + //Then + assertThat(actual.getOriginId()).isEqualTo(dummyUnitaOrganizzativa.getId()); + assertThat(actual.getDescription()).isEqualTo(dummyUnitaOrganizzativa.getDescrizioneUo()); + + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PA); + assertThat(actual.getDigitalAddress()).isEqualTo(dummyInstitutionProxyInfo.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(dummyUnitaOrganizzativa.getIndirizzo()); + assertThat(actual.getZipCode()).isEqualTo(dummyUnitaOrganizzativa.getCAP()); + assertThat(actual.getTaxCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()); + assertThat(actual.getSubunitCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniUo()); + assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.UO.name()); + assertThat(actual.getParentDescription()).isEqualTo(dummyInstitutionProxyInfo.getDescription()); + assertThat(actual.getPaAttributes().getAooParentCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniAoo()); + assertThat(actual.getCity()).isEqualTo(dummyGeotaxonomies.getDescription().replace(" - COMUNE", "")); + + verify(institutionConnector, times(1)).save(any()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionFromIpaUoWithoutTaxCodeSfe() { + + UnitaOrganizzativa dummyUnitaOrganizzativa = dummyUnitaOrganizzativa(); + + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(partyRegistryProxyConnector.getUoById(any())).thenReturn(dummyUnitaOrganizzativa); + when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies).thenReturn(dummyGeotaxonomies); + + Institution actual = strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()) + .subunitType(InstitutionPaSubunitType.UO) + .subunitCode(dummyUnitaOrganizzativa.getCodiceUniUo()) + .build()); + + //Then + assertThat(actual.getOriginId()).isEqualTo(dummyUnitaOrganizzativa.getId()); + assertThat(actual.getDescription()).isEqualTo(dummyUnitaOrganizzativa.getDescrizioneUo()); + + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PA); + assertThat(actual.getDigitalAddress()).isEqualTo(dummyInstitutionProxyInfo.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(dummyUnitaOrganizzativa.getIndirizzo()); + assertThat(actual.getZipCode()).isEqualTo(dummyUnitaOrganizzativa.getCAP()); + assertThat(actual.getTaxCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()); + assertThat(actual.getSubunitCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniUo()); + assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.UO.name()); + assertThat(actual.getParentDescription()).isEqualTo(dummyInstitutionProxyInfo.getDescription()); + assertThat(actual.getPaAttributes().getAooParentCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniAoo()); + + verify(institutionConnector, times(2)).save(any()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldGetExistingEC() { + + Institution institutionToReturn = new Institution(); + institutionToReturn.setId("id"); + institutionToReturn.setDescription("test"); + + //Given + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(institutionConnector.save(any())).thenReturn(institutionToReturn); + when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies); + + //When + Institution actual = strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(dummyAreaOrganizzativaOmogenea.getCodiceFiscaleEnte()) + .subunitCode(dummyAreaOrganizzativaOmogenea.getCodAoo()) + .build()); + + assertThat(actual.getId()).isEqualTo(institutionToReturn.getId()); + assertThat(actual.getDescription()).isEqualTo(institutionToReturn.getDescription()); + + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyInstitutionProxyInfo.getIstatCode()); + } + + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionFromIpaUoWhenCodAooEmptyAndTipoMail() { + + UnitaOrganizzativa dummyUnitaOrganizzativa = dummyUnitaOrganizzativa(); + dummyUnitaOrganizzativa.setCodiceUniAoo(null); + dummyUnitaOrganizzativa.setTipoMail1("Pec"); + dummyUnitaOrganizzativa.setMail1("example@pec.it"); + + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(partyRegistryProxyConnector.getUoById(any())).thenReturn(dummyUnitaOrganizzativa); + when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies); + Institution actual = strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()) + .subunitType(InstitutionPaSubunitType.UO) + .subunitCode(dummyUnitaOrganizzativa.getCodiceUniUo()) + .build()); + + //Then + assertThat(actual.getOriginId()).isEqualTo(dummyUnitaOrganizzativa.getId()); + assertThat(actual.getDescription()).isEqualTo(dummyUnitaOrganizzativa.getDescrizioneUo()); + + assertThat(actual.getDigitalAddress()).isEqualTo(dummyUnitaOrganizzativa.getMail1()); + assertThat(actual.getAddress()).isEqualTo(dummyUnitaOrganizzativa.getIndirizzo()); + assertThat(actual.getZipCode()).isEqualTo(dummyUnitaOrganizzativa.getCAP()); + assertThat(actual.getTaxCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()); + assertThat(actual.getSubunitCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniUo()); + assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.UO.name()); + assertThat(actual.getPaAttributes()).isNull(); + + verify(institutionConnector, times(2)).save(any()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionWithOriginInfocamereWhenLegalAddressIsFound() { + + Institution institution = TestUtils.dummyInstitutionPg(); + + NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); + nationalRegistriesProfessionalAddress.setAddress("test address"); + nationalRegistriesProfessionalAddress.setZipCode("00000"); + when(partyRegistryProxyConnector.getLegalAddress(any())).thenReturn(nationalRegistriesProfessionalAddress); + + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + //When + Institution actual = strategyFactory.createInstitutionStrategyInfocamere(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .description(institution.getDescription()) + .build()); + + //Then + assertThat(actual.getDescription()).isEqualTo(institution.getDescription()); + assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(nationalRegistriesProfessionalAddress.getAddress()); + assertThat(actual.getZipCode()).isEqualTo(nationalRegistriesProfessionalAddress.getZipCode()); + assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); + assertThat(actual.getSubunitCode()).isNull(); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PG); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getOrigin()).isEqualTo(Origin.INFOCAMERE.getValue()); + + verify(institutionConnector).save(any()); + } + + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void createInstitutionWithOriginInfocamere_WhenInstitutionExists() { + + Institution institution = TestUtils.dummyInstitutionPg(); + final String description = "UPDATE DESCRIPTION"; + + when(institutionConnector.findByTaxCodeAndSubunitCode(institution.getTaxCode(), null)) + .thenReturn(List.of(institution)); + + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + //When + Institution actual = strategyFactory.createInstitutionStrategyInfocamere(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .description(description) + .build()); + + //Then + assertThat(actual.getDescription()).isEqualTo(description); + assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(institution.getAddress()); + assertThat(actual.getZipCode()).isEqualTo(institution.getZipCode()); + assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); + assertThat(actual.getSubunitCode()).isNull(); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getInstitutionType()).isEqualTo(institution.getInstitutionType()); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getOrigin()).isEqualTo(institution.getOrigin()); + + verify(institutionConnector).save(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionWithOriginSelcWhenLegalAddressIsNotFound() { + + Institution institution = TestUtils.dummyInstitutionPg(); + + when(partyRegistryProxyConnector.getLegalAddress(any())).thenThrow(ResourceNotFoundException.class); + + when(institutionConnector.save(any())).thenReturn(institution); + //When + Institution actual = strategyFactory.createInstitutionStrategyInfocamere(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .description(institution.getDescription()) + .build()); + + //Then + assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); + assertThat(actual.getSubunitCode()).isNull(); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PG); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getOriginId()).isEqualTo(institution.getTaxCode()); + + verify(institutionConnector).save(any()); + } + +} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapperTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapperTest.java new file mode 100644 index 0000000..e31ef9c --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapperTest.java @@ -0,0 +1,34 @@ +package it.pagopa.selfcare.mscore.core.util; + +import it.pagopa.selfcare.mscore.config.MailTemplateConfig; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.mockito.Mockito.when; + +@ExtendWith(SpringExtension.class) +class MailParametersMapperTest { + + @InjectMocks + private MailParametersMapper mailParametersMapper; + + @Mock + private MailTemplateConfig mailTemplateConfig; + + @Test + void getNotificationDelegationPath(){ + when(mailTemplateConfig.getDelegationNotificationPath()).thenReturn("path"); + Assertions.assertNotNull(mailParametersMapper.getDelegationNotificationPath()); + } + + @Test + void getNotificationDelegationParameters(){ + Assertions.assertNotNull(mailParametersMapper.getDelegationNotificationParameter("productName","productId", "partnerName")); + } + +} + diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtilsTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtilsTest.java new file mode 100644 index 0000000..62805a1 --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtilsTest.java @@ -0,0 +1,471 @@ +package it.pagopa.selfcare.mscore.core.util; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.Env; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.institution.Premium; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.user.UserBinding; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class OnboardingInfoUtilsTest { + + /** + * Method under test: {@link OnboardingInfoUtils#convertStatesToRelationshipsState(String[])} + */ + @Test + void testConvertStatesToRelationshipsState2() { + assertTrue(OnboardingInfoUtils.convertStatesToRelationshipsState(new String[]{}).isEmpty()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} + */ + @Test + void testGetUserInstitutionsWithProductStatusIn() { + ArrayList userInstitutionToBeFiltered = new ArrayList<>(); + assertThrows(ResourceNotFoundException.class, () -> OnboardingInfoUtils + .getUserInstitutionsWithProductStatusIn(userInstitutionToBeFiltered, new ArrayList<>())); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} + */ + @Test + void testGetUserInstitutionsWithProductStatusIn2() { + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(new ArrayList<>()); + + ArrayList userBindingList = new ArrayList<>(); + userBindingList.add(userBinding); + assertThrows(ResourceNotFoundException.class, + () -> OnboardingInfoUtils.getUserInstitutionsWithProductStatusIn(userBindingList, new ArrayList<>())); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} + */ + @Test + void testGetUserInstitutionsWithProductStatusIn3() { + ArrayList userInstitutionToBeFiltered = new ArrayList<>(); + + ArrayList relationshipStateList = new ArrayList<>(); + relationshipStateList.add(RelationshipState.PENDING); + assertThrows(ResourceNotFoundException.class, () -> OnboardingInfoUtils + .getUserInstitutionsWithProductStatusIn(userInstitutionToBeFiltered, relationshipStateList)); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} + */ + @Test + void testGetUserInstitutionsWithProductStatusIn4() { + ArrayList userInstitutionToBeFiltered = new ArrayList<>(); + + ArrayList relationshipStateList = new ArrayList<>(); + relationshipStateList.add(RelationshipState.PENDING); + relationshipStateList.add(RelationshipState.PENDING); + assertThrows(ResourceNotFoundException.class, () -> OnboardingInfoUtils + .getUserInstitutionsWithProductStatusIn(userInstitutionToBeFiltered, relationshipStateList)); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} + */ + @Test + void testGetUserInstitutionsWithProductStatusIn5() { + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract(", "); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole(""); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(onboardedProductList); + + ArrayList userBindingList = new ArrayList<>(); + userBindingList.add(userBinding); + assertThrows(ResourceNotFoundException.class, + () -> OnboardingInfoUtils.getUserInstitutionsWithProductStatusIn(userBindingList, new ArrayList<>())); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} + */ + @Test + void testGetUserInstitutionsWithProductStatusIn6() { + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract(", "); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole(""); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setUpdatedAt(null); + + OnboardedProduct onboardedProduct1 = new OnboardedProduct(); + onboardedProduct1.setContract(", "); + onboardedProduct1.setCreatedAt(null); + onboardedProduct1.setEnv(Env.ROOT); + onboardedProduct1.setProductId("42"); + onboardedProduct1.setProductRole(""); + onboardedProduct1.setRole(PartyRole.MANAGER); + onboardedProduct1.setStatus(RelationshipState.PENDING); + onboardedProduct1.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct1); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(onboardedProductList); + + ArrayList userBindingList = new ArrayList<>(); + userBindingList.add(userBinding); + assertThrows(ResourceNotFoundException.class, + () -> OnboardingInfoUtils.getUserInstitutionsWithProductStatusIn(userBindingList, new ArrayList<>())); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} + */ + @Test + void testGetUserInstitutionsWithProductStatusIn7() { + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract(", "); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole(""); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(onboardedProductList); + + ArrayList userBindingList = new ArrayList<>(); + userBindingList.add(userBinding); + + ArrayList relationshipStateList = new ArrayList<>(); + relationshipStateList.add(RelationshipState.PENDING); + List actualUserInstitutionsWithProductStatusIn = OnboardingInfoUtils + .getUserInstitutionsWithProductStatusIn(userBindingList, relationshipStateList); + assertEquals(1, actualUserInstitutionsWithProductStatusIn.size()); + assertEquals(onboardedProductList, actualUserInstitutionsWithProductStatusIn.get(0).getProducts()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} + */ + @Test + void testFindOnboardingLinkedToProductWithStateIn() { + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + ArrayList onboardedProductList = new ArrayList<>(); + userBinding.setProducts(onboardedProductList); + Institution onboardedInstitution = new Institution(); + assertNotNull( + OnboardingInfoUtils + .findOnboardingLinkedToProductWithStateIn(userBinding, onboardedInstitution, new ArrayList<>()) + .getOnboarding()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} + */ + @Test + void testFindOnboardingLinkedToProductWithStateIn6() { + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract("Contract"); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole(""); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(onboardedProductList); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + ArrayList relationshipStateList = new ArrayList<>(); + List onboarding1 = OnboardingInfoUtils + .findOnboardingLinkedToProductWithStateIn(userBinding, institution, relationshipStateList) + .getOnboarding(); + assertNotNull(onboarding1); + assertTrue(onboarding1.isEmpty()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} + */ + @Test + void testFindOnboardingLinkedToProductWithStateIn7() { + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract("Contract"); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole(""); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(onboardedProductList); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + Billing billing1 = new Billing(); + billing1.setPublicServices(true); + billing1.setRecipientCode("Recipient Code"); + billing1.setVatNumber("42"); + + Premium premium1 = new Premium(); + premium1.setContract("Contract"); + premium1.setStatus(RelationshipState.PENDING); + + Onboarding onboarding1 = new Onboarding(); + onboarding1.setBilling(billing1); + onboarding1.setContract("Contract"); + onboarding1.setCreatedAt(null); + onboarding1.setPricingPlan("Pricing Plan"); + onboarding1.setProductId("42"); + onboarding1.setStatus(RelationshipState.PENDING); + onboarding1.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding1); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + ArrayList relationshipStateList = new ArrayList<>(); + List onboarding2 = OnboardingInfoUtils + .findOnboardingLinkedToProductWithStateIn(userBinding, institution, relationshipStateList) + .getOnboarding(); + assertTrue(onboarding2.isEmpty()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} + */ + @Test + void testFindOnboardingLinkedToProductWithStateIn8() { + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract("Contract"); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole(""); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(onboardedProductList); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("Product Id"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + ArrayList relationshipStateList = new ArrayList<>(); + List onboarding1 = OnboardingInfoUtils + .findOnboardingLinkedToProductWithStateIn(userBinding, institution, relationshipStateList) + .getOnboarding(); + assertTrue(onboarding1.isEmpty()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} + */ + @Test + void testFindOnboardingLinkedToProductWithStateIn9() { + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract("Contract"); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole(""); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(onboardedProductList); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + + ArrayList relationshipStateList = new ArrayList<>(); + relationshipStateList.add(RelationshipState.PENDING); + List onboarding1 = OnboardingInfoUtils + .findOnboardingLinkedToProductWithStateIn(userBinding, institution, relationshipStateList) + .getOnboarding(); + assertEquals(onboardingList, onboarding1); + assertEquals(1, onboarding1.size()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getRelationShipStateList(String[])} + */ + @Test + void testGetRelationShipStateList() { + String[] states = {"ACTIVE"}; + List actualRelationShipStateList = OnboardingInfoUtils.getRelationShipStateList(states); + assertEquals(1, actualRelationShipStateList.size()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getRelationShipStateList(String[])} + */ + @Test + void testGetRelationShipStateList2() { + List actualRelationShipStateList = OnboardingInfoUtils.getRelationShipStateList(null); + assertEquals(2, actualRelationShipStateList.size()); + assertEquals(RelationshipState.ACTIVE, actualRelationShipStateList.get(0)); + assertEquals(RelationshipState.PENDING, actualRelationShipStateList.get(1)); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getRelationShipStateList(String[])} + */ + @Test + void testGetRelationShipStateList3() { + List actualRelationShipStateList = OnboardingInfoUtils + .getRelationShipStateList(new String[]{}); + assertEquals(2, actualRelationShipStateList.size()); + assertEquals(RelationshipState.ACTIVE, actualRelationShipStateList.get(0)); + assertEquals(RelationshipState.PENDING, actualRelationShipStateList.get(1)); + } +} + diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/TestUtils.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/TestUtils.java new file mode 100644 index 0000000..b99a593 --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/TestUtils.java @@ -0,0 +1,65 @@ +package it.pagopa.selfcare.mscore.core.util; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.Contract; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardingRequest; + +import java.time.OffsetDateTime; +import java.util.ArrayList; + +public class TestUtils { + + + public static Institution dummyInstitutionPa() { + return dummyInstitution(InstitutionType.PA); + } + public static Institution dummyInstitutionGsp() { + return dummyInstitution(InstitutionType.GSP); + } + + public static Institution dummyInstitutionSa() { + return dummyInstitution(InstitutionType.SA); + } + + public static Institution dummyInstitutionAs() { + return dummyInstitution(InstitutionType.AS); + } + public static Institution dummyInstitutionPt() { + return dummyInstitution(InstitutionType.PT); + } + + public static Institution dummyInstitutionPg() { + return dummyInstitution(InstitutionType.PG); + } + + private static Institution dummyInstitution(InstitutionType institutionType) { + + Billing billing = new Billing(); + ArrayList onboarding = new ArrayList<>(); + ArrayList geographicTaxonomies = new ArrayList<>(); + ArrayList attributes = new ArrayList<>(); + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + + return new Institution("42", "42", Origin.SELC.name(), "START - setupCommonData", + "The characteristics of someone or something", institutionType, "42 Main St", "42 Main St", "21654", + "TaxCode","ivass", "city", "county", "country", "istatCode", billing, onboarding, geographicTaxonomies, attributes, paymentServiceProvider, + new DataProtectionOfficer(), null, null, "START - setupCommonData", "START - setupCommonData", + "START - setupCommonData", true, OffsetDateTime.now(), OffsetDateTime.now(), null, null, null, null, new PaAttributes(),false); + } + + public static OnboardingRequest dummyOnboardingRequest(Billing billing, Contract contract, InstitutionUpdate institutionUpdate){ + OnboardingRequest onboardingRequest = new OnboardingRequest(); + onboardingRequest.setBillingRequest(billing); + onboardingRequest.setContract(contract); + onboardingRequest.setInstitutionExternalId("42"); + onboardingRequest.setInstitutionUpdate(institutionUpdate); + onboardingRequest.setPricingPlan("Pricing Plan"); + onboardingRequest.setProductId("42"); + onboardingRequest.setProductName("Product Name"); + onboardingRequest.setSignContract(true); + onboardingRequest.setUsers(new ArrayList<>()); + return onboardingRequest; + } +} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/model/DummyUser.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/model/DummyUser.java new file mode 100644 index 0000000..14bec6b --- /dev/null +++ b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/model/DummyUser.java @@ -0,0 +1,38 @@ +package it.pagopa.selfcare.mscore.core.util.model; + +import it.pagopa.selfcare.mscore.model.CertifiedField; +import it.pagopa.selfcare.mscore.model.institution.WorkContact; +import it.pagopa.selfcare.mscore.model.user.User; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class DummyUser extends User { + + public DummyUser(String institutionId){ + this.setId(UUID.randomUUID().toString()); + this.setFiscalCode("fiscalCode"); + this.setName(setValue("name")); + this.setFamilyName(setValue("familyName")); + this.setWorkContacts(setContact(institutionId, setWorkContact("email"))); + } + + private CertifiedField setValue(String value){ + CertifiedField certifiedField = new CertifiedField<>(); + certifiedField.setValue(value); + return certifiedField; + } + + private Map setContact(String institutionId, WorkContact workContact){ + Map contactMap = new HashMap<>(); + contactMap.put(institutionId, workContact); + return contactMap; + } + + private WorkContact setWorkContact(String value){ + WorkContact contact = new WorkContact(); + contact.setEmail(setValue(value)); + return contact; + } +} diff --git a/apps/institution-ms-new/lombok.config b/apps/institution-ms-new/lombok.config new file mode 100644 index 0000000..8f7e8aa --- /dev/null +++ b/apps/institution-ms-new/lombok.config @@ -0,0 +1 @@ +lombok.addLombokGeneratedAnnotation = true \ No newline at end of file diff --git a/apps/institution-ms-new/mvnw b/apps/institution-ms-new/mvnw new file mode 100644 index 0000000..a16b543 --- /dev/null +++ b/apps/institution-ms-new/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/apps/institution-ms-new/mvnw.cmd b/apps/institution-ms-new/mvnw.cmd new file mode 100644 index 0000000..c8d4337 --- /dev/null +++ b/apps/institution-ms-new/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/apps/institution-ms-new/pom.xml b/apps/institution-ms-new/pom.xml new file mode 100644 index 0000000..8c0314a --- /dev/null +++ b/apps/institution-ms-new/pom.xml @@ -0,0 +1,220 @@ + + + 4.0.0 + + it.pagopa.selfcare + selc-starter-parent + 0.0.3-SNAPSHOT + + + selc-ms-core + 1.0-SNAPSHOT + pom + selc-ms-core + Selface ms-core + + + connector-api + connector + core + web + app + + + + 2.5.1 + 5.2.1 + 5.2.1 + https://sonarcloud.io/ + + + + + + it.pagopa.selfcare + selc-commons-base + ${selc-commons.version} + + + it.pagopa.selfcare + selc-commons-base + ${selc-commons.version} + test-jar + + + it.pagopa.selfcare + selc-commons-web + ${selc-commons.version} + + + it.pagopa.selfcare + selc-commons-web + ${selc-commons.version} + test-jar + + + it.pagopa.selfcare.utils + selc-commons-crypto + ${selc-commons.version} + compile + + + it.pagopa.selfcare + selc-common-utils + ${selc-commons.version} + + + it.pagopa.selfcare + selc-commons-connector-rest + ${selc-commons.version} + + + it.pagopa.selfcare + selc-commons-connector-rest + ${selc-commons.version} + test-jar + test + + + it.pagopa.selfcare + selc-ms-core-connector-api + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-core + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-web + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-connector-rest + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-connector-dao + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-connector-email + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-connector-azure-storage + 1.0-SNAPSHOT + + + + + + + + jakarta.xml.soap + jakarta.xml.soap-api + 3.0.0 + + + jakarta.xml.ws + jakarta.xml.ws-api + 4.0.0 + + + com.sun.xml.ws + jaxws-rt + 4.0.0 + + + jakarta.activation + jakarta.activation-api + 2.1.0 + + + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.0 + + + com.sun.xml.bind + jaxb-impl + 4.0.1 + + + com.sun.xml.messaging.saaj + saaj-impl + 3.0.0 + + + it.pagopa.selfcare.soap + selc-commons-connector-soap-aruba-sign + ${selc-commons.version} + + + + javax.xml.bind + jaxb-api + 2.3.1 + + + javax.annotation + javax.annotation-api + 1.3.2 + + + org.bouncycastle + bcpkix-jdk15on + 1.70 + + + org.bouncycastle + bcprov-ext-jdk15on + 1.70 + + + org.bouncycastle + bcprov-jdk15on + 1.70 + + + + org.owasp.encoder + encoder + 1.2.3 + + + + + + it.pagopa.selfcare + selc-commons-base + + + it.pagopa.selfcare + selc-commons-base + test-jar + test + + + + + selfcare-platform + + https://pkgs.dev.azure.com/pagopaspa/selfcare-platform-app-projects/_packaging/selfcare-platform/maven/v1 + + + + + selfcare-onboarding + Selfcare Onboarding SDK + https://maven.pkg.github.com/pagopa/selfcare-onboarding + + + + \ No newline at end of file diff --git a/apps/institution-ms-new/web/pom.xml b/apps/institution-ms-new/web/pom.xml new file mode 100644 index 0000000..46f4c57 --- /dev/null +++ b/apps/institution-ms-new/web/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + selc-ms-core + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-web + + + + it.pagopa.selfcare + selc-commons-web + + + it.pagopa.selfcare + selc-commons-base + + + it.pagopa.selfcare + selc-commons-web + test-jar + test + + + it.pagopa.selfcare + selc-ms-core-core + + + io.springfox + springfox-boot-starter + + + + diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/CoreSecurityConfig.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/CoreSecurityConfig.java new file mode 100644 index 0000000..859d3b5 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/CoreSecurityConfig.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.web.config; + +import it.pagopa.selfcare.commons.web.config.SecurityConfig; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; + +@Slf4j +@Configuration +@EnableWebSecurity +@Import(SecurityConfig.class) +class CoreSecurityConfig { +} \ No newline at end of file diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfig.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfig.java new file mode 100644 index 0000000..f727991 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfig.java @@ -0,0 +1,156 @@ +package it.pagopa.selfcare.mscore.web.config; + +import com.fasterxml.classmate.TypeResolver; + +import it.pagopa.selfcare.commons.web.swagger.EmailAnnotationSwaggerPluginConfig; +import it.pagopa.selfcare.commons.web.swagger.ServerSwaggerConfig; +import it.pagopa.selfcare.mscore.model.error.Problem; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.*; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.security.core.Authentication; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.builders.ResponseBuilder; +import springfox.documentation.service.*; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; +import springfox.documentation.spring.web.plugins.Docket; + +import java.time.LocalTime; +import java.util.Collections; +import java.util.List; + +/** + * The Class SwaggerConfig. + */ +@Configuration +public class SwaggerConfig { + + private static final String AUTH_SCHEMA_NAME = "bearerAuth"; + + private static final Response BAD_REQUEST_RESPONSE = new ResponseBuilder() + .code(String.valueOf(HttpStatus.BAD_REQUEST.value())) + .description(HttpStatus.BAD_REQUEST.getReasonPhrase()) + .representation(MediaType.APPLICATION_PROBLEM_JSON).apply(repBuilder -> + repBuilder.model(modelSpecBuilder -> + modelSpecBuilder.referenceModel(refModelSpecBuilder -> + refModelSpecBuilder.key(modelKeyBuilder -> + modelKeyBuilder.qualifiedModelName(qualifiedModelNameBuilder -> + qualifiedModelNameBuilder.namespace(Problem.class.getPackageName()) + .name(Problem.class.getSimpleName())))))) + .build(); + private static final Response NOT_FOUND_RESPONSE = new ResponseBuilder() + .code(String.valueOf(HttpStatus.NOT_FOUND.value())) + .description(HttpStatus.NOT_FOUND.getReasonPhrase()) + .representation(MediaType.APPLICATION_PROBLEM_JSON).apply(repBuilder -> + repBuilder.model(modelSpecBuilder -> + modelSpecBuilder.referenceModel(refModelSpecBuilder -> + refModelSpecBuilder.key(modelKeyBuilder -> + modelKeyBuilder.qualifiedModelName(qualifiedModelNameBuilder -> + qualifiedModelNameBuilder.namespace(Problem.class.getPackageName()) + .name(Problem.class.getSimpleName())))))) + .build(); + + private static final Response CONFLICT_RESPONSE = new ResponseBuilder() + .code(String.valueOf(HttpStatus.CONFLICT.value())) + .description(HttpStatus.CONFLICT.getReasonPhrase()) + .representation(MediaType.APPLICATION_PROBLEM_JSON).apply(repBuilder -> + repBuilder.model(modelSpecBuilder -> + modelSpecBuilder.referenceModel(refModelSpecBuilder -> + refModelSpecBuilder.key(modelKeyBuilder -> + modelKeyBuilder.qualifiedModelName(qualifiedModelNameBuilder -> + qualifiedModelNameBuilder.namespace(Problem.class.getPackageName()) + .name(Problem.class.getSimpleName())))))) + .build(); + + private static final Response FORBIDDEN_RESPONSE = new ResponseBuilder() + .code(String.valueOf(HttpStatus.FORBIDDEN.value())) + .description(HttpStatus.FORBIDDEN.getReasonPhrase()) + .representation(MediaType.APPLICATION_PROBLEM_JSON).apply(repBuilder -> + repBuilder.model(modelSpecBuilder -> + modelSpecBuilder.referenceModel(refModelSpecBuilder -> + refModelSpecBuilder.key(modelKeyBuilder -> + modelKeyBuilder.qualifiedModelName(qualifiedModelNameBuilder -> + qualifiedModelNameBuilder.namespace(Problem.class.getPackageName()) + .name(Problem.class.getSimpleName())))))) + .build(); + + @Configuration + @Profile("swaggerIT") + @PropertySource("classpath:/swagger/swagger_it.properties") + public static class itConfig { + } + + @Configuration + @Profile("swaggerEN") + @PropertySource("classpath:/swagger/swagger_en.properties") + public static class enConfig { + } + + private final Environment environment; + + + @Autowired + SwaggerConfig(Environment environment) { + this.environment = environment; + } + + + @Bean + public Docket swaggerSpringPlugin(@Autowired TypeResolver typeResolver) { + return (new Docket(DocumentationType.OAS_30)) + .apiInfo(new ApiInfoBuilder() + .title(environment.getProperty("swagger.title", environment.getProperty("spring.application.name"))) + .description(environment.getProperty("swagger.description", "Api and Models")) + .version(environment.getProperty("swagger.version", environment.getProperty("spring.application.version"))) + .build()) + .select().apis(RequestHandlerSelectors.basePackage("it.pagopa.selfcare.mscore.web.controller")).build() + .tags(new Tag("External", environment.getProperty("swagger.name.api.external.description"))) + .tags(new Tag("Institution", environment.getProperty("swagger.name.api.institution.description"))) + .tags(new Tag("Onboarding", environment.getProperty("swagger.name.api.onboarding.description"))) + .tags(new Tag("Management", environment.getProperty("swagger.name.api.management.description"))) + .tags(new Tag("Delegation", environment.getProperty("swagger.name.api.delegation.description"))) + .directModelSubstitute(LocalTime.class, String.class) + .ignoredParameterTypes(Authentication.class) + .forCodeGeneration(true) + .useDefaultResponseMessages(false) + .globalResponses(HttpMethod.GET, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE)) + .globalResponses(HttpMethod.DELETE, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE, CONFLICT_RESPONSE)) + .globalResponses(HttpMethod.POST, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE, CONFLICT_RESPONSE)) + .globalResponses(HttpMethod.PUT, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE, FORBIDDEN_RESPONSE)) + .globalResponses(HttpMethod.HEAD, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE)) + .additionalModels(typeResolver.resolve(Problem.class)) + .securityContexts(Collections.singletonList(SecurityContext.builder() + .securityReferences(defaultAuth()) + .build())) + .securitySchemes(Collections.singletonList(HttpAuthenticationScheme.JWT_BEARER_BUILDER + .name(AUTH_SCHEMA_NAME) + .description(environment.getProperty("swagger.security.schema.bearer.description")) + .build())); + } + + + private List defaultAuth() { + AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; + authorizationScopes[0] = authorizationScope; + return Collections.singletonList(new SecurityReference(AUTH_SCHEMA_NAME, authorizationScopes)); + } + + + @Bean + public EmailAnnotationSwaggerPluginConfig emailAnnotationPlugin() { + return new EmailAnnotationSwaggerPluginConfig(); + } + + + @Bean + public ServerSwaggerConfig serverSwaggerConfiguration() { + return new ServerSwaggerConfig(); + } + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/WebConfig.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/WebConfig.java new file mode 100644 index 0000000..4eed5a4 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/WebConfig.java @@ -0,0 +1,24 @@ +package it.pagopa.selfcare.mscore.web.config; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.commons.web.config.BaseWebConfig; +import lombok.NonNull; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +@Configuration +@Import(BaseWebConfig.class) +public class WebConfig implements BeanPostProcessor { + + @Override + public Object postProcessAfterInitialization(@NonNull Object bean, @NonNull String beanName) throws BeansException { + if (bean instanceof ObjectMapper) { + ((ObjectMapper) bean).configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true); + } + return bean; + } + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationController.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationController.java new file mode 100644 index 0000000..6afa7b4 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationController.java @@ -0,0 +1,136 @@ + package it.pagopa.selfcare.mscore.web.controller; + + import io.swagger.annotations.Api; + import io.swagger.annotations.ApiOperation; + import io.swagger.annotations.ApiParam; + import io.swagger.v3.oas.annotations.tags.Tag; + import io.swagger.v3.oas.annotations.tags.Tags; + import it.pagopa.selfcare.mscore.constant.GenericError; + import it.pagopa.selfcare.mscore.constant.Order; + import it.pagopa.selfcare.mscore.core.DelegationService; + import it.pagopa.selfcare.mscore.exception.InvalidRequestException; + import it.pagopa.selfcare.mscore.model.delegation.Delegation; + import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequest; + import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequestFromTaxcode; + import it.pagopa.selfcare.mscore.web.model.delegation.DelegationResponse; + import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapper; + import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; + import lombok.extern.slf4j.Slf4j; + import org.springframework.http.HttpStatus; + import org.springframework.http.MediaType; + import org.springframework.http.ResponseEntity; + import org.springframework.web.bind.annotation.*; + + import javax.validation.Valid; + import java.util.List; + import java.util.Objects; + import java.util.Optional; + +@RestController +@RequestMapping(value = "/delegations", produces = MediaType.APPLICATION_JSON_VALUE) +@Api(tags = "Delegation") +@Slf4j +public class DelegationController { + + private final DelegationService delegationService; + private final DelegationMapper delegationMapper; + + public DelegationController(DelegationService delegationService, + DelegationMapper delegationMapper) { + this.delegationService = delegationService; + this.delegationMapper = delegationMapper; + } + + /** + * The function persist delegation + * + * @param delegation DelegationRequest + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: DelegationResponse + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.delegation.create}", notes = "${swagger.mscore.delegation.create}") + @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createDelegation(@RequestBody @Valid DelegationRequest delegation) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_DELEGATION_ERROR); + Delegation saved = delegationService.createDelegation(delegationMapper.toDelegation(delegation)); + return ResponseEntity.status(HttpStatus.CREATED).body(delegationMapper.toDelegationResponse(saved)); + } + + + /** + * The function persist delegation + * + * @param delegation DelegationRequest + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: DelegationResponse + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.delegation.createFromTaxCode}", notes = "${swagger.mscore.delegation.createFromTaxCode}") + @PostMapping(value = "/from-taxcode", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createDelegationFromInstitutionsTaxCode(@RequestBody @Valid DelegationRequestFromTaxcode delegation) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_DELEGATION_ERROR); + Delegation saved = delegationService.createDelegationFromInstitutionsTaxCode(delegationMapper.toDelegation(delegation)); + return ResponseEntity.status(HttpStatus.CREATED).body(delegationMapper.toDelegationResponse(saved)); + } + + + + /** + * The function get delegations + * + * @param institutionId String + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: List + * * Code: 404, Message: Institution data not found, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + */ + @Tags({@Tag(name = "external-v2"), @Tag(name = "support"), @Tag(name = "Delegation")}) + @ApiOperation(value = "${swagger.mscore.institutions.delegations}", notes = "${swagger.mscore.institutions.delegations}") + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> getDelegations(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @RequestParam(name = "institutionId", required = false) String institutionId, + @ApiParam("${swagger.mscore.institutions.model.institutionId}") + @RequestParam(name = "brokerId", required = false) String brokerId, + @ApiParam("${swagger.mscore.product.model.id}") + @RequestParam(name = "productId", required = false) String productId, + @ApiParam("${swagger.mscore.institutions.model.description}") + @RequestParam(name = "search", required = false) String search, + @ApiParam("${swagger.mscore.institutions.model.taxCode}") + @RequestParam(name = "taxCode", required = false) String taxCode, + @ApiParam("${swagger.mscore.institutions.delegations.order}") + @RequestParam(name = "order", required = false) Optional order, + @RequestParam(name = "page", required = false) Optional page, + @RequestParam(name = "size", required = false) Optional size) { + + if(Objects.isNull(institutionId) && Objects.isNull(brokerId)) + throw new InvalidRequestException("institutionId or brokerId must not be null!!", GenericError.GENERIC_ERROR.getCode()); + + return ResponseEntity.status(HttpStatus.OK).body(delegationService.getDelegations(institutionId, brokerId, productId, search, taxCode, order, page, size).stream() + .map(delegationMapper::toDelegationResponseGet) + .toList()); + } + + /** + * The function delete a delegation setting its status to DELETED and setting delegation to false on institution if it has no more delegations + * + * @param delegationId DelegationId + * @return InstitutionResponse + * * Code: 204, Message: successful operation, DataType: NoContent + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.NO_CONTENT) + @ApiOperation(value = "${swagger.mscore.delegation.delete}", notes = "${swagger.mscore.delegation.delete}") + @DeleteMapping(value = "/{delegationId}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity deleteDelegation(@ApiParam("${swagger.mscore.delegation.model.delegationId}") + @PathVariable("delegationId") String delegationId) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_DELEGATION_ERROR); + delegationService.deleteDelegationByDelegationId(delegationId); + return ResponseEntity.noContent().build(); + } +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2Controller.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2Controller.java new file mode 100644 index 0000000..c5d72ee --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2Controller.java @@ -0,0 +1,90 @@ + package it.pagopa.selfcare.mscore.web.controller; + + import io.swagger.annotations.Api; + import io.swagger.annotations.ApiOperation; + import io.swagger.annotations.ApiParam; + import it.pagopa.selfcare.mscore.constant.GenericError; + import it.pagopa.selfcare.mscore.constant.Order; + import it.pagopa.selfcare.mscore.core.DelegationService; + import it.pagopa.selfcare.mscore.exception.InvalidRequestException; + import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; + import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; + import it.pagopa.selfcare.mscore.web.model.delegation.DelegationWithPaginationResponse; + import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapper; + import lombok.extern.slf4j.Slf4j; + import org.springframework.http.HttpStatus; + import org.springframework.http.MediaType; + import org.springframework.http.ResponseEntity; + import org.springframework.web.bind.annotation.GetMapping; + import org.springframework.web.bind.annotation.RequestMapping; + import org.springframework.web.bind.annotation.RequestParam; + import org.springframework.web.bind.annotation.RestController; + + import javax.validation.constraints.Min; + import java.util.Objects; + + @RestController + @RequestMapping(value = "/v2/delegations", produces = MediaType.APPLICATION_JSON_VALUE) + @Api(tags = "Delegation") + @Slf4j + public class DelegationV2Controller { + + private final DelegationService delegationService; + private final DelegationMapper delegationMapper; + + public DelegationV2Controller(DelegationService delegationService, + DelegationMapper delegationMapper) { + this.delegationService = delegationService; + this.delegationMapper = delegationMapper; + } + + /** + * The function get delegations + * + * @param institutionId String + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: List + * * Code: 404, Message: Institution data not found, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + */ + @ApiOperation(value = "${swagger.mscore.institutions.delegationsV2}", notes = "${swagger.mscore.institutions.delegationsv2}") + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getDelegations(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @RequestParam(name = "institutionId", required = false) String institutionId, + @ApiParam("${swagger.mscore.institutions.model.institutionId}") + @RequestParam(name = "brokerId", required = false) String brokerId, + @ApiParam("${swagger.mscore.product.model.id}") + @RequestParam(name = "productId", required = false) String productId, + @ApiParam("${swagger.mscore.institutions.model.description}") + @RequestParam(name = "search", required = false) String search, + @ApiParam("${swagger.mscore.institutions.model.taxCode}") + @RequestParam(name = "taxCode", required = false) String taxCode, + @ApiParam("${swagger.mscore.institutions.delegations.order}") + @RequestParam(name = "order", required = false, defaultValue = "NONE") Order order, + @RequestParam (name = "page", required = false, defaultValue = "0") @Min(0) Integer page, + @RequestParam(name = "size", required = false, defaultValue = "10000") @Min(1) Integer size) { + + if(Objects.isNull(institutionId) && Objects.isNull(brokerId)) + throw new InvalidRequestException("institutionId or brokerId must not be null!!", GenericError.GENERIC_ERROR.getCode()); + + GetDelegationParameters delegationParameters = GetDelegationParameters.builder() + .from(institutionId) + .to(brokerId) + .productId(productId) + .search(search) + .taxCode(taxCode) + .order(order) + .page(page) + .size(size) + .build(); + + DelegationWithPagination delegationWithPagination = delegationService.getDelegationsV2(delegationParameters); + + DelegationWithPaginationResponse response = new DelegationWithPaginationResponse( + delegationWithPagination.getDelegations().stream().map( + delegationMapper::toDelegationResponseGet) + .toList(), delegationWithPagination.getPageInfo()); + + return ResponseEntity.status(HttpStatus.OK).body(response); + } + } diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ExternalController.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ExternalController.java new file mode 100644 index 0000000..0dfc5ce --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ExternalController.java @@ -0,0 +1,148 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.core.ExternalService; +import it.pagopa.selfcare.mscore.model.institution.GeographicTaxonomies; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionBillingResponse; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionResponse; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionMapperCustom; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapper; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardedProducts; +import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.stream.Collectors; + +import static it.pagopa.selfcare.mscore.constant.GenericError.*; + +@Slf4j +@RestController +@RequestMapping(value = "/external/institutions", produces = MediaType.APPLICATION_JSON_VALUE) +@Api(tags = "External") +public class ExternalController { + + private final ExternalService externalService; + private final InstitutionResourceMapper institutionResourceMapper; + + public ExternalController(ExternalService externalService, InstitutionResourceMapper institutionResourceMapper) { + this.externalService = externalService; + this.institutionResourceMapper = institutionResourceMapper; + } + + /** + * The function returns institution Data from its externalId + * + * @param externalId externalId + * + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: InstitutionResponse + * * Code: 400, Message: Invalid ID supplied, DataType: Problem + * * Code: 404, Message: Institution not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value ="${swagger.mscore.external.institution}", notes = "${swagger.mscore.external.institution}") + @GetMapping(value = "/{externalId}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") + @PathVariable("externalId") String externalId) { + CustomExceptionMessage.setCustomMessage(GET_INSTITUTION_BY_EXTERNAL_ID_ERROR); + Institution institution = externalService.getInstitutionByExternalId(externalId); + return ResponseEntity.ok().body(institutionResourceMapper.toInstitutionResponse(institution)); + } + + + /** + * The function returns billing institution Data from its externalId + * + * @param externalId String + * @param productId String + * + * @return InstitutionBillingResponse + * * Code: 200, Message: successful operation, DataType: InstitutionBillingResponse + * * Code: 400, Message: Invalid ID supplied, DataType: Problem + * * Code: 404, Message: Institution Billing not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.external.institution.billing}", notes = "${swagger.mscore.external.institution.billing}") + @GetMapping(value = "/{externalId}/products/{productId}/billing", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getBillingInstitutionByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") + @PathVariable("externalId") String externalId, + @ApiParam("${swagger.mscore.institutions.model.productId}") + @PathVariable("productId") String productId) { + CustomExceptionMessage.setCustomMessage(INSTITUTION_BILLING_ERROR); + Institution institution = externalService.retrieveInstitutionProduct(externalId, productId); + return ResponseEntity.ok().body(InstitutionMapperCustom.toInstitutionBillingResponse(institution, productId)); + } + + + /** + * The function returns institution related products given externalId + * + * @param externalId String + * @param states List + * + * @return OnboardedProducts + * * Code: 200, Message: successful operation, DataType: OnboardedProducts + * * Code: 400, Message: Invalid ID supplied, DataType: Problem + * * Code: 404, Message: Institution Billing not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.external.institution.products}", notes = "${swagger.mscore.external.institution.products}") + @GetMapping(value = "/{externalId}/products", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity retrieveInstitutionProductsByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") + @PathVariable("externalId") String externalId, + @RequestParam(value = "states", required = false) List states) { + CustomExceptionMessage.setCustomMessage(GET_PRODUCTS_ERROR); + List page = externalService.retrieveInstitutionProductsByExternalId(externalId, states); + return ResponseEntity.ok(InstitutionMapperCustom.toOnboardedProducts(page)); + } + + /** + * The function returns geographic taxonomies related to institution + * + * @param externalId String + * + * @return List + * * Code: 200, Message: successful operation, DataType: List + * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.external.geotaxonomies}", notes = "${swagger.mscore.external.geotaxonomies}") + @GetMapping(value = "/{externalId}/geotaxonomies", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> retrieveInstitutionGeoTaxonomiesByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") + @PathVariable("externalId") String externalId) { + CustomExceptionMessage.setCustomMessage(RETRIEVE_GEO_TAXONOMIES_ERROR); + List list = externalService.retrieveInstitutionGeoTaxonomiesByExternalId(externalId); + return ResponseEntity.ok(list); + } + + /** + * The function return an institution given institution internal id + * + * @param ids List + * @return List + * + * * Code: 200, Message: successful operation, DataType: List + * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution}", notes = "${swagger.mscore.institution}") + @GetMapping(value = "", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> retrieveInstitutionByIds(@ApiParam("${swagger.mscore.institutions.model.internalIds}") + @RequestParam("ids") List ids) { + CustomExceptionMessage.setCustomMessage(GET_INSTITUTION_BY_ID_ERROR); + List institutions = externalService.retrieveInstitutionByIds(ids); + return ResponseEntity.ok().body(institutions.stream() + .map(institutionResourceMapper::toInstitutionResponse) + .collect(Collectors.toList())); + } +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java new file mode 100644 index 0000000..efe28e0 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java @@ -0,0 +1,540 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import io.swagger.annotations.*; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.tags.Tags; +import it.pagopa.selfcare.commons.base.security.SelfCareUser; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.GenericError; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.core.InstitutionService; +import it.pagopa.selfcare.mscore.core.OnboardingService; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.web.model.institution.*; +import it.pagopa.selfcare.mscore.web.model.mapper.BrokerMapper; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionMapperCustom; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapper; +import it.pagopa.selfcare.mscore.web.model.mapper.OnboardingResourceMapper; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardedProducts; +import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import javax.validation.ValidationException; +import java.time.OffsetDateTime; +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +@RestController +@RequestMapping(value = "/institutions", produces = MediaType.APPLICATION_JSON_VALUE) +@Api(tags = "Institution") +@Slf4j +public class InstitutionController { + + private final InstitutionService institutionService; + private final OnboardingService onboardingService; + private final OnboardingResourceMapper onboardingResourceMapper; + private final InstitutionResourceMapper institutionResourceMapper; + private final BrokerMapper brokerMapper; + + public InstitutionController(InstitutionService institutionService, + OnboardingService onboardingService, OnboardingResourceMapper onboardingResourceMapper, + InstitutionResourceMapper institutionResourceMapper, + BrokerMapper brokerMapper) { + this.institutionService = institutionService; + this.onboardingService = onboardingService; + this.onboardingResourceMapper = onboardingResourceMapper; + this.institutionResourceMapper = institutionResourceMapper; + this.brokerMapper = brokerMapper; + } + + /** + * Gets institutions filtering by taxCode and/or subunitCode and/or origin and/or originId + * + * @param taxCode String + * @param subunitCode String + * @param origin String + * @param originId originId + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: OnboardedProducts + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 404, Message: Products not found, DataType: Problem + */ + @Tag(name = "support") + @Tag(name = "support-pnpg") + @Tag(name = "external-v2") + @Tag(name = "Institution") + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institutions}", notes = "${swagger.mscore.institutions}") + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getInstitutions(@ApiParam("${swagger.mscore.institutions.model.taxCode}") + @RequestParam(value = "taxCode", required = false) String taxCode, + @ApiParam("${swagger.mscore.institutions.model.subunitCode}") + @RequestParam(value = "subunitCode", required = false) String subunitCode, + @RequestParam(value = "origin", required = false) String origin, + @RequestParam(value = "originId", required = false) String originId) { + + + if (!StringUtils.hasText(taxCode) && !StringUtils.hasText(originId) && !StringUtils.hasText(origin)) { + throw new ValidationException("At least one of taxCode, origin or originId must be present"); + } else if (StringUtils.hasText(subunitCode) && !StringUtils.hasText(taxCode)) { + throw new ValidationException("TaxCode is required if subunitCode is present"); + } + + CustomExceptionMessage.setCustomMessage(GenericError.GET_INSTITUTION_BY_ID_ERROR); + + List institutions = institutionService.getInstitutions(taxCode, subunitCode, origin, originId); + InstitutionsResponse institutionsResponse = new InstitutionsResponse(); + institutionsResponse.setInstitutions(institutions.stream() + .map(institutionResourceMapper::toInstitutionResponse) + .toList()); + return ResponseEntity.ok(institutionsResponse); + } + + /** + * The function create an institution retriving values from IPA + * + * @param institutionFromIpaPost InstitutionPost + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: InstitutionResponse + * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.create.from-ipa}", notes = "${swagger.mscore.institution.create.from-ipa}") + @PostMapping(value = "/from-ipa", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitutionFromIpa(@RequestBody @Valid InstitutionFromIpaPost institutionFromIpaPost) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + + if (Objects.isNull(institutionFromIpaPost.getSubunitType()) && Objects.nonNull(institutionFromIpaPost.getSubunitCode())) { + throw new ValidationException("subunitCode and subunitType must both be evaluated."); + } + + List geographicTaxonomies = Optional.ofNullable(institutionFromIpaPost.getGeographicTaxonomies()) + .map(geoTaxonomies -> geoTaxonomies.stream().map(institutionResourceMapper::toInstitutionGeographicTaxonomies).toList()) + .orElse(List.of()); + + Institution saved = institutionService.createInstitutionFromIpa(institutionFromIpaPost.getTaxCode(), + institutionFromIpaPost.getSubunitType(), institutionFromIpaPost.getSubunitCode(), geographicTaxonomies, institutionFromIpaPost.getInstitutionType()); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function create an institution retriving values from ANAC + * + * @param institution InstitutionRequest + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: InstitutionResponse + * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.create.from-anac}", notes = "${swagger.mscore.institution.create.from-anac}") + @PostMapping(value = "/from-anac", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitutionFromAnac(@RequestBody @Valid InstitutionRequest institution) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + Institution saved = institutionService.createInstitutionFromAnac(InstitutionMapperCustom.toInstitution(institution, null)); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function create an institution retriving values from IVASS + * + * @param institution InstitutionRequest + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: InstitutionResponse + * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.create.from-ivass}", notes = "${swagger.mscore.institution.create.from-ivass}") + @PostMapping(value = "/from-ivass", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitutionFromIvass(@RequestBody @Valid InstitutionRequest institution) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + Institution saved = institutionService.createInstitutionFromIvass(InstitutionMapperCustom.toInstitution(institution, null)); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function create an institution retriving values from IPA + * + * @param institutionRequest InstitutionRequest + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: InstitutionResponse + * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.create.from-pda}", notes = "${swagger.mscore.institution.create.from-ipa}") + @PostMapping(value = "/from-pda", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitutionFromPda(@RequestBody @Valid PdaInstitutionRequest institutionRequest) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + + Institution saved = institutionService.createInstitutionFromPda(InstitutionMapperCustom.toInstitution(institutionRequest, null), institutionRequest.getInjectionInstitutionType()); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function create an institution retriving values from INFOCAMERE + * + * @param institutionRequest InstitutionRequest + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: InstitutionResponse + * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.create.from-infocamere}", notes = "${swagger.mscore.institution.create.from-infocamere}") + @PostMapping(value = "/from-infocamere", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitutionFromInfocamere(@RequestBody @Valid InstitutionRequest institutionRequest) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + + Institution saved = institutionService.createInstitutionFromInfocamere(InstitutionMapperCustom.toInstitution(institutionRequest, null)); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function persist PA institution + * + * @param externalId String + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: InstitutionResponse + * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @Deprecated + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.PA.create}", notes = "${swagger.mscore.institution.PA.create}") + @PostMapping(value = "/{externalId}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitutionByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") + @PathVariable("externalId") String externalId) { + + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + Institution saved = institutionService.createInstitutionByExternalId(externalId); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function persist institution + * + * @param institution InstitutionRequest + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: InstitutionResponse + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.create}", notes = "${swagger.mscore.institution.create}") + @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitution(@RequestBody @Valid InstitutionRequest institution) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + Institution saved = institutionService.createInstitution(InstitutionMapperCustom.toInstitution(institution, null)); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function persist institution manually + * + * @param externalId String + * @param institution InstitutionRequest + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: InstitutionResponse + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @Deprecated + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution.create}", notes = "${swagger.mscore.institution.create}") + @PostMapping(value = "/insert/{externalId}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitutionRaw(@ApiParam("${swagger.mscore.institutions.model.externalId}") + @PathVariable("externalId") String externalId, + @RequestBody @Valid InstitutionRequest institution) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + Institution saved = institutionService.createInstitution(InstitutionMapperCustom.toInstitution(institution, null)); + return ResponseEntity.ok(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function persist PG institution + * + * @param request CreatePgInstitutionRequest + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: InstitutionResponse + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 404, Message: Institution data not found on InfoCamere, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.PG.create}", notes = "${swagger.mscore.institution.PG.create}") + @PostMapping(value = "/pg", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createPgInstitution(@RequestBody @Valid CreatePgInstitutionRequest request, + Authentication authentication) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + Institution saved = institutionService.createPgInstitution(request.getTaxId(), request.getDescription(), request.isExistsInRegistry(), (SelfCareUser) authentication.getPrincipal()); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function return products related to institution + * + * @param institutionId String + * @param states List + * @return OnboardedProducts + * * Code: 200, Message: successful operation, DataType: OnboardedProducts + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 404, Message: Products not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution.products}", notes = "${swagger.mscore.institution.products}") + @GetMapping(value = "/{id}/products", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity retrieveInstitutionProducts(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @PathVariable("id") String institutionId, + @ApiParam("${swagger.mscore.institutions.model.relationshipState}") + @RequestParam(value = "states", required = false) List states) { + + CustomExceptionMessage.setCustomMessage(GenericError.GET_PRODUCTS_ERROR); + Institution institution = institutionService.retrieveInstitutionById(institutionId); + List page = institutionService.retrieveInstitutionProducts(institution, states); + return ResponseEntity.ok(InstitutionMapperCustom.toOnboardedProducts(page)); + } + + /** + * The function Update the corresponding institution given internal institution id + * + * @param institutionId String + * @param institutionPut InstitutionPut + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: InstitutionResponse + * * Code: 400, Message: bad request, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution.update}", notes = "${swagger.mscore.institution.update}") + @PutMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity updateInstitution(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @PathVariable("id") String institutionId, + @RequestBody InstitutionPut institutionPut, + Authentication authentication + ) { + + CustomExceptionMessage.setCustomMessage(GenericError.PUT_INSTITUTION_ERROR); + SelfCareUser selfCareUser = (SelfCareUser) authentication.getPrincipal(); + Institution saved = institutionService.updateInstitution(institutionId, InstitutionMapperCustom.toInstitutionUpdate(institutionPut), selfCareUser.getId()); + return ResponseEntity.ok().body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function persist user on registry if not exists and add relation with institution-product + * + * @param request OnboardingInstitutionUsersRequest + * @return no content + * * Code: 200, Message: Ok + * * Code: 201, Message: Created + * * Code: 404, Message: Not found, DataType: Problem + * * Code: 400, Message: Invalid request, DataType: Problem + */ + @ApiResponses(value = { + @ApiResponse(code = 200, message = "User already exists an onboarding in status ACTIVE or SUSPENDED with that productId"), + @ApiResponse(code = 201, message = "Created"), + @ApiResponse(code = 400, message = "Bad Request"), + @ApiResponse(code = 404, message = "Not Found") + }) + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.onboarding.users}", notes = "${swagger.mscore.onboarding.users}") + @PostMapping(value = "/{id}/onboarding", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity onboardingInstitution(@RequestBody @Valid InstitutionOnboardingRequest request, + @PathVariable("id") String id) { + CustomExceptionMessage.setCustomMessage(GenericError.ONBOARDING_OPERATION_ERROR); + + StringBuilder httpStatus = new StringBuilder(); + + Institution institution = onboardingService.persistOnboarding(id, request.getProductId(), onboardingResourceMapper.toOnboarding(request), httpStatus); + + return ResponseEntity + .status(HttpStatus.valueOf(Integer.parseInt(httpStatus.toString()))) + .body(institutionResourceMapper.toInstitutionResponse(institution)); + } + + @ResponseStatus(HttpStatus.NO_CONTENT) + @ApiOperation(value = "${swagger.mscore.onboarding.users.delete}", notes = "${swagger.mscore.onboarding.users.delete}") + @DeleteMapping(value = "/{id}/products/{productId}", produces = MediaType.APPLICATION_JSON_VALUE) + public void deleteOnboardedInstitution(@PathVariable("productId") String productId, + @PathVariable("id") String institutionId) { + + CustomExceptionMessage.setCustomMessage(GenericError.DELETE_ONBOARDED_OPERATION_ERROR); + onboardingService.deleteOnboardedInstitution(institutionId, productId); + + } + + + /** + * The function return geographic taxonomies related to institution + * + * @param id String + * @return List + * * Code: 200, Message: successful operation, DataType: List + * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution.geotaxonomies}", notes = "${swagger.mscore.institution.geotaxonomies}") + @GetMapping(value = "/{id}/geotaxonomies", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> retrieveInstitutionGeoTaxonomies(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @PathVariable("id") String id) { + + CustomExceptionMessage.setCustomMessage(GenericError.RETRIEVE_GEO_TAXONOMIES_ERROR); + Institution institution = institutionService.retrieveInstitutionById(id); + List geo = institutionService.retrieveInstitutionGeoTaxonomies(institution); + return ResponseEntity.ok(geo); + } + + /** + * The function return an institution given institution internal id + * + * @param id String + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: InstitutionResponse + * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem + */ + @Tags({@Tag(name = "external-v2"), @Tag(name = "Institution")}) + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution}", notes = "${swagger.mscore.institution}") + @GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity retrieveInstitutionById(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @PathVariable("id") String id) { + CustomExceptionMessage.setCustomMessage(GenericError.GET_INSTITUTION_BY_ID_ERROR); + Institution institution = institutionService.retrieveInstitutionById(id); + return ResponseEntity.ok().body(institutionResourceMapper.toInstitutionResponse(institution)); + } + + + /** + * Get list of onboarding for a certain productId + * + * @param institutionId String + * @param productId String + * @return List + * * Code: 200, Message: successful operation, DataType: List + * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem + */ + @Tags({@Tag(name = "external-v2"), @Tag(name = "Institution")}) + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution.info}", notes = "${swagger.mscore.institution.info}") + @GetMapping(value = "/{institutionId}/onboardings", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getOnboardingsInstitution(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @PathVariable("institutionId") String institutionId, + @RequestParam(value = "productId", required = false) String productId) { + CustomExceptionMessage.setCustomMessage(GenericError.GETTING_ONBOARDING_INFO_ERROR); + List onboardings = institutionService.getOnboardingInstitutionByProductId(institutionId, productId); + OnboardingsResponse onboardingsResponse = new OnboardingsResponse(); + onboardingsResponse.setOnboardings(onboardings.stream() + .map(onboardingResourceMapper::toResponse) + .toList()); + return ResponseEntity.ok().body(onboardingsResponse); + } + + /** + * The function return a List of Institution that user can onboard + * + * @param institutions List + * @return List + * * Code: 200, Message: successful operation, DataType: List + * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institutions.valid}", notes = "${swagger.mscore.institutions.valid}") + @PostMapping(value = "/onboarded/{productId}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> getValidInstitutionToOnboard(@RequestBody List institutions, + @PathVariable(value = "productId") String productId) { + List validInstitutions = institutionService.retrieveInstitutionByExternalIds(InstitutionMapperCustom.toValidInstitutions(institutions), productId); + return ResponseEntity.ok().body(InstitutionMapperCustom.toInstitutionToOnboardList(validInstitutions)); + } + + /** + * The function updates the field createdAt of the OnboardedProduct, the related Token and UserBindings for the given institution-product pair + * + * @param institutionId String + * @param createdAtRequest CreatedAtRequest + * @return no content + * * Code: 200, Message: successful operation + * * Code: 404, Message: Institution or Token or UserBinding not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institutions.updateCreatedAt}", notes = "${swagger.mscore.institutions.updateCreatedAt}") + @PutMapping(value = "/{institutionId}/createdAt", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity updateCreatedAt(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @PathVariable("institutionId") String institutionId, + @Valid @RequestBody CreatedAtRequest createdAtRequest) { + log.trace("updateCreatedAt start"); + log.debug("updateCreatedAt institutionId = {}, productId = {}, createdAt = {}", institutionId, createdAtRequest.getProductId(), createdAtRequest.getCreatedAt()); + if (createdAtRequest.getCreatedAt().isAfter(OffsetDateTime.now())) { + throw new ValidationException("Invalid createdAt date: the createdAt date must be prior to the current date."); + } + institutionService.updateCreatedAt(institutionId, createdAtRequest.getProductId(), createdAtRequest.getCreatedAt(), createdAtRequest.getActivatedAt()); + log.trace("updateCreatedAt end"); + return ResponseEntity.status(HttpStatus.OK).build(); + } + + /** + * Retrieve institutions with productId onboarded + * + * @param productId String + * @param page Integer + * @param size Integer + * @return List + * * Code: 200, Message: successful operation + * * Code: 404, Message: product not found + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institutions.findFromProduct}", notes = "${swagger.mscore.institutions.findFromProduct}") + @GetMapping(value = "/products/{productId}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity findFromProduct(@ApiParam("${swagger.mscore.institutions.model.productId}") + @PathVariable(value = "productId") String productId, + @ApiParam("${swagger.mscore.page.number}") + @RequestParam(name = "page", defaultValue = "0") Integer page, + @ApiParam("${swagger.mscore.page.size}") + @RequestParam(name = "size", defaultValue = "100") Integer size) { + log.trace("findFromProduct start"); + log.debug("findFromProduct productId = {}", productId); + List institutions = institutionService.getInstitutionsByProductId(productId, page, size); + + InstitutionOnboardingListResponse institutionListResponse = new InstitutionOnboardingListResponse( + institutions.stream() + .map(InstitutionMapperCustom::toInstitutionOnboardingResponse) + .toList()); + + log.trace("findFromProduct end"); + return ResponseEntity.ok().body(institutionListResponse); + } + + @GetMapping(value = "/{productId}/brokers/{institutionType}", produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institutions.brokers}", notes = "${swagger.mscore.institutions.getInstitutionBrokers}") + public Collection getInstitutionBrokers(@ApiParam("${swagger.mscore.institutions.model.productId}") + @PathVariable("productId") + String productId, + @ApiParam("${swagger.mscore.institutions.model.type}") + @PathVariable("institutionType") + InstitutionType institutionType) { + log.trace("getInstitutionBrokers start"); + log.debug("productId = {}, institutionType = {}", productId, institutionType); + List institutions = institutionService.getInstitutionBrokers(productId, institutionType); + List result = brokerMapper.toBrokers(institutions); + log.debug("getInstitutionBrokers result = {}", result); + log.trace("getInstitutionBrokers end"); + return result; + } + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ManagementController.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ManagementController.java new file mode 100644 index 0000000..7f8706b --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ManagementController.java @@ -0,0 +1,48 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import it.pagopa.selfcare.mscore.core.InstitutionService; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.web.model.institution.BulkInstitutions; +import it.pagopa.selfcare.mscore.web.model.institution.BulkPartiesSeed; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionMapperCustom; +import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; +import java.util.ArrayList; +import java.util.List; + +import static it.pagopa.selfcare.mscore.constant.GenericError.GET_INSTITUTION_BY_ID_ERROR; + +@Slf4j +@RestController +@Api(tags = "Management") +public class ManagementController { + + private final InstitutionService institutionService; + + public ManagementController(InstitutionService institutionService) { + this.institutionService = institutionService; + } + + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution}", notes = "${swagger.mscore.institution}") + @PostMapping(value = "/bulk/institutions", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity retrieveInstitutionByIds(@ApiParam("${swagger.mscore.institutions.model.internalIds}") + @RequestBody @Valid BulkPartiesSeed bulkPartiesSeed) { + CustomExceptionMessage.setCustomMessage(GET_INSTITUTION_BY_ID_ERROR); + List ids = new ArrayList<>(bulkPartiesSeed.getPartyIdentifiers()); + List institution = institutionService.retrieveInstitutionByIds(ids); + return ResponseEntity.ok().body(InstitutionMapperCustom.toBulkInstitutions(institution, ids)); + } +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/OnboardingController.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/OnboardingController.java new file mode 100644 index 0000000..f1ff8e2 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/OnboardingController.java @@ -0,0 +1,95 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import it.pagopa.selfcare.mscore.constant.GenericError; +import it.pagopa.selfcare.mscore.core.OnboardingService; +import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; +import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@Slf4j +@RestController +@RequestMapping(value = "/onboarding") +@Api(tags = "Onboarding") +public class OnboardingController { + + private final OnboardingService onboardingService; + + public OnboardingController(OnboardingService onboardingService) { + this.onboardingService = onboardingService; + } + + /** + * The function verify onboarding status of given product and institution + * + * @param externalId String + * @param productId String + * @return no content + * * Code: 204, Message: successful operation, DataType: TokenId + * * Code: 400, Message: Invalid ID supplied, DataType: Problem + * * Code: 404, Message: Not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.NO_CONTENT) + @ApiOperation(value = "${swagger.mscore.onboarding.verify}", notes = "${swagger.mscore.onboarding.verify}") + @RequestMapping(method = {RequestMethod.HEAD}, value = "/institution/{externalId}/products/{productId}") + public ResponseEntity verifyOnboardingInfo(@ApiParam("${swagger.mscore.institutions.model.externalId}") + @PathVariable(value = "externalId") String externalId, + @ApiParam("${swagger.mscore.institutions.model.productId}") + @PathVariable(value = "productId") String productId) { + CustomExceptionMessage.setCustomMessage(GenericError.ONBOARDING_VERIFICATION_ERROR); + onboardingService.verifyOnboardingInfo(externalId, productId); + return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); + } + + + /** + * The function verify onboarding status of given product and subunit of institution + * + * @param taxCode String + * @param subunitCode String + * @param productId String + * @return no content + * * Code: 204, Message: successful operation, DataType: TokenId + * * Code: 400, Message: Invalid ID supplied, DataType: Problem + * * Code: 404, Message: Not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.NO_CONTENT) + @ApiOperation(value = "${swagger.mscore.onboarding.verify}", notes = "${swagger.mscore.onboarding.verify}") + @RequestMapping(method = {RequestMethod.HEAD}, value = "") + public ResponseEntity verifyOnboardingInfo(@ApiParam("${swagger.mscore.institutions.model.taxCode}") + @RequestParam(value = "taxCode") String taxCode, + @ApiParam("${swagger.mscore.institutions.model.subunitCode}") + @RequestParam(value = "subunitCode", required = false) String subunitCode, + @ApiParam("${swagger.mscore.institutions.model.productId}") + @RequestParam(value = "productId") String productId) { + CustomExceptionMessage.setCustomMessage(GenericError.ONBOARDING_VERIFICATION_ERROR); + onboardingService.verifyOnboardingInfoSubunit(taxCode, subunitCode, productId); + return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); + } + + @ResponseStatus(HttpStatus.NO_CONTENT) + @ApiOperation(value = "${swagger.mscore.onboarding.verify}", notes = "${swagger.mscore.onboarding.verify}") + @RequestMapping(method = {RequestMethod.HEAD}, value = "/verify") + public ResponseEntity verifyOnboardingInfoByFilters(@ApiParam("${swagger.mscore.institutions.model.productId}") + @RequestParam(value = "productId") String productId, + @ApiParam("${swagger.mscore.institutions.model.externalId}") + @RequestParam(value = "externalId", required = false) String externalId, + @ApiParam("${swagger.mscore.institutions.model.taxCode}") + @RequestParam(value = "taxCode", required = false) String taxCode, + @ApiParam("${swagger.mscore.institutions.model.origin}") + @RequestParam(value = "origin", required = false) String origin, + @ApiParam("${swagger.mscore.institutions.model.originId}") + @RequestParam(value = "originId", required = false) String originId, + @ApiParam("${swagger.mscore.institutions.model.subunitCode}") + @RequestParam(value = "subunitCode", required = false) String subunitCode) { + CustomExceptionMessage.setCustomMessage(GenericError.ONBOARDING_VERIFICATION_ERROR); + onboardingService.verifyOnboardingInfoByFilters(new VerifyOnboardingFilters(productId, externalId, taxCode, origin, originId, subunitCode)); + return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); + } + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandler.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandler.java new file mode 100644 index 0000000..b6a2545 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandler.java @@ -0,0 +1,115 @@ +package it.pagopa.selfcare.mscore.web.exception; + +import it.pagopa.selfcare.mscore.constant.GenericError; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.error.Problem; +import it.pagopa.selfcare.mscore.model.error.ProblemError; +import lombok.NonNull; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; + +@ControllerAdvice +@Slf4j +public class CustomExceptionHandler extends ResponseEntityExceptionHandler { + + @Override + protected ResponseEntity handleMissingServletRequestParameter(@NonNull MissingServletRequestParameterException ex, @NonNull HttpHeaders headers, @NonNull HttpStatus status, @NonNull WebRequest request) { + log.error("InvalidRequestException Occured --> MESSAGE:{}, STATUS: {}",ex.getMessage(), HttpStatus.BAD_REQUEST, ex); + headers.setContentType(MediaType.APPLICATION_JSON); + Problem problem = createProblem("MISSING PARAMETER", HttpStatus.BAD_REQUEST.value(), "0000"); + return new ResponseEntity<>(problem, headers, HttpStatus.BAD_REQUEST); + } + + @Override + protected ResponseEntity handleMethodArgumentNotValid(@NonNull MethodArgumentNotValidException ex, HttpHeaders headers, @NonNull HttpStatus status, @NonNull WebRequest request) { + log.error("InvalidRequestException Occured --> MESSAGE:{}, STATUS: {}",ex.getMessage(), HttpStatus.BAD_REQUEST, ex); + headers.setContentType(MediaType.APPLICATION_JSON); + Problem problem = createProblem("INVALID ARGUMENT", HttpStatus.BAD_REQUEST.value(), "0000"); + return new ResponseEntity<>(problem, headers, HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(ResourceNotFoundException.class) + public ResponseEntity handleResourceNotFoundException(HttpServletRequest request, ResourceNotFoundException ex) { + log.error("ResourceNotFoundException Occured --> URL:{}, MESSAGE:{}, STATUS: {}",request.getRequestURL(), ex.getMessage(), HttpStatus.NOT_FOUND, ex); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + Problem problem = createProblem(ex.getMessage(), HttpStatus.NOT_FOUND.value(), ex.getCode()); + return new ResponseEntity<>(problem, headers, HttpStatus.NOT_FOUND); + } + + @ExceptionHandler(ResourceConflictException.class) + public ResponseEntity handleResourceConflictException(HttpServletRequest request, ResourceConflictException ex) { + log.error("ResourceConflictException Occured --> URL:{}, MESSAGE:{}, STATUS: {}",request.getRequestURL(), ex.getMessage(), HttpStatus.CONFLICT, ex); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + Problem problem = createProblem(ex.getMessage(), HttpStatus.CONFLICT.value(), ex.getCode()); + return new ResponseEntity<>(problem, headers, HttpStatus.CONFLICT); + } + + @ExceptionHandler(InvalidRequestException.class) + public ResponseEntity handleInvalidRequestException(HttpServletRequest request, InvalidRequestException ex) { + log.error("InvalidRequestException Occured --> URL:{}, MESSAGE:{}, STATUS:{}",request.getRequestURL(), ex.getMessage(), HttpStatus.BAD_REQUEST, ex); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + Problem problem = createProblem(ex.getMessage(), HttpStatus.BAD_REQUEST.value(), ex.getCode()); + return new ResponseEntity<>(problem, headers, HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(MsCoreException.class) + public ResponseEntity handleMsCoreException(HttpServletRequest request, MsCoreException ex) { + log.error("Exception Occured --> URL:{}, MESSAGE:{}, STATUS:{}",request.getRequestURL(), ex.getMessage(), INTERNAL_SERVER_ERROR, ex); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + Problem problem = createProblem(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value(), ex.getCode()); + return new ResponseEntity<>(problem, headers, INTERNAL_SERVER_ERROR); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity handleException(HttpServletRequest request, Exception ex) { + log.error("{} Occured --> URL:{}, MESSAGE:{}, STATUS:{}",ex.getCause(), request.getRequestURL(), ex.getMessage(), HttpStatus.BAD_REQUEST, ex); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(createProblem(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value(), "")); + } + + private Problem createProblem(String errorMessage, Integer status, String code) { + Problem problem = new Problem(); + problem.setStatus(status); + problem.setErrors(createProblemError(errorMessage,code)); + return problem; + } + + private List createProblemError(String message, String code) { + List list = new ArrayList<>(); + list.add(ProblemError.builder() + .code(code) + .detail(message) + .build()); + return list; + } + + private GenericError retrieveGenericError(HttpServletRequest request){ + GenericError genericError = (GenericError) request.getAttribute("errorEnum"); + if(genericError == null){ + genericError = GenericError.GENERIC_ERROR; + } + return genericError; + } +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/filter/LogFilter.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/filter/LogFilter.java new file mode 100644 index 0000000..40be142 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/filter/LogFilter.java @@ -0,0 +1,70 @@ +package it.pagopa.selfcare.mscore.web.filter; + +import it.pagopa.selfcare.mscore.utils.MaskDataUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.util.ContentCachingRequestWrapper; +import org.springframework.web.util.ContentCachingResponseWrapper; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.UnsupportedEncodingException; + +@Slf4j +@Component +public class LogFilter implements Filter { + + private static final int MAX_LENGTH_CONTENT = 500; + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + + final String httpUri = httpServletRequest.getRequestURI(); + + if (httpUri.startsWith("/actuator/health")) { + log.trace("request to health-check actuator"); + chain.doFilter(httpServletRequest, httpServletResponse); + return; + } + + final String httpMethod = httpServletRequest.getMethod(); + long startTime = System.currentTimeMillis(); + + ContentCachingRequestWrapper requestCacheWrapperObject = new ContentCachingRequestWrapper(httpServletRequest); + ContentCachingResponseWrapper responseCacheWrapperObject = new ContentCachingResponseWrapper(httpServletResponse); + + chain.doFilter(requestCacheWrapperObject, responseCacheWrapperObject); + String requestBody = getContentAsString(requestCacheWrapperObject.getContentAsByteArray(), request.getCharacterEncoding(), false); + log.info("Request from URI : {} - method: {} - Request body: {}", httpUri, httpMethod, requestBody); + + Long endTime = System.currentTimeMillis() - startTime; + String responseBody = getContentAsString(responseCacheWrapperObject.getContentAsByteArray(), response.getCharacterEncoding(), true); + log.info("Response from URI : {} - method: {} - status: {} - timelapse: {}ms - Response body: {}", httpUri, httpMethod, httpServletResponse.getStatus(), endTime, responseBody); + responseCacheWrapperObject.copyBodyToResponse(); + } + + private String getContentAsString(byte[] buf, String charsetName, boolean isResponse) { + if (buf == null || buf.length == 0) { + return "empty"; + } + try { + String content = new String(buf, charsetName); + String maskedContent = MaskDataUtils.maskInformation(content); + if(isResponse) { + return maskedContent.substring(0, Math.min(MAX_LENGTH_CONTENT, maskedContent.length())); + } + return maskedContent; + } catch (UnsupportedEncodingException ex) { + return "Unsupported Encoding"; + } + } + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequest.java new file mode 100644 index 0000000..a27965b --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequest.java @@ -0,0 +1,25 @@ +package it.pagopa.selfcare.mscore.web.model.delegation; + +import it.pagopa.selfcare.mscore.constant.DelegationType; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class DelegationRequest { + + @NotBlank + private String from; + @NotBlank + private String to; + @NotBlank + private String institutionFromName; + @NotBlank + private String institutionToName; + @NotBlank + private String productId; + @NotNull + private DelegationType type; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequestFromTaxcode.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequestFromTaxcode.java new file mode 100644 index 0000000..e033dfe --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequestFromTaxcode.java @@ -0,0 +1,27 @@ +package it.pagopa.selfcare.mscore.web.model.delegation; + +import it.pagopa.selfcare.mscore.constant.DelegationType; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class DelegationRequestFromTaxcode { + + @NotBlank + private String fromTaxCode; + @NotBlank + private String toTaxCode; + @NotBlank + private String institutionFromName; + @NotBlank + private String institutionToName; + @NotBlank + private String productId; + @NotNull + private DelegationType type; + private String fromSubunitCode; + private String toSubunitCode; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationResponse.java new file mode 100644 index 0000000..acf7a78 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationResponse.java @@ -0,0 +1,38 @@ +package it.pagopa.selfcare.mscore.web.model.delegation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.time.OffsetDateTime; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class DelegationResponse { + + @NotBlank + private String id; + @NotBlank + private String institutionId; + @NotBlank + private String institutionName; + private String institutionRootName; + @NotBlank + private DelegationType type; + @NotBlank + private String productId; + private String taxCode; + private InstitutionType institutionType; + @NotBlank + private String brokerId; + private String brokerTaxCode; + private String brokerType; + private String brokerName; + private DelegationState status; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationWithPaginationResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationWithPaginationResponse.java new file mode 100644 index 0000000..fead1ee --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationWithPaginationResponse.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.web.model.delegation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.mscore.model.delegation.PageInfo; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class DelegationWithPaginationResponse { + + private List delegations; + private PageInfo pageInfo; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AdditionalInformationsRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AdditionalInformationsRequest.java new file mode 100644 index 0000000..c5e626f --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AdditionalInformationsRequest.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class AdditionalInformationsRequest { + private boolean belongRegulatedMarket; + private String regulatedMarketNote; + private boolean ipa; + private String ipaCode; + private boolean establishedByRegulatoryProvision; + private String establishedByRegulatoryProvisionNote; + private boolean agentOfPublicService; + private String agentOfPublicServiceNote; + private String otherNote; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesRequest.java new file mode 100644 index 0000000..facf4bc --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesRequest.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class AttributesRequest { + private String origin; + private String code; + private String description; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesResponse.java new file mode 100644 index 0000000..03b7471 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesResponse.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class AttributesResponse { + private String origin; + private String code; + private String description; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingRequest.java new file mode 100644 index 0000000..37e70b3 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingRequest.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class BillingRequest { + private String vatNumber; + private String taxCodeInvoicing; + private String recipientCode; + private boolean publicServices; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingResponse.java new file mode 100644 index 0000000..757e21b --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingResponse.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class BillingResponse { + private String vatNumber; + private String taxCodeInvoicing; + private String recipientCode; + private boolean publicServices; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BrokerResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BrokerResponse.java new file mode 100644 index 0000000..95009fd --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BrokerResponse.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class BrokerResponse { + + private String id; + private String taxCode; + private String description; + private int numberOfDelegations; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitution.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitution.java new file mode 100644 index 0000000..49a1881 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitution.java @@ -0,0 +1,48 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; +import java.util.Map; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class BulkInstitution { + + @NotNull + private String id; + + @NotNull + private String externalId; + + @NotNull + private String origin; + + @NotNull + private String originId; + + @NotNull + private String description; + + private InstitutionType institutionType; + + @NotNull + private String digitalAddress; + + @NotNull + private String address; + + @NotNull + private String zipCode; + + @NotNull + private String taxCode; + + private List attributes; + + @NotNull + private Map products; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitutions.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitutions.java new file mode 100644 index 0000000..dbedf39 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitutions.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import java.util.List; + +@Data +public class BulkInstitutions { + private List found; + private List notFound; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkPartiesSeed.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkPartiesSeed.java new file mode 100644 index 0000000..3e53442 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkPartiesSeed.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +@Valid +public class BulkPartiesSeed { + + @NotNull + private List partyIdentifiers; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkProduct.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkProduct.java new file mode 100644 index 0000000..4330086 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkProduct.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class BulkProduct { + + @NotNull + private String product; + @NotNull + private BillingResponse billing; + private String pricingPlan; + private RelationshipState status; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatePgInstitutionRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatePgInstitutionRequest.java new file mode 100644 index 0000000..ba5d4e3 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatePgInstitutionRequest.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@Data +public class CreatePgInstitutionRequest { + + @NotEmpty(message = "taxId is required") + private String taxId; + + private String description; + + @NotNull + private boolean existsInRegistry; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatedAtRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatedAtRequest.java new file mode 100644 index 0000000..e22952e --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatedAtRequest.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.time.OffsetDateTime; + +@Data +public class CreatedAtRequest { + @NotBlank(message = "productId is mandatory") + private String productId; + @NotNull(message = "createdAt is mandatory") + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) + private OffsetDateTime createdAt; + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) + private OffsetDateTime activatedAt; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerRequest.java new file mode 100644 index 0000000..fcdf462 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerRequest.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class DataProtectionOfficerRequest { + private String address; + private String email; + private String pec; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerResponse.java new file mode 100644 index 0000000..a7a9304 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerResponse.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class DataProtectionOfficerResponse { + private String address; + private String email; + private String pec; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/GeoTaxonomies.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/GeoTaxonomies.java new file mode 100644 index 0000000..35a9421 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/GeoTaxonomies.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class GeoTaxonomies { + private String code; + private String desc; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionBillingResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionBillingResponse.java new file mode 100644 index 0000000..e0e75fe --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionBillingResponse.java @@ -0,0 +1,25 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; + +@Data +public class InstitutionBillingResponse { + private String institutionId; + private String externalId; + private Origin origin; + private String originId; + private String description; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String taxCode; + private String pricingPlan; + private BillingResponse billing; + + private String subunitCode; + private String subunitType; + private String aooParentCode; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionFromIpaPost.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionFromIpaPost.java new file mode 100644 index 0000000..fc5e073 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionFromIpaPost.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class InstitutionFromIpaPost { + + @NotNull + private String taxCode; + private String subunitCode; + private InstitutionPaSubunitType subunitType; + private List geographicTaxonomies; + private InstitutionType institutionType; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionListResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionListResponse.java new file mode 100644 index 0000000..5bf4f5c --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionListResponse.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class InstitutionListResponse { + + List items; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagementResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagementResponse.java new file mode 100644 index 0000000..f0eafa7 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagementResponse.java @@ -0,0 +1,40 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Map; + +@Data +public class InstitutionManagementResponse { + + private String id; + private String externalId; + private String origin; + private String originId; + private String description; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String taxCode; + private Map products; + private List geographicTaxonomies; + private List attributes; + private PaymentServiceProviderResponse paymentServiceProvider; + private DataProtectionOfficerResponse dataProtectionOfficer; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + + private String subunitCode; + private String subunitType; + private String aooParentCode; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagerResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagerResponse.java new file mode 100644 index 0000000..145d5be --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagerResponse.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; +import lombok.Data; + +import java.time.OffsetDateTime; + +@Data +public class InstitutionManagerResponse { + private String id; + private String from; + private String to; + private String role; + private ProductInfo product; + private RelationshipState state; + private String pricingPlan; + private InstitutionUpdateResponse institutionUpdate; + private BillingResponse billing; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardedRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardedRequest.java new file mode 100644 index 0000000..cfe406b --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardedRequest.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +@Data +public class InstitutionOnboardedRequest { + + @NotEmpty(message = "productId is required") + private String productId; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingListResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingListResponse.java new file mode 100644 index 0000000..ad35063 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingListResponse.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class InstitutionOnboardingListResponse { + + List items; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingRequest.java new file mode 100644 index 0000000..1249774 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingRequest.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.time.OffsetDateTime; + +@Data +public class InstitutionOnboardingRequest { + + @NotEmpty(message = "productId is required") + private String productId; + + private String tokenId; + private String contractPath; + private String pricingPlan; + private BillingRequest billing; + private OffsetDateTime activatedAt; + private Boolean isAggregator; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingResponse.java new file mode 100644 index 0000000..fcf62bb --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingResponse.java @@ -0,0 +1,39 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Map; + +@Data +public class InstitutionOnboardingResponse { + + private String id; + private String externalId; + private String origin; + private String originId; + private String description; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String taxCode; + private Map onboardings; + private List geographicTaxonomies; + private List attributes; + private PaymentServiceProviderResponse paymentServiceProvider; + private DataProtectionOfficerResponse dataProtectionOfficer; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private String subunitCode; + private String subunitType; + private String aooParentCode; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionProduct.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionProduct.java new file mode 100644 index 0000000..1e60e88 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionProduct.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; + +@Data +public class InstitutionProduct { + private String id; + private RelationshipState state; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionPut.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionPut.java new file mode 100644 index 0000000..31d9c1e --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionPut.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; +import lombok.ToString; + +import java.util.List; + +@Data +@ToString +public class InstitutionPut { + + List geographicTaxonomyCodes; + private String digitalAddress; + private String description; + private String parentDescription; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionRequest.java new file mode 100644 index 0000000..3e66e47 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionRequest.java @@ -0,0 +1,42 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardingRequest; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +public class InstitutionRequest { + + private String id; + private String externalId; + private String origin; + private String originId; + private String description; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String city; + private String county; + private String country; + private String taxCode; + private BillingRequest billing; + private List onboarding; + private List geographicTaxonomies; + private List attributes; + private PaymentServiceProviderRequest paymentServiceProvider; + private DataProtectionOfficerRequest dataProtectionOfficer; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private boolean delegation; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionResponse.java new file mode 100644 index 0000000..a6d0906 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionResponse.java @@ -0,0 +1,52 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardedProductResponse; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class InstitutionResponse { + + @NotBlank + private String id; + private String externalId; + @NotBlank + private String origin; + @NotBlank + private String originId; + private String description; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String taxCode; + private String city; + private String county; + private String country; + private String istatCode; + private List geographicTaxonomies; + private List attributes; + private List onboarding; + private PaymentServiceProviderResponse paymentServiceProvider; + private DataProtectionOfficerResponse dataProtectionOfficer; + private RootParentResponse rootParent; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private String subunitCode; + private String subunitType; + private String aooParentCode; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private boolean delegation; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionToOnboard.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionToOnboard.java new file mode 100644 index 0000000..ab6233d --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionToOnboard.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class InstitutionToOnboard { + + @JsonProperty("cfImpresa") + private String id; + + @JsonProperty("denominazione") + private String description; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateRequest.java new file mode 100644 index 0000000..a02d878 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateRequest.java @@ -0,0 +1,38 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class InstitutionUpdateRequest { + + @NotNull(message = "institutionType is required") + private InstitutionType institutionType; + + private String description; + private String digitalAddress; + private String address; + private String city; + private String county; + private String country; + @NotEmpty(message = "taxCode is required") + private String taxCode; + + private String zipCode; + private PaymentServiceProviderRequest paymentServiceProvider; + private DataProtectionOfficerRequest dataProtectionOfficer; + private List geographicTaxonomyCodes; + + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private String ivassCode; + private boolean imported; + private AdditionalInformationsRequest additionalInformations; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateResponse.java new file mode 100644 index 0000000..f34b02c --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateResponse.java @@ -0,0 +1,34 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.Data; + +import java.util.List; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class InstitutionUpdateResponse { + private InstitutionType institutionType; + private String description; + private String digitalAddress; + private String address; + private String taxCode; + private String zipCode; + private PaymentServiceProviderResponse paymentServiceProvider; + private DataProtectionOfficerResponse dataProtectionOfficer; + private List geographicTaxonomyCodes; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private String city; + private String county; + private String country; + private String subunitCode; + private String subunitType; + private String aooParentCode; +} + diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionsResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionsResponse.java new file mode 100644 index 0000000..f22ae7e --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionsResponse.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import java.util.List; + +@Data +public class InstitutionsResponse { + + private List institutions; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingResponse.java new file mode 100644 index 0000000..301c2df --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingResponse.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; + +import java.time.OffsetDateTime; + +@Data +public class OnboardingResponse { + + private String productId; + private String tokenId; + private RelationshipState status; + private String contract; + private String pricingPlan; + private BillingResponse billing; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private OffsetDateTime closedAt; + private Boolean isAggregator; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingsResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingsResponse.java new file mode 100644 index 0000000..48c3b9b --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingsResponse.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +public class OnboardingsResponse { + + private List onboardings; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderRequest.java new file mode 100644 index 0000000..14a8053 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderRequest.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class PaymentServiceProviderRequest { + private String abiCode; + private String businessRegisterNumber; + private String legalRegisterNumber; + private String legalRegisterName; + private boolean vatNumberGroup; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderResponse.java new file mode 100644 index 0000000..7d40dd9 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderResponse.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class PaymentServiceProviderResponse { + private String abiCode; + private String businessRegisterNumber; + private String legalRegisterNumber; + private String legalRegisterName; + private boolean vatNumberGroup; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PdaInstitutionRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PdaInstitutionRequest.java new file mode 100644 index 0000000..6463f6c --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PdaInstitutionRequest.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +@Data +public class PdaInstitutionRequest { + + @NotEmpty(message = "InjectionInstitutionType is required") + private String injectionInstitutionType; + + @NotEmpty(message = "TaxCode is required") + private String taxCode; + + private String description; + private BillingRequest billing; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/ProductsManagement.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/ProductsManagement.java new file mode 100644 index 0000000..d12a43e --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/ProductsManagement.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProductsManagement { + private String product; + private String pricingPlan; + private BillingResponse billing; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResponse.java new file mode 100644 index 0000000..52fe24f --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResponse.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +public class RelationshipResponse { + private String id; + private List from; + private String to; + private String role; + private String product; + private RelationshipState state; + private String pricingPlan; + private InstitutionUpdateResponse institutionUpdate; + private BillingResponse billingResponse; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResult.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResult.java new file mode 100644 index 0000000..35af6db --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResult.java @@ -0,0 +1,28 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; +import lombok.Data; + +import java.time.OffsetDateTime; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class RelationshipResult { + + private String id; + private String to; + private String from; + private PartyRole role; + private String tokenId; + private ProductInfo product; + private RelationshipState state; + private String pricingPlan; + private InstitutionUpdateResponse institutionUpdate; + private BillingResponse billing; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipsManagement.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipsManagement.java new file mode 100644 index 0000000..17fd472 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipsManagement.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RelationshipsManagement { + private List items; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RootParentResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RootParentResponse.java new file mode 100644 index 0000000..a7c57cc --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RootParentResponse.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class RootParentResponse { + private String description; + private String id; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/UserInfoResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/UserInfoResponse.java new file mode 100644 index 0000000..9ccf53a --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/UserInfoResponse.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import lombok.Data; + +import java.util.List; + +@Data +public class UserInfoResponse { + + private String id; + private String taxCode; + private String name; + private String surname; + private String email; + private List products; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/BrokerMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/BrokerMapper.java new file mode 100644 index 0000000..99992e2 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/BrokerMapper.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.web.model.institution.BrokerResponse; +import org.mapstruct.Mapper; + +import java.util.List; + +@Mapper(componentModel = "spring") +public interface BrokerMapper { + + BrokerResponse toBroker(Institution institution); + List toBrokers(List institutions); +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/DelegationMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/DelegationMapper.java new file mode 100644 index 0000000..2754ba2 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/DelegationMapper.java @@ -0,0 +1,33 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequest; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequestFromTaxcode; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationResponse; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@Mapper(componentModel = "spring") +public interface DelegationMapper { + + Delegation toDelegation(DelegationRequest delegation); + + Delegation toDelegation(DelegationRequestFromTaxcode delegation); + + @Mapping(source = "from", target = "institutionId") + @Mapping(source = "to", target = "brokerId") + @Mapping(source = "institutionFromName", target = "institutionName") + @Mapping(source = "institutionToName", target = "brokerName") + @Mapping(source = "institutionFromRootName", target = "institutionRootName") + DelegationResponse toDelegationResponse(Delegation delegation); + + @Mapping(source = "from", target = "institutionId") + @Mapping(source = "to", target = "brokerId") + @Mapping(source = "toTaxCode", target = "brokerTaxCode") + @Mapping(source = "fromTaxCode", target = "taxCode") + @Mapping(source = "institutionFromName", target = "institutionName") + @Mapping(source = "institutionToName", target = "brokerName") + @Mapping(source = "institutionFromRootName", target = "institutionRootName") + DelegationResponse toDelegationResponseGet(Delegation delegation); + +} \ No newline at end of file diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustom.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustom.java new file mode 100644 index 0000000..6bec85f --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustom.java @@ -0,0 +1,562 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.model.user.ProductManagerInfo; +import it.pagopa.selfcare.mscore.web.model.institution.*; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardedProducts; +import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.*; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.stream.Collectors; + +@NoArgsConstructor(access = AccessLevel.NONE) +public class InstitutionMapperCustom { + + protected static final BinaryOperator MERGE_FUNCTION = (inst1, inst2) -> inst1.getStatus().compareTo(inst2.getStatus()) < 0 ? inst1 : inst2; + + public static InstitutionManagerResponse toInstitutionManagerResponse(ProductManagerInfo manager, String productId) { + InstitutionManagerResponse institutionManagerResponse = new InstitutionManagerResponse(); + institutionManagerResponse.setFrom(manager.getUserId()); + institutionManagerResponse.setTo(manager.getInstitution().getId()); + + addBillingData(institutionManagerResponse, manager, productId); + addUserManagerData(institutionManagerResponse, manager, productId); + addInstitutionUpdate(institutionManagerResponse, manager.getInstitution()); + + return institutionManagerResponse; + } + + public static InstitutionBillingResponse toInstitutionBillingResponse(Institution institution, String productId) { + if (institution == null) { + return null; + } + InstitutionBillingResponse response = new InstitutionBillingResponse(); + + response.setInstitutionId(institution.getId()); + response.setExternalId(institution.getExternalId()); + response.setDescription(institution.getDescription()); + response.setInstitutionType(institution.getInstitutionType()); + response.setDigitalAddress(institution.getDigitalAddress()); + response.setAddress(institution.getAddress()); + response.setZipCode(institution.getZipCode()); + response.setTaxCode(institution.getTaxCode()); + + response.setSubunitCode(institution.getSubunitCode()); + response.setSubunitType(institution.getSubunitType()); + response.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); + + for (Onboarding onboarding : institution.getOnboarding()) { + if (productId.equalsIgnoreCase(onboarding.getProductId())) { + response.setBilling(toBillingResponse(onboarding.getBilling(), institution)); + response.setPricingPlan(onboarding.getPricingPlan()); + } + } + + return response; + } + + public static InstitutionUpdateResponse toInstitutionUpdateResponse(Institution institution) { + InstitutionUpdateResponse institutionUpdate = new InstitutionUpdateResponse(); + institutionUpdate.setAddress(institution.getAddress()); + institutionUpdate.setInstitutionType(institution.getInstitutionType()); + institutionUpdate.setDescription(institution.getDescription()); + institutionUpdate.setDigitalAddress(institution.getDigitalAddress()); + institutionUpdate.setTaxCode(institution.getTaxCode()); + institutionUpdate.setZipCode(institution.getZipCode()); + institutionUpdate.setPaymentServiceProvider(toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); + institutionUpdate.setDataProtectionOfficer(toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); + if (institution.getGeographicTaxonomies() != null) { + var geoCodes = institution.getGeographicTaxonomies().stream() + .map(InstitutionGeographicTaxonomies::getCode) + .toList(); + institutionUpdate.setGeographicTaxonomyCodes(geoCodes); + } + institutionUpdate.setRea(institution.getRea()); + institutionUpdate.setShareCapital(institution.getShareCapital()); + institutionUpdate.setBusinessRegisterPlace(institution.getBusinessRegisterPlace()); + institutionUpdate.setSupportEmail(institution.getSupportEmail()); + institutionUpdate.setSupportPhone(institution.getSupportPhone()); + institutionUpdate.setImported(institution.isImported()); + + institutionUpdate.setSubunitCode(institution.getSubunitCode()); + institutionUpdate.setSubunitType(institution.getSubunitType()); + institutionUpdate.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); + + return institutionUpdate; + } + + private static void addUserManagerData(InstitutionManagerResponse institutionManagerResponse, ProductManagerInfo manager, String productId) { + for (OnboardedProduct product : manager.getProducts()) { + if (productId.equalsIgnoreCase(product.getProductId())) { + ProductInfo productInfo = new ProductInfo(); + productInfo.setId(productId); + productInfo.setCreatedAt(product.getCreatedAt()); + productInfo.setRole(product.getProductRole()); + if (product.getRole() != null) { + institutionManagerResponse.setRole(product.getRole().name()); + } + institutionManagerResponse.setProduct(productInfo); + institutionManagerResponse.setState(product.getStatus()); + institutionManagerResponse.setCreatedAt(product.getCreatedAt()); + institutionManagerResponse.setUpdatedAt(product.getUpdatedAt()); + institutionManagerResponse.setId(product.getRelationshipId()); + } + } + } + + private static void addInstitutionUpdate(InstitutionManagerResponse institutionManagerResponse, Institution institution) { + InstitutionUpdateResponse institutionUpdate = new InstitutionUpdateResponse(); + institutionUpdate.setInstitutionType(institution.getInstitutionType()); + institutionUpdate.setDescription(institution.getDescription()); + institutionUpdate.setDigitalAddress(institution.getDigitalAddress()); + institutionUpdate.setAddress(institution.getAddress()); + institutionUpdate.setZipCode(institution.getZipCode()); + institutionUpdate.setTaxCode(institution.getTaxCode()); + institutionUpdate.setPaymentServiceProvider(toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); + institutionUpdate.setDataProtectionOfficer(toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); + institutionUpdate.setRea(institution.getRea()); + institutionUpdate.setShareCapital(institution.getShareCapital()); + institutionUpdate.setBusinessRegisterPlace(institution.getBusinessRegisterPlace()); + institutionUpdate.setSupportEmail(institution.getSupportEmail()); + institutionUpdate.setSupportPhone(institution.getSupportPhone()); + institutionUpdate.setImported(institution.isImported()); + institutionUpdate.setSubunitCode(institution.getSubunitCode()); + institutionUpdate.setSubunitType(institution.getSubunitType()); + institutionUpdate.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); + if (institution.getGeographicTaxonomies() != null) { + institutionUpdate.setGeographicTaxonomyCodes(convertToGeoString(institution.getGeographicTaxonomies())); + } + institutionManagerResponse.setInstitutionUpdate(institutionUpdate); + } + + public static InstitutionUpdate toInstitutionUpdate(InstitutionPut institutionPut) { + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDescription(institutionPut.getDescription()); + institutionUpdate.setDigitalAddress(institutionPut.getDigitalAddress()); + institutionUpdate.setParentDescription(institutionPut.getParentDescription()); + institutionUpdate.setGeographicTaxonomies(Optional.ofNullable(institutionPut.getGeographicTaxonomyCodes()) + .map(geoTaxonomiesCodes -> geoTaxonomiesCodes.stream() + .map(code -> new InstitutionGeographicTaxonomies(code, null)) + .toList()) + .orElse(null) + ); + + return institutionUpdate; + } + + public static Institution toInstitution(InstitutionRequest request, String externalId) { + Institution institution = new Institution(); + institution.setExternalId(externalId); + institution.setOrigin(request.getOrigin()); + institution.setOriginId(request.getOriginId()); + institution.setInstitutionType(request.getInstitutionType()); + institution.setDescription(request.getDescription()); + institution.setAddress(request.getAddress()); + institution.setDigitalAddress(request.getDigitalAddress()); + institution.setCity(request.getCity()); + institution.setCounty(request.getCounty()); + institution.setCountry(request.getCountry()); + institution.setTaxCode(request.getTaxCode()); + institution.setZipCode(request.getZipCode()); + institution.setGeographicTaxonomies(toGeographicTaxonomies(request.getGeographicTaxonomies())); + institution.setAttributes(toAttributes(request.getAttributes())); + institution.setRea(request.getRea()); + institution.setShareCapital(request.getShareCapital()); + institution.setBusinessRegisterPlace(request.getBusinessRegisterPlace()); + institution.setSupportEmail(request.getSupportEmail()); + institution.setSupportPhone(request.getSupportPhone()); + if (request.getPaymentServiceProvider() != null) + institution.setPaymentServiceProvider(toPaymentServiceProvider(request.getPaymentServiceProvider())); + if (request.getDataProtectionOfficer() != null) + institution.setDataProtectionOfficer(toDataProtectionOfficer(request.getDataProtectionOfficer())); + return institution; + } + + public static Institution toInstitution(PdaInstitutionRequest request, String externalId) { + Institution institution = new Institution(); + institution.setExternalId(externalId); + institution.setDescription(request.getDescription()); + institution.setTaxCode(request.getTaxCode()); + return institution; + } + + private static BillingResponse toBillingResponse(Billing billing, Institution institution) { + BillingResponse billingResponse = new BillingResponse(); + if (billing != null) { + billingResponse.setVatNumber(billing.getVatNumber()); + billingResponse.setTaxCodeInvoicing(billing.getTaxCodeInvoicing()); + billingResponse.setRecipientCode(billing.getRecipientCode()); + billingResponse.setPublicServices(billing.isPublicServices()); + } else if (institution.getBilling() != null) { + billingResponse.setVatNumber(institution.getBilling().getVatNumber()); + billingResponse.setTaxCodeInvoicing(institution.getBilling().getTaxCodeInvoicing()); + billingResponse.setRecipientCode(institution.getBilling().getRecipientCode()); + billingResponse.setPublicServices(institution.getBilling().isPublicServices()); + } + return billingResponse; + } + + public static BillingResponse toBillingResponse(Onboarding onboarding, Institution institution) { + BillingResponse billingResponse = new BillingResponse(); + if (onboarding.getBilling() != null) { + billingResponse.setVatNumber(onboarding.getBilling().getVatNumber()); + billingResponse.setTaxCodeInvoicing(onboarding.getBilling().getTaxCodeInvoicing()); + billingResponse.setRecipientCode(onboarding.getBilling().getRecipientCode()); + billingResponse.setPublicServices(onboarding.getBilling().isPublicServices()); + } else if (institution.getBilling() != null) { + billingResponse.setVatNumber(institution.getBilling().getVatNumber()); + billingResponse.setTaxCodeInvoicing(institution.getBilling().getTaxCodeInvoicing()); + billingResponse.setRecipientCode(institution.getBilling().getRecipientCode()); + billingResponse.setPublicServices(institution.getBilling().isPublicServices()); + } + return billingResponse; + } + + public static Billing getBillingFromOnboarding(Onboarding onboarding, Institution institution) { + return onboarding.getBilling() != null ? onboarding.getBilling() : institution.getBilling(); + } + + public static Billing toBilling(BillingRequest billingRequest) { + Billing billing = new Billing(); + billing.setRecipientCode(billingRequest.getRecipientCode()); + billing.setTaxCodeInvoicing(billingRequest.getTaxCodeInvoicing()); + billing.setVatNumber(billingRequest.getVatNumber()); + billing.setPublicServices(billing.isPublicServices()); + return billing; + } + + private static void addBillingData(InstitutionManagerResponse institutionManagerResponse, ProductManagerInfo manager, String productId) { + for (Onboarding onboarding : manager.getInstitution().getOnboarding()) { + if (productId.equalsIgnoreCase(onboarding.getProductId())) { + institutionManagerResponse.setPricingPlan(onboarding.getPricingPlan()); + if (onboarding.getBilling() != null) + institutionManagerResponse.setBilling(toBillingResponse(onboarding.getBilling(), manager.getInstitution())); + } + } + } + + public static DataProtectionOfficer toDataProtectionOfficer(DataProtectionOfficerRequest request) { + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + if (request != null) { + dataProtectionOfficer.setAddress(request.getAddress()); + dataProtectionOfficer.setEmail(request.getEmail()); + dataProtectionOfficer.setPec(request.getPec()); + } + return dataProtectionOfficer; + } + + public static DataProtectionOfficerResponse toDataProtectionOfficerResponse(DataProtectionOfficer dataProtectionOfficer) { + DataProtectionOfficerResponse response = null; + if (dataProtectionOfficer != null) { + response = new DataProtectionOfficerResponse(); + response.setPec(dataProtectionOfficer.getPec()); + response.setEmail(dataProtectionOfficer.getEmail()); + response.setAddress(dataProtectionOfficer.getAddress()); + } + return response; + } + + public static PaymentServiceProvider toPaymentServiceProvider(PaymentServiceProviderRequest request) { + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + if (request != null) { + paymentServiceProvider.setAbiCode(request.getAbiCode()); + paymentServiceProvider.setVatNumberGroup(request.isVatNumberGroup()); + paymentServiceProvider.setBusinessRegisterNumber(request.getBusinessRegisterNumber()); + paymentServiceProvider.setLegalRegisterNumber(request.getLegalRegisterNumber()); + paymentServiceProvider.setLegalRegisterName(request.getLegalRegisterName()); + } + return paymentServiceProvider; + } + + public static PaymentServiceProviderResponse toPaymentServiceProviderResponse(PaymentServiceProvider paymentServiceProvider) { + PaymentServiceProviderResponse response = null; + if (paymentServiceProvider != null) { + response = new PaymentServiceProviderResponse(); + response.setAbiCode(paymentServiceProvider.getAbiCode()); + response.setLegalRegisterName(paymentServiceProvider.getLegalRegisterName()); + response.setBusinessRegisterNumber(paymentServiceProvider.getBusinessRegisterNumber()); + response.setVatNumberGroup(paymentServiceProvider.isVatNumberGroup()); + response.setLegalRegisterNumber(paymentServiceProvider.getLegalRegisterNumber()); + } + return response; + } + + public static List toAttributes(List attributes) { + List response = new ArrayList<>(); + if (attributes != null) { + for (AttributesRequest a : attributes) { + Attributes attribute = new Attributes(); + attribute.setCode(a.getCode()); + attribute.setDescription(a.getDescription()); + attribute.setOrigin(a.getOrigin()); + response.add(attribute); + } + } + return response; + } + + public static List toAttributeResponse(List attributes) { + List list = new ArrayList<>(); + if (attributes != null && !attributes.isEmpty()) { + for (Attributes a : attributes) { + AttributesResponse response = new AttributesResponse(); + response.setCode(a.getCode()); + response.setOrigin(a.getOrigin()); + response.setDescription(a.getDescription()); + list.add(response); + } + } + return list; + } + + + private static List toGeographicTaxonomies(List request) { + List response = new ArrayList<>(); + if (request != null && !request.isEmpty()) { + for (GeoTaxonomies g : request) { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(g.getCode(), g.getDesc()); + response.add(geographicTaxonomies); + } + } + return response; + } + + public static List toGeoTaxonomies(List geographicTaxonomies) { + List list = new ArrayList<>(); + if (geographicTaxonomies != null) { + for (InstitutionGeographicTaxonomies g : geographicTaxonomies) { + GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); + geoTaxonomies.setCode(g.getCode()); + geoTaxonomies.setDesc(g.getDesc()); + list.add(geoTaxonomies); + } + } + return list; + } + + private static List convertToGeoString(List geographicTaxonomies) { + List list = new ArrayList<>(); + geographicTaxonomies.forEach(g -> list.add(g.getCode())); + return list; + } + + public static OnboardedProducts toOnboardedProducts(List page) { + OnboardedProducts onboardedProducts = new OnboardedProducts(); + onboardedProducts.setProducts(toInstitutionProduct(page)); + return onboardedProducts; + } + + public static List toInstitutionProduct(List onboardings) { + if (onboardings == null) { + return Collections.emptyList(); + } + return onboardings.stream().map(onboarding -> { + InstitutionProduct product = new InstitutionProduct(); + product.setId(onboarding.getProductId()); + product.setState(onboarding.getStatus()); + return product; + }).toList(); + } + + public static InstitutionManagementResponse toInstitutionManagementResponse(Institution institution) { + InstitutionManagementResponse response = new InstitutionManagementResponse(); + response.setId(institution.getId()); + response.setExternalId(institution.getExternalId()); + response.setOrigin(institution.getOrigin()); + response.setOriginId(institution.getOriginId()); + response.setDescription(institution.getDescription()); + response.setInstitutionType(institution.getInstitutionType()); + response.setDigitalAddress(institution.getDigitalAddress()); + response.setAddress(institution.getAddress()); + response.setZipCode(institution.getZipCode()); + response.setTaxCode(institution.getTaxCode()); + if (institution.getOnboarding() != null) { + response.setProducts(toProductsMap(institution.getOnboarding(), institution)); + } + if (institution.getGeographicTaxonomies() != null) { + response.setGeographicTaxonomies(toGeoTaxonomies(institution.getGeographicTaxonomies())); + } + if (institution.getAttributes() != null) { + response.setAttributes(toAttributeResponse(institution.getAttributes())); + } + if (institution.getPaymentServiceProvider() != null) { + response.setPaymentServiceProvider(toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); + } + if (institution.getDataProtectionOfficer() != null) { + response.setDataProtectionOfficer(toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); + } + response.setRea(institution.getRea()); + response.setShareCapital(institution.getShareCapital()); + response.setBusinessRegisterPlace(institution.getBusinessRegisterPlace()); + response.setSupportEmail(institution.getSupportEmail()); + response.setSupportPhone(institution.getSupportPhone()); + response.setImported(institution.isImported()); + response.setCreatedAt(institution.getCreatedAt()); + response.setUpdatedAt(institution.getUpdatedAt()); + return response; + } + + public static InstitutionOnboardingResponse toInstitutionOnboardingResponse(Institution institution) { + InstitutionOnboardingResponse response = new InstitutionOnboardingResponse(); + response.setId(institution.getId()); + response.setExternalId(institution.getExternalId()); + response.setOrigin(institution.getOrigin()); + response.setOriginId(institution.getOriginId()); + response.setDescription(institution.getDescription()); + response.setInstitutionType(institution.getInstitutionType()); + response.setDigitalAddress(institution.getDigitalAddress()); + response.setAddress(institution.getAddress()); + response.setZipCode(institution.getZipCode()); + response.setTaxCode(institution.getTaxCode()); + if (institution.getOnboarding() != null) { + response.setOnboardings(toOnboardingMap(institution.getOnboarding(), institution)); + } + if (institution.getGeographicTaxonomies() != null) { + response.setGeographicTaxonomies(toGeoTaxonomies(institution.getGeographicTaxonomies())); + } + if (institution.getAttributes() != null) { + response.setAttributes(toAttributeResponse(institution.getAttributes())); + } + if (institution.getPaymentServiceProvider() != null) { + response.setPaymentServiceProvider(toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); + } + if (institution.getDataProtectionOfficer() != null) { + response.setDataProtectionOfficer(toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); + } + response.setRea(institution.getRea()); + response.setShareCapital(institution.getShareCapital()); + response.setBusinessRegisterPlace(institution.getBusinessRegisterPlace()); + response.setSupportEmail(institution.getSupportEmail()); + response.setSupportPhone(institution.getSupportPhone()); + response.setImported(institution.isImported()); + response.setCreatedAt(institution.getCreatedAt()); + response.setUpdatedAt(institution.getUpdatedAt()); + response.setSubunitCode(institution.getSubunitCode()); + response.setSubunitType(institution.getSubunitType()); + response.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); + return response; + } + + public static List toInstitutionListResponse(List institutions) { + List list = new ArrayList<>(); + for (Institution institution : institutions) { + InstitutionManagementResponse response = toInstitutionManagementResponse(institution); + list.add(response); + } + return list; + } + + private static Map toProductsMap(List onboarding, Institution institution) { + Map map = new HashMap<>(); + if (onboarding != null) { + for (Onboarding o : onboarding) { + ProductsManagement productsManagement = new ProductsManagement(); + productsManagement.setProduct(o.getProductId()); + productsManagement.setPricingPlan(o.getPricingPlan()); + productsManagement.setBilling(toBillingResponse(o.getBilling(), institution)); + map.put(o.getProductId(), productsManagement); + } + } + return map; + } + + private static Map toOnboardingMap(List onboarding, Institution institution) { + Map map = new HashMap<>(); + if (onboarding != null) { + for (Onboarding o : onboarding) { + OnboardingResponse onboardingResponse = new OnboardingResponse(); + onboardingResponse.setProductId(o.getProductId()); + onboardingResponse.setTokenId(o.getTokenId()); + onboardingResponse.setStatus(o.getStatus()); + onboardingResponse.setContract(o.getContract()); + onboardingResponse.setPricingPlan(o.getPricingPlan()); + onboardingResponse.setBilling(toBillingResponse(o.getBilling(), institution)); + onboardingResponse.setCreatedAt(o.getCreatedAt()); + onboardingResponse.setUpdatedAt(o.getUpdatedAt()); + onboardingResponse.setClosedAt(o.getClosedAt()); + onboardingResponse.setIsAggregator(o.getIsAggregator()); + if (!map.containsKey(o.getProductId()) || + map.containsKey(o.getProductId()) && map.get(o.getProductId()).getStatus() != RelationshipState.ACTIVE) { + map.put(o.getProductId(), onboardingResponse); + } + } + } + return map; + } + + public static List toInstitutionAttributeResponse(List attributes, String institutionId) { + List list = toAttributeResponse(attributes); + if (list.isEmpty()) { + throw new ResourceNotFoundException(String.format("Attributes for institution %s not found", institutionId), "0000"); + } + return list; + } + + public static List toInstitutionToOnboardList(List validInstitutions) { + return validInstitutions.stream() + .map(InstitutionMapperCustom::toInstitutionToOnboard) + .toList(); + } + + public static InstitutionToOnboard toInstitutionToOnboard(ValidInstitution validInstitutions) { + InstitutionToOnboard institution = new InstitutionToOnboard(); + institution.setDescription(validInstitutions.getDescription()); + institution.setId(validInstitutions.getId()); + return institution; + } + + public static List toValidInstitutions(List institutions) { + return institutions.stream() + .map(institutionToOnboard -> new ValidInstitution(institutionToOnboard.getId(), institutionToOnboard.getDescription())) + .toList(); + } + + public static BulkInstitutions toBulkInstitutions(List institution, List idsRequest) { + BulkInstitutions bulkInstitutions = new BulkInstitutions(); + bulkInstitutions.setFound(institution.stream() + .map(InstitutionMapperCustom::toBulkInstitution) + .toList()); + bulkInstitutions.setNotFound(idsRequest.stream() + .filter(s -> institution.stream().noneMatch(inst -> inst.getId().equalsIgnoreCase(s))) + .toList()); + return bulkInstitutions; + } + + private static BulkInstitution toBulkInstitution(Institution inst) { + BulkInstitution bulkInstitution = new BulkInstitution(); + bulkInstitution.setId(inst.getId()); + bulkInstitution.setExternalId(inst.getExternalId()); + bulkInstitution.setOrigin(inst.getOrigin()); + bulkInstitution.setOriginId(inst.getOriginId()); + bulkInstitution.setDescription(inst.getDescription()); + bulkInstitution.setInstitutionType(inst.getInstitutionType()); + bulkInstitution.setDigitalAddress(inst.getDigitalAddress()); + bulkInstitution.setAddress(inst.getAddress()); + bulkInstitution.setZipCode(inst.getZipCode()); + bulkInstitution.setTaxCode(inst.getTaxCode()); + bulkInstitution.setAttributes(toAttributeResponse(inst.getAttributes())); + bulkInstitution.setProducts(toBulkProductMap(inst.getOnboarding(), inst)); + return bulkInstitution; + } + + private static Map toBulkProductMap(List onboarding, Institution institution) { + if(onboarding != null && !onboarding.isEmpty()) { + return onboarding.stream().map(onb -> { + BulkProduct bulkProduct = new BulkProduct(); + bulkProduct.setProduct(onb.getProductId()); + bulkProduct.setPricingPlan(onb.getPricingPlan()); + bulkProduct.setBilling(toBillingResponse(onb.getBilling(), institution)); + bulkProduct.setStatus(onb.getStatus()); + return bulkProduct; + }).collect(Collectors.toMap(BulkProduct::getProduct, Function.identity(), MERGE_FUNCTION)); + } + return Collections.emptyMap(); + } +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionResourceMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionResourceMapper.java new file mode 100644 index 0000000..7a75b61 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionResourceMapper.java @@ -0,0 +1,40 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + + +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; +import it.pagopa.selfcare.mscore.web.model.institution.BillingRequest; +import it.pagopa.selfcare.mscore.web.model.institution.GeoTaxonomies; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionResponse; +import it.pagopa.selfcare.mscore.web.model.institution.RootParentResponse; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; +import org.springframework.util.StringUtils; + +@Mapper(componentModel = "spring") +public interface InstitutionResourceMapper { + + @Mapping(target = "aooParentCode", source = "paAttributes.aooParentCode") + @Mapping(target = "rootParent", source = ".", qualifiedByName = "setRootParent") + InstitutionResponse toInstitutionResponse(Institution institution); + + @Named("setRootParent") + static RootParentResponse setRootParent(Institution institution) { + if(StringUtils.hasText(institution.getRootParentId())){ + RootParentResponse rootParentResponse = new RootParentResponse(); + rootParentResponse.setId(institution.getRootParentId()); + rootParentResponse.setDescription(institution.getParentDescription()); + return rootParentResponse; + } + return null; + } + + + Billing billingRequestToBilling(BillingRequest billingRequest); + + InstitutionGeographicTaxonomies toInstitutionGeographicTaxonomies(GeoTaxonomies geoTaxonomies); + + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionUpdateMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionUpdateMapper.java new file mode 100644 index 0000000..bbd1b00 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionUpdateMapper.java @@ -0,0 +1,29 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + + +import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionUpdateRequest; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@Mapper(componentModel = "spring") +public interface InstitutionUpdateMapper { + + @Mapping(target = "geographicTaxonomies", source = "geographicTaxonomyCodes", qualifiedByName = "toGeographicTaxonomies") + InstitutionUpdate toInstitutionUpdate(InstitutionUpdateRequest request); + + @Named("toGeographicTaxonomies") + default List toGeographicTaxonomies(List geographicTaxonomyCodes) { + return Optional.ofNullable(geographicTaxonomyCodes) + .map(item -> geographicTaxonomyCodes.stream() + .map(code -> new InstitutionGeographicTaxonomies(code,null)) + .collect(Collectors.toList())) + .orElse(null); + } +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapper.java new file mode 100644 index 0000000..df93cc3 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapper.java @@ -0,0 +1,145 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import it.pagopa.selfcare.mscore.constant.TokenType; +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.institution.PaAttributes; +import it.pagopa.selfcare.mscore.model.onboarding.*; +import it.pagopa.selfcare.mscore.web.model.onboarding.*; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +@NoArgsConstructor(access = AccessLevel.NONE) +public class OnboardingMapper { + + private static UserMapper userMapper = new UserMapperImpl(); + + private static Contract toContract(ContractRequest request) { + Contract contract = new Contract(); + if (request != null) { + contract.setPath(request.getPath()); + contract.setVersion(request.getVersion()); + } + return contract; + } + + public static OnboardingInfoResponse toUserInfoResponse(String userId, List onboardingInfos) { + OnboardingInfoResponse response = new OnboardingInfoResponse(); + response.setUserId(userId); + List institutionResponseList = new ArrayList<>(); + if(Objects.nonNull(onboardingInfos)) { + onboardingInfos.forEach(onboardingInfo -> { + institutionResponseList.add(constructOnboardedInstitutionResponse(onboardingInfo.getInstitution(), + onboardingInfo.getBinding().getProducts())); + }); + } + response.setInstitutions(institutionResponseList); + return response; + } + + public static OnboardingInfoResponse toOnboardingInfoResponse(String userId, List onboardingInfos) { + OnboardingInfoResponse response = new OnboardingInfoResponse(); + response.setUserId(userId); + List institutionResponseList = new ArrayList<>(); + if(Objects.nonNull(onboardingInfos)) { + onboardingInfos.stream() + .filter(item -> Objects.nonNull(item.getInstitution()) && Objects.nonNull(item.getInstitution().getOnboarding()) + && Objects.nonNull(item.getBinding())) + .forEach(onboardingInfo -> onboardingInfo.getInstitution().getOnboarding().stream() + .filter(onboarding -> onboarding.getProductId().equalsIgnoreCase(onboardingInfo.getBinding().getProducts().getProductId()) + && onboarding.getStatus().equals(onboardingInfo.getBinding().getProducts().getStatus())) + .findFirst() + .ifPresent(onboarding -> institutionResponseList.add(constructOnboardedInstitutionResponse(onboardingInfo.getInstitution(), + onboardingInfo.getBinding().getProducts(), + onboarding))) + ); + } + response.setInstitutions(institutionResponseList); + return response; + } + + private static OnboardedInstitutionResponse constructOnboardedInstitutionResponse(Institution institution, OnboardedProduct product, Onboarding onboarding) { + OnboardedInstitutionResponse institutionResponse = constructOnboardedInstitutionResponse(institution, product); + institutionResponse.setPricingPlan(onboarding.getPricingPlan()); + Billing billing = InstitutionMapperCustom.getBillingFromOnboarding(onboarding, institution); + institutionResponse.setBilling(billing); + return institutionResponse; + } + + private static OnboardedInstitutionResponse constructOnboardedInstitutionResponse(Institution institution, OnboardedProduct product) { + OnboardedInstitutionResponse institutionResponse = new OnboardedInstitutionResponse(); + institutionResponse.setId(institution.getId()); + institutionResponse.setExternalId(institution.getExternalId()); + institutionResponse.setOrigin(institution.getOrigin()); + institutionResponse.setOriginId(institution.getOriginId()); + institutionResponse.setDescription(institution.getDescription()); + institutionResponse.setInstitutionType(institution.getInstitutionType()); + institutionResponse.setDigitalAddress(institution.getDigitalAddress()); + institutionResponse.setAddress(institution.getAddress()); + institutionResponse.setZipCode(institution.getZipCode()); + institutionResponse.setTaxCode(institution.getTaxCode()); + if (institution.getGeographicTaxonomies() != null) { + institutionResponse.setGeographicTaxonomies(InstitutionMapperCustom.toGeoTaxonomies(institution.getGeographicTaxonomies())); + } + if (institution.getAttributes() != null) { + institutionResponse.setAttributes(InstitutionMapperCustom.toAttributeResponse(institution.getAttributes())); + } + ProductInfo productInfo = new ProductInfo(); + productInfo.setRole(product.getProductRole()); + productInfo.setId(product.getProductId()); + productInfo.setCreatedAt(product.getCreatedAt()); + if(Objects.nonNull(product.getStatus())){ + productInfo.setStatus(product.getStatus().name()); + } + institutionResponse.setState(product.getStatus().name()); + institutionResponse.setRole(product.getRole()); + institutionResponse.setProductInfo(productInfo); + institutionResponse.setBusinessData(new BusinessData(institution.getRea(), institution.getShareCapital(), institution.getBusinessRegisterPlace())); + institutionResponse.setSupportContact(new SupportContact(institution.getSupportEmail(), institution.getSupportPhone())); + institutionResponse.setPaymentServiceProvider(InstitutionMapperCustom.toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); + institutionResponse.setDataProtectionOfficer(InstitutionMapperCustom.toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); + institutionResponse.setParentDescription(institution.getParentDescription()); + institutionResponse.setRootParentId(institution.getRootParentId()); + institutionResponse.setSubunitCode(institution.getSubunitCode()); + institutionResponse.setSubunitType(institution.getSubunitType()); + institutionResponse.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); + + return institutionResponse; + } + + public static OnboardingOperatorsRequest toOnboardingOperatorRequest(OnboardingInstitutionOperatorsRequest onboardingInstitutionOperatorsRequest) { + OnboardingOperatorsRequest request = new OnboardingOperatorsRequest(); + request.setInstitutionId(onboardingInstitutionOperatorsRequest.getInstitutionId()); + request.setProductId(onboardingInstitutionOperatorsRequest.getProductId()); + request.setProductTitle(onboardingInstitutionOperatorsRequest.getProductTitle()); + request.setUsers(Optional.ofNullable(onboardingInstitutionOperatorsRequest.getUsers()) + .map(list -> list.stream().map(userMapper::toUserToOnboard).collect(Collectors.toList())) + .orElse(List.of()) + ); + return request; + } + + public static OnboardingLegalsRequest toOnboardingLegalsRequest(OnboardingInstitutionLegalsRequest onboardingInstitutionLegalsRequest) { + OnboardingLegalsRequest request = new OnboardingLegalsRequest(); + request.setTokenType(TokenType.LEGALS); + request.setProductId(onboardingInstitutionLegalsRequest.getProductId()); + request.setProductName(onboardingInstitutionLegalsRequest.getProductName()); + request.setUsers(Optional.ofNullable(onboardingInstitutionLegalsRequest.getUsers()) + .map(list -> list.stream().map(userMapper::toUserToOnboard).collect(Collectors.toList())) + .orElse(List.of()) + ); + request.setInstitutionExternalId(onboardingInstitutionLegalsRequest.getInstitutionExternalId()); + request.setInstitutionId(onboardingInstitutionLegalsRequest.getInstitutionId()); + request.setContract(toContract(onboardingInstitutionLegalsRequest.getContract())); + request.setSignContract(onboardingInstitutionLegalsRequest.isSignContract()); + return request; + } + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingResourceMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingResourceMapper.java new file mode 100644 index 0000000..c6eb299 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingResourceMapper.java @@ -0,0 +1,49 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + + +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardingRequest; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardingUsersRequest; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionOnboardingRequest; +import it.pagopa.selfcare.mscore.web.model.institution.OnboardingResponse; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardingInstitutionRequest; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardingInstitutionUsersRequest; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; + +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.util.Optional; + +@Mapper(componentModel = "spring", uses = {InstitutionUpdateMapper.class}) +public interface OnboardingResourceMapper { + + OnboardingResponse toResponse(Onboarding onboarding); + + @Mapping(target = "contractFilePath", source = "contractImported.filePath") + @Mapping(target = "contractCreatedAt", source = "contractImported.createdAt") + @Mapping(target = "billingRequest", source = "billing") + @Mapping(target = "signContract", source = "signContract", qualifiedByName = "mapSignContract") + @Mapping(target = "contractActivatedAt", source = "contractImported.activatedAt") + OnboardingRequest toOnboardingRequest(OnboardingInstitutionRequest onboardingInstitutionRequest); + + OnboardingUsersRequest toOnboardingUsersRequest(OnboardingInstitutionUsersRequest request); + + @Named("mapSignContract") + default Boolean mapSignContract(Boolean signContract) { + return Optional.ofNullable(signContract).orElse(true); + } + + @Mapping(target = "contract", source = "contractPath") + @Mapping(target = "createdAt", source = "activatedAt") + Onboarding toOnboarding(InstitutionOnboardingRequest onboardingRequest); + + @Named("toOffsetDateTime") + default OffsetDateTime toOffsetDateTime(LocalDateTime date) { + return Optional.ofNullable(date) + .map(ld -> ld.atZone(ZoneOffset.systemDefault()).toOffsetDateTime()) + .orElse(null); + } +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapper.java new file mode 100644 index 0000000..2e2d48c --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapper.java @@ -0,0 +1,60 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import it.pagopa.selfcare.mscore.model.user.RelationshipInfo; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.web.model.institution.RelationshipResult; +import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.NONE) +public class RelationshipMapper { + + public static RelationshipResult toRelationshipResult(RelationshipInfo info) { + + RelationshipResult relationshipResult = new RelationshipResult(); + if (info.getOnboardedProduct() != null) { + relationshipResult.setId(info.getOnboardedProduct().getRelationshipId()); + relationshipResult.setState(info.getOnboardedProduct().getStatus()); + relationshipResult.setRole(info.getOnboardedProduct().getRole()); + + ProductInfo productInfo = new ProductInfo(); + productInfo.setId(info.getOnboardedProduct().getProductId()); + productInfo.setCreatedAt(info.getOnboardedProduct().getCreatedAt()); + productInfo.setRole(info.getOnboardedProduct().getProductRole()); + + relationshipResult.setProduct(productInfo); + } + relationshipResult.setFrom(info.getUserId()); + relationshipResult.setTo(info.getInstitution().getId()); + + if (info.getInstitution() != null) { + relationshipResult.setInstitutionUpdate(InstitutionMapperCustom.toInstitutionUpdateResponse(info.getInstitution())); + } + + addInstitutionOnboardingData(info, relationshipResult); + return relationshipResult; + } + + private static void addInstitutionOnboardingData(RelationshipInfo info, RelationshipResult relationshipResult) { + if (info.getInstitution().getOnboarding() != null) { + for (Onboarding onboarding : info.getInstitution().getOnboarding()) { + if (onboarding.getProductId().equalsIgnoreCase(info.getOnboardedProduct().getProductId())) { + relationshipResult.setPricingPlan(onboarding.getPricingPlan()); + relationshipResult.setBilling(InstitutionMapperCustom.toBillingResponse(onboarding, info.getInstitution())); + } + } + } + } + + public static List toRelationshipResultList(List relationshipInfoList) { + List relationshipResults = new ArrayList<>(); + for (RelationshipInfo info : relationshipInfoList) { + relationshipResults.add(toRelationshipResult(info)); + } + return relationshipResults; + } +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/UserMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/UserMapper.java new file mode 100644 index 0000000..d5eddec --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/UserMapper.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + + +import it.pagopa.selfcare.mscore.model.user.UserToOnboard; +import it.pagopa.selfcare.mscore.web.model.user.Person; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface UserMapper { + + UserToOnboard toUserToOnboard(Person p); +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/BusinessData.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/BusinessData.java new file mode 100644 index 0000000..2666613 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/BusinessData.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BusinessData { + private String rea; + private String shareCapital; + private String businessRegisterPlace; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ContractRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ContractRequest.java new file mode 100644 index 0000000..92b9425 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ContractRequest.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +@Data +public class ContractRequest { + private String version; + + @NotEmpty(message = "contract path is required") + private String path; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/LegalsResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/LegalsResponse.java new file mode 100644 index 0000000..46d21bf --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/LegalsResponse.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.Env; +import lombok.Data; + +@Data +public class LegalsResponse { + private String partyId; + private String relationshipId; + private PartyRole role; + private Env env; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedInstitutionResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedInstitutionResponse.java new file mode 100644 index 0000000..5350b61 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedInstitutionResponse.java @@ -0,0 +1,46 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.web.model.institution.AttributesResponse; +import it.pagopa.selfcare.mscore.web.model.institution.DataProtectionOfficerResponse; +import it.pagopa.selfcare.mscore.web.model.institution.GeoTaxonomies; +import it.pagopa.selfcare.mscore.web.model.institution.PaymentServiceProviderResponse; +import lombok.Data; + +import java.util.List; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class OnboardedInstitutionResponse { + + private String id; + private String externalId; + private String originId; + private String description; + private String origin; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String taxCode; + private String pricingPlan; + private Billing billing; + private List geographicTaxonomies; + private List attributes; + private String state; + private PartyRole role; + private ProductInfo productInfo; + private BusinessData businessData; + private SupportContact supportContact; + private PaymentServiceProviderResponse paymentServiceProvider; + private DataProtectionOfficerResponse dataProtectionOfficer; + private String parentDescription; + private String rootParentId; + private String subunitCode; + private String subunitType; + private String aooParentCode; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProductResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProductResponse.java new file mode 100644 index 0000000..f1e0828 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProductResponse.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.web.model.institution.BillingResponse; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OnboardedProductResponse { + private String productId; + private RelationshipState status; + private BillingResponse billing; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private Boolean isAggregator; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProducts.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProducts.java new file mode 100644 index 0000000..e484e37 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProducts.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionProduct; +import lombok.Data; + +import java.util.List; + +@Data +public class OnboardedProducts { + private List products; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingImportContract.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingImportContract.java new file mode 100644 index 0000000..7f4099f --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingImportContract.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.OffsetDateTime; + +@Data +public class OnboardingImportContract { + + private String fileName; + private String filePath; + private String contractType; + private OffsetDateTime createdAt; + private OffsetDateTime activatedAt; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInfoResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInfoResponse.java new file mode 100644 index 0000000..a56b704 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInfoResponse.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.util.List; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class OnboardingInfoResponse { + private String userId; + private List institutions; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionLegalsRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionLegalsRequest.java new file mode 100644 index 0000000..d106a10 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionLegalsRequest.java @@ -0,0 +1,33 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import it.pagopa.selfcare.mscore.web.model.user.Person; +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class OnboardingInstitutionLegalsRequest { + + @NotEmpty(message = "productId is required") + private String productId; + + private String productName; + + @NotEmpty(message = "at least one user is required") + private List users; + + private String institutionExternalId; + + @NotEmpty(message = "institutionId is required") + private String institutionId; + + @Valid + @NotNull(message = "contract is required") + private ContractRequest contract; + + private boolean signContract; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionOperatorsRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionOperatorsRequest.java new file mode 100644 index 0000000..5d5f1e5 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionOperatorsRequest.java @@ -0,0 +1,24 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import it.pagopa.selfcare.mscore.web.model.user.Person; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +@Data +public class OnboardingInstitutionOperatorsRequest { + + @NotEmpty(message = "productId is required") + private String productId; + + @NotEmpty(message = "productTitle is required") + private String productTitle; + + @NotEmpty(message = "at least one user is required") + private List users; + + @NotEmpty(message = "InstitutionId is required") + private String institutionId; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionRequest.java new file mode 100644 index 0000000..59352b7 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionRequest.java @@ -0,0 +1,40 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import io.swagger.annotations.ApiModelProperty; +import it.pagopa.selfcare.mscore.web.model.institution.BillingRequest; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionUpdateRequest; +import it.pagopa.selfcare.mscore.web.model.user.Person; +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class OnboardingInstitutionRequest { + + @NotEmpty(message = "productId is required") + private String productId; + + private String productName; + + @NotEmpty(message = "at least one user is required") + private List users; + + @NotEmpty(message = "Institution externalId is required") + private String institutionExternalId; + + @NotNull(message = "institutionData is required") + @Valid + private InstitutionUpdateRequest institutionUpdate; + + private String pricingPlan; + private BillingRequest billing; + private ContractRequest contract; + private OnboardingImportContract contractImported; + private Boolean signContract; + @ApiModelProperty(value = "${swagger.mscore.onboarding.complete.model.sendCompleteOnboardingEmail}") + private Boolean sendCompleteOnboardingEmail; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionUsersRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionUsersRequest.java new file mode 100644 index 0000000..9904b7d --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionUsersRequest.java @@ -0,0 +1,24 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import it.pagopa.selfcare.mscore.web.model.user.Person; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +@Data +public class OnboardingInstitutionUsersRequest { + + @NotEmpty(message = "productId is required") + private String productId; + + @NotEmpty(message = "at least one user is required") + private List users; + + @NotEmpty(message = "InstitutionId is required") + private String institutionTaxCode; + + private String institutionSubunitCode; + private Boolean sendCreateUserNotificationEmail = Boolean.TRUE; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ProductInfo.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ProductInfo.java new file mode 100644 index 0000000..1ce4325 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ProductInfo.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ProductInfo { + private String id; + private String role; + private OffsetDateTime createdAt; + private String status; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/SupportContact.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/SupportContact.java new file mode 100644 index 0000000..27a6497 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/SupportContact.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SupportContact { + private String supportEmail; + private String supportPhone; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenListResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenListResponse.java new file mode 100644 index 0000000..c9a2df4 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenListResponse.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import it.pagopa.selfcare.mscore.model.onboarding.TokenUser; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class TokenListResponse { + List items; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenResponse.java new file mode 100644 index 0000000..f705d60 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenResponse.java @@ -0,0 +1,40 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import it.pagopa.selfcare.mscore.model.onboarding.TokenUser; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class TokenResponse { + private String id; + private String checksum; + private List legals = new ArrayList<>(); + private RelationshipState status; + private String institutionId; + private String productId; + private OffsetDateTime expiringDate; + private String contractVersion; + private String contractTemplate; + private String contractSigned; + private String contentType; + private List users; + private InstitutionUpdate institutionUpdate; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private OffsetDateTime closedAt; + + public TokenResponse(String id) { + this.id = id; + } +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/InstitutionToNotifyResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/InstitutionToNotifyResponse.java new file mode 100644 index 0000000..add171f --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/InstitutionToNotifyResponse.java @@ -0,0 +1,33 @@ +package it.pagopa.selfcare.mscore.web.model.token; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.model.RootParent; +import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class InstitutionToNotifyResponse { + + private InstitutionType institutionType; + private String description; + private String digitalAddress; + private String address; + private String taxCode; + private String origin; + private String originId; + private String zipCode; + private PaymentServiceProvider paymentServiceProvider; + private String istatCode; + private String city; + private String country; + private String county; + private String subUnitCode; + private String category; + private String subUnitType; + private RootParent rootParent; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/ScContractResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/ScContractResponse.java new file mode 100644 index 0000000..f2001ae --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/ScContractResponse.java @@ -0,0 +1,30 @@ +package it.pagopa.selfcare.mscore.web.model.token; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.mscore.model.QueueEvent; +import it.pagopa.selfcare.mscore.web.model.institution.BillingResponse; +import lombok.Data; + +import java.time.OffsetDateTime; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ScContractResponse { + + private String id; + private String internalIstitutionID; + private String product; + private String state; + private String filePath; + private String fileName; + private String contentType; + private String onboardingTokenId; + private String pricingPlan; + private InstitutionToNotifyResponse institution; + private BillingResponse billing; + private OffsetDateTime createdAt; + private OffsetDateTime closedAt; + private OffsetDateTime updatedAt; + private QueueEvent notificationType; + +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/InstitutionProducts.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/InstitutionProducts.java new file mode 100644 index 0000000..173ae8d --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/InstitutionProducts.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import lombok.Data; + +import java.util.List; + +@Data +public class InstitutionProducts { + + private String institutionId; + private String institutionName; + private String institutionRootName; + private List products; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/OnboardedUsersResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/OnboardedUsersResponse.java new file mode 100644 index 0000000..b98f48c --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/OnboardedUsersResponse.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Data +@Builder +public class OnboardedUsersResponse { + private List users; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Person.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Person.java new file mode 100644 index 0000000..f8c3410 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Person.java @@ -0,0 +1,34 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.Env; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; + +@Data +@Valid +@JsonInclude(JsonInclude.Include.NON_NULL) +@AllArgsConstructor +@NoArgsConstructor +public class Person { + + @NotEmpty(message = "User internal id is required") + private String id; + private String taxCode; + private String name; + private String surname; + private String email; + private PartyRole role; + private String productRole; + private Env env = Env.ROOT; + private String roleLabel; + + public Person(String id) { + this.id = id; + } +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/PersonId.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/PersonId.java new file mode 100644 index 0000000..af2a684 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/PersonId.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PersonId { + + private String id; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Product.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Product.java new file mode 100644 index 0000000..46e3589 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Product.java @@ -0,0 +1,24 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.Env; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; + +import java.time.OffsetDateTime; + +import static it.pagopa.selfcare.mscore.constant.Env.ROOT; + +@Data +public class Product { + + private String productId; + private String tokenId; + private RelationshipState status; + private String contract; + private String productRole; + private PartyRole role; + private Env env = ROOT; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCount.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCount.java new file mode 100644 index 0000000..feac00a --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCount.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import lombok.Data; + +@Data +public class ProductCount { + private String productId; + private Integer count; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCountResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCountResponse.java new file mode 100644 index 0000000..274dd99 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCountResponse.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ProductCountResponse { + List products; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserProductsResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserProductsResponse.java new file mode 100644 index 0000000..33706d8 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserProductsResponse.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UserProductsResponse { + + private String id; + private List bindings; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserResponse.java new file mode 100644 index 0000000..3a4a178 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserResponse.java @@ -0,0 +1,27 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; + +@Data +@Valid +@JsonInclude(JsonInclude.Include.NON_NULL) +@AllArgsConstructor +@NoArgsConstructor +public class UserResponse { + + @NotEmpty(message = "User internal id is required") + private String id; + private String taxCode; + @NotBlank + private String name; + @NotBlank + private String surname; + private String email; +} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/util/CustomExceptionMessage.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/util/CustomExceptionMessage.java new file mode 100644 index 0000000..19563c9 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/util/CustomExceptionMessage.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.web.util; + +import it.pagopa.selfcare.mscore.constant.GenericError; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; + +@NoArgsConstructor(access = AccessLevel.NONE) +public class CustomExceptionMessage { + + + public static void setCustomMessage(GenericError genericError){ + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()) + .getRequest(); + request.setAttribute("errorEnum", genericError); + } +} diff --git a/apps/institution-ms-new/web/src/main/resources/swagger/swagger_en.properties b/apps/institution-ms-new/web/src/main/resources/swagger/swagger_en.properties new file mode 100644 index 0000000..5cc48b0 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/resources/swagger/swagger_en.properties @@ -0,0 +1,115 @@ +swagger.description= +swagger.security.schema.bearer.description=A bearer token in the format of a JWS and conformed to the specifications included in [RFC8725](https://tools.ietf.org/html/RFC8725) +swagger.mscore.external.institution=Gets institution using external institution id +swagger.mscore.external.institution.manager=retrieves the manager related to the institution even if the current user is not related to the institution/product +swagger.mscore.external.institution.billing=retrieves the billing data related to the institution even if the current user is not related to the institution/product +swagger.mscore.external.institution.products=retrieves the products related to Institution +swagger.mscore.external.geotaxonomies=retrieves the geographic taxonomies related to Institution. +swagger.mscore.external.institution.relationships=returns the relationships related to the institution +swagger.mscore.institutions=Gets institutions filtering by taxCode and/or subunitCode +swagger.mscore.institution.create.from-ipa=create an institution from ipa registry +swagger.mscore.institution.create.from-ivass=create an institution from ivass CSV +swagger.mscore.institution.create.from-infocamere=create an institution from infocamere registry +swagger.mscore.institutions.findFromProduct=Gets institutions filtering onboardings by product id +swagger.mscore.institution=Gets the corresponding institution using internal institution id +swagger.mscore.institution.PA.create=create an institution (PA) using external institution id fetching data from party-registry +swagger.mscore.institution.create=create an institution using external institution id without fetching data from party-registry or info-camere +swagger.mscore.institution.PG.create=create an institution (PG) using external institution id fetching data from info-camere +swagger.mscore.institution.products=retrieves the insistitution's related products. +swagger.mscore.institution.relationships=returns the relationships related to the institution +swagger.mscore.onboarding.operator=performs operators onboarding on an already existing institution +swagger.mscore.onboarding.subdelegates=performs subdelegates onboarding on an already existing institution +swagger.mscore.onboarding.users=The service adds users to the registry if they are not present and associates them with the institution and product contained in the body +swagger.mscore.onboarding.users.delete=The service set DELETE status on onboarding association with the product and institutionId +swagger.mscore.onboarding.legals=performs legals onboarding on an already existing institution +swagger.mscore.relationships=Gets the corresponding relationship +swagger.mscore.relationship.delete=Given a relationship identifier, it deletes the corresponding relationship +swagger.mscore.relationship.activate=Activate the relationship +swagger.mscore.relationship.suspend=Suspend the relationship +swagger.mscore.institutions.updateCreatedAt=The service updates the createdAt field for the institution-product pair +swagger.mscore.token.tokenId=contract's unique identifier +swagger.mscore.institutions.model.externalId=Institution's unique external identifier +swagger.mscore.institutions.model.description=Description ente +swagger.mscore.institutions.model.productId=Product's unique identifier +swagger.mscore.institutions.model.personId=User's unique identifier (uuid) +swagger.mscore.institutions.model.id=Institution's unique identifier +swagger.mscore.institutions.model.institutionId=The internal identifier of the institution +swagger.mscore.institutions.existsInRegistry=boolean for PG persistence (institution exists in Info Camere or AdE registry +swagger.mscore.institutions.model.relationshipState=List of Relationship state for filter products +swagger.mscore.institutions.valid=Retrieve list of institution which logged user can onboard +swagger.mscore.institutions.model.internalIds=List of Institution to onboard +swagger.mscore.institutions.model.createdAt=The createdAt date +swagger.mscore.institutions.model.type=Institution's type +swagger.mscore.institutions.model.taxCode=Institution's tax code +swagger.mscore.institutions.model.subunitCode=Institution's subunit code +swagger.mscore.institutions.model.origin=Institution's origin +swagger.mscore.institutions.model.originId=Institution's id in the relative origin open data +swagger.mscore.onboarding.institution.complete = update institution and users data without adding a new token +swagger.mscore.onboarding.institution.persist = Responsible for saving the association between an institution and a product. It also creates occurrences in the Users collection as part of this process. +swagger.mscore.onboarding.institution=create a new Token (contract), and update institution and users data +swagger.mscore.onboarding.complete=complete an onboarding request +swagger.mscore.onboarding.complete.model.sendCompleteOnboardingEmail = Parameter that allows you to specify whether following completion of onboarding you want to receive an email +swagger.mscore.onboarding.reject=invalidate an onboarding request by an operator review +swagger.mscore.onboarding.invalidate=invalidate an onboarding request +swagger.mscore.onboarding.approve=approve an onboarding reuqest by an operator review +swagger.mscore.token.verify=Verify if the token is already consumed +swagger.mscore.token.api.getToken=Retrieve token given the institution's and product ids +swagger.mscore.token=retrieve a token relationship +swagger.mscore.tokens.getAll=Retrieve all token relationships +swagger.mscore.tokens.findFromProduct=Retrieve all token from a product +swagger.mscore.token.model.states=Token relationship's status +swagger.mscore.onboarding.verify=verify if onboardedProduct is already onboarded for institution +swagger.mscore.onboarding.info=returns onboarding info +swagger.mscore.person.info=returns the identified person, if any. +swagger.mscore.person.create=create a new person +swagger.mscore.relationship.relationshipId=UserBinding's unique identifier +swagger.mscore.onboarding.relationship.document=retrieve the contractDocument related to a relationship +swagger.mscore.institution.update=update institution data of given institution +swagger.mscore.institution.geotaxonomies=retrieves the geographic taxonomies this institution is related to +swagger.mscore.person.get=Retrieves Person by ID +swagger.mscore.person.verify=verify if a Person exists for a given ID +swagger.mscore.institution.verify=verify if Institution exists for a given ID +swagger.mscore.institution.model.id=Institution's unique internal identifier +swagger.mscore.institution.attributes=returns the attributes of the identified institution, if any. +swagger.mscore.institution.bygeotaxonomies=Retrieves a collection of institutions having one or more geographic taxonomies +swagger.mscore.institution.byproductid=Retrieves Institutions by product ID +swagger.mscore.relationships.get=Return a list of relationships +swagger.mscore.institutions.geotaxonomy.searchMode=The search mode to perform, as default 'any' +swagger.mscore.institutions.geotaxonomy=Comma separated list of the geographic taxonomies to search +swagger.mscore.product.model.id=Product's unique identifier +swagger.mscore.token.consume=Consume token onboarding request without digest verification +swagger.mscore.delegation.create=Create an association between institution id and technical partner +swagger.mscore.delegation.createFromTaxCode=Create an association between institution and technical partner using taxCode for both instead of internal id. It is useful when we don't know institution's internal id. +swagger.mscore.institution.create.from-anac=Create an association between institution id and technical partner from anac +swagger.mscore.institution.create.from-pda=Create an association between institution id and technical partner from pda +swagger.mscore.institution.info=Retrieve institution information +swagger.mscore.delegation.delete=Delete an association between institution id and technical partner setting its status to DELETED and setting delegation to false on institution if it has no more delegations +swagger.mscore.delegation.model.delegationId=Delegation's unique internal identifier +swagger.mscore.users.products=Retrieves products info and role which the user is enabled +swagger.mscore.users=Retrieves user given userId and optional ProductId +swagger.mscore.users.delete.products=Delete logically the association institution and product +swagger.mscore.api.users.updateUserStatus=Update user status with optional filter for institution, product, role and productRole +swagger.mscore.api.users.getOnboardedUsers=Retrieve onboarded users according to identifiers in input +swagger.mscore.institutions.delegations=Retrieve institution's delegations +swagger.mscore.institutions.delegationsV2=Retrieve institution's delegations with pagination +swagger.mscore.institutions.delegations.order=Order to show response NONE, ASC, DESC +swagger.mscore.institutions.brokers=Retrieve institution brokers +swagger.mscore.institutions.getInstitutionBrokers=Retrieve institution brokers +swagger.mscore.users.userId=User's unique identifier +swagger.mscore.users.userIds=Users unique identifiers +swagger.mscore.api.users.updateUser=Service to send notification when user data get's updated +swagger.mscore.institutions.api.getInstitutionUsers=Retrieve institution's users +swagger.mscore.api.users.findAll=Retrieve all users according to optional params in input +swagger.mscore.migration.save.institution=Create an institution +swagger.mscore.migration.findbyid.institution=Find an institution by institution internal unique identifier +swagger.mscore.migration.find.institution=Find an institution +swagger.mscore.migration.delete.institution=Delete an institution +swagger.mscore.migration.save.token=Create a token +swagger.mscore.migration.findbyid.token=Find a token by its unique internal identifier +swagger.mscore.migration.delete.token=Delete a token +swagger.mscore.migration.save.user=Create a user +swagger.mscore.migration.findbyid.user=Find a user by its unique internal identifier +swagger.mscore.migration.delete.user=Delete a user +swagger.mscore.migration.find.token=Find a token +swagger.mscore.page.number=Page number +swagger.mscore.page.size=Page size diff --git a/apps/institution-ms-new/web/src/main/resources/swagger/swagger_it.properties b/apps/institution-ms-new/web/src/main/resources/swagger/swagger_it.properties new file mode 100644 index 0000000..e0419c3 --- /dev/null +++ b/apps/institution-ms-new/web/src/main/resources/swagger/swagger_it.properties @@ -0,0 +1,90 @@ +swagger.description= +swagger.security.schema.bearer.description=A bearer token in the format of a JWS and conformed to the specifications included in [RFC8725](https://tools.ietf.org/html/RFC8725) +swagger.mscore.external.institution=Il servizio restituisce i dati dell'institution dato l'externalId +swagger.mscore.internal.institution=Il servizio restituisce i dati dell'institution dato l'InstitutionInternalId +swagger.mscore.external.institution.manager=Il servizio restituisce il manager relativo all'institution anche se l'utente corrente non Γ―ΒΏΒ½ collegato all'institution o al prodotto +swagger.mscore.external.institution.billing=Il servizio restituisce i dati di billing relativi all'institution anche se l'utente corrente non Γ―ΒΏΒ½ collegato all'institution o al prodotto +swagger.mscore.institution.PA.create=Il servizio persiste i dati dell'institution (PA) prelevandoli dal party-registry +swagger.mscore.institution.create=Il servizio persiste i dati dell'institution inseriti manualmente +swagger.mscore.institution.PG.create=Il servizio persiste i dati dell'institution (PG) prelevandoli da info-camere +swagger.mscore.institution.products=Il servizio resituisce la lista dei prodotti relativi all'institution +swagger.mscore.external.institution.products=Il servizio restituisce i prodotti per cui l'insitution ha effettuato l'onboarding +swagger.mscore.external.geotaxonomies=Il servizio restituisce le tassonomie geografiche relative all'institution +swagger.mscore.external.institution.relationships=Il servizio restituisce le relationship relative all'institution +swagger.mscore.institution.relationships=Il servizio restituisce le relationship relative all'institution +swagger.mscore.onboarding.operator=Il servizio persiste nuovi operatori per un prodotto e un institution che hanno giΓ―ΒΏΒ½ effettuato l'onboarding +swagger.mscore.onboarding.subdelegates=Il servizio persiste nuovi subdelegati per un prodotto e un institution che hanno giΓ―ΒΏΒ½ effettuato l'onboarding +swagger.mscore.onboarding.users=Il servizio aggiunge gli utenti nel registry se questi non sono presenti e li associa all'institution e prodotto contenuti nel body +swagger.mscore.onboarding.legals=Il servizio persiste nuovi amministratori per un prodotto e un institution che hanno giΓ―ΒΏΒ½ effettuato l'onboarding +swagger.mscore.token.relationshipId=Il servizio restituisce una relationship dato il relationshipId +swagger.mscore.relationship.delete=Il servizio elimina una relationship dato il relationshipId +swagger.mscore.relationship.activate=Il servizio attiva una relationship in stato sospeso dato il relationshipId +swagger.mscore.relationship.suspend=Il servizio sospende una relationship in stato attivo dato il relationshipId +swagger.mscore.token.tokenId=identificativo univoco del contratto +swagger.mscore.institutions.model.externalId=Identificativo esterno univoco dell'institution +swagger.mscore.institutions.model.description=Descrizione ente +swagger.mscore.institutions.model.productId=Identificativo univoco del prodotto +swagger.mscore.institutions.model.personId=Identificativo univoco dell'utente (UUID) +swagger.mscore.institutions.model.institutionId=Identificativo interno dell'institution +swagger.mscore.institutions.model.origin=Identificativo del registro su cui effettuare la ricerca +swagger.mscore.institutions.model.originId=Identificativo dell'ente all'interno degli open data +swagger.mscore.institutions.existsInRegistry=boolean per la persistenza delle PG destinatarie (esiste in info camere o AdE) +swagger.mscore.institutions.model.relationshipState=Lista di stati per filtrare i prodotti +swagger.mscore.institutions.valid=Restituisce la lista di institution per le quali l'utente puΓ―ΒΏΒ½ ancora effettuare l'onboarding +swagger.mscore.institutions.model.internalIds=Lista di institution per cui si vuole effettuare l'onboarding +swagger.mscore.onboarding.institution.complete=Il servizio persiste i dati di onboarding senza l'aggiunta del contratto +swagger.mscore.onboarding.institution=Il servizio persiste i dati di onboarding +swagger.mscore.onboarding.complete=Il servizio permette il completametno della procedura di onboarding +swagger.mscore.onboarding.complete.model.sendCompleteOnboardingEmail=Parametro che permette di specificare se in seguito al completamento dell'onboarding si vuole ricevere una mail +swagger.mscore.onboarding.reject=Il servizio consente l'annullamento manuale della procedura di onboarding +swagger.mscore.onboarding.invalidate=Il servizio invalida una richiesta di onboarding +swagger.mscore.onboarding.approve=Il servizio consente l'approvazione manuale della procedura di onboarding +swagger.mscore.token.verify=Il servizio verifica lo stato di un token +swagger.mscore.token=Il servizio restituisce le relationship relative al token dato il tokenId +swagger.mscore.onboarding.verify=Il servizio verifica dati productId e institutionId se Γ―ΒΏΒ½ giΓ―ΒΏΒ½ stato effettuato l'onboarding +swagger.mscore.onboarding.info=Il servizio restituisce i dati di onboarding relativi all'utente loggato +swagger.mscore.person.verify=Il servizio verifica se uno user esiste dato l'id (uuid) +swagger.mscore.person.info=Il servizio restituisce la persona identificata tramite l'id (uuid), se esiste. +swagger.mscore.person.create=Il servizio persiste un nuovo user. +swagger.mscore.relationship.relationshipId=Identificativo univoco di uno UserBinding +swagger.mscore.onboarding.relationship.document=Il servizio restituisce il contratto relativo a una relationship +swagger.mscore.token.get=Il servizio recupera il contratto dato il tokenId +swagger.mscore.tokens.getAll=Il servizio recupera tutti i contratti +swagger.mscore.tokens.findFromProduct=Il servizio recupera tutti i contratti a partire da un prodotto +swagger.mscore.token.model.states=Stato del contratto +swagger.mscore.institution.update=Il servizio aggiorna i dati di un institution dato l'internalId +swagger.mscore.institution.geotaxonomies=Il servizio restituisce le tassonomie geografiche relative all'institution +swagger.mscore.person.get=Il servizio recupera un utente dato l'UUID +swagger.mscore.institution.verify=Il servizio verifica se un institution esiste dato l'identificativo interno. +swagger.mscore.institution.attributes=Il servizio restituisce gli attributi relativi ad un institution +swagger.mscore.institution.bygeotaxonomies=Il servizio restituisce la lista di institution che hanno una o piΓ―ΒΏΒ½ tassonomie geografiche. +swagger.mscore.institution.byproductid=Il servizio restituisce la lista di institution filtrate per productId +swagger.mscore.institutions.findFromProduct=Il servizio restituisce la lista di institution filtrate per productId +swagger.mscore.institution.info=Il servizio restituisce le informazioni relative all'ente +swagger.mscore.institutions.getInstitutionBrokers=Il servizio restitutisce i brokers dell'ente +swagger.mscore.relationships.get=Il servizio restituisce una lista di relationship con filtri opzionali +swagger.mscore.delegation.create=Il servizio crea un'associazione tra l'ente ed il partner tecnologico +swagger.mscore.institution.create.from-anac=Il servizio crea un'associazione tra l'ente ed il partner tecnologico dall'anac +swagger.mscore.institution.create.from-pda=Il servizio crea un'associazione tra l'ente ed il partner tecnologico da pda +swagger.mscore.delegation.createFromTaxCode=Il servizio crea un'associazione tra l'ente ed il partner tecnologico utilizzando per entrambi il codice fiscale invece dell'internalId. E' utile quando non conosciamo l'internalId delle institution. +swagger.mscore.delegation.delete=Il servizio elimina un'associazione tra l'ente ed il partner tecnologico +swagger.mscore.delegation.model.delegationId=Identificativo interno della delega +swagger.mscore.users.products=Il servizio restituisce la lista dei prodotti con rispettivo ruolo di cui l'utente Γ¨ abilitato +swagger.mscore.institutions.delegations=Il servizio recupera la lista delle deleghe di una institution +swagger.mscore.institutions.delegationsV2=Il servizio recupera la lista delle deleghe di una institution con paginazione +swagger.mscore.users=Il servizio restituisce i dati dell'utente dato lo userId e il productId (opzionale) +swagger.mscore.users.delete.products=Eliminazione logica dell'associazione product e institution con l'user +swagger.mscore.users.userId=Identificativo univoco dell'utente +swagger.mscore.migration.save.institution=Il servizio crea un ente +swagger.mscore.migration.delete.institution=Il servizio elimina un ente +swagger.mscore.migration.find.institution=Il servizio trova un ente +swagger.mscore.migration.findbyid.institution= Il servizio trova un ente per identificativo univoco interno +swagger.mscore.migration.save.token=Il servizio crea un contratto +swagger.mscore.migration.findbyid.token=Il servizio trova un contratto cercandolo per il suo identificativo univoco interno +swagger.mscore.migration.delete.token=Il servizio elimina un contratto +swagger.mscore.migration.save.user=Il servizio crea un utente +swagger.mscore.migration.findbyid.user=Il servizio trova un utente cercandolo per il suo identificativo univoco interno +swagger.mscore.migration.delete.user=Il servizio elimina un utente +swagger.mscore.migration.find.token=Il servizio trova un contratto +swagger.mscore.page.number=Numero di pagina +swagger.mscore.page.size=Dimensioni della pagina diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/TestUtils.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/TestUtils.java new file mode 100644 index 0000000..2a540ee --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/TestUtils.java @@ -0,0 +1,145 @@ +package it.pagopa.selfcare.mscore.web; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.model.institution.DataProtectionOfficer; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionRequest; + +import java.util.ArrayList; + +public class TestUtils { + + public static Billing createSimpleBilling() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + return billing; + } + + public static DataProtectionOfficer createSimpleDataProtectionOfficer() { + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + return dataProtectionOfficer; + } + + + + public static PaymentServiceProvider createSimplePaymentServiceProvider() { + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + return paymentServiceProvider; + } + + public static Institution createSimpleInstitutionPA() { + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(createSimpleBilling()); + + institution.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOriginId("Ipa Code"); + institution.setOrigin(Origin.MOCK.name()); + institution.setOnboarding(new ArrayList<>()); + + institution.setPaymentServiceProvider(createSimplePaymentServiceProvider()); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + institution.setShareCapital("Share Capital"); + institution.setRea("Rea"); + + return institution; + } + + public static Institution createSimpleInstitutionSA() { + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(createSimpleBilling()); + + institution.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.SA); + institution.setOriginId("ANAC Code"); + institution.setOrigin(Origin.ANAC.name()); + institution.setOnboarding(new ArrayList<>()); + + institution.setPaymentServiceProvider(createSimplePaymentServiceProvider()); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + institution.setShareCapital("Share Capital"); + institution.setRea("Rea"); + + return institution; + } + + public static Institution createSimpleInstitutionAS() { + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(createSimpleBilling()); + + institution.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.AS); + institution.setOriginId("IVASS Code"); + institution.setOrigin(Origin.IVASS.name()); + institution.setOnboarding(new ArrayList<>()); + + institution.setPaymentServiceProvider(createSimplePaymentServiceProvider()); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + institution.setShareCapital("Share Capital"); + institution.setRea("Rea"); + + return institution; + } + + public static InstitutionRequest createSimpleInstitutionRequest() { + InstitutionRequest institution = new InstitutionRequest(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOriginId("Ipa Code"); + institution.setOrigin(Origin.MOCK.name()); + institution.setOnboarding(new ArrayList<>()); + + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + institution.setShareCapital("Share Capital"); + institution.setRea("Rea"); + + return institution; + } +} diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java new file mode 100644 index 0000000..29edd94 --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java @@ -0,0 +1,116 @@ +package it.pagopa.selfcare.mscore.web.config; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.atLeast; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.fasterxml.classmate.TypeResolver; +import com.fasterxml.classmate.types.TypePlaceHolder; + +import java.lang.reflect.Type; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.boot.web.reactive.context.StandardReactiveWebEnvironment; +import org.springframework.core.env.Environment; +import org.springframework.core.env.StandardEnvironment; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; + +@ContextConfiguration(classes = {SwaggerConfig.class, TypeResolver.class}) +@ExtendWith(SpringExtension.class) +class SwaggerConfigTest { + @MockBean + private Environment environment; + + @Autowired + private SwaggerConfig swaggerConfig; + + /** + * Method under test: {@link SwaggerConfig#swaggerSpringPlugin(TypeResolver)} + */ + @Test + void testSwaggerSpringPlugin() { + + SwaggerConfig swaggerConfig = new SwaggerConfig(new StandardReactiveWebEnvironment()); + Docket actualSwaggerSpringPluginResult = swaggerConfig.swaggerSpringPlugin(new TypeResolver()); + assertTrue(actualSwaggerSpringPluginResult.isEnabled()); + assertEquals("default", actualSwaggerSpringPluginResult.getGroupName()); + } + + /** + * Method under test: {@link SwaggerConfig#swaggerSpringPlugin(TypeResolver)} + */ + @Test + void testSwaggerSpringPlugin3() { + + StandardEnvironment standardEnvironment = mock(StandardEnvironment.class); + when(standardEnvironment.getProperty(any())).thenReturn("Property"); + when(standardEnvironment.getProperty( any(), (String) any())).thenReturn("Property"); + SwaggerConfig swaggerConfig = new SwaggerConfig(standardEnvironment); + Docket actualSwaggerSpringPluginResult = swaggerConfig.swaggerSpringPlugin(new TypeResolver()); + assertTrue(actualSwaggerSpringPluginResult.isEnabled()); + assertEquals("default", actualSwaggerSpringPluginResult.getGroupName()); + verify(standardEnvironment, atLeast(1)).getProperty(any()); + verify(standardEnvironment, atLeast(1)).getProperty(any(), (String) any()); + } + + /** + * Method under test: {@link SwaggerConfig#swaggerSpringPlugin(TypeResolver)} + */ + @Test + void testSwaggerSpringPlugin5() { + + StandardEnvironment standardEnvironment = mock(StandardEnvironment.class); + when(standardEnvironment.getProperty(any())).thenReturn("Property"); + when(standardEnvironment.getProperty(any(), (String) any())).thenReturn("Property"); + SwaggerConfig swaggerConfig = new SwaggerConfig(standardEnvironment); + TypeResolver typeResolver = mock(TypeResolver.class); + when(typeResolver.resolve(any(), (Type[]) any())).thenReturn(new TypePlaceHolder(1)); + Docket actualSwaggerSpringPluginResult = swaggerConfig.swaggerSpringPlugin(typeResolver); + assertTrue(actualSwaggerSpringPluginResult.isEnabled()); + assertEquals("default", actualSwaggerSpringPluginResult.getGroupName()); + verify(standardEnvironment, atLeast(1)).getProperty(any()); + verify(standardEnvironment, atLeast(1)).getProperty(any(), (String) any()); + verify(typeResolver).resolve(any(), (Type[]) any()); + } + + /** + * Method under test: {@link SwaggerConfig#swaggerSpringPlugin(TypeResolver)} + */ + @Test + void testSwaggerSpringPlugin6() { + + StandardEnvironment standardEnvironment = mock(StandardEnvironment.class); + when(standardEnvironment.getProperty(any())).thenReturn("Property"); + when(standardEnvironment.getProperty(any(), (String) any())).thenReturn("Property"); + SwaggerConfig swaggerConfig = new SwaggerConfig(standardEnvironment); + TypeResolver typeResolver = mock(TypeResolver.class); + when(typeResolver.resolve(any(), (Type[]) any())).thenReturn(null); + Docket actualSwaggerSpringPluginResult = swaggerConfig.swaggerSpringPlugin(typeResolver); + assertTrue(actualSwaggerSpringPluginResult.isEnabled()); + assertEquals("default", actualSwaggerSpringPluginResult.getGroupName()); + verify(standardEnvironment, atLeast(1)).getProperty(any()); + verify(standardEnvironment, atLeast(1)).getProperty(any(), (String) any()); + verify(typeResolver).resolve(any(), (Type[]) any()); + } + + /** + * Method under test: {@link SwaggerConfig#emailAnnotationPlugin()} + */ + @Test + void testEmailAnnotationPlugin() { + + assertTrue((new SwaggerConfig(new StandardReactiveWebEnvironment())).emailAnnotationPlugin().supports(DocumentationType.SWAGGER_2)); + assertTrue((new SwaggerConfig(mock(StandardEnvironment.class))).emailAnnotationPlugin().supports(DocumentationType.SWAGGER_2)); + } +} + diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/WebTestConfig.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/WebTestConfig.java new file mode 100644 index 0000000..24fae54 --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/WebTestConfig.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.web.config; + +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Import; + +@TestConfiguration +@Import(WebConfig.class) +public class WebTestConfig { +} diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationControllerTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationControllerTest.java new file mode 100644 index 0000000..7505c20 --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationControllerTest.java @@ -0,0 +1,296 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import it.pagopa.selfcare.mscore.core.DelegationService; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequest; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequestFromTaxcode; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationResponse; +import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapper; +import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapperImpl; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.util.NestedServletException; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {DelegationController.class}) +@ExtendWith(MockitoExtension.class) +class DelegationControllerTest { + + @InjectMocks + private DelegationController delegationController; + + @Mock + private DelegationService delegationService; + + @Spy + private DelegationMapper delegationResourceMapper = new DelegationMapperImpl(); + + private final ObjectMapper objectMapper = new ObjectMapper(); + + final String FROM1 = "from1"; + final String FROM2 = "from2"; + final String TO1 = "to1"; + + /** + * Method under test: {@link DelegationController#createDelegation(DelegationRequest)} + */ + @ParameterizedTest + @EnumSource(value = DelegationType.class) + void testCreateDelegation(DelegationType delegationType) throws Exception { + + Delegation delegation = new Delegation(); + delegation.setId("id"); + delegation.setFrom("from"); + when(delegationService.createDelegation(any())).thenReturn(delegation); + + DelegationRequest delegationRequest = new DelegationRequest(); + delegationRequest.setFrom("111111"); + delegationRequest.setTo("2222222"); + delegationRequest.setInstitutionFromName("Test name"); + delegationRequest.setInstitutionToName("Test to name"); + delegationRequest.setProductId("productId"); + delegationRequest.setType(delegationType); + String content = (new ObjectMapper()).writeValueAsString(delegationRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/delegations") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + DelegationResponse response = objectMapper.readValue( + result.getResponse().getContentAsString(), + new TypeReference<>() { + }); + + assertNotNull(response); + assertNotNull(response.getId()); + assertEquals(delegation.getId(), response.getId()); + } + + /** + * Method under test: {@link DelegationController#createDelegation(DelegationRequest)} + */ + @Test + void testCreateDelegationWithBadRequest() throws Exception { + + DelegationRequest delegationRequest = new DelegationRequest(); + String content = (new ObjectMapper()).writeValueAsString(delegationRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/delegations") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isBadRequest()); + } + + /** + * Method under test: {@link InstitutionController#findFromProduct(String, Integer, Integer)} + */ + @Test + void getDelegations_shouldInvalidRequest() { + + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/delegations?&productId={productId}", "productId"); + + assertThrows(NestedServletException.class, () -> + MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder)); + + } + + /** + * Method under test: {@link DelegationController#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} + */ + @Test + void getDelegations_shouldGetData() throws Exception { + // Given + Delegation expectedDelegation = dummyDelegation(); + + when(delegationService.getDelegations(expectedDelegation.getFrom(), expectedDelegation.getTo(), + expectedDelegation.getProductId(), null, null, Optional.empty(), Optional.empty(), Optional.empty())) + .thenReturn(List.of(expectedDelegation)); + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/delegations?institutionId={institutionId}&brokerId={brokerId}&productId={productId}", expectedDelegation.getFrom(), + expectedDelegation.getTo(), expectedDelegation.getProductId()); + MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + List response = objectMapper.readValue( + result.getResponse().getContentAsString(), new TypeReference<>() {}); + // Then + assertThat(response).isNotNull(); + assertThat(response.size()).isEqualTo(1); + DelegationResponse actual = response.get(0); + assertThat(actual.getId()).isEqualTo(expectedDelegation.getId()); + assertThat(actual.getInstitutionName()).isEqualTo(expectedDelegation.getInstitutionFromName()); + assertThat(actual.getBrokerId()).isEqualTo(expectedDelegation.getTo()); + assertThat(actual.getProductId()).isEqualTo(expectedDelegation.getProductId()); + assertThat(actual.getInstitutionId()).isEqualTo(expectedDelegation.getFrom()); + assertThat(actual.getInstitutionRootName()).isEqualTo(expectedDelegation.getInstitutionFromRootName()); + + verify(delegationService, times(1)) + .getDelegations(expectedDelegation.getFrom(), expectedDelegation.getTo(), + expectedDelegation.getProductId(), null, null, Optional.empty(), + Optional.empty(), Optional.empty()); + + verifyNoMoreInteractions(delegationService); + } + + @Test + void getDelegations_shouldGetDataCustom() throws Exception { + // Given + List expectedDelegations = new ArrayList<>(); + Delegation delegation1 = createDelegation("1", FROM1, TO1); + Delegation delegation2 = createDelegation("2", FROM2, TO1); + expectedDelegations.add(delegation1); + expectedDelegations.add(delegation2); + + when(delegationService.getDelegations(null, TO1, + null, null, null, Optional.empty(), Optional.empty(), Optional.empty())) + .thenReturn(expectedDelegations); + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/delegations?brokerId={brokerId}", TO1); + MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + List response = objectMapper.readValue( + result.getResponse().getContentAsString(), new TypeReference<>() {}); + // Then + assertThat(response).isNotNull(); + assertThat(response.size()).isEqualTo(2); + DelegationResponse actual = response.get(0); + assertThat(actual.getId()).isEqualTo(delegation1.getId()); + assertThat(actual.getInstitutionName()).isEqualTo(delegation1.getInstitutionFromName()); + assertThat(actual.getBrokerId()).isEqualTo(delegation1.getTo()); + assertThat(actual.getProductId()).isEqualTo(delegation1.getProductId()); + assertThat(actual.getInstitutionId()).isEqualTo(delegation1.getFrom()); + assertThat(actual.getInstitutionRootName()).isEqualTo(delegation1.getInstitutionFromRootName()); + + verify(delegationService, times(1)) + .getDelegations(null, TO1, null, + null, null, Optional.empty(), + Optional.empty(), Optional.empty()); + verifyNoMoreInteractions(delegationService); + } + + private Delegation dummyDelegation() { + Delegation delegation = new Delegation(); + delegation.setFrom("from"); + delegation.setTo("to"); + delegation.setId("setId"); + delegation.setProductId("setProductId"); + delegation.setType(DelegationType.PT); + delegation.setInstitutionFromName("setInstitutionFromName"); + delegation.setInstitutionFromRootName("setInstitutionFromRootName"); + return delegation; + } + + private Delegation createDelegation(String pattern, String from, String to) { + Delegation delegation = new Delegation(); + delegation.setId("id_" + pattern); + delegation.setProductId("productId"); + delegation.setType(DelegationType.PT); + delegation.setTo(to); + delegation.setFrom(from); + delegation.setInstitutionFromName("name_" + from); + delegation.setInstitutionFromRootName("name_" + to); + return delegation; + } + + /** + * Method under test: {@link DelegationController#createDelegationFromInstitutionsTaxCode(DelegationRequestFromTaxcode)} + */ + @Test + void testCreateDelegationUsingTaxCode() throws Exception { + + Delegation delegation = new Delegation(); + delegation.setId("id"); + delegation.setTo("to"); + delegation.setFrom("from"); + when(delegationService.createDelegationFromInstitutionsTaxCode(any())).thenReturn(delegation); + + DelegationRequestFromTaxcode delegationRequest = new DelegationRequestFromTaxcode(); + delegationRequest.setFromTaxCode("111111"); + delegationRequest.setToTaxCode("2222222"); + delegationRequest.setInstitutionFromName("Test name"); + delegationRequest.setInstitutionToName("Test to name"); + delegationRequest.setProductId("productId"); + delegationRequest.setType(DelegationType.PT); + String content = (new ObjectMapper()).writeValueAsString(delegationRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/delegations/from-taxcode") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + + + + DelegationResponse response = objectMapper.readValue( + result.getResponse().getContentAsString(), + new TypeReference<>() { + }); + + assertNotNull(response); + assertNotNull(response.getId()); + assertEquals(delegation.getId(), response.getId()); + } + + @Test + void testDeleteDelegation() throws Exception { + doNothing().when(delegationService).deleteDelegationByDelegationId(any()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.delete("/delegations/{delegationId}", + "42"); + MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isNoContent()); + } + +} \ No newline at end of file diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2ControllerTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2ControllerTest.java new file mode 100644 index 0000000..505ae58 --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2ControllerTest.java @@ -0,0 +1,296 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import it.pagopa.selfcare.mscore.constant.Order; +import it.pagopa.selfcare.mscore.core.DelegationService; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; +import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; +import it.pagopa.selfcare.mscore.model.delegation.PageInfo; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationResponse; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationWithPaginationResponse; +import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapper; +import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapperImpl; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.util.NestedServletException; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {DelegationV2Controller.class}) +@ExtendWith(MockitoExtension.class) +class DelegationV2ControllerTest { + + @InjectMocks + private DelegationV2Controller delegationController; + + @Mock + private DelegationService delegationService; + + @Spy + private DelegationMapper delegationResourceMapper = new DelegationMapperImpl(); + + private final ObjectMapper objectMapper = new ObjectMapper(); + + final String FROM1 = "from1"; + final String FROM2 = "from2"; + final String TO1 = "to1"; + + /** + * Method under test: {@link InstitutionController#findFromProduct(String, Integer, Integer)} + */ + @Test + void getDelegations_shouldInvalidRequest() { + + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/v2/delegations?&productId={productId}", "productId"); + + assertThrows(NestedServletException.class, () -> + MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder)); + + } + + /** + * Method under test: {@link DelegationController#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} + */ + @Test + void getDelegations_shouldGetData() throws Exception { + // Given + Delegation expectedDelegation = dummyDelegation(); + PageInfo exptectedPageInfo = new PageInfo(10, 0, 1, 1); + + DelegationWithPagination expectedDelegationWithPagination = new DelegationWithPagination(List.of(expectedDelegation), exptectedPageInfo); + + when(delegationService.getDelegationsV2(createDelegationParameters(expectedDelegation.getFrom(), expectedDelegation.getTo(), + expectedDelegation.getProductId(), null, null, Order.ASC, 0, 10))) + .thenReturn(expectedDelegationWithPagination); + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/v2/delegations?institutionId={institutionId}&brokerId={brokerId}&productId={productId}&order={order}&page={page}&size={size}", + expectedDelegation.getFrom(), expectedDelegation.getTo(), expectedDelegation.getProductId(), + Order.ASC ,exptectedPageInfo.getPageNo(), exptectedPageInfo.getPageSize()); + MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + DelegationWithPaginationResponse response = objectMapper.readValue( + result.getResponse().getContentAsString(), new TypeReference<>() {}); + // Then + assertThat(response).isNotNull(); + assertThat(response.getDelegations()).isNotNull(); + assertThat(response.getPageInfo()).isNotNull(); + assertThat((long) response.getDelegations().size()).isEqualTo(1); + DelegationResponse actualDelegation = response.getDelegations().get(0); + PageInfo actualPageInfo = response.getPageInfo(); + assertThat(actualDelegation.getId()).isEqualTo(expectedDelegation.getId()); + assertThat(actualDelegation.getInstitutionName()).isEqualTo(expectedDelegation.getInstitutionFromName()); + assertThat(actualDelegation.getBrokerId()).isEqualTo(expectedDelegation.getTo()); + assertThat(actualDelegation.getProductId()).isEqualTo(expectedDelegation.getProductId()); + assertThat(actualDelegation.getInstitutionId()).isEqualTo(expectedDelegation.getFrom()); + assertThat(actualDelegation.getInstitutionRootName()).isEqualTo(expectedDelegation.getInstitutionFromRootName()); + assertThat(actualPageInfo).isEqualTo(exptectedPageInfo); + + verify(delegationService, times(1)) + .getDelegationsV2(createDelegationParameters(expectedDelegation.getFrom(), expectedDelegation.getTo(), + expectedDelegation.getProductId(), null, null, Order.ASC, + 0, 10)); + + verifyNoMoreInteractions(delegationService); + } + + @Test + void getDelegations_shouldGetDataCustom() throws Exception { + // Given + List expectedDelegations = new ArrayList<>(); + Delegation delegation1 = createDelegation("1", FROM1, TO1); + Delegation delegation2 = createDelegation("2", FROM2, TO1); + expectedDelegations.add(delegation1); + expectedDelegations.add(delegation2); + + PageInfo exptectedPageInfo = new PageInfo(10000, 0, 2, 1); + + DelegationWithPagination expectedDelegationWithPagination = new DelegationWithPagination(expectedDelegations, exptectedPageInfo); + + when(delegationService.getDelegationsV2(createDelegationParameters(null, TO1, + null, null, null, Order.DESC, 0, 10000))) + .thenReturn(expectedDelegationWithPagination); + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/v2/delegations?brokerId={brokerId}&order={order}", TO1, Order.DESC); + MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + DelegationWithPaginationResponse response = objectMapper.readValue( + result.getResponse().getContentAsString(), new TypeReference<>() {}); + // Then + assertThat(response).isNotNull(); + assertThat(response.getDelegations()).isNotNull(); + assertThat(response.getPageInfo()).isNotNull(); + assertThat((long) response.getDelegations().size()).isEqualTo(2); + DelegationResponse actualDelegation = response.getDelegations().get(0); + PageInfo actualPageInfo = response.getPageInfo(); + assertThat(actualDelegation.getId()).isEqualTo(delegation1.getId()); + assertThat(actualDelegation.getInstitutionName()).isEqualTo(delegation1.getInstitutionFromName()); + assertThat(actualDelegation.getBrokerId()).isEqualTo(delegation1.getTo()); + assertThat(actualDelegation.getProductId()).isEqualTo(delegation1.getProductId()); + assertThat(actualDelegation.getInstitutionId()).isEqualTo(delegation1.getFrom()); + assertThat(actualDelegation.getInstitutionRootName()).isEqualTo(delegation1.getInstitutionFromRootName()); + assertThat(actualPageInfo).isEqualTo(exptectedPageInfo); + + verify(delegationService, times(1)) + .getDelegationsV2(createDelegationParameters(null, TO1, null, + null, null, Order.DESC, + 0, 10000)); + verifyNoMoreInteractions(delegationService); + } + + /** + * Method under test: {@link DelegationController#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} + */ + @Test + void getDelegations_shouldGetData_nullMode() throws Exception { + // Given + Delegation expectedDelegation = dummyDelegation(); + PageInfo exptectedPageInfo = new PageInfo(10000, 0, 1, 1); + + DelegationWithPagination expectedDelegationWithPagination = new DelegationWithPagination(List.of(expectedDelegation), exptectedPageInfo); + + when(delegationService.getDelegationsV2(createDelegationParameters(expectedDelegation.getFrom(), expectedDelegation.getTo(), + expectedDelegation.getProductId(), null, null, Order.NONE, 0, 10000))) + .thenReturn(expectedDelegationWithPagination); + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/v2/delegations?institutionId={institutionId}&brokerId={brokerId}&productId={productId}", expectedDelegation.getFrom(), + expectedDelegation.getTo(), expectedDelegation.getProductId()); + MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + DelegationWithPaginationResponse response = objectMapper.readValue( + result.getResponse().getContentAsString(), new TypeReference<>() {}); + // Then + assertThat(response).isNotNull(); + assertThat(response.getDelegations()).isNotNull(); + assertThat(response.getPageInfo()).isNotNull(); + assertThat((long) response.getDelegations().size()).isEqualTo(1); + DelegationResponse actualDelegation = response.getDelegations().get(0); + PageInfo actualPageInfo = response.getPageInfo(); + assertThat(actualDelegation.getId()).isEqualTo(expectedDelegation.getId()); + assertThat(actualDelegation.getInstitutionName()).isEqualTo(expectedDelegation.getInstitutionFromName()); + assertThat(actualDelegation.getBrokerId()).isEqualTo(expectedDelegation.getTo()); + assertThat(actualDelegation.getProductId()).isEqualTo(expectedDelegation.getProductId()); + assertThat(actualDelegation.getInstitutionId()).isEqualTo(expectedDelegation.getFrom()); + assertThat(actualDelegation.getInstitutionRootName()).isEqualTo(expectedDelegation.getInstitutionFromRootName()); + assertThat(actualPageInfo).isEqualTo(exptectedPageInfo); + + verify(delegationService, times(1)) + .getDelegationsV2(createDelegationParameters(expectedDelegation.getFrom(), expectedDelegation.getTo(), + expectedDelegation.getProductId(), null, null, Order.NONE,0, 10000)); + verifyNoMoreInteractions(delegationService); + } + + @Test + void getDelegations_shouldInvalidRequest_wrongPageSize() { + + Delegation expectedDelegation = dummyDelegation(); + + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/v2/delegations?brokerId={brokerId}&size={size}", + expectedDelegation.getTo(), 0); + + assertThrows(NestedServletException.class, () -> + MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder)); + + } + + @Test + void getDelegations_shouldInvalidRequest_wrongPageNumber() { + + Delegation expectedDelegation = dummyDelegation(); + + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/v2/delegations?brokerId={brokerId}&page={size}", + expectedDelegation.getTo(), -1); + + assertThrows(NestedServletException.class, () -> + MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder)); + + } + + + + + private Delegation dummyDelegation() { + Delegation delegation = new Delegation(); + delegation.setFrom("from"); + delegation.setTo("to"); + delegation.setId("setId"); + delegation.setProductId("setProductId"); + delegation.setType(DelegationType.PT); + delegation.setInstitutionFromName("setInstitutionFromName"); + delegation.setInstitutionFromRootName("setInstitutionFromRootName"); + return delegation; + } + + private Delegation createDelegation(String pattern, String from, String to) { + Delegation delegation = new Delegation(); + delegation.setId("id_" + pattern); + delegation.setProductId("productId"); + delegation.setType(DelegationType.PT); + delegation.setTo(to); + delegation.setFrom(from); + delegation.setInstitutionFromName("name_" + from); + delegation.setInstitutionFromRootName("name_" + to); + return delegation; + } + + private GetDelegationParameters createDelegationParameters(String from, String to, String productId, + String search, String taxCode, Order order, + Integer page, Integer size) { + return GetDelegationParameters.builder() + .from(from) + .to(to) + .productId(productId) + .search(search) + .taxCode(taxCode) + .order(order) + .page(page) + .size(size) + .build(); + } + +} \ No newline at end of file diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ExternalControllerTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ExternalControllerTest.java new file mode 100644 index 0000000..1a72041 --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ExternalControllerTest.java @@ -0,0 +1,419 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.core.ExternalService; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapper; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapperImpl; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.ArrayList; +import java.util.List; + +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class ExternalControllerTest { + @InjectMocks + private ExternalController externalController; + + @Mock + private ExternalService externalService; + + @Spy + private InstitutionResourceMapper institutionResourceMapper = new InstitutionResourceMapperImpl(); + + /** + * Method under test: {@link ExternalController#retrieveInstitutionProductsByExternalId(String, List)} + */ + @Test + void testRetrieveInstitutionProductsByExternalId() throws Exception { + when(externalService.retrieveInstitutionProductsByExternalId(any(), any())) + .thenReturn(new ArrayList<>()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/external/institutions/{externalId}/products", "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"products\":[]}")); + } + + /** + * Method under test: {@link ExternalController#retrieveInstitutionProductsByExternalId(String, List)} + */ + @Test + void testRetrieveInstitutionProductsByExternalId2() throws Exception { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("?"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("?"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("?"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + when(externalService.retrieveInstitutionProductsByExternalId(any(), any())) + .thenReturn(onboardingList); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/external/institutions/{externalId}/products", "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string("{\"products\":[{\"id\":\"42\",\"state\":\"PENDING\"}]}")); + } + + /** + * Method under test: {@link ExternalController#retrieveInstitutionProductsByExternalId(String, List)} + */ + @Test + void testRetrieveInstitutionProductsByExternalId3() throws Exception { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("?"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("?"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("?"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + Billing billing1 = new Billing(); + billing1.setPublicServices(false); + billing1.setRecipientCode("U"); + billing1.setVatNumber("?"); + + Onboarding onboarding1 = new Onboarding(); + onboarding1.setBilling(billing1); + onboarding1.setClosedAt(null); + onboarding1.setContract("U"); + onboarding1.setCreatedAt(null); + onboarding1.setPricingPlan("U"); + onboarding1.setProductId("?"); + onboarding1.setStatus(RelationshipState.ACTIVE); + onboarding1.setTokenId("ABC123"); + onboarding1.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding1); + onboardingList.add(onboarding); + when(externalService.retrieveInstitutionProductsByExternalId(any(), any())) + .thenReturn(onboardingList); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/external/institutions/{externalId}/products", "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"products\":[{\"id\":\"?\",\"state\":\"ACTIVE\"},{\"id\":\"42\",\"state\":\"PENDING\"}]}")); + } + + /** + * Method under test: {@link ExternalController#retrieveInstitutionGeoTaxonomiesByExternalId(String)} + */ + @Test + void testRetrieveInstitutionGeoTaxonomiesByExternalId() throws Exception { + when(externalService.retrieveInstitutionGeoTaxonomiesByExternalId(any())).thenReturn(new ArrayList<>()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/external/institutions/{externalId}/geotaxonomies", "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("[]")); + } + + + /** + * Method under test: {@link ExternalController#getBillingInstitutionByExternalId(String, String)} + */ + @Test + void testGetBillingInstitutionByExternalId3() throws Exception { + Institution institution = new Institution(); + institution.setOnboarding(new ArrayList<>()); + when(externalService.retrieveInstitutionProduct(any(), any())).thenReturn(institution); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/external/institutions/{externalId}/products/{productId}/billing", "42", "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"institutionId\":null,\"externalId\":null,\"origin\":null,\"originId\":null,\"description\":null,\"institutionType\":null,\"digitalAddress\":null,\"address\":null,\"zipCode\":null,\"taxCode\":null,\"pricingPlan\":null,\"billing\":null,\"subunitCode\":null,\"subunitType\":null,\"aooParentCode\":null}")); + } + + /** + * Method under test: {@link ExternalController#getBillingInstitutionByExternalId(String, String)} + */ + @Test + void testGetBillingInstitutionByExternalId5() throws Exception { + Institution institution = new Institution(); + institution.setOnboarding(new ArrayList<>()); + when(externalService.retrieveInstitutionProduct(any(), any())).thenReturn(institution); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/external/institutions/{externalId}/products/{productId}/billing", "42", "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"institutionId\":null,\"externalId\":null,\"origin\":null,\"originId\":null,\"description\":null,\"institutionType" + + "\":null,\"digitalAddress\":null,\"address\":null,\"zipCode\":null,\"taxCode\":null,\"pricingPlan\":null,\"billing" + + "\":null,\"subunitCode\":null,\"subunitType\":null,\"aooParentCode\":null}")); + } + + /** + * Method under test: {@link ExternalController#getByExternalId(String)} + */ + @Test + void testGetByExternalId() throws Exception { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(billing); + institution.setDataProtectionOfficer(dataProtectionOfficer); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOnboarding(new ArrayList<>()); + institution.setOriginId("42"); + institution.setPaymentServiceProvider(paymentServiceProvider); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + when(externalService.getInstitutionByExternalId(any())).thenReturn(institution); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", + "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string("{\"id\":\"42\",\"externalId\":\"42\",\"originId\":\"42\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link ExternalController#getByExternalId(String)} + */ + @Test + void testGetByExternalId2() throws Exception { + Attributes attributes = new Attributes(); + attributes.setCode("?"); + attributes.setDescription("The characteristics of someone or something"); + attributes.setOrigin("?"); + + ArrayList attributesList = new ArrayList<>(); + attributesList.add(attributes); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(attributesList); + institution.setBilling(billing); + institution.setDataProtectionOfficer(dataProtectionOfficer); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOnboarding(new ArrayList<>()); + institution.setOriginId("42"); + institution.setPaymentServiceProvider(paymentServiceProvider); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + when(externalService.getInstitutionByExternalId("42")).thenReturn(institution); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", + "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string("{\"id\":\"42\",\"externalId\":\"42\",\"originId\":\"42\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[{\"origin\":\"?\",\"code\":\"?\",\"description\":\"The characteristics of someone or something\"}],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"imported\":false,\"delegation\":false}")); + + } + + /** + * Method under test: {@link ExternalController#getByExternalId(String)} + */ + @Test + void testGetByExternalId3() throws Exception { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("?"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(billing); + institution.setDataProtectionOfficer(dataProtectionOfficer); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOnboarding(new ArrayList<>()); + institution.setOriginId("42"); + institution.setPaymentServiceProvider(paymentServiceProvider); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + when(externalService.getInstitutionByExternalId(any())).thenReturn(institution); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", + "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string("{\"id\":\"42\",\"externalId\":\"42\",\"originId\":\"42\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[{\"code\":\"?\",\"desc\":\"The characteristics of someone or something\"}],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link ExternalController#getByExternalId(String)} + */ + @Test + void testGetByExternalId5() throws Exception { + when(externalService.getInstitutionByExternalId(any())).thenReturn(new Institution()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", + "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); + } + + + /** + * Method under test: {@link ExternalController#getByExternalId(String)} + */ + @Test + void testGetByExternalId7() throws Exception { + when(externalService.getInstitutionByExternalId(any())).thenReturn(new Institution()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", + "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); + } + + + + /** + * Method under test: {@link ExternalController#retrieveInstitutionByIds(List)} + */ + @Test + void testRetrieveInstitutionByIds() throws Exception { + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions") + .param("ids","[code1, code2]"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().is(200)); + } +} + + diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerPdaTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerPdaTest.java new file mode 100644 index 0000000..c40c441 --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerPdaTest.java @@ -0,0 +1,99 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.InstitutionService; +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.web.model.institution.PdaInstitutionRequest; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapper; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapperImpl; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.ArrayList; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; + +@ContextConfiguration(classes = {InstitutionController.class}) +@ExtendWith(MockitoExtension.class) +public class InstitutionControllerPdaTest { + @InjectMocks + private InstitutionController institutionController; + + @Mock + private InstitutionService institutionService; + private final ObjectMapper objectMapper = new ObjectMapper(); + @Spy + private InstitutionResourceMapper institutionResourceMapper = new InstitutionResourceMapperImpl(); + + + /** + * Method under test: {@link InstitutionController#createInstitutionFromPda(PdaInstitutionRequest)}} + */ + @Test + void shouldCreateInstitutionFromPda() throws Exception { + // Given + PdaInstitutionRequest institutionRequest = new PdaInstitutionRequest(); + institutionRequest.setInjectionInstitutionType("EC"); + institutionRequest.setDescription("test ec"); + institutionRequest.setTaxCode("taxCode"); + String content = objectMapper.writeValueAsString(institutionRequest); + + Institution institution = createSimpleInstitutionPda(); + + when(institutionService.createInstitutionFromPda(any(), any())).thenReturn(institution); + + //Then + MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-pda/") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"attributes\":[],\"imported\":true,\"delegation\":false}")); + } + + public static Institution createSimpleInstitutionPda() { + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(createSimpleBilling()); + + institution.setDescription("The characteristics of someone or something"); + institution.setExternalId("42"); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOriginId("Ipa Code"); + institution.setOrigin(Origin.MOCK.name()); + + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + institution.setImported(true); + + return institution; + } + + public static Billing createSimpleBilling() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + return billing; + } +} diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerTest.java new file mode 100644 index 0000000..6b9aa3e --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerTest.java @@ -0,0 +1,1395 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.commons.base.security.SelfCareUser; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.core.DelegationService; +import it.pagopa.selfcare.mscore.core.InstitutionService; +import it.pagopa.selfcare.mscore.core.OnboardingService; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.web.TestUtils; +import it.pagopa.selfcare.mscore.web.model.institution.*; +import it.pagopa.selfcare.mscore.web.model.mapper.*; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.*; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import javax.validation.ValidationException; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE; + +@ContextConfiguration(classes = {InstitutionController.class}) +@ExtendWith(MockitoExtension.class) +class InstitutionControllerTest { + + private static final String BASE_URL = "/institutions"; + + @InjectMocks + private InstitutionController institutionController; + + @Mock + private InstitutionService institutionService; + + @Mock + private OnboardingService onboardingService; + + @Mock + private DelegationService delegationService; + + @Spy + private OnboardingResourceMapper onboardingResourceMapper = new OnboardingResourceMapperImpl(); + + @Spy + private InstitutionResourceMapper institutionResourceMapper = new InstitutionResourceMapperImpl(); + + @Spy + private BrokerMapper brokerMapper = new BrokerMapperImpl(); + + @Spy + private UserMapper userMapper = new UserMapperImpl(); + + private final ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules(); + + + private final static Onboarding onboarding; + private final static Billing staticBilling; + + private final static Institution staticInstitution; + + static { + staticBilling = new Billing(); + staticBilling.setVatNumber("example"); + staticBilling.setRecipientCode("example"); + staticBilling.setTaxCodeInvoicing("example"); + + onboarding = new Onboarding(); + onboarding.setProductId("example"); + onboarding.setStatus(RelationshipState.ACTIVE); + onboarding.setBilling(staticBilling); + onboarding.setContract("contract"); + onboarding.setTokenId("tokenId"); + onboarding.setPricingPlan("setPricingPlan"); + onboarding.setIsAggregator(true); + + Attributes attribute = new Attributes(); + attribute.setCode("code"); + attribute.setDescription("description"); + + staticInstitution = new Institution(); + staticInstitution.setId("42"); + staticInstitution.setInstitutionType(InstitutionType.PG); + staticInstitution.setDescription("description"); + staticInstitution.setOnboarding(List.of(onboarding)); + staticInstitution.setAttributes(List.of(attribute)); + staticInstitution.setIstatCode("istatCode"); + + } + + @Test + void shouldGetInstitutionsByTaxCode() throws Exception { + + Institution institution = TestUtils.createSimpleInstitutionPA(); + + when(institutionService.getInstitutions(any(), any(), any(), any())) + .thenReturn(List.of(institution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/institutions/?taxCode={taxCode}", "TaxCode"); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}]}")); + } + + @Test + void shouldGetInstitutionsByTaxCodeAndSubunitCode() throws Exception { + + Institution institution = TestUtils.createSimpleInstitutionPA(); + institution.setSubunitCode("example"); + institution.setSubunitType(InstitutionPaSubunitType.UO.name()); + institution.setParentDescription("parentDescription"); + institution.setRootParentId("rootParentId"); + + when(institutionService.getInstitutions(any(), any(), any(), any())) + .thenReturn(List.of(institution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/institutions/?taxCode={taxCode}&subunitCode={subunitCode}", "TaxCode", "SubunitCode"); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"example\",\"subunitType\":\"UO\",\"delegation\":false}]}")); + } + + @Test + void shouldGetInstitutionsByOriginAndOriginId() throws Exception { + + Institution institution = TestUtils.createSimpleInstitutionPA(); + institution.setSubunitCode("example"); + institution.setSubunitType(InstitutionPaSubunitType.UO.name()); + institution.setParentDescription("parentDescription"); + institution.setRootParentId("rootParentId"); + + when(institutionService.getInstitutions(any(), any(), any(), any())) + .thenReturn(List.of(institution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/institutions/?origin={origin}&originId={originId}", "origin", "originId"); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"example\",\"subunitType\":\"UO\",\"delegation\":false}]}")); + } + + @Test + void shouldGetInstitutionsByOrigin() throws Exception { + + Institution institution = TestUtils.createSimpleInstitutionPA(); + institution.setSubunitCode("example"); + institution.setSubunitType(InstitutionPaSubunitType.UO.name()); + institution.setParentDescription("parentDescription"); + institution.setRootParentId("rootParentId"); + + when(institutionService.getInstitutions(any(), any(), any(), any())) + .thenReturn(List.of(institution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/institutions/?origin={origin}", "origin"); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"example\",\"subunitType\":\"UO\",\"delegation\":false}]}")); + } + + @Test + void shouldGetInstitutionsByOriginId() throws Exception { + + Institution institution = TestUtils.createSimpleInstitutionPA(); + institution.setSubunitCode("example"); + institution.setSubunitType(InstitutionPaSubunitType.UO.name()); + institution.setParentDescription("parentDescription"); + institution.setRootParentId("rootParentId"); + + when(institutionService.getInstitutions(any(), any(), any(), any())) + .thenReturn(List.of(institution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/institutions/?originId={originId}", "originId"); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"example\",\"subunitType\":\"UO\",\"delegation\":false}]}")); + } + + @Test + void shouldGetInstitutionsBySubunitCodeWithoutParam(){ + Assertions.assertThrows(ValidationException.class, + () -> institutionController.getInstitutions(null, null, null, null), + "At least one of taxCode, origin or originId must be present"); + } + + @Test + void shouldGetInstitutionsBySubunitCodeWithoutTaxCode() { + Assertions.assertThrows(ValidationException.class, + () -> institutionController.getInstitutions(null, "subunitCode", "origin", null), + "TaxCode is required if subunitCode is present"); + } + + @Test + void shouldGetOnboardingsInstitutionByProductId() throws Exception { + + when(institutionService.getOnboardingInstitutionByProductId(any(), any())) + .thenReturn(List.of(onboarding)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/institutions/{institutionId}/onboardings?productId{productId}", "42", onboarding.getProductId()); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"onboardings\":[{\"productId\":\"example\",\"tokenId\":\"tokenId\",\"status\":\"ACTIVE\",\"contract\":\"contract\",\"pricingPlan\":\"setPricingPlan\",\"billing\":{\"vatNumber\":\"example\",\"taxCodeInvoicing\":\"example\",\"recipientCode\":\"example\",\"publicServices\":false},\"createdAt\":null,\"updatedAt\":null,\"closedAt\":null,\"isAggregator\":true}]}")); + } + + @Test + void retrieveInstitutionById() throws Exception { + SecurityContext securityContext = Mockito.mock(SecurityContext.class); + SecurityContextHolder.setContext(securityContext); + when(institutionService.retrieveInstitutionById("42")).thenReturn(staticInstitution); + staticInstitution.setId("id"); + MockHttpServletRequestBuilder requestBuilder = get("/institutions/{id}", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#retrieveInstitutionById(String)} + */ + @Test + void testRetrieveInstitutionById() throws Exception { + when(institutionService.retrieveInstitutionById(any())).thenReturn(staticInstitution); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/institutions/{id}", "42"); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"description\":\"description\",\"institutionType\":\"PG\",\"istatCode\":\"istatCode\",\"attributes\":[{\"origin\":null,\"code\":\"code\",\"description\":\"description\"}],\"onboarding\":[{\"productId\":\"example\",\"status\":\"ACTIVE\",\"billing\":{\"vatNumber\":\"example\",\"taxCodeInvoicing\":\"example\",\"recipientCode\":\"example\",\"publicServices\":false},\"createdAt\":null,\"updatedAt\":null,\"isAggregator\":true}],\"imported\":false,\"delegation\":false}")); + } + + @Test + void retrieveInstitutionGeoTaxonomies() throws Exception { + SecurityContext securityContext = Mockito.mock(SecurityContext.class); + SecurityContextHolder.setContext(securityContext); + Institution institution = new Institution(); + institution.setId("id"); + GeographicTaxonomyPage page = new GeographicTaxonomyPage(); + page.setData(Collections.emptyList()); + MockHttpServletRequestBuilder requestBuilder = get("/institutions/{id}/geotaxonomies", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isOk()); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionFromIpa(InstitutionFromIpaPost)}} + */ + @Test + void shouldCreateInstitutionFromIpa() throws Exception { + // Given + InstitutionFromIpaPost institutionFromIpaPost = new InstitutionFromIpaPost(); + institutionFromIpaPost.setTaxCode("123456"); + institutionFromIpaPost.setSubunitType(InstitutionPaSubunitType.AOO); + institutionFromIpaPost.setSubunitCode("1234"); + GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); + geoTaxonomies.setCode("code"); + geoTaxonomies.setDesc("desc"); + institutionFromIpaPost.setGeographicTaxonomies(List.of(geoTaxonomies)); + String content = objectMapper.writeValueAsString(institutionFromIpaPost); + + Institution institution = TestUtils.createSimpleInstitutionPA(); + institution.setSubunitCode(institutionFromIpaPost.getSubunitCode()); + institution.setSubunitType(institutionFromIpaPost.getSubunitType().name()); + institution.setParentDescription("parentDescription"); + institution.setRootParentId("rootParentId"); + + when(institutionService.createInstitutionFromIpa(any(), any(), any(), any(), any())).thenReturn(institution); + + //Then + MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-ipa/") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"1234\",\"subunitType\":\"AOO\",\"delegation\":false}")); + + ArgumentCaptor> captorGeo = ArgumentCaptor.forClass(List.class); + verify(institutionService, times(1)) + .createInstitutionFromIpa(any(),any(),any(),captorGeo.capture(), any()); + assertEquals(institutionFromIpaPost.getGeographicTaxonomies().size(), captorGeo.getValue().size()); + assertEquals(geoTaxonomies.getCode(), captorGeo.getValue().get(0).getCode()); + assertEquals(geoTaxonomies.getDesc(), captorGeo.getValue().get(0).getDesc()); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionFromAnac(InstitutionRequest)}} + */ + @Test + void shouldCreateInstitutionFromAnac() throws Exception { + // Given + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setInstitutionType(InstitutionType.SA); + institutionRequest.setTaxCode("42"); + institutionRequest.setExternalId("42"); + String content = objectMapper.writeValueAsString(institutionRequest); + + Institution institution = TestUtils.createSimpleInstitutionSA(); + + when(institutionService.createInstitutionFromAnac(any())).thenReturn(institution); + + //Then + MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-anac/") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"ANAC\",\"originId\":\"ANAC Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"SA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionFromIvass(InstitutionRequest)}} + */ + @Test + void shouldCreateInstitutionFromIvass() throws Exception { + // Given + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setInstitutionType(InstitutionType.AS); + institutionRequest.setTaxCode("42"); + institutionRequest.setExternalId("42"); + String content = objectMapper.writeValueAsString(institutionRequest); + + Institution institution = TestUtils.createSimpleInstitutionAS(); + + when(institutionService.createInstitutionFromIvass(any())).thenReturn(institution); + + //Then + MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-ivass/") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"IVASS\",\"originId\":\"IVASS Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"AS\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionFromInfocamere(InstitutionRequest)}} + */ + @Test + void shouldCreateInstitutionFromInfocamere() throws Exception { + // Given + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setInstitutionType(InstitutionType.PG); + institutionRequest.setTaxCode("42"); + institutionRequest.setExternalId("42"); + String content = objectMapper.writeValueAsString(institutionRequest); + + Institution institution = TestUtils.createSimpleInstitutionPA(); + + when(institutionService.createInstitutionFromInfocamere(any())).thenReturn(institution); + + //Then + MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-infocamere/") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionFromIpa(InstitutionFromIpaPost)}} + */ + @Test + void shouldThrowValidationExceptionWhenCreateInstitutionFromIpaWithoutTax() throws Exception { + + String content = objectMapper.writeValueAsString(new InstitutionFromIpaPost()); + + MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-ipa/") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isBadRequest()); + } + + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void shouldCreateInstitution() throws Exception { + + InstitutionRequest institution = TestUtils.createSimpleInstitutionRequest(); + Institution response = TestUtils.createSimpleInstitutionPA(); + + when(institutionService.createInstitution(any())).thenReturn(response); + + String content = objectMapper.writeValueAsString(institution); + + MockHttpServletRequestBuilder requestBuilder = post("/institutions/") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} + */ + @Test + void testCreateInstitutionByExternalId() throws Exception { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(billing); + institution.setDataProtectionOfficer(dataProtectionOfficer); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOriginId("Ipa Code"); + institution.setOnboarding(new ArrayList<>()); + institution.setPaymentServiceProvider(paymentServiceProvider); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + when(institutionService.createInstitutionByExternalId(any())).thenReturn(institution); + MockHttpServletRequestBuilder requestBuilder = post("/institutions/{externalId}", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} + */ + @Test + void testCreateInstitutionByExternalId2() throws Exception { + when(institutionService.createInstitutionByExternalId(any())).thenReturn(new Institution()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/{externalId}", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} + */ + @Test + void testCreateInstitutionByExternalId3() throws Exception { + when(institutionService.createInstitutionByExternalId(any())).thenReturn(new Institution()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/{externalId}", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} + */ + @Test + void testCreateInstitutionByExternalId4() throws Exception { + + Institution institution = TestUtils.createSimpleInstitutionPA(); + + when(institutionService.createInstitutionByExternalId(any())) + .thenReturn(institution); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/{externalId}", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} + */ + @Test + void testCreateInstitutionByExternalId5() throws Exception { + SecurityMockMvcRequestBuilders.FormLoginRequestBuilder requestBuilder = SecurityMockMvcRequestBuilders + .formLogin(); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isNotFound()); + } + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution() throws Exception { + when(institutionService.createInstitution(any())).thenReturn(new Institution()); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(new ArrayList<>()); + institutionRequest.setBusinessRegisterPlace("Business Register Place"); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(new ArrayList<>()); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setRea("Rea"); + institutionRequest.setShareCapital("Share Capital"); + institutionRequest.setSupportEmail("jane.doe@example.org"); + institutionRequest.setSupportPhone("6625550144"); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); + } + + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution2() throws Exception { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(billing); + institution.setDataProtectionOfficer(dataProtectionOfficer); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOriginId("Ipa Code"); + institution.setOnboarding(new ArrayList<>()); + institution.setPaymentServiceProvider(paymentServiceProvider); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + when(institutionService.createInstitution(any())).thenReturn(institution); + + AttributesRequest attributesRequest = new AttributesRequest(); + attributesRequest.setCode("?"); + attributesRequest.setDescription("The characteristics of someone or something"); + attributesRequest.setOrigin("?"); + + ArrayList attributesRequestList = new ArrayList<>(); + attributesRequestList.add(attributesRequest); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(attributesRequestList); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(new ArrayList<>()); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution3() throws Exception { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(billing); + institution.setDataProtectionOfficer(dataProtectionOfficer); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOriginId("Ipa Code"); + institution.setOnboarding(new ArrayList<>()); + institution.setPaymentServiceProvider(paymentServiceProvider); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + when(institutionService.createInstitution(any())).thenReturn(institution); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); + geoTaxonomies.setCode("?"); + geoTaxonomies.setDesc("The characteristics of someone or something"); + + ArrayList geoTaxonomiesList = new ArrayList<>(); + geoTaxonomiesList.add(geoTaxonomies); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(new ArrayList<>()); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution4() throws Exception { + when(institutionService.createInstitution(any())).thenReturn(new Institution()); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(new ArrayList<>()); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(new ArrayList<>()); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution5() throws Exception { + when(institutionService.createInstitution(any())).thenReturn(new Institution()); + + AttributesRequest attributesRequest = new AttributesRequest(); + attributesRequest.setCode("?"); + attributesRequest.setDescription("The characteristics of someone or something"); + attributesRequest.setOrigin("?"); + + ArrayList attributesRequestList = new ArrayList<>(); + attributesRequestList.add(attributesRequest); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(attributesRequestList); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(new ArrayList<>()); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution6() throws Exception { + when(institutionService.createInstitution(any())).thenReturn(new Institution()); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); + geoTaxonomies.setCode("?"); + geoTaxonomies.setDesc("The characteristics of someone or something"); + + ArrayList geoTaxonomiesList = new ArrayList<>(); + geoTaxonomiesList.add(geoTaxonomies); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(new ArrayList<>()); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution9() throws Exception { + when(institutionService.createInstitution(any())).thenReturn(new Institution()); + + AttributesRequest attributesRequest = new AttributesRequest(); + attributesRequest.setCode("?"); + attributesRequest.setDescription("The characteristics of someone or something"); + attributesRequest.setOrigin("?"); + + ArrayList attributesRequestList = new ArrayList<>(); + attributesRequestList.add(attributesRequest); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(attributesRequestList); + institutionRequest.setBusinessRegisterPlace("Business Register Place"); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(new ArrayList<>()); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setRea("Rea"); + institutionRequest.setShareCapital("Share Capital"); + institutionRequest.setSupportEmail("jane.doe@example.org"); + institutionRequest.setSupportPhone("6625550144"); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution10() throws Exception { + when(institutionService.createInstitution(any())).thenReturn(new Institution()); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); + geoTaxonomies.setCode("?"); + geoTaxonomies.setDesc("The characteristics of someone or something"); + + ArrayList geoTaxonomiesList = new ArrayList<>(); + geoTaxonomiesList.add(geoTaxonomies); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(new ArrayList<>()); + institutionRequest.setBusinessRegisterPlace("Business Register Place"); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setRea("Rea"); + institutionRequest.setShareCapital("Share Capital"); + institutionRequest.setSupportEmail("jane.doe@example.org"); + institutionRequest.setSupportPhone("6625550144"); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#retrieveInstitutionProducts(String, List)} + */ + @Test + void testRetrieveInstitutionProductsEmpty() throws Exception { + when(institutionService.retrieveInstitutionById(any())).thenReturn(new Institution()); + when(institutionService.retrieveInstitutionProducts(any(), any())) + .thenReturn(new ArrayList<>()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/institutions/{id}/products", "42"); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"products\":[]}")); + } + + /** + * Method under test: {@link InstitutionController#retrieveInstitutionProducts(String, List)} + */ + @Test + void testRetrieveInstitutionProducts() throws Exception { + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + when(institutionService.retrieveInstitutionById(any())).thenReturn(new Institution()); + when(institutionService.retrieveInstitutionProducts(any(), any())) + .thenReturn(onboardingList); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/institutions/{id}/products", onboarding.getProductId()); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string("{\"products\":[{\"id\":\"example\",\"state\":\"ACTIVE\"}]}")); + } + + /** + * Method under test: {@link InstitutionController#retrieveInstitutionGeoTaxonomies(String)} + */ + @Test + void testRetrieveInstitutionGeoTaxonomies() throws Exception { + when(institutionService.retrieveInstitutionById(any())).thenReturn(new Institution()); + when(institutionService.retrieveInstitutionGeoTaxonomies(any())).thenReturn(new ArrayList<>()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/institutions/{id}/geotaxonomies", + "42"); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("[]")); + } + + @Test + void createPgInstitution() throws Exception { + Authentication authentication = Mockito.mock(Authentication.class); + SecurityContext securityContext = Mockito.mock(SecurityContext.class); + SecurityContextHolder.setContext(securityContext); + when(authentication.getPrincipal()).thenReturn(SelfCareUser.builder("id").build()); + + CreatePgInstitutionRequest request = new CreatePgInstitutionRequest(); + request.setTaxId("taxId"); + request.setExistsInRegistry(true); + ObjectMapper mapper = new ObjectMapper(); + when(institutionService.createPgInstitution(any(), any(), anyBoolean(), any())).thenReturn(new Institution()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/pg") + .contentType(MediaType.APPLICATION_JSON) + .content(mapper.writeValueAsString(request)) + .principal(authentication); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#updateInstitution(String, InstitutionPut, Authentication)} (String, PgInstitutionPut, Authentication)} + */ + @Test + void testUpdateInstitutionDescription() throws Exception { + Authentication authentication = Mockito.mock(Authentication.class); + SecurityContext securityContext = Mockito.mock(SecurityContext.class); + SecurityContextHolder.setContext(securityContext); + when(authentication.getPrincipal()).thenReturn(SelfCareUser.builder("id").build()); + + InstitutionPut pgInstitutionPut = new InstitutionPut(); + pgInstitutionPut.setDescription("desc"); + pgInstitutionPut.setDigitalAddress("digitalAddress"); + pgInstitutionPut.setParentDescription("parentDesc"); + when(institutionService.updateInstitution(any(), any(), any())).thenReturn(new Institution()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.put("/institutions/42") + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(pgInstitutionPut)) + .principal(authentication); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + @Test + void testUpdateInstitution() throws Exception { + + InstitutionPut institutionPut = new InstitutionPut(); + institutionPut.setGeographicTaxonomyCodes(new ArrayList<>()); + SecurityContext securityContext = Mockito.mock(SecurityContext.class); + Authentication authentication = Mockito.mock(Authentication.class); + SecurityContextHolder.setContext(securityContext); + when(authentication.getPrincipal()).thenReturn(SelfCareUser.builder("id").build()); + + when(institutionService.updateInstitution(any(), any(), any())).thenReturn(new Institution()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.put("/institutions/42") + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(institutionPut)) + .principal(authentication); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + @Test + void testGetValidInstitutionToOnboard() throws Exception { + InstitutionToOnboard institution = new InstitutionToOnboard(); + List list = new ArrayList<>(); + list.add(institution); + List validInstitutions = new ArrayList<>(); + ValidInstitution validInstitution = new ValidInstitution(); + validInstitutions.add(validInstitution); + when(institutionService.retrieveInstitutionByExternalIds(any(), any())).thenReturn(validInstitutions); + + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/onboarded/{productId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(list)); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#updateCreatedAt(String, CreatedAtRequest)} + */ + @Test + void updateCreatedAt() throws Exception { + // Given + String institutionIdMock = "institutionId"; + String productIdMock = "productId"; + OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); + + CreatedAtRequest createdAtRequest = new CreatedAtRequest(); + createdAtRequest.setCreatedAt(createdAtMock); + createdAtRequest.setProductId(productIdMock); + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.put(BASE_URL + "/{institutionId}/createdAt", institutionIdMock) + .content(new ObjectMapper().findAndRegisterModules().writeValueAsString(createdAtRequest)) + .contentType(APPLICATION_JSON_VALUE) + .accept(APPLICATION_JSON_VALUE); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()); + // Then + verify(institutionService, times(1)) + .updateCreatedAt(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()); + verifyNoMoreInteractions(institutionService); + } + + /** + * Method under test: {@link InstitutionController#findFromProduct(String, Integer, Integer)} + */ + @Test + void findFromProduct() throws Exception { + // Given + String productIdMock = "productId"; + Integer pageMock = 0; + Integer sizeMock = 2; + + // When + when(institutionService.getInstitutionsByProductId(any(), any(), any())).thenReturn(List.of(staticInstitution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get(BASE_URL + "/products/{productId}", productIdMock) + .param("page", pageMock.toString()) + .param("size", sizeMock.toString()); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) + .build() + .perform(requestBuilder); + actualPerformResult + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string("{\"items\":[{\"id\":\"42\",\"externalId\":null,\"origin\":null,\"originId\":null,\"description\":\"description\",\"institutionType\":\"PG\",\"digitalAddress\":null,\"address\":null,\"zipCode\":null,\"taxCode\":null,\"onboardings\":{\"example\":{\"productId\":\"example\",\"tokenId\":\"tokenId\",\"status\":\"ACTIVE\",\"contract\":\"contract\",\"pricingPlan\":\"setPricingPlan\",\"billing\":{\"vatNumber\":\"example\",\"taxCodeInvoicing\":\"example\",\"recipientCode\":\"example\",\"publicServices\":false},\"createdAt\":null,\"updatedAt\":null,\"closedAt\":null,\"isAggregator\":true}},\"geographicTaxonomies\":null,\"attributes\":[{\"origin\":null,\"code\":\"code\",\"description\":\"description\"}],\"paymentServiceProvider\":null,\"dataProtectionOfficer\":null,\"rea\":null,\"shareCapital\":null,\"businessRegisterPlace\":null,\"supportEmail\":null,\"supportPhone\":null,\"imported\":false,\"subunitCode\":null,\"subunitType\":null,\"aooParentCode\":null,\"createdAt\":null,\"updatedAt\":null}]}"));; + // Then + verify(institutionService, times(1)) + .getInstitutionsByProductId(productIdMock, pageMock, sizeMock); + verifyNoMoreInteractions(institutionService); + } + + /** + * Method under test: {@link InstitutionController#getInstitutionBrokers(String, InstitutionType)} + */ + @Test + void getInstitutionBrokers() throws Exception { + // Given + final String productId = "test"; + final InstitutionType type = InstitutionType.PT; + Institution institution = new Institution(); + institution.setId("id"); + institution.setTaxCode("taxCode"); + + // When + when(institutionService.getInstitutionBrokers(any(), any())).thenReturn(List.of(institution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get(BASE_URL + "/{productId}/brokers/{institutionType}", productId, type); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) + .build() + .perform(requestBuilder); + MvcResult result = actualPerformResult + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + List response = objectMapper.readValue( + result.getResponse().getContentAsString(), + new TypeReference<>() { + }); + + // Then + assertNotNull(response); + assertNotNull(response.get(0)); + assertEquals(response.get(0).getId(), institution.getId()); + assertEquals(response.get(0).getTaxCode(), institution.getTaxCode()); + verify(institutionService, times(1)) + .getInstitutionBrokers(productId, type); + verifyNoMoreInteractions(institutionService); + } + + /** + * Method under test: {@link InstitutionController#getInstitutionBrokers(String, InstitutionType)} + */ + @Test + void getInstitutionBrokersWithBadRequest() throws Exception { + // Given + final String productId = "test"; + final String type = "FAKED-TYPE"; + + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get(BASE_URL + "/{productId}/brokers/{institutionType}", productId, type); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) + .build() + .perform(requestBuilder); + + actualPerformResult.andExpect(MockMvcResultMatchers.status().isBadRequest()); + + } + + + + @Test + void updateCreatedAt_invalidDate() throws Exception { + // Given + + + String institutionIdMock = "institutionId"; + String productIdMock = "productId"; + OffsetDateTime createdAtMock = OffsetDateTime.now().minusHours(10); + CreatedAtRequest createdAtRequest = new CreatedAtRequest(); + createdAtRequest.setProductId(productIdMock); + createdAtRequest.setCreatedAt(createdAtMock); + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .put(BASE_URL + "/{institutionId}/createdAt", institutionIdMock) + .content(objectMapper.writeValueAsString(createdAtRequest)) + .contentType(APPLICATION_JSON_VALUE) + .accept(APPLICATION_JSON_VALUE); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()); + } + + /** + * Method under test: {@link InstitutionController#onboardingInstitution(InstitutionOnboardingRequest, String)} + */ + @Test + void institutionOnboarding() throws Exception { + + + final String institutionId = "institutionId"; + InstitutionOnboardingRequest request = new InstitutionOnboardingRequest(); + request.setProductId("id"); + request.setIsAggregator(true); + + when(onboardingService.persistOnboarding(any(), any(), any(), any())) + .thenAnswer(invocation -> { + StringBuilder status = invocation.getArgument(3); + status.append(HttpStatus.CREATED.value()); + return new Institution(); + }); + + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post(BASE_URL + "/{id}/onboarding/", institutionId) + .content(objectMapper.writeValueAsString(request)) + .contentType(MediaType.APPLICATION_JSON); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isCreated()); + } + + @Test + void deleteOnboardedInstitution_test() throws Exception { + + String institutionId = UUID.randomUUID().toString(); + String productId = "prod-io"; + + doNothing().when(onboardingService).deleteOnboardedInstitution(institutionId, productId); + + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.delete("/institutions/{id}/products/{productId}", institutionId, productId); + + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + + actualPerformResult + .andExpect(MockMvcResultMatchers.status().isNoContent()) + .andExpect(MockMvcResultMatchers.content().string("")); + } + +} diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ManagementControllerTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ManagementControllerTest.java new file mode 100644 index 0000000..85c41bf --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ManagementControllerTest.java @@ -0,0 +1,56 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.core.InstitutionService; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.web.model.institution.BulkPartiesSeed; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.List; + +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.when; + +@ContextConfiguration(classes = {ManagementController.class}) +@ExtendWith(MockitoExtension.class) +class ManagementControllerTest { + @Mock + private InstitutionService institutionService; + + @InjectMocks + private ManagementController managementController; + + @Test + void testGetInstitutionsByIds() throws Exception { + BulkPartiesSeed bulkPartiesSeed = new BulkPartiesSeed(); + bulkPartiesSeed.setPartyIdentifiers(List.of("42")); + ObjectMapper mapper = new ObjectMapper(); + Institution institution = new Institution(); + institution.setId("id"); + Onboarding onboarding = new Onboarding(); + onboarding.setProductId("productId"); + onboarding.setStatus(RelationshipState.ACTIVE); + institution.setOnboarding(List.of(onboarding)); + when(institutionService.retrieveInstitutionByIds(any())).thenReturn(List.of(institution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/bulk/institutions") + .contentType(MediaType.APPLICATION_JSON) + .content(mapper.writeValueAsString(bulkPartiesSeed)); + MockMvcBuilders.standaloneSetup(managementController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()); + } +} + diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/OnboardingControllerTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/OnboardingControllerTest.java new file mode 100644 index 0000000..1675844 --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/OnboardingControllerTest.java @@ -0,0 +1,85 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import it.pagopa.selfcare.mscore.core.OnboardingService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.request.RequestContextHolder; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doNothing; + +@ContextConfiguration(classes = {OnboardingController.class}) +@ExtendWith(MockitoExtension.class) +class OnboardingControllerTest { + @InjectMocks + private OnboardingController onboardingController; + + @Mock + private OnboardingService onboardingService; + + @BeforeEach + void resetContext() { + SecurityContextHolder.clearContext(); + RequestContextHolder.resetRequestAttributes(); + } + + /** + * Method under test: {@link OnboardingController#verifyOnboardingInfo(String, String, String)} + */ + @Test + void shouldVerifyOnboardingInfoBySubunit() throws Exception { + doNothing().when(onboardingService).verifyOnboardingInfoSubunit(any(), any(), any()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .head("/onboarding/") + .queryParam("taxCode", "42") + .queryParam("productId", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(onboardingController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isNoContent()); + } + + /** + * Method under test: {@link OnboardingController#verifyOnboardingInfoByFilters(String, String, String, String, String, String)} + */ + @Test + void shouldVerifyOnboardingInfoByFiltersSuccess() throws Exception { + doNothing().when(onboardingService).verifyOnboardingInfoByFilters(any()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .head("/onboarding/verify") + .queryParam("origin", "42") + .queryParam("originId", "42") + .queryParam("productId", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(onboardingController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isNoContent()); + } + + /** + * Method under test: {@link OnboardingController#verifyOnboardingInfo(String, String)} + */ + @Test + void shouldVerifyOnboardingInfoByExternalId() throws Exception { + doNothing().when(onboardingService).verifyOnboardingInfo(any(), any()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .head("/onboarding/institution/{externalId}/products/{productId}", "42", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(onboardingController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isNoContent()); + } + + } + diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandlerTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandlerTest.java new file mode 100644 index 0000000..25f5bfa --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandlerTest.java @@ -0,0 +1,163 @@ +package it.pagopa.selfcare.mscore.web.exception; + +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.error.Problem; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.core.MethodParameter; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.validation.BindException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.context.request.ServletWebRequest; +import org.springframework.web.context.request.WebRequest; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Constructor; +import java.util.List; +import java.util.Objects; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@ExtendWith(MockitoExtension.class) +class CustomExceptionHandlerTest { + /** + * Method under test: {@link CustomExceptionHandler#handleMissingServletRequestParameter(MissingServletRequestParameterException, HttpHeaders, HttpStatus, WebRequest)} + */ + @Test + void testHandleMissingServletRequestParameter() { + CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); + MissingServletRequestParameterException ex = new MissingServletRequestParameterException("Parameter Name", + "Parameter Type"); + + HttpHeaders httpHeaders = new HttpHeaders(); + ResponseEntity actualHandleMissingServletRequestParameterResult = customExceptionHandler + .handleMissingServletRequestParameter(ex, httpHeaders, HttpStatus.CONTINUE, + new ServletWebRequest(new MockHttpServletRequest())); + assertTrue(actualHandleMissingServletRequestParameterResult.hasBody()); + assertEquals(1, actualHandleMissingServletRequestParameterResult.getHeaders().size()); + assertEquals(HttpStatus.BAD_REQUEST, actualHandleMissingServletRequestParameterResult.getStatusCode()); + assertEquals(400, ((Problem) Objects.requireNonNull(actualHandleMissingServletRequestParameterResult.getBody())).getStatus().intValue()); + assertEquals(1, ((Problem) actualHandleMissingServletRequestParameterResult.getBody()).getErrors().size()); + List getResult = httpHeaders.get(HttpHeaders.CONTENT_TYPE); + assertEquals(1, Objects.requireNonNull(getResult).size()); + assertEquals("application/json", getResult.get(0)); + } + + /** + * Method under test: {@link CustomExceptionHandler#handleMethodArgumentNotValid(MethodArgumentNotValidException, HttpHeaders, HttpStatus, WebRequest)} + */ + @Test + void testHandleMethodArgumentNotValid() throws NoSuchMethodException { + CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); + Constructor constructor = CustomExceptionHandler.class.getConstructor(); + MethodParameter parameter = new MethodParameter(constructor,-1); + + MethodArgumentNotValidException ex = new MethodArgumentNotValidException(parameter, + new BindException("Target", "Object Name")); + + HttpHeaders headers = new HttpHeaders(); + customExceptionHandler.handleMethodArgumentNotValid(ex, headers, HttpStatus.CONTINUE, + new ServletWebRequest(new MockHttpServletRequest())); + + HttpHeaders httpHeaders = new HttpHeaders(); + ResponseEntity actualHandleMissingServletRequestParameterResult = customExceptionHandler + .handleMethodArgumentNotValid(ex, httpHeaders, HttpStatus.CONTINUE, + new ServletWebRequest(new MockHttpServletRequest())); + assertTrue(actualHandleMissingServletRequestParameterResult.hasBody()); + assertEquals(1, actualHandleMissingServletRequestParameterResult.getHeaders().size()); + assertEquals(HttpStatus.BAD_REQUEST, actualHandleMissingServletRequestParameterResult.getStatusCode()); + assertEquals(400, ((Problem) Objects.requireNonNull(actualHandleMissingServletRequestParameterResult.getBody())).getStatus().intValue()); + assertEquals(1, ((Problem) actualHandleMissingServletRequestParameterResult.getBody()).getErrors().size()); + } + + /** + * Method under test: {@link CustomExceptionHandler#handleResourceNotFoundException(HttpServletRequest, ResourceNotFoundException)} + */ + @Test + void testHandleResourceNotFoundException() { + CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); + MockHttpServletRequest request = new MockHttpServletRequest(); + + ResponseEntity actualHandleResourceNotFoundExceptionResult = customExceptionHandler + .handleResourceNotFoundException(request, new ResourceNotFoundException("An error occurred", "Code")); + assertTrue(actualHandleResourceNotFoundExceptionResult.hasBody()); + assertEquals(1, actualHandleResourceNotFoundExceptionResult.getHeaders().size()); + assertEquals(HttpStatus.NOT_FOUND, actualHandleResourceNotFoundExceptionResult.getStatusCode()); + Problem body = actualHandleResourceNotFoundExceptionResult.getBody(); + assertEquals(404, Objects.requireNonNull(body).getStatus().intValue()); + assertEquals(1, body.getErrors().size()); + } + + /** + * Method under test: {@link CustomExceptionHandler#handleResourceConflictException(HttpServletRequest, ResourceConflictException)} + */ + @Test + void testHandleResourceConflictException() { + CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); + MockHttpServletRequest request = new MockHttpServletRequest(); + ResponseEntity actualHandleResourceConflictExceptionResult = customExceptionHandler + .handleResourceConflictException(request, new ResourceConflictException("An error occurred", "Code")); + assertTrue(actualHandleResourceConflictExceptionResult.hasBody()); + assertEquals(1, actualHandleResourceConflictExceptionResult.getHeaders().size()); + assertEquals(HttpStatus.CONFLICT, actualHandleResourceConflictExceptionResult.getStatusCode()); + Problem body = actualHandleResourceConflictExceptionResult.getBody(); + assertEquals(409, Objects.requireNonNull(body).getStatus().intValue()); + assertEquals(1, body.getErrors().size()); + } + + /** + * Method under test: {@link CustomExceptionHandler#handleInvalidRequestException(HttpServletRequest, InvalidRequestException)} + */ + @Test + void testHandleInvalidRequestException() { + CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); + MockHttpServletRequest request = new MockHttpServletRequest(); + ResponseEntity actualHandleInvalidRequestExceptionResult = customExceptionHandler + .handleInvalidRequestException(request, new InvalidRequestException("An error occurred", "Code")); + assertTrue(actualHandleInvalidRequestExceptionResult.hasBody()); + assertEquals(1, actualHandleInvalidRequestExceptionResult.getHeaders().size()); + assertEquals(HttpStatus.BAD_REQUEST, actualHandleInvalidRequestExceptionResult.getStatusCode()); + Problem body = actualHandleInvalidRequestExceptionResult.getBody(); + assertEquals(400, Objects.requireNonNull(body).getStatus().intValue()); + assertEquals(1, body.getErrors().size()); + } + + /** + * Method under test: {@link CustomExceptionHandler#handleException(HttpServletRequest, Exception)} + */ + @Test + void testHandleException() { + CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); + MockHttpServletRequest request = new MockHttpServletRequest(); + ResponseEntity actualHandleExceptionResult = customExceptionHandler.handleException(request, + new Exception()); + assertTrue(actualHandleExceptionResult.hasBody()); + assertTrue(actualHandleExceptionResult.getHeaders().isEmpty()); + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualHandleExceptionResult.getStatusCode()); + Problem body = actualHandleExceptionResult.getBody(); + assertEquals(1, Objects.requireNonNull(body).getErrors().size()); + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR.value(), body.getStatus().intValue()); + } + + @Test + void handleMsCoreException() { + CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); + MockHttpServletRequest request = new MockHttpServletRequest(); + ResponseEntity actualHandleInvalidRequestExceptionResult = customExceptionHandler + .handleMsCoreException(request, new MsCoreException("An error occurred", "Code")); + assertTrue(actualHandleInvalidRequestExceptionResult.hasBody()); + assertEquals(1, actualHandleInvalidRequestExceptionResult.getHeaders().size()); + } + + +} + diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/filter/LogFilterTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/filter/LogFilterTest.java new file mode 100644 index 0000000..447d906 --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/filter/LogFilterTest.java @@ -0,0 +1,63 @@ +package it.pagopa.selfcare.mscore.web.filter; + +import org.apache.catalina.connector.Response; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import java.io.IOException; +import java.io.UnsupportedEncodingException; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.*; + +@ExtendWith(SpringExtension.class) +class LogFilterTest { + @InjectMocks + private LogFilter logFilter; + + @Test + void testDoFilter() throws IOException, ServletException { + MockHttpServletRequest request = new MockHttpServletRequest(); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + doNothing().when(filterChain).doFilter(any(), any()); + logFilter.doFilter(request, response, filterChain); + verify(filterChain).doFilter(any(), any()); + } + + /** + * Method under test: {@link LogFilter#doFilter(ServletRequest, ServletResponse, FilterChain)} + */ + @Test + void testDoFilter4() throws IOException, ServletException { + MockHttpServletRequest request = new MockHttpServletRequest(); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + doNothing().when(filterChain).doFilter(any(), any()); + logFilter.doFilter(request, response, filterChain); + verify(filterChain).doFilter(any(), any()); + } + + /** + * Method under test: {@link LogFilter#doFilter(ServletRequest, ServletResponse, FilterChain)} + */ + @Test + void testDoFilter5() throws IOException, ServletException { + MockHttpServletRequest request = new MockHttpServletRequest(); + Response response = new Response(); + FilterChain filterChain = mock(FilterChain.class); + doThrow(new UnsupportedEncodingException()).when(filterChain) + .doFilter(any(), any()); + assertThrows(UnsupportedEncodingException.class, () -> logFilter.doFilter(request, response, filterChain)); + verify(filterChain).doFilter(any(), any()); + } +} + diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustomTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustomTest.java new file mode 100644 index 0000000..e6b90e2 --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustomTest.java @@ -0,0 +1,1248 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.Env; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.model.user.ProductManagerInfo; +import it.pagopa.selfcare.mscore.web.TestUtils; +import it.pagopa.selfcare.mscore.web.model.institution.*; +import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +class InstitutionMapperCustomTest { + + Institution createDmmyInstitution() { + + Institution dummyInstitution = new Institution(); + dummyInstitution.setId("42"); + dummyInstitution.setExternalId("42"); + dummyInstitution.setOrigin(Origin.MOCK.name()); + dummyInstitution.setOriginId("42"); + dummyInstitution.setDescription("The characteristics of someone or something"); + dummyInstitution.setInstitutionType(InstitutionType.PA); + dummyInstitution.setDigitalAddress("42 Main St"); + dummyInstitution.setTaxCode("taxCode"); + dummyInstitution.setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); + dummyInstitution.setAddress("42 Main St"); + dummyInstitution.setBusinessRegisterPlace("Business Register Place"); + dummyInstitution.setRea("Rea"); + dummyInstitution.setZipCode("zipCpde"); + dummyInstitution.setShareCapital("Share Capital"); + + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider("Abi Code", "42", + "Legal Register Name", "42", true); + dummyInstitution.setPaymentServiceProvider(paymentServiceProvider); + + return dummyInstitution; + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} + */ + @Test + void testToInstitutionManagerResponse6() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + + ProductManagerInfo productManagerInfo = new ProductManagerInfo(); + productManagerInfo.setProducts(new ArrayList<>()); + productManagerInfo.setInstitution(institution); + InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom + .toInstitutionManagerResponse(productManagerInfo, "42"); + assertNull(actualToInstitutionManagerResponseResult.getTo()); + assertNull(actualToInstitutionManagerResponseResult.getFrom()); + assertEquals("Pricing Plan", actualToInstitutionManagerResponseResult.getPricingPlan()); + InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); + assertNull(institutionUpdate.getTaxCode()); + assertNull(institutionUpdate.getSupportPhone()); + assertNull(institutionUpdate.getSupportEmail()); + assertNull(institutionUpdate.getShareCapital()); + assertNull(institutionUpdate.getRea()); + assertNull(institutionUpdate.getInstitutionType()); + BillingResponse billing1 = actualToInstitutionManagerResponseResult.getBilling(); + assertTrue(billing1.isPublicServices()); + assertEquals("Recipient Code", billing1.getRecipientCode()); + assertNull(institutionUpdate.getBusinessRegisterPlace()); + assertEquals("42", billing1.getVatNumber()); + assertNull(institutionUpdate.getDescription()); + assertNull(institutionUpdate.getDigitalAddress()); + assertNull(institutionUpdate.getZipCode()); + assertFalse(institutionUpdate.isImported()); + assertNull(institutionUpdate.getAddress()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} + */ + @Test + void testToInstitutionManagerResponse7() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract("Contract"); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole("Product Role"); + onboardedProduct.setRelationshipId("42"); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setTokenId("42"); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + ProductManagerInfo productManagerInfo = new ProductManagerInfo(); + productManagerInfo.setProducts(onboardedProductList); + productManagerInfo.setInstitution(institution); + InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom + .toInstitutionManagerResponse(productManagerInfo, "42"); + assertNull(actualToInstitutionManagerResponseResult.getUpdatedAt()); + assertNull(actualToInstitutionManagerResponseResult.getCreatedAt()); + assertEquals("42", actualToInstitutionManagerResponseResult.getId()); + assertNull(actualToInstitutionManagerResponseResult.getTo()); + assertEquals(RelationshipState.PENDING, actualToInstitutionManagerResponseResult.getState()); + assertNull(actualToInstitutionManagerResponseResult.getFrom()); + assertEquals("Pricing Plan", actualToInstitutionManagerResponseResult.getPricingPlan()); + ProductInfo product = actualToInstitutionManagerResponseResult.getProduct(); + assertEquals("42", product.getId()); + assertNull(product.getCreatedAt()); + InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); + assertNull(institutionUpdate.getZipCode()); + assertNull(institutionUpdate.getTaxCode()); + assertNull(institutionUpdate.getSupportPhone()); + assertNull(institutionUpdate.getSupportEmail()); + assertNull(institutionUpdate.getShareCapital()); + assertNull(institutionUpdate.getRea()); + assertNull(institutionUpdate.getInstitutionType()); + BillingResponse billing1 = actualToInstitutionManagerResponseResult.getBilling(); + assertTrue(billing1.isPublicServices()); + assertEquals("Recipient Code", billing1.getRecipientCode()); + assertNull(institutionUpdate.getBusinessRegisterPlace()); + assertEquals("42", billing1.getVatNumber()); + assertNull(institutionUpdate.getDescription()); + assertNull(institutionUpdate.getDigitalAddress()); + assertEquals("Product Role", product.getRole()); + assertFalse(institutionUpdate.isImported()); + assertNull(institutionUpdate.getAddress()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} + */ + @Test + void testToInstitutionManagerResponse8() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract("Contract"); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole("Product Role"); + onboardedProduct.setRelationshipId("42"); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setTokenId("42"); + onboardedProduct.setUpdatedAt(null); + + OnboardedProduct onboardedProduct1 = new OnboardedProduct(); + onboardedProduct1.setContract("it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct"); + onboardedProduct1.setCreatedAt(null); + onboardedProduct1.setEnv(Env.DEV); + onboardedProduct1.setProductId("Product Id"); + onboardedProduct1.setProductRole("it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct"); + onboardedProduct1.setRelationshipId("Relationship Id"); + onboardedProduct1.setRole(PartyRole.DELEGATE); + onboardedProduct1.setStatus(RelationshipState.ACTIVE); + onboardedProduct1.setTokenId("ABC123"); + onboardedProduct1.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct1); + onboardedProductList.add(onboardedProduct); + + ProductManagerInfo productManagerInfo = new ProductManagerInfo(); + productManagerInfo.setProducts(onboardedProductList); + productManagerInfo.setInstitution(institution); + InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom + .toInstitutionManagerResponse(productManagerInfo, "42"); + assertNull(actualToInstitutionManagerResponseResult.getUpdatedAt()); + assertNull(actualToInstitutionManagerResponseResult.getCreatedAt()); + assertEquals("42", actualToInstitutionManagerResponseResult.getId()); + assertNull(actualToInstitutionManagerResponseResult.getTo()); + assertEquals(RelationshipState.PENDING, actualToInstitutionManagerResponseResult.getState()); + assertNull(actualToInstitutionManagerResponseResult.getFrom()); + assertEquals("Pricing Plan", actualToInstitutionManagerResponseResult.getPricingPlan()); + ProductInfo product = actualToInstitutionManagerResponseResult.getProduct(); + assertEquals("42", product.getId()); + assertNull(product.getCreatedAt()); + InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); + assertNull(institutionUpdate.getZipCode()); + assertNull(institutionUpdate.getTaxCode()); + assertNull(institutionUpdate.getSupportPhone()); + assertNull(institutionUpdate.getSupportEmail()); + assertNull(institutionUpdate.getShareCapital()); + assertNull(institutionUpdate.getRea()); + assertNull(institutionUpdate.getInstitutionType()); + BillingResponse billing1 = actualToInstitutionManagerResponseResult.getBilling(); + assertTrue(billing1.isPublicServices()); + assertEquals("Recipient Code", billing1.getRecipientCode()); + assertNull(institutionUpdate.getBusinessRegisterPlace()); + assertEquals("42", billing1.getVatNumber()); + assertNull(institutionUpdate.getDescription()); + assertNull(institutionUpdate.getDigitalAddress()); + assertEquals("Product Role", product.getRole()); + assertFalse(institutionUpdate.isImported()); + assertNull(institutionUpdate.getAddress()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} + */ + @Test + void testToInstitutionManagerResponse9() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + Institution toInstitutionResult = InstitutionMapperCustom.toInstitution(new InstitutionRequest(), "42"); + toInstitutionResult.setOnboarding(onboardingList); + + ProductManagerInfo productManagerInfo = new ProductManagerInfo(); + ArrayList onboardedProductList = new ArrayList<>(); + productManagerInfo.setProducts(onboardedProductList); + productManagerInfo.setInstitution(toInstitutionResult); + InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom + .toInstitutionManagerResponse(productManagerInfo, "42"); + assertNull(actualToInstitutionManagerResponseResult.getTo()); + assertNull(actualToInstitutionManagerResponseResult.getFrom()); + assertEquals("Pricing Plan", actualToInstitutionManagerResponseResult.getPricingPlan()); + InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); + assertNull(institutionUpdate.getTaxCode()); + assertNull(institutionUpdate.getSupportPhone()); + assertNull(institutionUpdate.getSupportEmail()); + assertNull(institutionUpdate.getShareCapital()); + assertNull(institutionUpdate.getRea()); + assertNull(institutionUpdate.getInstitutionType()); + BillingResponse billing1 = actualToInstitutionManagerResponseResult.getBilling(); + assertTrue(billing1.isPublicServices()); + assertEquals("Recipient Code", billing1.getRecipientCode()); + assertNull(institutionUpdate.getBusinessRegisterPlace()); + assertEquals("42", billing1.getVatNumber()); + assertNull(institutionUpdate.getDescription()); + assertNull(institutionUpdate.getDigitalAddress()); + assertNull(institutionUpdate.getZipCode()); + assertFalse(institutionUpdate.isImported()); + assertNull(institutionUpdate.getAddress()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} + */ + @Test + void testToInstitutionManagerResponse10() { + Billing billing = TestUtils.createSimpleBilling(); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = createDmmyInstitution(); + institution.setOnboarding(onboardingList); + institution.setImported(true); + + ProductManagerInfo productManagerInfo = new ProductManagerInfo(); + ArrayList onboardedProductList = new ArrayList<>(); + productManagerInfo.setProducts(onboardedProductList); + productManagerInfo.setInstitution(institution); + + InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom + .toInstitutionManagerResponse(productManagerInfo, "42"); + + assertEquals("42", actualToInstitutionManagerResponseResult.getTo()); + assertNull(actualToInstitutionManagerResponseResult.getFrom()); + assertEquals(onboarding.getPricingPlan(), actualToInstitutionManagerResponseResult.getPricingPlan()); + InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); + assertEquals(institution.getTaxCode(), institutionUpdate.getTaxCode()); + assertEquals(institution.getSupportPhone(), institutionUpdate.getSupportPhone()); + assertEquals(institution.getSupportEmail(), institutionUpdate.getSupportEmail()); + assertEquals(institution.getShareCapital(), institutionUpdate.getShareCapital()); + assertEquals(institution.getRea(), institutionUpdate.getRea()); + assertEquals(InstitutionType.PA, institutionUpdate.getInstitutionType()); + BillingResponse billing2 = actualToInstitutionManagerResponseResult.getBilling(); + assertTrue(billing2.isPublicServices()); + assertEquals("Recipient Code", billing2.getRecipientCode()); + assertEquals("Business Register Place", institutionUpdate.getBusinessRegisterPlace()); + assertEquals("42", billing2.getVatNumber()); + assertEquals("The characteristics of someone or something", institutionUpdate.getDescription()); + assertEquals(institution.getDigitalAddress(), institutionUpdate.getDigitalAddress()); + assertEquals(institution.getZipCode(), institutionUpdate.getZipCode()); + assertTrue(institutionUpdate.isImported()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionBillingResponse(Institution, String)} + */ + @Test + void testToInstitutionBillingResponse2() { + Institution institution = new Institution(); + institution.setOnboarding(new ArrayList<>()); + InstitutionBillingResponse actualToInstitutionBillingResponseResult = InstitutionMapperCustom + .toInstitutionBillingResponse(institution, "42"); + assertNull(actualToInstitutionBillingResponseResult.getAddress()); + assertNull(actualToInstitutionBillingResponseResult.getZipCode()); + assertNull(actualToInstitutionBillingResponseResult.getTaxCode()); + assertNull(actualToInstitutionBillingResponseResult.getOriginId()); + assertNull(actualToInstitutionBillingResponseResult.getOrigin()); + assertNull(actualToInstitutionBillingResponseResult.getInstitutionType()); + assertNull(actualToInstitutionBillingResponseResult.getInstitutionId()); + assertNull(actualToInstitutionBillingResponseResult.getExternalId()); + assertNull(actualToInstitutionBillingResponseResult.getDigitalAddress()); + assertNull(actualToInstitutionBillingResponseResult.getDescription()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionBillingResponse(Institution, String)} + */ + @Test + void testToInstitutionBillingResponse3() { + assertNull(InstitutionMapperCustom.toInstitutionBillingResponse(null, "42")); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionBillingResponse(Institution, String)} + */ + @Test + void testToInstitutionBillingResponse4() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + InstitutionBillingResponse actualToInstitutionBillingResponseResult = InstitutionMapperCustom + .toInstitutionBillingResponse(institution, "42"); + assertNull(actualToInstitutionBillingResponseResult.getAddress()); + assertNull(actualToInstitutionBillingResponseResult.getZipCode()); + assertNull(actualToInstitutionBillingResponseResult.getTaxCode()); + assertEquals("Pricing Plan", actualToInstitutionBillingResponseResult.getPricingPlan()); + assertNull(actualToInstitutionBillingResponseResult.getOriginId()); + assertNull(actualToInstitutionBillingResponseResult.getOrigin()); + assertNull(actualToInstitutionBillingResponseResult.getInstitutionType()); + assertNull(actualToInstitutionBillingResponseResult.getInstitutionId()); + assertNull(actualToInstitutionBillingResponseResult.getExternalId()); + assertNull(actualToInstitutionBillingResponseResult.getDigitalAddress()); + assertNull(actualToInstitutionBillingResponseResult.getDescription()); + BillingResponse billing1 = actualToInstitutionBillingResponseResult.getBilling(); + assertEquals("Recipient Code", billing1.getRecipientCode()); + assertTrue(billing1.isPublicServices()); + assertEquals("42", billing1.getVatNumber()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionBillingResponse(Institution, String)} + */ + @Test + void testToInstitutionBillingResponse5() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + Billing billing1 = new Billing(); + billing1.setPublicServices(false); + billing1.setRecipientCode("it.pagopa.selfcare.mscore.model.institution.Billing"); + billing1.setVatNumber("Vat Number"); + + Onboarding onboarding1 = new Onboarding(); + onboarding1.setBilling(billing1); + onboarding1.setClosedAt(null); + onboarding1.setContract("it.pagopa.selfcare.mscore.model.institution.Onboarding"); + onboarding1.setCreatedAt(null); + onboarding1.setPricingPlan("it.pagopa.selfcare.mscore.model.institution.Onboarding"); + onboarding1.setProductId("Product Id"); + onboarding1.setStatus(RelationshipState.ACTIVE); + onboarding1.setTokenId("ABC123"); + onboarding1.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding1); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + InstitutionBillingResponse actualToInstitutionBillingResponseResult = InstitutionMapperCustom + .toInstitutionBillingResponse(institution, "42"); + assertNull(actualToInstitutionBillingResponseResult.getAddress()); + assertNull(actualToInstitutionBillingResponseResult.getZipCode()); + assertNull(actualToInstitutionBillingResponseResult.getTaxCode()); + assertEquals("Pricing Plan", actualToInstitutionBillingResponseResult.getPricingPlan()); + assertNull(actualToInstitutionBillingResponseResult.getOriginId()); + assertNull(actualToInstitutionBillingResponseResult.getOrigin()); + assertNull(actualToInstitutionBillingResponseResult.getInstitutionType()); + assertNull(actualToInstitutionBillingResponseResult.getInstitutionId()); + assertNull(actualToInstitutionBillingResponseResult.getExternalId()); + assertNull(actualToInstitutionBillingResponseResult.getDigitalAddress()); + assertNull(actualToInstitutionBillingResponseResult.getDescription()); + BillingResponse billing2 = actualToInstitutionBillingResponseResult.getBilling(); + assertEquals("Recipient Code", billing2.getRecipientCode()); + assertTrue(billing2.isPublicServices()); + assertEquals("42", billing2.getVatNumber()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitution(InstitutionRequest, String)} + */ + @Test + void testToInstitution() { + BillingRequest billingRequest = new BillingRequest(); + billingRequest.setPublicServices(true); + billingRequest.setRecipientCode("Recipient Code"); + billingRequest.setVatNumber("42"); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + ArrayList attributesRequestList = new ArrayList<>(); + institutionRequest.setAttributes(attributesRequestList); + institutionRequest.setBilling(billingRequest); + institutionRequest.setBusinessRegisterPlace("Business Register Place"); + institutionRequest.setCreatedAt(null); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setExternalId("42"); + institutionRequest.setGeographicTaxonomies(new ArrayList<>()); + institutionRequest.setId("42"); + institutionRequest.setImported(true); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setOnboarding(new ArrayList<>()); + institutionRequest.setOrigin(Origin.MOCK.name()); + institutionRequest.setOriginId("42"); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setRea("Rea"); + institutionRequest.setShareCapital("Share Capital"); + institutionRequest.setSupportEmail("jane.doe@example.org"); + institutionRequest.setSupportPhone("6625550144"); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setUpdatedAt(null); + institutionRequest.setZipCode("21654"); + Institution actualToInstitutionResult = InstitutionMapperCustom.toInstitution(institutionRequest, "42"); + assertEquals("42 Main St", actualToInstitutionResult.getAddress()); + assertEquals("21654", actualToInstitutionResult.getZipCode()); + assertEquals("Tax Code", actualToInstitutionResult.getTaxCode()); + assertEquals("6625550144", actualToInstitutionResult.getSupportPhone()); + assertEquals("jane.doe@example.org", actualToInstitutionResult.getSupportEmail()); + assertEquals("Share Capital", actualToInstitutionResult.getShareCapital()); + assertEquals("Rea", actualToInstitutionResult.getRea()); + assertEquals("Business Register Place", actualToInstitutionResult.getBusinessRegisterPlace()); + assertEquals("42 Main St", actualToInstitutionResult.getDigitalAddress()); + assertEquals("42", actualToInstitutionResult.getExternalId()); + assertEquals(InstitutionType.PA, actualToInstitutionResult.getInstitutionType()); + assertEquals("The characteristics of someone or something", actualToInstitutionResult.getDescription()); + DataProtectionOfficer dataProtectionOfficer = actualToInstitutionResult.getDataProtectionOfficer(); + assertEquals("Pec", dataProtectionOfficer.getPec()); + assertEquals("jane.doe@example.org", dataProtectionOfficer.getEmail()); + assertEquals("42 Main St", dataProtectionOfficer.getAddress()); + PaymentServiceProvider paymentServiceProvider = actualToInstitutionResult.getPaymentServiceProvider(); + assertEquals("42", paymentServiceProvider.getLegalRegisterNumber()); + assertEquals("Abi Code", paymentServiceProvider.getAbiCode()); + assertEquals("Legal Register Name", paymentServiceProvider.getLegalRegisterName()); + assertTrue(paymentServiceProvider.isVatNumberGroup()); + assertEquals("42", paymentServiceProvider.getBusinessRegisterNumber()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitution(InstitutionRequest, String)} + */ + @Test + void testToInstitution2() { + AttributesRequest attributesRequest = new AttributesRequest(); + attributesRequest.setCode("Code"); + attributesRequest.setDescription("The characteristics of someone or something"); + attributesRequest.setOrigin("Origin"); + + ArrayList attributesRequestList = new ArrayList<>(); + attributesRequestList.add(attributesRequest); + + BillingRequest billingRequest = new BillingRequest(); + billingRequest.setPublicServices(true); + billingRequest.setRecipientCode("Recipient Code"); + billingRequest.setVatNumber("42"); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(attributesRequestList); + institutionRequest.setBilling(billingRequest); + institutionRequest.setBusinessRegisterPlace("Business Register Place"); + institutionRequest.setCreatedAt(null); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setExternalId("42"); + ArrayList geoTaxonomiesList = new ArrayList<>(); + institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); + institutionRequest.setId("42"); + institutionRequest.setImported(true); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setOnboarding(new ArrayList<>()); + institutionRequest.setOrigin(Origin.MOCK.name()); + institutionRequest.setOriginId("42"); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setRea("Rea"); + institutionRequest.setShareCapital("Share Capital"); + institutionRequest.setSupportEmail("jane.doe@example.org"); + institutionRequest.setSupportPhone("6625550144"); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setUpdatedAt(null); + institutionRequest.setZipCode("21654"); + Institution actualToInstitutionResult = InstitutionMapperCustom.toInstitution(institutionRequest, "42"); + assertEquals("42 Main St", actualToInstitutionResult.getAddress()); + assertEquals("21654", actualToInstitutionResult.getZipCode()); + assertEquals("Tax Code", actualToInstitutionResult.getTaxCode()); + assertEquals("6625550144", actualToInstitutionResult.getSupportPhone()); + assertEquals("jane.doe@example.org", actualToInstitutionResult.getSupportEmail()); + assertEquals("Share Capital", actualToInstitutionResult.getShareCapital()); + assertEquals("Rea", actualToInstitutionResult.getRea()); + List attributes = actualToInstitutionResult.getAttributes(); + assertEquals(1, attributes.size()); + assertEquals("Business Register Place", actualToInstitutionResult.getBusinessRegisterPlace()); + assertEquals("42 Main St", actualToInstitutionResult.getDigitalAddress()); + assertEquals("42", actualToInstitutionResult.getExternalId()); + assertEquals(InstitutionType.PA, actualToInstitutionResult.getInstitutionType()); + assertEquals("The characteristics of someone or something", actualToInstitutionResult.getDescription()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitution(InstitutionRequest, String)} + */ + @Test + void testToInstitution3() { + BillingRequest billingRequest = new BillingRequest(); + billingRequest.setPublicServices(true); + billingRequest.setRecipientCode("Recipient Code"); + billingRequest.setVatNumber("42"); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); + geoTaxonomies.setCode("Code"); + geoTaxonomies.setDesc("The characteristics of someone or something"); + + ArrayList geoTaxonomiesList = new ArrayList<>(); + geoTaxonomiesList.add(geoTaxonomies); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + ArrayList attributesRequestList = new ArrayList<>(); + institutionRequest.setAttributes(attributesRequestList); + institutionRequest.setBilling(billingRequest); + institutionRequest.setBusinessRegisterPlace("Business Register Place"); + institutionRequest.setCreatedAt(null); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setExternalId("42"); + institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); + institutionRequest.setId("42"); + institutionRequest.setImported(true); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setOnboarding(new ArrayList<>()); + institutionRequest.setOrigin(Origin.MOCK.name()); + institutionRequest.setOriginId("42"); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setRea("Rea"); + institutionRequest.setShareCapital("Share Capital"); + institutionRequest.setSupportEmail("jane.doe@example.org"); + institutionRequest.setSupportPhone("6625550144"); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setUpdatedAt(null); + institutionRequest.setZipCode("21654"); + Institution actualToInstitutionResult = InstitutionMapperCustom.toInstitution(institutionRequest, "42"); + assertEquals("42 Main St", actualToInstitutionResult.getAddress()); + assertEquals("21654", actualToInstitutionResult.getZipCode()); + assertEquals("Tax Code", actualToInstitutionResult.getTaxCode()); + assertEquals("6625550144", actualToInstitutionResult.getSupportPhone()); + assertEquals("jane.doe@example.org", actualToInstitutionResult.getSupportEmail()); + assertEquals("Share Capital", actualToInstitutionResult.getShareCapital()); + assertEquals("Rea", actualToInstitutionResult.getRea()); + assertEquals("Business Register Place", actualToInstitutionResult.getBusinessRegisterPlace()); + assertEquals("42 Main St", actualToInstitutionResult.getDigitalAddress()); + assertEquals("42", actualToInstitutionResult.getExternalId()); + assertEquals(InstitutionType.PA, actualToInstitutionResult.getInstitutionType()); + List geographicTaxonomies = actualToInstitutionResult.getGeographicTaxonomies(); + assertEquals(1, geographicTaxonomies.size()); + assertEquals("The characteristics of someone or something", actualToInstitutionResult.getDescription()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toBillingResponse(Onboarding, Institution)} + */ + @Test + void testToBillingResponse() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + BillingResponse actualToBillingResponseResult = InstitutionMapperCustom.toBillingResponse(onboarding, new Institution()); + assertEquals("Recipient Code", actualToBillingResponseResult.getRecipientCode()); + assertTrue(actualToBillingResponseResult.isPublicServices()); + assertEquals("42", actualToBillingResponseResult.getVatNumber()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#getBillingFromOnboarding(Onboarding, Institution)} + */ + @Test + void testGetBillingFromOnboarding2() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Billing billing1 = new Billing(); + billing1.setPublicServices(true); + billing1.setRecipientCode("Recipient Code"); + billing1.setVatNumber("42"); + Onboarding onboarding = mock(Onboarding.class); + when(onboarding.getBilling()).thenReturn(billing1); + doNothing().when(onboarding).setBilling(any()); + doNothing().when(onboarding).setClosedAt(any()); + doNothing().when(onboarding).setContract(any()); + doNothing().when(onboarding).setCreatedAt(any()); + doNothing().when(onboarding).setPricingPlan(any()); + doNothing().when(onboarding).setProductId(any()); + doNothing().when(onboarding).setStatus(any()); + doNothing().when(onboarding).setTokenId(any()); + doNothing().when(onboarding).setUpdatedAt(any()); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + InstitutionMapperCustom.getBillingFromOnboarding(onboarding, new Institution()); + verify(onboarding, atLeast(1)).getBilling(); + verify(onboarding).setBilling( any()); + verify(onboarding).setClosedAt(any()); + verify(onboarding).setContract(any()); + verify(onboarding).setCreatedAt(any()); + verify(onboarding).setPricingPlan(any()); + verify(onboarding).setProductId(any()); + verify(onboarding).setStatus(any()); + verify(onboarding).setTokenId(any()); + verify(onboarding).setUpdatedAt(any()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toBilling(BillingRequest)} + */ + @Test + void testToBilling() { + BillingRequest billingRequest = new BillingRequest(); + billingRequest.setPublicServices(true); + billingRequest.setRecipientCode("Recipient Code"); + billingRequest.setVatNumber("42"); + Billing actualToBillingResult = InstitutionMapperCustom.toBilling(billingRequest); + assertEquals("Recipient Code", actualToBillingResult.getRecipientCode()); + assertFalse(actualToBillingResult.isPublicServices()); + assertEquals("42", actualToBillingResult.getVatNumber()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toDataProtectionOfficer(DataProtectionOfficerRequest)} + */ + @Test + void testToDataProtectionOfficer() { + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + DataProtectionOfficer actualToDataProtectionOfficerResult = InstitutionMapperCustom + .toDataProtectionOfficer(dataProtectionOfficerRequest); + assertEquals("42 Main St", actualToDataProtectionOfficerResult.getAddress()); + assertEquals("Pec", actualToDataProtectionOfficerResult.getPec()); + assertEquals("jane.doe@example.org", actualToDataProtectionOfficerResult.getEmail()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toDataProtectionOfficerResponse(DataProtectionOfficer)} + */ + @Test + void testToDataProtectionOfficerResponse() { + DataProtectionOfficerResponse actualToDataProtectionOfficerResponseResult = InstitutionMapperCustom + .toDataProtectionOfficerResponse(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); + assertEquals("42 Main St", actualToDataProtectionOfficerResponseResult.getAddress()); + assertEquals("Pec", actualToDataProtectionOfficerResponseResult.getPec()); + assertEquals("jane.doe@example.org", actualToDataProtectionOfficerResponseResult.getEmail()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toAttributes(List)} + */ + @Test + void testToAttributes2() { + AttributesRequest attributesRequest = new AttributesRequest(); + attributesRequest.setCode("Code"); + attributesRequest.setDescription("The characteristics of someone or something"); + attributesRequest.setOrigin("Origin"); + + ArrayList attributesRequestList = new ArrayList<>(); + attributesRequestList.add(attributesRequest); + List actualToAttributesResult = InstitutionMapperCustom.toAttributes(attributesRequestList); + assertEquals(1, actualToAttributesResult.size()); + Attributes getResult = actualToAttributesResult.get(0); + assertEquals("Code", getResult.getCode()); + assertEquals("Origin", getResult.getOrigin()); + assertEquals("The characteristics of someone or something", getResult.getDescription()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toAttributeResponse(List)} + */ + @Test + void testToAttributeResponse() { + assertTrue(InstitutionMapperCustom.toAttributeResponse(new ArrayList<>()).isEmpty()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toAttributeResponse(List)} + */ + @Test + void testToAttributeResponse2() { + Attributes attributes = new Attributes(); + attributes.setCode("Code"); + attributes.setDescription("The characteristics of someone or something"); + attributes.setOrigin("Origin"); + + ArrayList attributesList = new ArrayList<>(); + attributesList.add(attributes); + List actualToAttributeResponseResult = InstitutionMapperCustom.toAttributeResponse(attributesList); + assertEquals(1, actualToAttributeResponseResult.size()); + AttributesResponse getResult = actualToAttributeResponseResult.get(0); + assertEquals("Code", getResult.getCode()); + assertEquals("Origin", getResult.getOrigin()); + assertEquals("The characteristics of someone or something", getResult.getDescription()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toGeoTaxonomies(List)} + */ + @Test + void testToGeoTaxonomies() { + assertTrue(InstitutionMapperCustom.toGeoTaxonomies(new ArrayList<>()).isEmpty()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toGeoTaxonomies(List)} + */ + @Test + void testToGeoTaxonomies2() { + ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); + institutionGeographicTaxonomiesList + .add(new InstitutionGeographicTaxonomies("Code", "The characteristics of someone or something")); + List actualToGeoTaxonomiesResult = InstitutionMapperCustom + .toGeoTaxonomies(institutionGeographicTaxonomiesList); + assertEquals(1, actualToGeoTaxonomiesResult.size()); + GeoTaxonomies getResult = actualToGeoTaxonomiesResult.get(0); + assertEquals("Code", getResult.getCode()); + assertEquals("The characteristics of someone or something", getResult.getDesc()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} + */ + @Test + void testToInstitutionManagementResponse() { + InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom + .toInstitutionManagementResponse(new Institution()); + assertNull(actualToInstitutionManagementResponseResult.getAddress()); + assertFalse(actualToInstitutionManagementResponseResult.isImported()); + assertNull(actualToInstitutionManagementResponseResult.getZipCode()); + assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); + assertNull(actualToInstitutionManagementResponseResult.getTaxCode()); + assertNull(actualToInstitutionManagementResponseResult.getSupportPhone()); + assertNull(actualToInstitutionManagementResponseResult.getSupportEmail()); + assertNull(actualToInstitutionManagementResponseResult.getShareCapital()); + assertNull(actualToInstitutionManagementResponseResult.getRea()); + assertNull(actualToInstitutionManagementResponseResult.getOriginId()); + assertNull(actualToInstitutionManagementResponseResult.getOrigin()); + assertNull(actualToInstitutionManagementResponseResult.getInstitutionType()); + assertNull(actualToInstitutionManagementResponseResult.getId()); + assertNull(actualToInstitutionManagementResponseResult.getExternalId()); + assertNull(actualToInstitutionManagementResponseResult.getDigitalAddress()); + assertNull(actualToInstitutionManagementResponseResult.getDescription()); + assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); + assertNull(actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} + */ + @Test + void testToInstitutionManagementResponse4() { + + Institution institution = createDmmyInstitution(); + institution.setImported(true); + institution.setOnboarding(List.of()); + + InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom + .toInstitutionManagementResponse(institution); + + assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getAddress()); + assertTrue(actualToInstitutionManagementResponseResult.isImported()); + assertEquals(institution.getZipCode(), actualToInstitutionManagementResponseResult.getZipCode()); + assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); + assertEquals(institution.getTaxCode(), actualToInstitutionManagementResponseResult.getTaxCode()); + assertEquals(institution.getSupportPhone(), actualToInstitutionManagementResponseResult.getSupportPhone()); + assertEquals(institution.getSupportEmail(), actualToInstitutionManagementResponseResult.getSupportEmail()); + assertEquals(institution.getShareCapital(), actualToInstitutionManagementResponseResult.getShareCapital()); + assertEquals("Rea", actualToInstitutionManagementResponseResult.getRea()); + assertTrue(actualToInstitutionManagementResponseResult.getProducts().isEmpty()); + assertEquals("42", actualToInstitutionManagementResponseResult.getOriginId()); + assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); + assertEquals("42", actualToInstitutionManagementResponseResult.getExternalId()); + assertEquals(Origin.MOCK.name(), actualToInstitutionManagementResponseResult.getOrigin()); + assertEquals("42", actualToInstitutionManagementResponseResult.getId()); + assertEquals(InstitutionType.PA, actualToInstitutionManagementResponseResult.getInstitutionType()); + assertEquals("Business Register Place", actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); + assertEquals("The characteristics of someone or something", + actualToInstitutionManagementResponseResult.getDescription()); + assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getDigitalAddress()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} + */ + @Test + void testToInstitutionManagementResponse5() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = createDmmyInstitution(); + institution.setOnboarding(onboardingList); + institution.setImported(true); + + InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom + .toInstitutionManagementResponse(institution); + assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getAddress()); + assertTrue(actualToInstitutionManagementResponseResult.isImported()); + assertEquals(institution.getZipCode(), actualToInstitutionManagementResponseResult.getZipCode()); + assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); + assertEquals(institution.getTaxCode(), actualToInstitutionManagementResponseResult.getTaxCode()); + assertEquals(institution.getSupportPhone(), actualToInstitutionManagementResponseResult.getSupportPhone()); + assertEquals(institution.getSupportEmail(), actualToInstitutionManagementResponseResult.getSupportEmail()); + assertEquals("Share Capital", actualToInstitutionManagementResponseResult.getShareCapital()); + assertEquals("Rea", actualToInstitutionManagementResponseResult.getRea()); + Map products = actualToInstitutionManagementResponseResult.getProducts(); + assertEquals(1, products.size()); + assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); + assertEquals("42", actualToInstitutionManagementResponseResult.getExternalId()); + assertEquals("42", actualToInstitutionManagementResponseResult.getId()); + assertEquals(InstitutionType.PA, actualToInstitutionManagementResponseResult.getInstitutionType()); + assertEquals("Business Register Place", actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); + assertEquals("The characteristics of someone or something", + actualToInstitutionManagementResponseResult.getDescription()); + assertEquals(Origin.MOCK.name(), actualToInstitutionManagementResponseResult.getOrigin()); + assertEquals("42", actualToInstitutionManagementResponseResult.getOriginId()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} + */ + @Test + void testToInstitutionManagementResponse6() { + ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); + institutionGeographicTaxonomiesList + .add(new InstitutionGeographicTaxonomies("Code", "The characteristics of someone or something")); + Institution institution = createDmmyInstitution(); + institution.setGeographicTaxonomies(institutionGeographicTaxonomiesList); + institution.setImported(true); + institution.setOnboarding(List.of()); + + InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom + .toInstitutionManagementResponse(institution); + assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getAddress()); + assertTrue(actualToInstitutionManagementResponseResult.isImported()); + assertEquals(institution.getZipCode(), actualToInstitutionManagementResponseResult.getZipCode()); + assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); + assertEquals(institution.getTaxCode(), actualToInstitutionManagementResponseResult.getTaxCode()); + assertEquals(institution.getSupportPhone(), actualToInstitutionManagementResponseResult.getSupportPhone()); + assertEquals(institution.getSupportEmail(), actualToInstitutionManagementResponseResult.getSupportEmail()); + assertEquals("Share Capital", actualToInstitutionManagementResponseResult.getShareCapital()); + assertEquals("Rea", actualToInstitutionManagementResponseResult.getRea()); + assertTrue(actualToInstitutionManagementResponseResult.getProducts().isEmpty()); + assertEquals("42", actualToInstitutionManagementResponseResult.getOriginId()); + assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); + assertEquals("42", actualToInstitutionManagementResponseResult.getExternalId()); + List geographicTaxonomies = actualToInstitutionManagementResponseResult.getGeographicTaxonomies(); + assertEquals(1, geographicTaxonomies.size()); + assertEquals("42", actualToInstitutionManagementResponseResult.getId()); + assertEquals(InstitutionType.PA, actualToInstitutionManagementResponseResult.getInstitutionType()); + assertEquals("Business Register Place", actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); + assertEquals("The characteristics of someone or something", + actualToInstitutionManagementResponseResult.getDescription()); + assertEquals(Origin.MOCK.name(), actualToInstitutionManagementResponseResult.getOrigin()); + assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getDigitalAddress()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} + */ + @Test + void testToInstitutionManagementResponse7() { + Attributes attributes = new Attributes(); + attributes.setCode("Code"); + attributes.setDescription("The characteristics of someone or something"); + attributes.setOrigin("Origin"); + + ArrayList attributesList = new ArrayList<>(); + attributesList.add(attributes); + + Institution institution = createDmmyInstitution(); + institution.setAttributes(attributesList); + institution.setImported(true); + institution.setOnboarding(List.of()); + + InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom + .toInstitutionManagementResponse(institution); + assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getAddress()); + assertTrue(actualToInstitutionManagementResponseResult.isImported()); + assertEquals(institution.getZipCode(), actualToInstitutionManagementResponseResult.getZipCode()); + assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); + assertEquals(institution.getTaxCode(), actualToInstitutionManagementResponseResult.getTaxCode()); + assertEquals(institution.getSupportPhone(), actualToInstitutionManagementResponseResult.getSupportPhone()); + assertEquals(institution.getSupportEmail(), actualToInstitutionManagementResponseResult.getSupportEmail()); + assertEquals("Share Capital", actualToInstitutionManagementResponseResult.getShareCapital()); + assertEquals("Rea", actualToInstitutionManagementResponseResult.getRea()); + assertTrue(actualToInstitutionManagementResponseResult.getProducts().isEmpty()); + assertEquals("42", actualToInstitutionManagementResponseResult.getOriginId()); + List attributes1 = actualToInstitutionManagementResponseResult.getAttributes(); + assertEquals(1, attributes1.size()); + assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); + assertEquals("42", actualToInstitutionManagementResponseResult.getExternalId()); + assertEquals("42", actualToInstitutionManagementResponseResult.getId()); + assertEquals(InstitutionType.PA, actualToInstitutionManagementResponseResult.getInstitutionType()); + assertEquals("Business Register Place", actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); + assertEquals("The characteristics of someone or something", + actualToInstitutionManagementResponseResult.getDescription()); + assertEquals(Origin.MOCK.name(), actualToInstitutionManagementResponseResult.getOrigin()); + assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getDigitalAddress()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} + */ + @Test + void testToInstitutionListResponse() { + assertTrue(InstitutionMapperCustom.toInstitutionListResponse(new ArrayList<>()).isEmpty()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} + */ + @Test + void testToInstitutionListResponse2() { + ArrayList institutionList = new ArrayList<>(); + institutionList.add(new Institution()); + assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} + */ + @Test + void testToInstitutionListResponse4() { + ArrayList institutionList = new ArrayList<>(); + institutionList.add(InstitutionMapperCustom.toInstitution(new InstitutionRequest(), "42")); + assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} + */ + @Test + void testToInstitutionListResponse5() { + ArrayList institutionList = new ArrayList<>(); + institutionList.add(createDmmyInstitution()); + assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} + */ + @Test + void testToInstitutionListResponse6() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = createDmmyInstitution(); + institution.setOnboarding(onboardingList); + + ArrayList institutionList = new ArrayList<>(); + institutionList.add(institution); + assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} + */ + @Test + void testToInstitutionListResponse7() { + ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); + institutionGeographicTaxonomiesList + .add(new InstitutionGeographicTaxonomies("Code", "The characteristics of someone or something")); + + Institution institution = createDmmyInstitution(); + institution.setGeographicTaxonomies(institutionGeographicTaxonomiesList); + + ArrayList institutionList = new ArrayList<>(); + institutionList.add(institution); + assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} + */ + @Test + void testToInstitutionListResponse8() { + Attributes attributes = new Attributes(); + attributes.setCode("Code"); + attributes.setDescription("The characteristics of someone or something"); + attributes.setOrigin("Origin"); + + ArrayList attributesList = new ArrayList<>(); + attributesList.add(attributes); + + Institution institution = createDmmyInstitution(); + institution.setAttributes(attributesList); + + ArrayList institutionList = new ArrayList<>(); + institutionList.add(institution); + assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionAttributeResponse(List, String)} + */ + @Test + void testToInstitutionAttributeResponse2() { + Attributes attributes = new Attributes(); + attributes.setCode("Attributes for institution %s not found"); + attributes.setDescription("The characteristics of someone or something"); + attributes.setOrigin("Attributes for institution %s not found"); + + ArrayList attributesList = new ArrayList<>(); + attributesList.add(attributes); + List actualToInstitutionAttributeResponseResult = InstitutionMapperCustom + .toInstitutionAttributeResponse(attributesList, "42"); + assertEquals(1, actualToInstitutionAttributeResponseResult.size()); + AttributesResponse getResult = actualToInstitutionAttributeResponseResult.get(0); + assertEquals("Attributes for institution %s not found", getResult.getCode()); + assertEquals("Attributes for institution %s not found", getResult.getOrigin()); + assertEquals("The characteristics of someone or something", getResult.getDescription()); + } +} + diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapperTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapperTest.java new file mode 100644 index 0000000..e5b1e6b --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapperTest.java @@ -0,0 +1,115 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import it.pagopa.selfcare.mscore.constant.TokenType; +import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionBinding; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.onboarding.Contract; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardingInfo; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardingLegalsRequest; +import it.pagopa.selfcare.mscore.web.model.onboarding.ContractRequest; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardingInfoResponse; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardingInstitutionLegalsRequest; +import it.pagopa.selfcare.mscore.web.model.user.Person; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.Test; + +class OnboardingMapperTest { + /** + * Method under test: {@link OnboardingMapper#toOnboardingLegalsRequest(OnboardingInstitutionLegalsRequest)} + */ + @Test + void testToOnboardingLegalsRequest() { + ContractRequest contractRequest = new ContractRequest(); + contractRequest.setPath("Path"); + contractRequest.setVersion("1.0.2"); + + OnboardingInstitutionLegalsRequest onboardingInstitutionLegalsRequest = new OnboardingInstitutionLegalsRequest(); + onboardingInstitutionLegalsRequest.setContract(contractRequest); + onboardingInstitutionLegalsRequest.setInstitutionExternalId("42"); + onboardingInstitutionLegalsRequest.setInstitutionId("42"); + onboardingInstitutionLegalsRequest.setProductId("42"); + onboardingInstitutionLegalsRequest.setProductName("Product Name"); + onboardingInstitutionLegalsRequest.setSignContract(true); + ArrayList personList = new ArrayList<>(); + onboardingInstitutionLegalsRequest.setUsers(personList); + OnboardingLegalsRequest actualToOnboardingLegalsRequestResult = OnboardingMapper + .toOnboardingLegalsRequest(onboardingInstitutionLegalsRequest); + assertTrue(actualToOnboardingLegalsRequestResult.isSignContract()); + assertEquals("42", actualToOnboardingLegalsRequestResult.getInstitutionExternalId()); + assertEquals("42", actualToOnboardingLegalsRequestResult.getProductId()); + assertEquals(TokenType.LEGALS, actualToOnboardingLegalsRequestResult.getTokenType()); + assertEquals("Product Name", actualToOnboardingLegalsRequestResult.getProductName()); + assertEquals("42", actualToOnboardingLegalsRequestResult.getInstitutionId()); + Contract contract = actualToOnboardingLegalsRequestResult.getContract(); + assertEquals("1.0.2", contract.getVersion()); + assertEquals("Path", contract.getPath()); + } + + /** + * Method under test: {@link OnboardingMapper#toOnboardingLegalsRequest(OnboardingInstitutionLegalsRequest)} + */ + @Test + void testToOnboardingLegalsRequest2() { + ArrayList personList = new ArrayList<>(); + personList.add(new Person()); + + OnboardingInstitutionLegalsRequest onboardingInstitutionLegalsRequest = new OnboardingInstitutionLegalsRequest(); + onboardingInstitutionLegalsRequest.setInstitutionExternalId("42"); + onboardingInstitutionLegalsRequest.setInstitutionId("42"); + onboardingInstitutionLegalsRequest.setProductId("42"); + onboardingInstitutionLegalsRequest.setProductName("Product Name"); + onboardingInstitutionLegalsRequest.setSignContract(true); + onboardingInstitutionLegalsRequest.setContract(null); + onboardingInstitutionLegalsRequest.setUsers(personList); + OnboardingLegalsRequest actualToOnboardingLegalsRequestResult = OnboardingMapper + .toOnboardingLegalsRequest(onboardingInstitutionLegalsRequest); + assertTrue(actualToOnboardingLegalsRequestResult.isSignContract()); + assertEquals("42", actualToOnboardingLegalsRequestResult.getInstitutionExternalId()); + assertEquals("42", actualToOnboardingLegalsRequestResult.getProductId()); + assertEquals(1, actualToOnboardingLegalsRequestResult.getUsers().size()); + assertEquals(TokenType.LEGALS, actualToOnboardingLegalsRequestResult.getTokenType()); + assertEquals("Product Name", actualToOnboardingLegalsRequestResult.getProductName()); + assertEquals("42", actualToOnboardingLegalsRequestResult.getInstitutionId()); + } + + @Test + void toOnboardingInfoResponse_onboardingEmpty() { + String userId = "userId"; + List onboardingInfos = new ArrayList<>(); + onboardingInfos.add(new OnboardingInfo()); + + OnboardingInfoResponse actual = OnboardingMapper.toOnboardingInfoResponse(userId, onboardingInfos); + assertEquals(actual.getUserId(), userId); + } + + @Test + void toOnboardingInfoResponse() { + String userId = "userId"; + List onboardingInfos = new ArrayList<>(); + OnboardingInfo onboardingInfo = new OnboardingInfo(); + Institution institution = new Institution(); + + Onboarding onboarding = new Onboarding(); + onboarding.setProductId("prod-io"); + institution.setOnboarding(List.of(onboarding)); + + onboardingInfo.setInstitution(institution); + UserInstitutionBinding institutionBinding = new UserInstitutionBinding(); + institutionBinding.setProducts(new OnboardedProduct()); + onboardingInfo.setBinding(institutionBinding); + onboardingInfos.add(onboardingInfo); + + OnboardingInfoResponse actual = OnboardingMapper.toOnboardingInfoResponse(userId, onboardingInfos); + assertEquals(actual.getUserId(), userId); + assertEquals(actual.getInstitutions().size(), 0); + } +} + diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapperTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapperTest.java new file mode 100644 index 0000000..e9615b2 --- /dev/null +++ b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapperTest.java @@ -0,0 +1,351 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.model.user.RelationshipInfo; +import it.pagopa.selfcare.mscore.web.TestUtils; +import it.pagopa.selfcare.mscore.web.model.institution.BillingResponse; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionUpdateResponse; +import it.pagopa.selfcare.mscore.web.model.institution.RelationshipResult; +import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class RelationshipMapperTest { + + @Test + void testToRelationshipResult12() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + Institution institution = new Institution(); + institution.setOnboarding(new ArrayList<>()); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + Institution institution1 = new Institution(); + + RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); + relationshipInfo.setInstitution(institution); + RelationshipResult actualToRelationshipResultResult = RelationshipMapper.toRelationshipResult(relationshipInfo); + assertNull(actualToRelationshipResultResult.getTo()); + assertNull(actualToRelationshipResultResult.getState()); + assertNull(actualToRelationshipResultResult.getRole()); + assertNull(actualToRelationshipResultResult.getId()); + assertEquals("42", actualToRelationshipResultResult.getFrom()); + InstitutionUpdateResponse institutionUpdate = actualToRelationshipResultResult.getInstitutionUpdate(); + assertEquals(1, institutionUpdate.getGeographicTaxonomyCodes().size()); + } + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResult(RelationshipInfo)} + */ + @Test + void testToRelationshipResult13() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + Institution institution = TestUtils.createSimpleInstitutionPA(); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + Institution institution1 = new Institution(); + + RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); + relationshipInfo.setInstitution(institution); + RelationshipResult actualToRelationshipResultResult = RelationshipMapper.toRelationshipResult(relationshipInfo); + assertEquals("42", actualToRelationshipResultResult.getTo()); + assertNull(actualToRelationshipResultResult.getState()); + assertNull(actualToRelationshipResultResult.getRole()); + assertNull(actualToRelationshipResultResult.getId()); + assertEquals("42", actualToRelationshipResultResult.getFrom()); + InstitutionUpdateResponse institutionUpdate = actualToRelationshipResultResult.getInstitutionUpdate(); + assertEquals("21654", institutionUpdate.getZipCode()); + assertEquals("Tax Code", institutionUpdate.getTaxCode()); + assertEquals(InstitutionType.PA, institutionUpdate.getInstitutionType()); + ProductInfo product = actualToRelationshipResultResult.getProduct(); + assertNull(product.getCreatedAt()); + assertEquals("The characteristics of someone or something", institutionUpdate.getDescription()); + assertEquals("42 Main St", institutionUpdate.getDigitalAddress()); + assertEquals("42 Main St", institutionUpdate.getAddress()); + assertEquals(1, institutionUpdate.getGeographicTaxonomyCodes().size()); + assertNull(product.getId()); + } + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResult(RelationshipInfo)} + */ + @Test + void testToRelationshipResult14() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + Institution institution1 = new Institution(); + + RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); + relationshipInfo.setInstitution(institution); + RelationshipResult actualToRelationshipResultResult = RelationshipMapper.toRelationshipResult(relationshipInfo); + assertNull(actualToRelationshipResultResult.getTo()); + assertNull(actualToRelationshipResultResult.getState()); + assertNull(actualToRelationshipResultResult.getRole()); + assertNull(actualToRelationshipResultResult.getId()); + assertEquals("42", actualToRelationshipResultResult.getFrom()); + InstitutionUpdateResponse institutionUpdate = actualToRelationshipResultResult.getInstitutionUpdate(); + assertNull(institutionUpdate.getInstitutionType()); + assertEquals(1, institutionUpdate.getGeographicTaxonomyCodes().size()); + } + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResult(RelationshipInfo)} + */ + @Test + void testToRelationshipResult15() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setProductId("42"); + + RelationshipInfo relationshipInfo = new RelationshipInfo(new Institution(), "42", onboardedProduct); + relationshipInfo.setInstitution(institution); + RelationshipResult actualToRelationshipResultResult = RelationshipMapper.toRelationshipResult(relationshipInfo); + assertNull(actualToRelationshipResultResult.getId()); + assertNull(actualToRelationshipResultResult.getRole()); + assertNull(actualToRelationshipResultResult.getTo()); + assertNull(actualToRelationshipResultResult.getState()); + assertEquals("42", actualToRelationshipResultResult.getFrom()); + assertEquals("Pricing Plan", actualToRelationshipResultResult.getPricingPlan()); + ProductInfo product = actualToRelationshipResultResult.getProduct(); + assertEquals("42", product.getId()); + assertNull(product.getCreatedAt()); + InstitutionUpdateResponse institutionUpdate = actualToRelationshipResultResult.getInstitutionUpdate(); + assertEquals(1, institutionUpdate.getGeographicTaxonomyCodes().size()); + assertNull(institutionUpdate.getDigitalAddress()); + assertNull(institutionUpdate.getDescription()); + assertNull(institutionUpdate.getAddress()); + BillingResponse billing1 = actualToRelationshipResultResult.getBilling(); + assertEquals("42", billing1.getVatNumber()); + assertEquals("Recipient Code", billing1.getRecipientCode()); + assertTrue(billing1.isPublicServices()); + } + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} + */ + @Test + void testToRelationshipResultList() { + assertTrue(RelationshipMapper.toRelationshipResultList(new ArrayList<>()).isEmpty()); + } + + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} + */ + @Test + void testToRelationshipResultList6() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + Institution institution = new Institution(); + institution.setOnboarding(new ArrayList<>()); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + Institution institution1 = new Institution(); + + RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); + relationshipInfo.setInstitution(institution); + + ArrayList relationshipInfoList = new ArrayList<>(); + relationshipInfoList.add(relationshipInfo); + assertEquals(1, RelationshipMapper.toRelationshipResultList(relationshipInfoList).size()); + assertFalse(relationshipInfoList.get(0).getInstitution().isImported()); + } + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} + */ + @Test + void testToRelationshipResultList7() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + Institution institution = TestUtils.createSimpleInstitutionPA(); + institution.setGeographicTaxonomies(List.of(geographicTaxonomies)); + institution.setImported(true); + + RelationshipInfo relationshipInfo = new RelationshipInfo(institution, "42", new OnboardedProduct()); + relationshipInfo.setInstitution(institution); + + ArrayList relationshipInfoList = new ArrayList<>(); + relationshipInfoList.add(relationshipInfo); + assertEquals(1, RelationshipMapper.toRelationshipResultList(relationshipInfoList).size()); + assertTrue(relationshipInfoList.get(0).getInstitution().isImported()); + } + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} + */ + @Test + void testToRelationshipResultList8() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + Institution institution1 = new Institution(); + + RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); + relationshipInfo.setInstitution(institution); + + ArrayList relationshipInfoList = new ArrayList<>(); + relationshipInfoList.add(relationshipInfo); + assertEquals(1, RelationshipMapper.toRelationshipResultList(relationshipInfoList).size()); + assertFalse(relationshipInfoList.get(0).getInstitution().isImported()); + } + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} + */ + @Test + void testToRelationshipResultList9() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setProductId("42"); + + RelationshipInfo relationshipInfo = new RelationshipInfo(new Institution(), "42", onboardedProduct); + relationshipInfo.setInstitution(institution); + + ArrayList relationshipInfoList = new ArrayList<>(); + relationshipInfoList.add(relationshipInfo); + assertEquals(1, RelationshipMapper.toRelationshipResultList(relationshipInfoList).size()); + assertFalse(relationshipInfoList.get(0).getInstitution().isImported()); + } + +} From b721c41f97257d435350f7e03105c8aae807a830 Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Wed, 10 Jul 2024 10:11:08 +0200 Subject: [PATCH 07/29] [SELC-5168] feat : retry commit with correct foldername --- apps/institution-ms-new/.dockerignore | 12 - .../.pre-commit-config.yaml | 10 - apps/institution-ms-new/.terraform-version | 1 - apps/institution-ms-new/CODEOWNERS | 3 - apps/institution-ms-new/Dockerfile | 5 - apps/institution-ms-new/Dockerfile.new | 35 - .../Dockerfile.new.dockerignore | 117 - apps/institution-ms-new/README.md | 47 - apps/institution-ms-new/app/pom.xml | 60 - .../mscore/SelfCareCoreApplication.java | 15 - .../src/main/resources/config/application.yml | 60 - .../config/azure-storage-config.properties | 7 - .../resources/config/core-config.properties | 31 - .../src/main/resources/swagger/api-docs.json | 3804 ----------------- .../mscore/web/config/SwaggerConfigTest.java | 86 - apps/institution-ms-new/connector-api/pom.xml | 48 - .../mscore/api/DelegationConnector.java | 22 - .../selfcare/mscore/api/EmailConnector.java | 11 - .../mscore/api/FileStorageConnector.java | 19 - .../mscore/api/InstitutionConnector.java | 62 - .../api/NotificationServiceConnector.java | 11 - .../api/PartyRegistryProxyConnector.java | 28 - .../mscore/api/PecNotificationConnector.java | 10 - .../selfcare/mscore/api/ProductConnector.java | 10 - .../selfcare/mscore/api/UserApiConnector.java | 14 - .../mscore/api/UserRegistryConnector.java | 18 - .../mscore/config/AzureStorageConfig.java | 25 - .../selfcare/mscore/config/CoreConfig.java | 36 - .../mscore/config/MailTemplateConfig.java | 23 - .../selfcare/mscore/constant/CustomError.java | 68 - .../mscore/constant/DelegationState.java | 6 - .../mscore/constant/DelegationType.java | 7 - .../pagopa/selfcare/mscore/constant/Env.java | 8 - .../mscore/constant/GenericError.java | 86 - .../selfcare/mscore/constant/Order.java | 9 - .../selfcare/mscore/constant/Origin.java | 48 - .../selfcare/mscore/constant/PricingPlan.java | 16 - .../selfcare/mscore/constant/ProductId.java | 32 - .../mscore/constant/RelationshipState.java | 10 - .../selfcare/mscore/constant/SearchMode.java | 7 - .../selfcare/mscore/constant/TokenType.java | 6 - .../mscore/exception/BadGatewayException.java | 11 - .../exception/InvalidRequestException.java | 14 - .../mscore/exception/MsCoreException.java | 15 - .../exception/ResourceConflictException.java | 15 - .../exception/ResourceForbiddenException.java | 14 - .../exception/ResourceNotFoundException.java | 15 - .../ServiceUnavailableException.java | 4 - .../model/AreaOrganizzativaOmogenea.java | 22 - .../selfcare/mscore/model/Certification.java | 9 - .../selfcare/mscore/model/CertifiedField.java | 13 - .../mscore/model/InstitutionToNotify.java | 34 - .../selfcare/mscore/model/QueueEvent.java | 6 - .../selfcare/mscore/model/RootParent.java | 14 - .../mscore/model/UnitaOrganizzativa.java | 23 - .../selfcare/mscore/model/UserToNotify.java | 22 - .../mscore/model/aggregation/QueryCount.java | 15 - .../UserInstitutionAggregation.java | 19 - .../aggregation/UserInstitutionBinding.java | 16 - .../aggregation/UserInstitutionFilter.java | 24 - .../mscore/model/delegation/Delegation.java | 39 - .../delegation/DelegationInstitution.java | 18 - .../delegation/DelegationWithPagination.java | 19 - .../delegation/GetDelegationParameters.java | 18 - .../mscore/model/delegation/PageInfo.java | 17 - .../selfcare/mscore/model/error/Problem.java | 11 - .../mscore/model/error/ProblemError.java | 10 - .../mscore/model/institution/ASResource.java | 17 - .../institution/AdditionalInformations.java | 16 - .../mscore/model/institution/Attributes.java | 10 - .../mscore/model/institution/Billing.java | 20 - .../model/institution/CategoryProxyInfo.java | 11 - .../institution/DataProtectionOfficer.java | 18 - .../institution/GeographicTaxonomies.java | 26 - .../institution/GeographicTaxonomyPage.java | 11 - .../mscore/model/institution/Institution.java | 54 - .../model/institution/InstitutionByLegal.java | 9 - .../InstitutionGeographicTaxonomies.java | 13 - .../InstitutionGeographicTaxonomyPage.java | 11 - .../institution/InstitutionProxyInfo.java | 20 - .../model/institution/InstitutionUpdate.java | 36 - ...NationalRegistriesProfessionalAddress.java | 12 - .../mscore/model/institution/Onboarding.java | 23 - .../model/institution/OnboardingPage.java | 11 - .../model/institution/PaAttributes.java | 9 - .../institution/PaymentServiceProvider.java | 20 - .../mscore/model/institution/Premium.java | 16 - .../mscore/model/institution/SaResource.java | 14 - .../model/institution/ValidInstitution.java | 13 - .../mscore/model/institution/WorkContact.java | 13 - .../model/notification/MessageRequest.java | 12 - .../MultipleReceiverMessageRequest.java | 13 - .../mscore/model/onboarding/Contract.java | 9 - .../model/onboarding/ContractImported.java | 10 - .../mscore/model/onboarding/MailTemplate.java | 20 - .../model/onboarding/OnboardedProduct.java | 27 - .../model/onboarding/OnboardedUser.java | 17 - .../model/onboarding/OnboardingInfo.java | 16 - .../onboarding/OnboardingLegalsRequest.java | 19 - .../OnboardingOperatorsRequest.java | 15 - .../model/onboarding/OnboardingRequest.java | 44 - .../model/onboarding/OnboardingRollback.java | 20 - .../onboarding/OnboardingUpdateRollback.java | 18 - .../onboarding/OnboardingUsersRequest.java | 17 - .../model/onboarding/ResourceResponse.java | 10 - .../mscore/model/onboarding/Token.java | 36 - .../model/onboarding/TokenRelationships.java | 31 - .../mscore/model/onboarding/TokenUser.java | 14 - .../onboarding/VerifyOnboardingFilters.java | 45 - .../pecnotification/PecNotification.java | 23 - .../mscore/model/product/Product.java | 20 - .../mscore/model/product/ProductRoleInfo.java | 23 - .../mscore/model/product/ProductStatus.java | 6 - .../mscore/model/user/ProductManagerInfo.java | 19 - .../mscore/model/user/RelationshipInfo.java | 18 - .../mscore/model/user/RelationshipPage.java | 11 - .../model/user/RelationshipPageElement.java | 10 - .../selfcare/mscore/model/user/User.java | 35 - .../mscore/model/user/UserBinding.java | 25 - .../selfcare/mscore/model/user/UserInfo.java | 15 - .../mscore/model/user/UserToOnboard.java | 19 - .../selfcare/mscore/utils/MaskDataUtils.java | 97 - .../InvalidRequestExceptionTest.java | 21 - .../mscore/exception/MsCoreExceptionTest.java | 21 - .../ResourceConflictExceptionTest.java | 21 - .../ResourceNotFoundExceptionTest.java | 21 - .../mscore/utils/MaskDataUtilsTest.java | 29 - .../connector/azure-storage/pom.xml | 21 - .../azure_storage/AzureBlobClient.java | 170 - .../config/AzureStorageConfigTest.java | 47 - apps/institution-ms-new/connector/dao/pom.xml | 29 - .../mscore/connector/dao/CriteriaBuilder.java | 50 - .../dao/DelegationConnectorImpl.java | 180 - .../connector/dao/DelegationRepository.java | 18 - .../dao/InstitutionConnectorImpl.java | 359 -- .../connector/dao/InstitutionRepository.java | 16 - .../connector/dao/MongoCustomConnector.java | 28 - .../dao/MongoCustomConnectorImpl.java | 107 - .../dao/PecNotificationConnectorImpl.java | 67 - .../dao/PecNotificationRepository.java | 8 - .../mscore/connector/dao/TokenRepository.java | 8 - .../mscore/connector/dao/UserRepository.java | 10 - .../connector/dao/config/DaoConfig.java | 22 - .../OffsetDateTimeToStringConverter.java | 16 - .../StringToOffsetDateTimeConverter.java | 15 - .../connector/dao/model/DelegationEntity.java | 36 - .../dao/model/InstitutionEntity.java | 61 - .../dao/model/PecNotificationEntity.java | 29 - .../connector/dao/model/TokenEntity.java | 46 - .../connector/dao/model/UserEntity.java | 27 - .../UserInstitutionAggregationEntity.java | 25 - .../UserInstitutionBindingEntity.java | 17 - .../inner/AdditionalInformationsEntity.java | 18 - .../dao/model/inner/AttributesEntity.java | 12 - .../dao/model/inner/BillingEntity.java | 15 - .../inner/DataProtectionOfficerEntity.java | 12 - .../dao/model/inner/GeoTaxonomyEntity.java | 11 - .../model/inner/InstitutionUpdateEntity.java | 30 - .../model/inner/OnboardedProductEntity.java | 30 - .../dao/model/inner/OnboardingEntity.java | 25 - .../dao/model/inner/PaAttributesEntity.java | 9 - .../inner/PaymentServiceProviderEntity.java | 14 - .../dao/model/inner/TokenUserEntity.java | 10 - .../dao/model/inner/UserBindingEntity.java | 22 - .../model/mapper/DelegationEntityMapper.java | 23 - .../mapper/DelegationInstitutionMapper.java | 34 - .../model/mapper/InstitutionEntityMapper.java | 18 - .../dao/model/mapper/InstitutionMapper.java | 96 - .../model/mapper/InstitutionMapperHelper.java | 87 - .../model/mapper/OnboardedProductMapper.java | 10 - .../mapper/PecNotificationEntityMapper.java | 17 - .../dao/model/mapper/UserEntityMapper.java | 43 - .../UserInstitutionAggregationMapper.java | 11 - .../resources/config/dao-config.properties | 3 - .../connector/dao/CriteriaBuilderTest.java | 39 - .../dao/DelegationConnectorImplTest.java | 350 -- .../dao/DelegationRepositoryTest.java | 41 - .../dao/InstitutionConnectorImplTest.java | 739 ---- .../dao/InstitutionRepositoryTest.java | 71 - .../dao/MongoCustomConnectorImplTest.java | 139 - .../dao/PecNotificationConnectorImplTest.java | 107 - .../connector/dao/config/DaoConfigTest.java | 31 - .../OffsetDateTimeToStringConverterTest.java | 19 - .../StringToOffsetDateTimeConverterTest.java | 18 - .../dao/model/mapper/UserMapperTest.java | 210 - .../mscore/connector/dao/utils/TestUtils.java | 155 - .../connector/email/pom.xml | 32 - .../connector/email/EmailConnectorImpl.java | 100 - .../email/config/EmailBaseConfig.java | 9 - .../main/resources/config/email.properties | 7 - .../email/EmailConnectorImplTest.java | 101 - apps/institution-ms-new/connector/pom.xml | 25 - .../rest/docs/openapi/registry_proxy.json | 2199 ---------- .../rest/docs/openapi/selfcare-user-docs.json | 1550 ------- .../rest/docs/openapi/user_registry.json | 596 --- .../institution-ms-new/connector/rest/pom.xml | 152 - .../rest/PartyRegistryProxyConnectorImpl.java | 213 - .../connector/rest/ProductConnectorImpl.java | 38 - .../connector/rest/UserApiConnectorImpl.java | 41 - .../rest/UserRegistryConnectorImpl.java | 124 - .../client/PartyRegistryProxyRestClient.java | 47 - .../rest/client/UserApiRestClient.java | 8 - .../client/UserInstitutionApiRestClient.java | 8 - .../rest/client/UserRegistryRestClient.java | 11 - .../rest/config/FeignClientConfig.java | 11 - .../PartyRegistryProxyRestClientConfig.java | 16 - .../rest/config/UserApiRestClientConfig.java | 15 - .../UserInstitutionApiRestClientConfig.java | 15 - .../config/UserRegistryRestClientConfig.java | 15 - .../rest/decoder/FeignErrorDecoder.java | 22 - .../connector/rest/mapper/AooMapper.java | 11 - .../connector/rest/mapper/AsMapper.java | 12 - .../connector/rest/mapper/SaMapper.java | 11 - .../connector/rest/mapper/UoMapper.java | 13 - .../rest/mapper/UserMapperClient.java | 26 - .../GeographicTaxonomiesResponse.java | 24 - .../rest/model/registryproxy/AooResponse.java | 38 - .../rest/model/registryproxy/AsResponse.java | 17 - .../model/registryproxy/Institutions.java | 9 - .../InstitutionsByLegalRequest.java | 9 - .../InstitutionsByLegalResponse.java | 14 - .../rest/model/registryproxy/LegalFilter.java | 8 - .../model/registryproxy/PdndResponse.java | 14 - .../registryproxy/ProxyCategoryResponse.java | 11 - .../ProxyInstitutionResponse.java | 20 - .../rest/model/registryproxy/UoResponse.java | 35 - .../resources/config/feign-client.properties | 2 - ...arty-registry-proxy-rest-client.properties | 21 - .../user-registry-rest-client.properties | 3 - .../config/user-rest-client.properties | 14 - .../PartyRegistryProxyConnectorImplTest.java | 591 --- .../rest/ProductConnectorImplTest.java | 56 - .../rest/UserApiConnectorImplTest.java | 85 - .../rest/UserRegistryConnectorImplTest.java | 155 - .../rest/decoder/FeignErrorDecoderTest.java | 90 - apps/institution-ms-new/core/pom.xml | 88 - .../selfcare/mscore/core/ClassPathStream.java | 28 - .../mscore/core/ClassPathStreamFactory.java | 26 - .../selfcare/mscore/core/ContractService.java | 74 - .../mscore/core/DelegationService.java | 21 - .../mscore/core/DelegationServiceImpl.java | 162 - .../selfcare/mscore/core/ExternalService.java | 21 - .../mscore/core/ExternalServiceImpl.java | 49 - .../mscore/core/InstitutionService.java | 70 - .../mscore/core/InstitutionServiceImpl.java | 404 -- .../mscore/core/MailNotificationService.java | 7 - .../core/MailNotificationServiceImpl.java | 76 - .../selfcare/mscore/core/OnboardingDao.java | 27 - .../mscore/core/OnboardingService.java | 18 - .../mscore/core/OnboardingServiceImpl.java | 167 - .../mscore/core/UserNotificationService.java | 10 - .../core/UserNotificationServiceImpl.java | 70 - .../core/config/CloudTemplateLoader.java | 28 - .../mscore/core/config/FreeMarkerConfig.java | 71 - .../mscore/core/config/MdcTaskDecorator.java | 32 - .../mscore/core/config/MsCoreConfig.java | 44 - .../mscore/core/mapper/InstitutionMapper.java | 17 - .../mscore/core/mapper/TokenMapper.java | 20 - .../strategy/CreateInstitutionStrategy.java | 20 - .../CreateInstitutionStrategyAnac.java | 59 - .../CreateInstitutionStrategyCommon.java | 38 - .../CreateInstitutionStrategyInfocamere.java | 95 - .../CreateInstitutionStrategyIpa.java | 200 - .../CreateInstitutionStrategyIvass.java | 58 - .../CreateInstitutionStrategyPda.java | 136 - .../CreateInstitutionStrategyRaw.java | 44 - .../CreateInstitutionStrategyFactory.java | 60 - .../input/CreateInstitutionStrategyInput.java | 22 - .../selfcare/mscore/core/util/Constants.java | 14 - .../core/util/InstitutionPaSubunitType.java | 5 - .../core/util/MailParametersMapper.java | 32 - .../mscore/core/util/OnboardingInfoUtils.java | 65 - .../mscore/core/util/UtilEnumList.java | 32 - .../core/ClassPathStreamFactoryTest.java | 30 - .../mscore/core/ClassPathStreamTest.java | 22 - .../mscore/core/ContractServiceTest.java | 63 - .../core/DelegationServiceImplTest.java | 385 -- .../mscore/core/ExternalServiceImplTest.java | 170 - .../core/InstitutionServiceImplPdaTest.java | 33 - .../core/InstitutionServiceImplTest.java | 1102 ----- .../core/MailNotificationServiceImplTest.java | 105 - .../mscore/core/OnboardingDaoTest.java | 37 - .../core/OnboardingServiceImplTest.java | 325 -- .../selfcare/mscore/core/TestUtils.java | 331 -- .../core/UserNotificationServiceImplTest.java | 61 - .../CreateInstitutionStrategyPdaTest.java | 236 - .../CreateInstitutionStrategyTest.java | 643 --- .../core/util/MailParametersMapperTest.java | 34 - .../core/util/OnboardingInfoUtilsTest.java | 471 -- .../selfcare/mscore/core/util/TestUtils.java | 65 - .../mscore/core/util/model/DummyUser.java | 38 - apps/institution-ms-new/lombok.config | 1 - apps/institution-ms-new/mvnw | 310 -- apps/institution-ms-new/mvnw.cmd | 182 - apps/institution-ms-new/pom.xml | 220 - apps/institution-ms-new/web/pom.xml | 38 - .../mscore/web/config/CoreSecurityConfig.java | 14 - .../mscore/web/config/SwaggerConfig.java | 156 - .../selfcare/mscore/web/config/WebConfig.java | 24 - .../web/controller/DelegationController.java | 136 - .../controller/DelegationV2Controller.java | 90 - .../web/controller/ExternalController.java | 148 - .../web/controller/InstitutionController.java | 540 --- .../web/controller/ManagementController.java | 48 - .../web/controller/OnboardingController.java | 95 - .../web/exception/CustomExceptionHandler.java | 115 - .../selfcare/mscore/web/filter/LogFilter.java | 70 - .../model/delegation/DelegationRequest.java | 25 - .../DelegationRequestFromTaxcode.java | 27 - .../model/delegation/DelegationResponse.java | 38 - .../DelegationWithPaginationResponse.java | 20 - .../AdditionalInformationsRequest.java | 16 - .../model/institution/AttributesRequest.java | 10 - .../model/institution/AttributesResponse.java | 10 - .../web/model/institution/BillingRequest.java | 11 - .../model/institution/BillingResponse.java | 11 - .../web/model/institution/BrokerResponse.java | 13 - .../model/institution/BulkInstitution.java | 48 - .../model/institution/BulkInstitutions.java | 11 - .../model/institution/BulkPartiesSeed.java | 15 - .../web/model/institution/BulkProduct.java | 19 - .../CreatePgInstitutionRequest.java | 19 - .../model/institution/CreatedAtRequest.java | 19 - .../DataProtectionOfficerRequest.java | 10 - .../DataProtectionOfficerResponse.java | 10 - .../web/model/institution/GeoTaxonomies.java | 9 - .../InstitutionBillingResponse.java | 25 - .../institution/InstitutionFromIpaPost.java | 19 - .../institution/InstitutionListResponse.java | 16 - .../InstitutionManagementResponse.java | 40 - .../InstitutionManagerResponse.java | 22 - .../InstitutionOnboardedRequest.java | 12 - .../InstitutionOnboardingListResponse.java | 16 - .../InstitutionOnboardingRequest.java | 21 - .../InstitutionOnboardingResponse.java | 39 - .../model/institution/InstitutionProduct.java | 10 - .../web/model/institution/InstitutionPut.java | 16 - .../model/institution/InstitutionRequest.java | 42 - .../institution/InstitutionResponse.java | 52 - .../institution/InstitutionToOnboard.java | 14 - .../institution/InstitutionUpdateRequest.java | 38 - .../InstitutionUpdateResponse.java | 34 - .../institution/InstitutionsResponse.java | 11 - .../model/institution/OnboardingResponse.java | 21 - .../institution/OnboardingsResponse.java | 12 - .../PaymentServiceProviderRequest.java | 12 - .../PaymentServiceProviderResponse.java | 12 - .../institution/PdaInstitutionRequest.java | 18 - .../model/institution/ProductsManagement.java | 14 - .../institution/RelationshipResponse.java | 22 - .../model/institution/RelationshipResult.java | 28 - .../institution/RelationshipsManagement.java | 14 - .../model/institution/RootParentResponse.java | 12 - .../model/institution/UserInfoResponse.java | 18 - .../mscore/web/model/mapper/BrokerMapper.java | 14 - .../web/model/mapper/DelegationMapper.java | 33 - .../model/mapper/InstitutionMapperCustom.java | 562 --- .../mapper/InstitutionResourceMapper.java | 40 - .../model/mapper/InstitutionUpdateMapper.java | 29 - .../web/model/mapper/OnboardingMapper.java | 145 - .../mapper/OnboardingResourceMapper.java | 49 - .../web/model/mapper/RelationshipMapper.java | 60 - .../mscore/web/model/mapper/UserMapper.java | 12 - .../web/model/onboarding/BusinessData.java | 14 - .../web/model/onboarding/ContractRequest.java | 13 - .../web/model/onboarding/LegalsResponse.java | 13 - .../OnboardedInstitutionResponse.java | 46 - .../onboarding/OnboardedProductResponse.java | 21 - .../model/onboarding/OnboardedProducts.java | 11 - .../onboarding/OnboardingImportContract.java | 16 - .../onboarding/OnboardingInfoResponse.java | 13 - .../OnboardingInstitutionLegalsRequest.java | 33 - ...OnboardingInstitutionOperatorsRequest.java | 24 - .../OnboardingInstitutionRequest.java | 40 - .../OnboardingInstitutionUsersRequest.java | 24 - .../web/model/onboarding/ProductInfo.java | 16 - .../web/model/onboarding/SupportContact.java | 13 - .../model/onboarding/TokenListResponse.java | 20 - .../web/model/onboarding/TokenResponse.java | 40 - .../token/InstitutionToNotifyResponse.java | 33 - .../web/model/token/ScContractResponse.java | 30 - .../web/model/user/InstitutionProducts.java | 14 - .../model/user/OnboardedUsersResponse.java | 12 - .../mscore/web/model/user/Person.java | 34 - .../mscore/web/model/user/PersonId.java | 13 - .../mscore/web/model/user/Product.java | 24 - .../mscore/web/model/user/ProductCount.java | 9 - .../web/model/user/ProductCountResponse.java | 16 - .../web/model/user/UserProductsResponse.java | 18 - .../mscore/web/model/user/UserResponse.java | 27 - .../web/util/CustomExceptionMessage.java | 20 - .../resources/swagger/swagger_en.properties | 115 - .../resources/swagger/swagger_it.properties | 90 - .../pagopa/selfcare/mscore/web/TestUtils.java | 145 - .../mscore/web/config/SwaggerConfigTest.java | 116 - .../mscore/web/config/WebTestConfig.java | 9 - .../controller/DelegationControllerTest.java | 296 -- .../DelegationV2ControllerTest.java | 296 -- .../controller/ExternalControllerTest.java | 419 -- .../InstitutionControllerPdaTest.java | 99 - .../controller/InstitutionControllerTest.java | 1395 ------ .../controller/ManagementControllerTest.java | 56 - .../controller/OnboardingControllerTest.java | 85 - .../exception/CustomExceptionHandlerTest.java | 163 - .../mscore/web/filter/LogFilterTest.java | 63 - .../mapper/InstitutionMapperCustomTest.java | 1248 ------ .../model/mapper/OnboardingMapperTest.java | 115 - .../model/mapper/RelationshipMapperTest.java | 351 -- 408 files changed, 33436 deletions(-) delete mode 100644 apps/institution-ms-new/.dockerignore delete mode 100644 apps/institution-ms-new/.pre-commit-config.yaml delete mode 100644 apps/institution-ms-new/.terraform-version delete mode 100644 apps/institution-ms-new/CODEOWNERS delete mode 100644 apps/institution-ms-new/Dockerfile delete mode 100644 apps/institution-ms-new/Dockerfile.new delete mode 100644 apps/institution-ms-new/Dockerfile.new.dockerignore delete mode 100644 apps/institution-ms-new/README.md delete mode 100644 apps/institution-ms-new/app/pom.xml delete mode 100644 apps/institution-ms-new/app/src/main/java/it/pagopa/selfcare/mscore/SelfCareCoreApplication.java delete mode 100644 apps/institution-ms-new/app/src/main/resources/config/application.yml delete mode 100644 apps/institution-ms-new/app/src/main/resources/config/azure-storage-config.properties delete mode 100644 apps/institution-ms-new/app/src/main/resources/config/core-config.properties delete mode 100644 apps/institution-ms-new/app/src/main/resources/swagger/api-docs.json delete mode 100644 apps/institution-ms-new/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java delete mode 100644 apps/institution-ms-new/connector-api/pom.xml delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/DelegationConnector.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/EmailConnector.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/FileStorageConnector.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/InstitutionConnector.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/NotificationServiceConnector.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PartyRegistryProxyConnector.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PecNotificationConnector.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/ProductConnector.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserApiConnector.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserRegistryConnector.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/AzureStorageConfig.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/CoreConfig.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/MailTemplateConfig.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/CustomError.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationState.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationType.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Env.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/GenericError.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Order.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Origin.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/PricingPlan.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/ProductId.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/RelationshipState.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/SearchMode.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/TokenType.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/BadGatewayException.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/InvalidRequestException.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/MsCoreException.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceConflictException.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceForbiddenException.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundException.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ServiceUnavailableException.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/AreaOrganizzativaOmogenea.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/Certification.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/CertifiedField.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/InstitutionToNotify.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/QueueEvent.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/RootParent.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UnitaOrganizzativa.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UserToNotify.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/QueryCount.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionAggregation.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionBinding.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionFilter.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/Delegation.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationInstitution.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationWithPagination.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/GetDelegationParameters.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/PageInfo.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/Problem.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/ProblemError.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ASResource.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/AdditionalInformations.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Attributes.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Billing.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/CategoryProxyInfo.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/DataProtectionOfficer.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomies.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomyPage.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Institution.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionByLegal.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomies.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomyPage.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionProxyInfo.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionUpdate.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/NationalRegistriesProfessionalAddress.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Onboarding.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/OnboardingPage.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaAttributes.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaymentServiceProvider.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Premium.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/SaResource.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ValidInstitution.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/WorkContact.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MessageRequest.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MultipleReceiverMessageRequest.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Contract.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ContractImported.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/MailTemplate.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedProduct.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedUser.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingInfo.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingLegalsRequest.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingOperatorsRequest.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRequest.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRollback.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUpdateRollback.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUsersRequest.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ResourceResponse.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Token.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenRelationships.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenUser.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/VerifyOnboardingFilters.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/Product.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductRoleInfo.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductStatus.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/ProductManagerInfo.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipInfo.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPage.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPageElement.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/User.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserBinding.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserInfo.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserToOnboard.java delete mode 100644 apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/utils/MaskDataUtils.java delete mode 100644 apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/InvalidRequestExceptionTest.java delete mode 100644 apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/MsCoreExceptionTest.java delete mode 100644 apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceConflictExceptionTest.java delete mode 100644 apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundExceptionTest.java delete mode 100644 apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/utils/MaskDataUtilsTest.java delete mode 100644 apps/institution-ms-new/connector/azure-storage/pom.xml delete mode 100644 apps/institution-ms-new/connector/azure-storage/src/main/java/it/pagopa/selfcare/mscore/connector/azure_storage/AzureBlobClient.java delete mode 100644 apps/institution-ms-new/connector/azure-storage/src/test/java/it/pagopa/selfcare/mscore/connector/azure_storage/config/AzureStorageConfigTest.java delete mode 100644 apps/institution-ms-new/connector/dao/pom.xml delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilder.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImpl.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepository.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImpl.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepository.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnector.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImpl.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImpl.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationRepository.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/TokenRepository.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/UserRepository.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfig.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverter.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverter.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/DelegationEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/InstitutionEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/TokenEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/UserEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionAggregationEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionBindingEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AdditionalInformationsEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AttributesEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/BillingEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/DataProtectionOfficerEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/GeoTaxonomyEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/InstitutionUpdateEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardedProductEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardingEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaAttributesEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaymentServiceProviderEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/TokenUserEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/UserBindingEntity.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationEntityMapper.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationInstitutionMapper.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionEntityMapper.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapper.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapperHelper.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/OnboardedProductMapper.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserEntityMapper.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserInstitutionAggregationMapper.java delete mode 100644 apps/institution-ms-new/connector/dao/src/main/resources/config/dao-config.properties delete mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilderTest.java delete mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImplTest.java delete mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepositoryTest.java delete mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImplTest.java delete mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepositoryTest.java delete mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImplTest.java delete mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImplTest.java delete mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfigTest.java delete mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverterTest.java delete mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverterTest.java delete mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserMapperTest.java delete mode 100644 apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/utils/TestUtils.java delete mode 100644 apps/institution-ms-new/connector/email/pom.xml delete mode 100644 apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImpl.java delete mode 100644 apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/config/EmailBaseConfig.java delete mode 100644 apps/institution-ms-new/connector/email/src/main/resources/config/email.properties delete mode 100644 apps/institution-ms-new/connector/email/src/test/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImplTest.java delete mode 100644 apps/institution-ms-new/connector/pom.xml delete mode 100644 apps/institution-ms-new/connector/rest/docs/openapi/registry_proxy.json delete mode 100644 apps/institution-ms-new/connector/rest/docs/openapi/selfcare-user-docs.json delete mode 100644 apps/institution-ms-new/connector/rest/docs/openapi/user_registry.json delete mode 100644 apps/institution-ms-new/connector/rest/pom.xml delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImpl.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImpl.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImpl.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImpl.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/PartyRegistryProxyRestClient.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserApiRestClient.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserInstitutionApiRestClient.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserRegistryRestClient.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/FeignClientConfig.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/PartyRegistryProxyRestClientConfig.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserApiRestClientConfig.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserInstitutionApiRestClientConfig.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserRegistryRestClientConfig.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoder.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AooMapper.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AsMapper.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/SaMapper.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UoMapper.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UserMapperClient.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/geotaxonomy/GeographicTaxonomiesResponse.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AooResponse.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AsResponse.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/Institutions.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalRequest.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalResponse.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/LegalFilter.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/PdndResponse.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyCategoryResponse.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyInstitutionResponse.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/UoResponse.java delete mode 100644 apps/institution-ms-new/connector/rest/src/main/resources/config/feign-client.properties delete mode 100644 apps/institution-ms-new/connector/rest/src/main/resources/config/party-registry-proxy-rest-client.properties delete mode 100644 apps/institution-ms-new/connector/rest/src/main/resources/config/user-registry-rest-client.properties delete mode 100644 apps/institution-ms-new/connector/rest/src/main/resources/config/user-rest-client.properties delete mode 100644 apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImplTest.java delete mode 100644 apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImplTest.java delete mode 100644 apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImplTest.java delete mode 100644 apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImplTest.java delete mode 100644 apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoderTest.java delete mode 100644 apps/institution-ms-new/core/pom.xml delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStream.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactory.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ContractService.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationService.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalService.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalServiceImpl.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionService.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImpl.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationService.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImpl.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingDao.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingService.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationService.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImpl.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/CloudTemplateLoader.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/FreeMarkerConfig.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MdcTaskDecorator.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MsCoreConfig.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/InstitutionMapper.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/TokenMapper.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategy.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyAnac.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyCommon.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyInfocamere.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIpa.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIvass.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPda.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyRaw.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/factory/CreateInstitutionStrategyFactory.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/input/CreateInstitutionStrategyInput.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/Constants.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/InstitutionPaSubunitType.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapper.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtils.java delete mode 100644 apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/UtilEnumList.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactoryTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ContractServiceTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ExternalServiceImplTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplPdaTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImplTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingDaoTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/TestUtils.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImplTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPdaTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapperTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtilsTest.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/TestUtils.java delete mode 100644 apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/model/DummyUser.java delete mode 100644 apps/institution-ms-new/lombok.config delete mode 100644 apps/institution-ms-new/mvnw delete mode 100644 apps/institution-ms-new/mvnw.cmd delete mode 100644 apps/institution-ms-new/pom.xml delete mode 100644 apps/institution-ms-new/web/pom.xml delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/CoreSecurityConfig.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfig.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/WebConfig.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationController.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2Controller.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ExternalController.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ManagementController.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/OnboardingController.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandler.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/filter/LogFilter.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequestFromTaxcode.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationWithPaginationResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AdditionalInformationsRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BrokerResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitution.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitutions.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkPartiesSeed.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkProduct.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatePgInstitutionRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatedAtRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/GeoTaxonomies.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionBillingResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionFromIpaPost.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionListResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagementResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagerResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardedRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingListResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionProduct.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionPut.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionToOnboard.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionsResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingsResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PdaInstitutionRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/ProductsManagement.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResult.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipsManagement.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RootParentResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/UserInfoResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/BrokerMapper.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/DelegationMapper.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustom.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionResourceMapper.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionUpdateMapper.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapper.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingResourceMapper.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapper.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/UserMapper.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/BusinessData.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ContractRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/LegalsResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedInstitutionResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProductResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProducts.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingImportContract.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInfoResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionLegalsRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionOperatorsRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionUsersRequest.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ProductInfo.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/SupportContact.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenListResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/InstitutionToNotifyResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/ScContractResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/InstitutionProducts.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/OnboardedUsersResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Person.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/PersonId.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Product.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCount.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCountResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserProductsResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserResponse.java delete mode 100644 apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/util/CustomExceptionMessage.java delete mode 100644 apps/institution-ms-new/web/src/main/resources/swagger/swagger_en.properties delete mode 100644 apps/institution-ms-new/web/src/main/resources/swagger/swagger_it.properties delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/TestUtils.java delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/WebTestConfig.java delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationControllerTest.java delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2ControllerTest.java delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ExternalControllerTest.java delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerPdaTest.java delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerTest.java delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ManagementControllerTest.java delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/OnboardingControllerTest.java delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandlerTest.java delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/filter/LogFilterTest.java delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustomTest.java delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapperTest.java delete mode 100644 apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapperTest.java diff --git a/apps/institution-ms-new/.dockerignore b/apps/institution-ms-new/.dockerignore deleted file mode 100644 index 4cbae43..0000000 --- a/apps/institution-ms-new/.dockerignore +++ /dev/null @@ -1,12 +0,0 @@ -**/.dockerignore -**/.git -**/bin -**/docker-compose* -**/Dockerfile* -**/node_modules -**/npm-debug.log -**/obj -**/secrets.dev.yaml -**/values.dev.yaml -LICENSE -README.md diff --git a/apps/institution-ms-new/.pre-commit-config.yaml b/apps/institution-ms-new/.pre-commit-config.yaml deleted file mode 100644 index e991df9..0000000 --- a/apps/institution-ms-new/.pre-commit-config.yaml +++ /dev/null @@ -1,10 +0,0 @@ -repos: - - repo: https://github.com/antonbabenko/pre-commit-terraform - rev: v1.86.0 - hooks: - - id: terraform_fmt - - id: terraform_docs - - id: terraform_validate - args: - - --args=-json - - --args=-no-color \ No newline at end of file diff --git a/apps/institution-ms-new/.terraform-version b/apps/institution-ms-new/.terraform-version deleted file mode 100644 index 83d1a5e..0000000 --- a/apps/institution-ms-new/.terraform-version +++ /dev/null @@ -1 +0,0 @@ -1.6.6 \ No newline at end of file diff --git a/apps/institution-ms-new/CODEOWNERS b/apps/institution-ms-new/CODEOWNERS deleted file mode 100644 index 04a4227..0000000 --- a/apps/institution-ms-new/CODEOWNERS +++ /dev/null @@ -1,3 +0,0 @@ -# see https://help.github.com/en/articles/about-code-owners#example-of-a-codeowners-file - -* @pagopa/selfcare-contributors diff --git a/apps/institution-ms-new/Dockerfile b/apps/institution-ms-new/Dockerfile deleted file mode 100644 index 322cffb..0000000 --- a/apps/institution-ms-new/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM maven@sha256:dcfe7934d3780beda6e1f0f641bc7db3fa9b8818899981f6eddae052c78394c7 -ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/3.1.1/applicationinsights-agent-3.1.1.jar /applicationinsights-agent.jar -VOLUME /tmp -COPY target/*.jar app.jar -ENTRYPOINT ["java","-jar","app.jar"] \ No newline at end of file diff --git a/apps/institution-ms-new/Dockerfile.new b/apps/institution-ms-new/Dockerfile.new deleted file mode 100644 index 8f8f2be..0000000 --- a/apps/institution-ms-new/Dockerfile.new +++ /dev/null @@ -1,35 +0,0 @@ -FROM maven:3-eclipse-temurin-17@sha256:0d328fa6843bb26b60cf44d69833f241ffe96218fb29fa19df7a6603863eaae7 AS builder - -COPY . . - -RUN echo "\n" \ - "\n" \ - "\n" \ - "\${repositoryOnboarding}\n" \ - "\${repoLogin}\n" \ - "\${repoPwd}\n" \ - "\n" \ - "\n" \ - "\n" > settings.xml - -ARG REPO_ONBOARDING -ARG REPO_USERNAME -ARG REPO_PASSWORD - -RUN mvn --global-settings settings.xml -DrepositoryOnboarding=${REPO_ONBOARDING} -DrepoLogin=${REPO_USERNAME} -DrepoPwd=${REPO_PASSWORD} clean package -DskipTests=true - -FROM openjdk:17-jdk@sha256:528707081fdb9562eb819128a9f85ae7fe000e2fbaeaf9f87662e7b3f38cb7d8 AS runtime - -ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' - -WORKDIR /app - -COPY --from=builder ./target/*.jar ./app.jar - -ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/3.2.11/applicationinsights-agent-3.2.11.jar ./applicationinsights-agent.jar -RUN chmod 755 ./applicationinsights-agent.jar - -EXPOSE 8080 -USER 1001 - -ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/apps/institution-ms-new/Dockerfile.new.dockerignore b/apps/institution-ms-new/Dockerfile.new.dockerignore deleted file mode 100644 index 427b8ce..0000000 --- a/apps/institution-ms-new/Dockerfile.new.dockerignore +++ /dev/null @@ -1,117 +0,0 @@ -**/.dockerignore -**/.git -**/bin -**/docker-compose* -**/Dockerfile* -**/node_modules -**/npm-debug.log -**/obj -**/secrets.dev.yaml -**/values.dev.yaml -LICENSE -README.md - -**/.idea -.idea -**/.mvn -.mvn - -**/target - -# Created by .ignore support plugin (hsz.mobi) -### Maven template -target/ -pom.xml.tag -pom.xml.releaseBackup -pom.xml.versionsBackup -pom.xml.next -release.properties -dependency-reduced-pom.xml -buildNumber.properties -.mvn/timing.properties -.mvn/wrapper/maven-wrapper.jar -### Java template -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* -### JetBrains template -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/usage.statistics.xml -.idea/**/dictionaries -.idea/**/shelf - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml -.idea/**/dbnavigator.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -# .idea/modules.xml -# .idea/*.iml -# .idea/modules - -# CMake -cmake-build-*/ - -# Mongo Explorer plugin -.idea/**/mongoSettings.xml - -# File-based project format -*.iws - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -# Editor-based Rest Client -.idea/httpRequests \ No newline at end of file diff --git a/apps/institution-ms-new/README.md b/apps/institution-ms-new/README.md deleted file mode 100644 index 7da7e5e..0000000 --- a/apps/institution-ms-new/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# selfcare-ms-core - -## Description -This Spring Boot-based microservice is designed to handle several key functionalities in the selfcare operations domain. It includes business logic for: - -- Onboarding operations. -- Management of institutions and delegations. -- User creation. -- Associating users with products and institutions. - -## Prerequisites -Before running the microservice, ensure you have installed: - -- Java JDK 17 or higher -- Maven 3.6 or higher -- Connection to VPN selc-d-vnet - -## Configuration -Look at app/src/main/resources/`application.yml` file to set up environment-specific settings, such as database details. - -## Installation and Local Startup -To run the microservice locally, follow these steps: - -1. **Clone the Repository** - -```shell script -git clone https://github.com/pagopa/selfcare-ms-core.git -cd selfcare-ms-core -``` - -2. **Build the Project** - -```shell script -mvn clean install -``` - -2. **Start the Application** - -```shell script -mvn spring-boot:run -pl app -``` - -## Usage -After starting, the microservice will be available at `http://localhost:8080/`. - -To use the API, refer to the Swagger UI documentation (if available) at `http://localhost:8080/swagger-ui.html`. - diff --git a/apps/institution-ms-new/app/pom.xml b/apps/institution-ms-new/app/pom.xml deleted file mode 100644 index 12a6481..0000000 --- a/apps/institution-ms-new/app/pom.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - 4.0.0 - - selc-ms-core - it.pagopa.selfcare - 1.0-SNAPSHOT - - - selc-ms-core-app - - - - it.pagopa.selfcare - selc-ms-core-web - - - it.pagopa.selfcare - selc-ms-core-connector-dao - runtime - - - it.pagopa.selfcare - selc-ms-core-connector-rest - runtime - - - it.pagopa.selfcare - selc-ms-core-connector-azure-storage - runtime - - - it.pagopa.selfcare - selc-ms-core-connector-email - runtime - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - false - ${project.parent.artifactId}-${project.parent.version}-FATJAR - ../target - - - org.projectlombok - lombok - - - - - - - - diff --git a/apps/institution-ms-new/app/src/main/java/it/pagopa/selfcare/mscore/SelfCareCoreApplication.java b/apps/institution-ms-new/app/src/main/java/it/pagopa/selfcare/mscore/SelfCareCoreApplication.java deleted file mode 100644 index 3b116ad..0000000 --- a/apps/institution-ms-new/app/src/main/java/it/pagopa/selfcare/mscore/SelfCareCoreApplication.java +++ /dev/null @@ -1,15 +0,0 @@ -package it.pagopa.selfcare.mscore; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.scheduling.annotation.EnableAsync; - -@SpringBootApplication -@EnableAsync -public class SelfCareCoreApplication { - - public static void main(String[] args) { - SpringApplication.run(SelfCareCoreApplication.class, args); - } - -} diff --git a/apps/institution-ms-new/app/src/main/resources/config/application.yml b/apps/institution-ms-new/app/src/main/resources/config/application.yml deleted file mode 100644 index ebc4a01..0000000 --- a/apps/institution-ms-new/app/src/main/resources/config/application.yml +++ /dev/null @@ -1,60 +0,0 @@ -server: - port: ${APP_SERVER_PORT:8080} - shutdown: graceful - -spring: - application: - name: "@project.parent.artifactId@" - version: "@project.version@" - profiles: - include: - # TO enable specific-language documentations - - swaggerEN - - AzureStorage - data: - web: - pageable: - max-page-size: ${MAX_PAGE_SIZE:2000} - zipkin: - enabled: false - sleuth: - baggage: - remote-fields: X-Client-Ip - correlation-fields: X-Client-Ip - -info: - build: - artifact: "@project.parent.artifactId@" - name: "@project.parent.artifactId@" - description: "@project.description@" - version: "@project.version@" - - -logging: - level: - it: - pagopa: - selfcare: ${APP_LOG_LEVEL:DEBUG} - org: - springframework: - data: - mongodb: - core: - MongoTemplate: DEBUG - pattern: - additional-info: ",%X{X-Client-Ip:-}]" - -core: - user-event-service: - type: ${CORE_USER_EVENT_SERVICE_TYPE:ignore} - contract-event-service: - type: ${CORE_CONTRACT_EVENT_SERVICE_TYPE:ignore} - resilience4j: - retry: - retry-aspect-order: 1 - instances: - retryTimeout: - max-attempts: 3 - wait-duration: 5s - retry-exceptions: - - feign.RetryableException \ No newline at end of file diff --git a/apps/institution-ms-new/app/src/main/resources/config/azure-storage-config.properties b/apps/institution-ms-new/app/src/main/resources/config/azure-storage-config.properties deleted file mode 100644 index a9370ea..0000000 --- a/apps/institution-ms-new/app/src/main/resources/config/azure-storage-config.properties +++ /dev/null @@ -1,7 +0,0 @@ -blob-storage.account-key=${STORAGE_CREDENTIAL_SECRET} -blob-storage.container=${STORAGE_CONTAINER} -blob-storage.checkout-template-container=${STORAGE_TEMPLATE_URL}/resources/templates/email/ -blob-storage.endpoint-suffix = ${STORAGE_ENDPOINT} -blob-storage.account-name = ${STORAGE_CREDENTIAL_ID} -blob-storage.contract-path = parties/docs/ -blob-storage.connection-string = ${BLOB_STORAGE_CONN_STRING:UseDevelopmentStorage=true;} \ No newline at end of file diff --git a/apps/institution-ms-new/app/src/main/resources/config/core-config.properties b/apps/institution-ms-new/app/src/main/resources/config/core-config.properties deleted file mode 100644 index 9a5ec02..0000000 --- a/apps/institution-ms-new/app/src/main/resources/config/core-config.properties +++ /dev/null @@ -1,31 +0,0 @@ -mscore.port=8080 - -mscore.logoPath = ${PAGOPA_LOGO_URL:resources/logo.png} -mscore.infoCamereEnable = ${INFOCAMERE_ENABLE:false} -mscore.sender-mail = ${MAIL_SENDER_ADDRESS:test@test.it} -mscore.destination-mails = ${DESTINATION_MAILS:} -mscore.enableSendDelegationMail=${SEND_DELEGATION_PEC:false} -mscore.sendEmailToInstitution = ${ONBOARDING_SEND_EMAIL_TO_INSTITUTION:false} -mscore.institutionAlternativeEmail = ${ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL} - -mscore.mail-template.placeholders.onboarding.delegationNotificationPath = ${MAIL_TEMPLATE_DELEGATION_NOTIFICATION_PATH} -mscore.mail-template.placeholders.onboarding.delegationUserNotificationPath = ${MAIL_TEMPLATE_DELEGATION_USER_NOTIFICATION_PATH} -mscore.mail-template.placeholders.onboarding.delegationPartnerName = partnerName - -mscore.mail-template.placeholders.onboarding.institutionDescription = institutionName -mscore.mail-template.placeholders.onboarding.notificationProductName = productName - -scheduler.threads.max-number=${THREADS_SCHEDULE_MAX_NUMBER:1} -scheduler.fixed-delay.delay=${SCHEDULER_FIXED_DELAY:20000} - -mscore.blob-storage.container-product=${PRODUCT_STORAGE_CONTAINER:selc-d-product} -mscore.blob-storage.filepath-product = products.json -mscore.blob-storage.connection-string-product = ${BLOB_STORAGE_PRODUCT_CONNECTION_STRING:UseDevelopmentStorage=true;} - -#SES -mscore.aws-ses-secret-id=${AWS_SES_ACCESS_KEY_ID:secret-id-example} -mscore.aws-ses-secret-key=${AWS_SES_SECRET_ACCESS_KEY:secret-key-example} -mscore.aws-ses-region=${AWS_SES_REGION:eu-south-1} - -mscore.sending-frequency-pec-notification=${SENDING_FREQUENCY_PEC_NOTIFICATION:30} -mscore.epoch-date-pec-notification=${EPOCH_DATE_PEC_NOTIFICATION:2024-01-01} \ No newline at end of file diff --git a/apps/institution-ms-new/app/src/main/resources/swagger/api-docs.json b/apps/institution-ms-new/app/src/main/resources/swagger/api-docs.json deleted file mode 100644 index 936ecd7..0000000 --- a/apps/institution-ms-new/app/src/main/resources/swagger/api-docs.json +++ /dev/null @@ -1,3804 +0,0 @@ -{ - "openapi" : "3.0.3", - "info" : { - "title" : "selc-ms-core", - "version" : "1.0-SNAPSHOT" - }, - "servers" : [ { - "url" : "{url}:{port}{basePath}", - "variables" : { - "url" : { - "default" : "http://localhost" - }, - "port" : { - "default" : "80" - }, - "basePath" : { - "default" : "" - } - } - } ], - "tags" : [ { - "name" : "Delegation", - "description" : "Delegation Controller" - }, { - "name" : "External", - "description" : "External Controller" - }, { - "name" : "Institution", - "description" : "Institution Controller" - }, { - "name" : "Management", - "description" : "Management Controller" - }, { - "name" : "Onboarding", - "description" : "Onboarding Controller" - } ], - "paths" : { - "/delegations" : { - "get" : { - "tags" : [ "Delegation", "external-v2", "support" ], - "summary" : "Retrieve institution's delegations", - "description" : "Retrieve institution's delegations", - "operationId" : "getDelegationsUsingGET", - "parameters" : [ { - "name" : "institutionId", - "in" : "query", - "description" : "The internal identifier of the institution", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "brokerId", - "in" : "query", - "description" : "The internal identifier of the institution", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "productId", - "in" : "query", - "description" : "Product's unique identifier", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "search", - "in" : "query", - "description" : "Description ente", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "taxCode", - "in" : "query", - "description" : "Institution's tax code", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "order", - "in" : "query", - "description" : "Order to show response NONE, ASC, DESC", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string", - "enum" : [ "ASC", "DESC", "NONE" ] - } - }, { - "name" : "page", - "in" : "query", - "description" : "page", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - }, { - "name" : "size", - "in" : "query", - "description" : "size", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/DelegationResponse" - } - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - }, - "post" : { - "tags" : [ "Delegation" ], - "summary" : "Create an association between institution id and technical partner", - "description" : "Create an association between institution id and technical partner", - "operationId" : "createDelegationUsingPOST", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/DelegationRequest" - } - } - } - }, - "responses" : { - "201" : { - "description" : "Created", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/DelegationResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/delegations/from-taxcode" : { - "post" : { - "tags" : [ "Delegation" ], - "summary" : "Create an association between institution and technical partner using taxCode for both instead of internal id. It is useful when we don't know institution's internal id.", - "description" : "Create an association between institution and technical partner using taxCode for both instead of internal id. It is useful when we don't know institution's internal id.", - "operationId" : "createDelegationFromInstitutionsTaxCodeUsingPOST", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/DelegationRequestFromTaxcode" - } - } - } - }, - "responses" : { - "201" : { - "description" : "Created", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/DelegationResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/delegations/{delegationId}" : { - "delete" : { - "tags" : [ "Delegation" ], - "summary" : "Delete an association between institution id and technical partner setting its status to DELETED and setting delegation to false on institution if it has no more delegations", - "description" : "Delete an association between institution id and technical partner setting its status to DELETED and setting delegation to false on institution if it has no more delegations", - "operationId" : "deleteDelegationUsingDELETE", - "parameters" : [ { - "name" : "delegationId", - "in" : "path", - "description" : "Delegation's unique internal identifier", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "204" : { - "description" : "No Content" - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/v2/delegations" : { - "get" : { - "tags" : [ "Delegation" ], - "summary" : "Retrieve institution's delegations with pagination", - "description" : "Retrieve institution's delegations with pagination", - "operationId" : "getDelegationsUsingGET_1", - "parameters" : [ { - "name" : "institutionId", - "in" : "query", - "description" : "The internal identifier of the institution", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "brokerId", - "in" : "query", - "description" : "The internal identifier of the institution", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "productId", - "in" : "query", - "description" : "Product's unique identifier", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "search", - "in" : "query", - "description" : "Description ente", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "taxCode", - "in" : "query", - "description" : "Institution's tax code", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "order", - "in" : "query", - "description" : "Order to show response NONE, ASC, DESC", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string", - "enum" : [ "ASC", "DESC", "NONE" ] - } - }, { - "name" : "page", - "in" : "query", - "description" : "page", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - }, { - "name" : "size", - "in" : "query", - "description" : "size", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/DelegationWithPaginationResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/external/institutions" : { - "get" : { - "tags" : [ "External" ], - "summary" : "Gets the corresponding institution using internal institution id", - "description" : "Gets the corresponding institution using internal institution id", - "operationId" : "retrieveInstitutionByIdsUsingGET", - "parameters" : [ { - "name" : "ids", - "in" : "query", - "description" : "List of Institution to onboard", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/external/institutions/{externalId}" : { - "get" : { - "tags" : [ "External" ], - "summary" : "Gets institution using external institution id", - "description" : "Gets institution using external institution id", - "operationId" : "getByExternalIdUsingGET", - "parameters" : [ { - "name" : "externalId", - "in" : "path", - "description" : "Institution's unique external identifier", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/external/institutions/{externalId}/geotaxonomies" : { - "get" : { - "tags" : [ "External" ], - "summary" : "retrieves the geographic taxonomies related to Institution.", - "description" : "retrieves the geographic taxonomies related to Institution.", - "operationId" : "retrieveInstitutionGeoTaxonomiesByExternalIdUsingGET", - "parameters" : [ { - "name" : "externalId", - "in" : "path", - "description" : "Institution's unique external identifier", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/GeographicTaxonomies" - } - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/external/institutions/{externalId}/products" : { - "get" : { - "tags" : [ "External" ], - "summary" : "retrieves the products related to Institution", - "description" : "retrieves the products related to Institution", - "operationId" : "retrieveInstitutionProductsByExternalIdUsingGET", - "parameters" : [ { - "name" : "externalId", - "in" : "path", - "description" : "Institution's unique external identifier", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - }, { - "name" : "states", - "in" : "query", - "description" : "states", - "required" : false, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/OnboardedProducts" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/external/institutions/{externalId}/products/{productId}/billing" : { - "get" : { - "tags" : [ "External" ], - "summary" : "retrieves the billing data related to the institution even if the current user is not related to the institution/product", - "description" : "retrieves the billing data related to the institution even if the current user is not related to the institution/product", - "operationId" : "getBillingInstitutionByExternalIdUsingGET", - "parameters" : [ { - "name" : "externalId", - "in" : "path", - "description" : "Institution's unique external identifier", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - }, { - "name" : "productId", - "in" : "path", - "description" : "Product's unique identifier", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionBillingResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions" : { - "get" : { - "tags" : [ "Institution", "external-v2", "support", "support-pnpg" ], - "summary" : "Gets institutions filtering by taxCode and/or subunitCode", - "description" : "Gets institutions filtering by taxCode and/or subunitCode", - "operationId" : "getInstitutionsUsingGET", - "parameters" : [ { - "name" : "taxCode", - "in" : "query", - "description" : "Institution's tax code", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "subunitCode", - "in" : "query", - "description" : "Institution's subunit code", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "origin", - "in" : "query", - "description" : "origin", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "originId", - "in" : "query", - "description" : "originId", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionsResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - }, - "post" : { - "tags" : [ "Institution" ], - "summary" : "create an institution using external institution id without fetching data from party-registry or info-camere", - "description" : "create an institution using external institution id without fetching data from party-registry or info-camere", - "operationId" : "createInstitutionUsingPOST", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionRequest" - } - } - } - }, - "responses" : { - "201" : { - "description" : "Created", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/from-anac" : { - "post" : { - "tags" : [ "Institution" ], - "summary" : "Create an association between institution id and technical partner from anac", - "description" : "Create an association between institution id and technical partner from anac", - "operationId" : "createInstitutionFromAnacUsingPOST", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionRequest" - } - } - } - }, - "responses" : { - "201" : { - "description" : "Created", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/from-infocamere" : { - "post" : { - "tags" : [ "Institution" ], - "summary" : "create an institution from infocamere registry", - "description" : "create an institution from infocamere registry", - "operationId" : "createInstitutionFromInfocamereUsingPOST", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionRequest" - } - } - } - }, - "responses" : { - "201" : { - "description" : "Created", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/from-ipa" : { - "post" : { - "tags" : [ "Institution" ], - "summary" : "create an institution from ipa registry", - "description" : "create an institution from ipa registry", - "operationId" : "createInstitutionFromIpaUsingPOST", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionFromIpaPost" - } - } - } - }, - "responses" : { - "201" : { - "description" : "Created", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/from-ivass" : { - "post" : { - "tags" : [ "Institution" ], - "summary" : "create an institution from ivass CSV", - "description" : "create an institution from ivass CSV", - "operationId" : "createInstitutionFromIvassUsingPOST", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionRequest" - } - } - } - }, - "responses" : { - "201" : { - "description" : "Created", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/from-pda" : { - "post" : { - "tags" : [ "Institution" ], - "summary" : "Create an association between institution id and technical partner from pda", - "description" : "create an institution from ipa registry", - "operationId" : "createInstitutionFromPdaUsingPOST", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/PdaInstitutionRequest" - } - } - } - }, - "responses" : { - "201" : { - "description" : "Created", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/insert/{externalId}" : { - "post" : { - "tags" : [ "Institution" ], - "summary" : "create an institution using external institution id without fetching data from party-registry or info-camere", - "description" : "create an institution using external institution id without fetching data from party-registry or info-camere", - "operationId" : "createInstitutionRawUsingPOST", - "parameters" : [ { - "name" : "externalId", - "in" : "path", - "description" : "Institution's unique external identifier", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionRequest" - } - } - } - }, - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "deprecated" : true, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/onboarded/{productId}" : { - "post" : { - "tags" : [ "Institution" ], - "summary" : "Retrieve list of institution which logged user can onboard", - "description" : "Retrieve list of institution which logged user can onboard", - "operationId" : "getValidInstitutionToOnboardUsingPOST", - "parameters" : [ { - "name" : "productId", - "in" : "path", - "description" : "productId", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/InstitutionToOnboard" - } - } - } - } - }, - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/InstitutionToOnboard" - } - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/pg" : { - "post" : { - "tags" : [ "Institution" ], - "summary" : "create an institution (PG) using external institution id fetching data from info-camere", - "description" : "create an institution (PG) using external institution id fetching data from info-camere", - "operationId" : "createPgInstitutionUsingPOST", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/CreatePgInstitutionRequest" - } - } - } - }, - "responses" : { - "201" : { - "description" : "Created", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/products/{productId}" : { - "get" : { - "tags" : [ "Institution" ], - "summary" : "Gets institutions filtering onboardings by product id", - "description" : "Gets institutions filtering onboardings by product id", - "operationId" : "findFromProductUsingGET", - "parameters" : [ { - "name" : "productId", - "in" : "path", - "description" : "Product's unique identifier", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - }, { - "name" : "page", - "in" : "query", - "description" : "Page number", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - }, { - "name" : "size", - "in" : "query", - "description" : "Page size", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionOnboardingListResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/{externalId}" : { - "post" : { - "tags" : [ "Institution" ], - "summary" : "create an institution (PA) using external institution id fetching data from party-registry", - "description" : "create an institution (PA) using external institution id fetching data from party-registry", - "operationId" : "createInstitutionByExternalIdUsingPOST", - "parameters" : [ { - "name" : "externalId", - "in" : "path", - "description" : "Institution's unique external identifier", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "201" : { - "description" : "Created", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "deprecated" : true, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/{id}" : { - "get" : { - "tags" : [ "Institution", "external-v2" ], - "summary" : "Gets the corresponding institution using internal institution id", - "description" : "Gets the corresponding institution using internal institution id", - "operationId" : "retrieveInstitutionByIdUsingGET", - "parameters" : [ { - "name" : "id", - "in" : "path", - "description" : "The internal identifier of the institution", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - }, - "put" : { - "tags" : [ "Institution" ], - "summary" : "update institution data of given institution", - "description" : "update institution data of given institution", - "operationId" : "updateInstitutionUsingPUT", - "parameters" : [ { - "name" : "id", - "in" : "path", - "description" : "The internal identifier of the institution", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionPut" - } - } - } - }, - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "403" : { - "description" : "Forbidden", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/{id}/geotaxonomies" : { - "get" : { - "tags" : [ "Institution" ], - "summary" : "retrieves the geographic taxonomies this institution is related to", - "description" : "retrieves the geographic taxonomies this institution is related to", - "operationId" : "retrieveInstitutionGeoTaxonomiesUsingGET", - "parameters" : [ { - "name" : "id", - "in" : "path", - "description" : "The internal identifier of the institution", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/GeographicTaxonomies" - } - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/{id}/onboarding" : { - "post" : { - "tags" : [ "Institution" ], - "summary" : "The service adds users to the registry if they are not present and associates them with the institution and product contained in the body", - "description" : "The service adds users to the registry if they are not present and associates them with the institution and product contained in the body", - "operationId" : "onboardingInstitutionUsingPOST", - "parameters" : [ { - "name" : "id", - "in" : "path", - "description" : "id", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionOnboardingRequest" - } - } - } - }, - "responses" : { - "200" : { - "description" : "User already exists an onboarding in status ACTIVE or SUSPENDED with that productId", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "201" : { - "description" : "Created", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/{id}/products" : { - "get" : { - "tags" : [ "Institution" ], - "summary" : "retrieves the insistitution's related products.", - "description" : "retrieves the insistitution's related products.", - "operationId" : "retrieveInstitutionProductsUsingGET", - "parameters" : [ { - "name" : "id", - "in" : "path", - "description" : "The internal identifier of the institution", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - }, { - "name" : "states", - "in" : "query", - "description" : "List of Relationship state for filter products", - "required" : false, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/OnboardedProducts" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/{id}/products/{productId}" : { - "delete" : { - "tags" : [ "Institution" ], - "summary" : "The service set DELETE status on onboarding association with the product and institutionId", - "description" : "The service set DELETE status on onboarding association with the product and institutionId", - "operationId" : "deleteOnboardedInstitutionUsingDELETE", - "parameters" : [ { - "name" : "productId", - "in" : "path", - "description" : "productId", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - }, { - "name" : "id", - "in" : "path", - "description" : "id", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "204" : { - "description" : "No Content" - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/{institutionId}/createdAt" : { - "put" : { - "tags" : [ "Institution" ], - "summary" : "The service updates the createdAt field for the institution-product pair", - "description" : "The service updates the createdAt field for the institution-product pair", - "operationId" : "updateCreatedAtUsingPUT", - "parameters" : [ { - "name" : "institutionId", - "in" : "path", - "description" : "The internal identifier of the institution", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/CreatedAtRequest" - } - } - } - }, - "responses" : { - "200" : { - "description" : "OK" - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "403" : { - "description" : "Forbidden", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/{institutionId}/onboardings" : { - "get" : { - "tags" : [ "Institution", "external-v2" ], - "summary" : "Retrieve institution information", - "description" : "Retrieve institution information", - "operationId" : "getOnboardingsInstitutionUsingGET", - "parameters" : [ { - "name" : "institutionId", - "in" : "path", - "description" : "The internal identifier of the institution", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - }, { - "name" : "productId", - "in" : "query", - "description" : "productId", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/OnboardingsResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/{productId}/brokers/{institutionType}" : { - "get" : { - "tags" : [ "Institution" ], - "summary" : "Retrieve institution brokers", - "description" : "Retrieve institution brokers", - "operationId" : "getInstitutionBrokersUsingGET", - "parameters" : [ { - "name" : "productId", - "in" : "path", - "description" : "Product's unique identifier", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - }, { - "name" : "institutionType", - "in" : "path", - "description" : "Institution's type", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string", - "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BrokerResponse" - } - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/bulk/institutions" : { - "post" : { - "tags" : [ "Management" ], - "summary" : "Gets the corresponding institution using internal institution id", - "description" : "Gets the corresponding institution using internal institution id", - "operationId" : "retrieveInstitutionByIdsUsingPOST", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/BulkPartiesSeed" - } - } - } - }, - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/BulkInstitutions" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/onboarding" : { - "head" : { - "tags" : [ "Onboarding" ], - "summary" : "verify if onboardedProduct is already onboarded for institution", - "description" : "verify if onboardedProduct is already onboarded for institution", - "operationId" : "verifyOnboardingInfoUsingHEAD", - "parameters" : [ { - "name" : "taxCode", - "in" : "query", - "description" : "Institution's tax code", - "required" : true, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "subunitCode", - "in" : "query", - "description" : "Institution's subunit code", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "productId", - "in" : "query", - "description" : "Product's unique identifier", - "required" : true, - "style" : "form", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "204" : { - "description" : "No Content" - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/onboarding/institution/{externalId}/products/{productId}" : { - "head" : { - "tags" : [ "Onboarding" ], - "summary" : "verify if onboardedProduct is already onboarded for institution", - "description" : "verify if onboardedProduct is already onboarded for institution", - "operationId" : "verifyOnboardingInfoUsingHEAD_1", - "parameters" : [ { - "name" : "externalId", - "in" : "path", - "description" : "Institution's unique external identifier", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - }, { - "name" : "productId", - "in" : "path", - "description" : "Product's unique identifier", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "204" : { - "description" : "No Content" - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/onboarding/verify" : { - "head" : { - "tags" : [ "Onboarding" ], - "summary" : "verify if onboardedProduct is already onboarded for institution", - "description" : "verify if onboardedProduct is already onboarded for institution", - "operationId" : "verifyOnboardingInfoByFiltersUsingHEAD", - "parameters" : [ { - "name" : "productId", - "in" : "query", - "description" : "Product's unique identifier", - "required" : true, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "externalId", - "in" : "query", - "description" : "Institution's unique external identifier", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "taxCode", - "in" : "query", - "description" : "Institution's tax code", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "origin", - "in" : "query", - "description" : "Institution's origin", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "originId", - "in" : "query", - "description" : "Institution's id in the relative origin open data", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "subunitCode", - "in" : "query", - "description" : "Institution's subunit code", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "204" : { - "description" : "No Content" - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - } - }, - "components" : { - "schemas" : { - "AdditionalInformations" : { - "title" : "AdditionalInformations", - "type" : "object", - "properties" : { - "agentOfPublicService" : { - "type" : "boolean" - }, - "agentOfPublicServiceNote" : { - "type" : "string" - }, - "belongRegulatedMarket" : { - "type" : "boolean" - }, - "establishedByRegulatoryProvision" : { - "type" : "boolean" - }, - "establishedByRegulatoryProvisionNote" : { - "type" : "string" - }, - "ipa" : { - "type" : "boolean" - }, - "ipaCode" : { - "type" : "string" - }, - "otherNote" : { - "type" : "string" - }, - "regulatedMarketNote" : { - "type" : "string" - } - } - }, - "AttributesRequest" : { - "title" : "AttributesRequest", - "type" : "object", - "properties" : { - "code" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "origin" : { - "type" : "string" - } - } - }, - "AttributesResponse" : { - "title" : "AttributesResponse", - "type" : "object", - "properties" : { - "code" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "origin" : { - "type" : "string" - } - } - }, - "Billing" : { - "title" : "Billing", - "type" : "object", - "properties" : { - "publicServices" : { - "type" : "boolean" - }, - "recipientCode" : { - "type" : "string" - }, - "taxCodeInvoicing" : { - "type" : "string" - }, - "vatNumber" : { - "type" : "string" - } - } - }, - "BillingRequest" : { - "title" : "BillingRequest", - "type" : "object", - "properties" : { - "publicServices" : { - "type" : "boolean" - }, - "recipientCode" : { - "type" : "string" - }, - "taxCodeInvoicing" : { - "type" : "string" - }, - "vatNumber" : { - "type" : "string" - } - } - }, - "BillingResponse" : { - "title" : "BillingResponse", - "type" : "object", - "properties" : { - "publicServices" : { - "type" : "boolean" - }, - "recipientCode" : { - "type" : "string" - }, - "taxCodeInvoicing" : { - "type" : "string" - }, - "vatNumber" : { - "type" : "string" - } - } - }, - "BrokerResponse" : { - "title" : "BrokerResponse", - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "id" : { - "type" : "string" - }, - "numberOfDelegations" : { - "type" : "integer", - "format" : "int32" - }, - "taxCode" : { - "type" : "string" - } - } - }, - "BulkInstitution" : { - "title" : "BulkInstitution", - "type" : "object", - "properties" : { - "address" : { - "type" : "string" - }, - "attributes" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/AttributesResponse" - } - }, - "description" : { - "type" : "string" - }, - "digitalAddress" : { - "type" : "string" - }, - "externalId" : { - "type" : "string" - }, - "id" : { - "type" : "string" - }, - "institutionType" : { - "type" : "string", - "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] - }, - "origin" : { - "type" : "string" - }, - "originId" : { - "type" : "string" - }, - "products" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/components/schemas/BulkProduct" - } - }, - "taxCode" : { - "type" : "string" - }, - "zipCode" : { - "type" : "string" - } - } - }, - "BulkInstitutions" : { - "title" : "BulkInstitutions", - "type" : "object", - "properties" : { - "found" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BulkInstitution" - } - }, - "notFound" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - }, - "BulkPartiesSeed" : { - "title" : "BulkPartiesSeed", - "type" : "object", - "properties" : { - "partyIdentifiers" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - }, - "BulkProduct" : { - "title" : "BulkProduct", - "type" : "object", - "properties" : { - "billing" : { - "$ref" : "#/components/schemas/BillingResponse" - }, - "pricingPlan" : { - "type" : "string" - }, - "product" : { - "type" : "string" - }, - "status" : { - "type" : "string", - "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] - } - } - }, - "Contract" : { - "title" : "Contract", - "type" : "object", - "properties" : { - "path" : { - "type" : "string" - }, - "version" : { - "type" : "string" - } - } - }, - "CreatePgInstitutionRequest" : { - "title" : "CreatePgInstitutionRequest", - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "existsInRegistry" : { - "type" : "boolean" - }, - "taxId" : { - "type" : "string" - } - } - }, - "CreatedAtRequest" : { - "title" : "CreatedAtRequest", - "type" : "object", - "properties" : { - "activatedAt" : { - "type" : "string", - "format" : "date-time" - }, - "createdAt" : { - "type" : "string", - "format" : "date-time" - }, - "productId" : { - "type" : "string" - } - } - }, - "DataProtectionOfficer" : { - "title" : "DataProtectionOfficer", - "type" : "object", - "properties" : { - "address" : { - "type" : "string" - }, - "email" : { - "type" : "string" - }, - "pec" : { - "type" : "string" - } - } - }, - "DataProtectionOfficerRequest" : { - "title" : "DataProtectionOfficerRequest", - "type" : "object", - "properties" : { - "address" : { - "type" : "string" - }, - "email" : { - "type" : "string" - }, - "pec" : { - "type" : "string" - } - } - }, - "DataProtectionOfficerResponse" : { - "title" : "DataProtectionOfficerResponse", - "type" : "object", - "properties" : { - "address" : { - "type" : "string" - }, - "email" : { - "type" : "string" - }, - "pec" : { - "type" : "string" - } - } - }, - "DelegationRequest" : { - "title" : "DelegationRequest", - "type" : "object", - "properties" : { - "from" : { - "type" : "string" - }, - "institutionFromName" : { - "type" : "string" - }, - "institutionToName" : { - "type" : "string" - }, - "productId" : { - "type" : "string" - }, - "to" : { - "type" : "string" - }, - "type" : { - "type" : "string", - "enum" : [ "AOO", "EA", "PT" ] - } - } - }, - "DelegationRequestFromTaxcode" : { - "title" : "DelegationRequestFromTaxcode", - "type" : "object", - "properties" : { - "fromSubunitCode" : { - "type" : "string" - }, - "fromTaxCode" : { - "type" : "string" - }, - "institutionFromName" : { - "type" : "string" - }, - "institutionToName" : { - "type" : "string" - }, - "productId" : { - "type" : "string" - }, - "toSubunitCode" : { - "type" : "string" - }, - "toTaxCode" : { - "type" : "string" - }, - "type" : { - "type" : "string", - "enum" : [ "AOO", "EA", "PT" ] - } - } - }, - "DelegationResponse" : { - "title" : "DelegationResponse", - "type" : "object", - "properties" : { - "brokerId" : { - "type" : "string" - }, - "brokerName" : { - "type" : "string" - }, - "brokerTaxCode" : { - "type" : "string" - }, - "brokerType" : { - "type" : "string" - }, - "createdAt" : { - "type" : "string", - "format" : "date-time" - }, - "id" : { - "type" : "string" - }, - "institutionId" : { - "type" : "string" - }, - "institutionName" : { - "type" : "string" - }, - "institutionRootName" : { - "type" : "string" - }, - "institutionType" : { - "type" : "string", - "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] - }, - "productId" : { - "type" : "string" - }, - "status" : { - "type" : "string", - "enum" : [ "ACTIVE", "DELETED" ] - }, - "taxCode" : { - "type" : "string" - }, - "type" : { - "type" : "string", - "enum" : [ "AOO", "EA", "PT" ] - }, - "updatedAt" : { - "type" : "string", - "format" : "date-time" - } - } - }, - "DelegationWithPaginationResponse" : { - "title" : "DelegationWithPaginationResponse", - "type" : "object", - "properties" : { - "delegations" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/DelegationResponse" - } - }, - "pageInfo" : { - "$ref" : "#/components/schemas/PageInfo" - } - } - }, - "GeoTaxonomies" : { - "title" : "GeoTaxonomies", - "type" : "object", - "properties" : { - "code" : { - "type" : "string" - }, - "desc" : { - "type" : "string" - } - } - }, - "GeographicTaxonomies" : { - "title" : "GeographicTaxonomies", - "type" : "object", - "properties" : { - "code" : { - "type" : "string" - }, - "country" : { - "type" : "string" - }, - "country_abbreviation" : { - "type" : "string" - }, - "desc" : { - "type" : "string" - }, - "enabled" : { - "type" : "boolean" - }, - "istat_code" : { - "type" : "string" - }, - "province_abbreviation" : { - "type" : "string" - }, - "province_id" : { - "type" : "string" - }, - "region_id" : { - "type" : "string" - } - } - }, - "InstitutionBillingResponse" : { - "title" : "InstitutionBillingResponse", - "type" : "object", - "properties" : { - "address" : { - "type" : "string" - }, - "aooParentCode" : { - "type" : "string" - }, - "billing" : { - "$ref" : "#/components/schemas/BillingResponse" - }, - "description" : { - "type" : "string" - }, - "digitalAddress" : { - "type" : "string" - }, - "externalId" : { - "type" : "string" - }, - "institutionId" : { - "type" : "string" - }, - "institutionType" : { - "type" : "string", - "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] - }, - "origin" : { - "type" : "string", - "enum" : [ "ADE", "ANAC", "INFOCAMERE", "IPA", "IVASS", "MOCK", "SELC", "UNKNOWN" ] - }, - "originId" : { - "type" : "string" - }, - "pricingPlan" : { - "type" : "string" - }, - "subunitCode" : { - "type" : "string" - }, - "subunitType" : { - "type" : "string" - }, - "taxCode" : { - "type" : "string" - }, - "zipCode" : { - "type" : "string" - } - } - }, - "InstitutionFromIpaPost" : { - "title" : "InstitutionFromIpaPost", - "type" : "object", - "properties" : { - "geographicTaxonomies" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/GeoTaxonomies" - } - }, - "institutionType" : { - "type" : "string", - "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] - }, - "subunitCode" : { - "type" : "string" - }, - "subunitType" : { - "type" : "string", - "enum" : [ "AOO", "UO" ] - }, - "taxCode" : { - "type" : "string" - } - } - }, - "InstitutionGeographicTaxonomies" : { - "title" : "InstitutionGeographicTaxonomies", - "type" : "object", - "properties" : { - "code" : { - "type" : "string" - }, - "desc" : { - "type" : "string" - } - } - }, - "InstitutionOnboardingListResponse" : { - "title" : "InstitutionOnboardingListResponse", - "type" : "object", - "properties" : { - "items" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/InstitutionOnboardingResponse" - } - } - } - }, - "InstitutionOnboardingRequest" : { - "title" : "InstitutionOnboardingRequest", - "type" : "object", - "properties" : { - "activatedAt" : { - "type" : "string", - "format" : "date-time" - }, - "billing" : { - "$ref" : "#/components/schemas/BillingRequest" - }, - "contractPath" : { - "type" : "string" - }, - "isAggregator" : { - "type" : "boolean" - }, - "pricingPlan" : { - "type" : "string" - }, - "productId" : { - "type" : "string" - }, - "tokenId" : { - "type" : "string" - } - } - }, - "InstitutionOnboardingResponse" : { - "title" : "InstitutionOnboardingResponse", - "type" : "object", - "properties" : { - "address" : { - "type" : "string" - }, - "aooParentCode" : { - "type" : "string" - }, - "attributes" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/AttributesResponse" - } - }, - "businessRegisterPlace" : { - "type" : "string" - }, - "createdAt" : { - "type" : "string", - "format" : "date-time" - }, - "dataProtectionOfficer" : { - "$ref" : "#/components/schemas/DataProtectionOfficerResponse" - }, - "description" : { - "type" : "string" - }, - "digitalAddress" : { - "type" : "string" - }, - "externalId" : { - "type" : "string" - }, - "geographicTaxonomies" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/GeoTaxonomies" - } - }, - "id" : { - "type" : "string" - }, - "imported" : { - "type" : "boolean" - }, - "institutionType" : { - "type" : "string", - "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] - }, - "onboardings" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/components/schemas/OnboardingResponse" - } - }, - "origin" : { - "type" : "string" - }, - "originId" : { - "type" : "string" - }, - "paymentServiceProvider" : { - "$ref" : "#/components/schemas/PaymentServiceProviderResponse" - }, - "rea" : { - "type" : "string" - }, - "shareCapital" : { - "type" : "string" - }, - "subunitCode" : { - "type" : "string" - }, - "subunitType" : { - "type" : "string" - }, - "supportEmail" : { - "type" : "string" - }, - "supportPhone" : { - "type" : "string" - }, - "taxCode" : { - "type" : "string" - }, - "updatedAt" : { - "type" : "string", - "format" : "date-time" - }, - "zipCode" : { - "type" : "string" - } - } - }, - "InstitutionProduct" : { - "title" : "InstitutionProduct", - "type" : "object", - "properties" : { - "id" : { - "type" : "string" - }, - "state" : { - "type" : "string", - "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] - } - } - }, - "InstitutionPut" : { - "title" : "InstitutionPut", - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "digitalAddress" : { - "type" : "string" - }, - "geographicTaxonomyCodes" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "parentDescription" : { - "type" : "string" - } - } - }, - "InstitutionRequest" : { - "title" : "InstitutionRequest", - "type" : "object", - "properties" : { - "address" : { - "type" : "string" - }, - "attributes" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/AttributesRequest" - } - }, - "billing" : { - "$ref" : "#/components/schemas/BillingRequest" - }, - "businessRegisterPlace" : { - "type" : "string" - }, - "city" : { - "type" : "string" - }, - "country" : { - "type" : "string" - }, - "county" : { - "type" : "string" - }, - "createdAt" : { - "type" : "string", - "format" : "date-time" - }, - "dataProtectionOfficer" : { - "$ref" : "#/components/schemas/DataProtectionOfficerRequest" - }, - "delegation" : { - "type" : "boolean" - }, - "description" : { - "type" : "string" - }, - "digitalAddress" : { - "type" : "string" - }, - "externalId" : { - "type" : "string" - }, - "geographicTaxonomies" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/GeoTaxonomies" - } - }, - "id" : { - "type" : "string" - }, - "imported" : { - "type" : "boolean" - }, - "institutionType" : { - "type" : "string", - "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] - }, - "onboarding" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/OnboardingRequest" - } - }, - "origin" : { - "type" : "string" - }, - "originId" : { - "type" : "string" - }, - "paymentServiceProvider" : { - "$ref" : "#/components/schemas/PaymentServiceProviderRequest" - }, - "rea" : { - "type" : "string" - }, - "shareCapital" : { - "type" : "string" - }, - "supportEmail" : { - "type" : "string" - }, - "supportPhone" : { - "type" : "string" - }, - "taxCode" : { - "type" : "string" - }, - "updatedAt" : { - "type" : "string", - "format" : "date-time" - }, - "zipCode" : { - "type" : "string" - } - } - }, - "InstitutionResponse" : { - "title" : "InstitutionResponse", - "type" : "object", - "properties" : { - "address" : { - "type" : "string" - }, - "aooParentCode" : { - "type" : "string" - }, - "attributes" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/AttributesResponse" - } - }, - "businessRegisterPlace" : { - "type" : "string" - }, - "city" : { - "type" : "string" - }, - "country" : { - "type" : "string" - }, - "county" : { - "type" : "string" - }, - "createdAt" : { - "type" : "string", - "format" : "date-time" - }, - "dataProtectionOfficer" : { - "$ref" : "#/components/schemas/DataProtectionOfficerResponse" - }, - "delegation" : { - "type" : "boolean" - }, - "description" : { - "type" : "string" - }, - "digitalAddress" : { - "type" : "string" - }, - "externalId" : { - "type" : "string" - }, - "geographicTaxonomies" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/GeoTaxonomies" - } - }, - "id" : { - "type" : "string" - }, - "imported" : { - "type" : "boolean" - }, - "institutionType" : { - "type" : "string", - "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] - }, - "istatCode" : { - "type" : "string" - }, - "onboarding" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/OnboardedProductResponse" - } - }, - "origin" : { - "type" : "string" - }, - "originId" : { - "type" : "string" - }, - "paymentServiceProvider" : { - "$ref" : "#/components/schemas/PaymentServiceProviderResponse" - }, - "rea" : { - "type" : "string" - }, - "rootParent" : { - "$ref" : "#/components/schemas/RootParentResponse" - }, - "shareCapital" : { - "type" : "string" - }, - "subunitCode" : { - "type" : "string" - }, - "subunitType" : { - "type" : "string" - }, - "supportEmail" : { - "type" : "string" - }, - "supportPhone" : { - "type" : "string" - }, - "taxCode" : { - "type" : "string" - }, - "updatedAt" : { - "type" : "string", - "format" : "date-time" - }, - "zipCode" : { - "type" : "string" - } - } - }, - "InstitutionToOnboard" : { - "title" : "InstitutionToOnboard", - "type" : "object", - "properties" : { - "cfImpresa" : { - "type" : "string" - }, - "denominazione" : { - "type" : "string" - } - } - }, - "InstitutionUpdate" : { - "title" : "InstitutionUpdate", - "type" : "object", - "properties" : { - "additionalInformations" : { - "$ref" : "#/components/schemas/AdditionalInformations" - }, - "address" : { - "type" : "string" - }, - "businessRegisterPlace" : { - "type" : "string" - }, - "city" : { - "type" : "string" - }, - "country" : { - "type" : "string" - }, - "county" : { - "type" : "string" - }, - "dataProtectionOfficer" : { - "$ref" : "#/components/schemas/DataProtectionOfficer" - }, - "delegation" : { - "type" : "boolean" - }, - "description" : { - "type" : "string" - }, - "digitalAddress" : { - "type" : "string" - }, - "geographicTaxonomies" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/InstitutionGeographicTaxonomies" - } - }, - "imported" : { - "type" : "boolean" - }, - "institutionType" : { - "type" : "string", - "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] - }, - "ivassCode" : { - "type" : "string" - }, - "parentDescription" : { - "type" : "string" - }, - "paymentServiceProvider" : { - "$ref" : "#/components/schemas/PaymentServiceProvider" - }, - "rea" : { - "type" : "string" - }, - "shareCapital" : { - "type" : "string" - }, - "supportEmail" : { - "type" : "string" - }, - "supportPhone" : { - "type" : "string" - }, - "taxCode" : { - "type" : "string" - }, - "zipCode" : { - "type" : "string" - } - } - }, - "InstitutionsResponse" : { - "title" : "InstitutionsResponse", - "type" : "object", - "properties" : { - "institutions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/InstitutionResponse" - } - } - } - }, - "OnboardedProductResponse" : { - "title" : "OnboardedProductResponse", - "type" : "object", - "properties" : { - "billing" : { - "$ref" : "#/components/schemas/BillingResponse" - }, - "createdAt" : { - "type" : "string", - "format" : "date-time" - }, - "isAggregator" : { - "type" : "boolean" - }, - "productId" : { - "type" : "string" - }, - "status" : { - "type" : "string", - "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] - }, - "updatedAt" : { - "type" : "string", - "format" : "date-time" - } - } - }, - "OnboardedProducts" : { - "title" : "OnboardedProducts", - "type" : "object", - "properties" : { - "products" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/InstitutionProduct" - } - } - } - }, - "OnboardingRequest" : { - "title" : "OnboardingRequest", - "type" : "object", - "properties" : { - "billingRequest" : { - "$ref" : "#/components/schemas/Billing" - }, - "contract" : { - "$ref" : "#/components/schemas/Contract" - }, - "contractActivatedAt" : { - "type" : "string", - "format" : "date-time" - }, - "contractCreatedAt" : { - "type" : "string", - "format" : "date-time" - }, - "contractFilePath" : { - "type" : "string" - }, - "institutionExternalId" : { - "type" : "string" - }, - "institutionUpdate" : { - "$ref" : "#/components/schemas/InstitutionUpdate" - }, - "pricingPlan" : { - "type" : "string" - }, - "productId" : { - "type" : "string" - }, - "productName" : { - "type" : "string" - }, - "sendCompleteOnboardingEmail" : { - "type" : "boolean" - }, - "signContract" : { - "type" : "boolean" - }, - "tokenType" : { - "type" : "string", - "enum" : [ "INSTITUTION", "LEGALS" ] - }, - "users" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/UserToOnboard" - } - } - } - }, - "OnboardingResponse" : { - "title" : "OnboardingResponse", - "type" : "object", - "properties" : { - "billing" : { - "$ref" : "#/components/schemas/BillingResponse" - }, - "closedAt" : { - "type" : "string", - "format" : "date-time" - }, - "contract" : { - "type" : "string" - }, - "createdAt" : { - "type" : "string", - "format" : "date-time" - }, - "isAggregator" : { - "type" : "boolean" - }, - "pricingPlan" : { - "type" : "string" - }, - "productId" : { - "type" : "string" - }, - "status" : { - "type" : "string", - "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] - }, - "tokenId" : { - "type" : "string" - }, - "updatedAt" : { - "type" : "string", - "format" : "date-time" - } - } - }, - "OnboardingsResponse" : { - "title" : "OnboardingsResponse", - "type" : "object", - "properties" : { - "onboardings" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/OnboardingResponse" - } - } - } - }, - "PageInfo" : { - "title" : "PageInfo", - "type" : "object", - "properties" : { - "pageNo" : { - "type" : "integer", - "format" : "int64" - }, - "pageSize" : { - "type" : "integer", - "format" : "int64" - }, - "totalElements" : { - "type" : "integer", - "format" : "int64" - }, - "totalPages" : { - "type" : "integer", - "format" : "int64" - } - } - }, - "PaymentServiceProvider" : { - "title" : "PaymentServiceProvider", - "type" : "object", - "properties" : { - "abiCode" : { - "type" : "string" - }, - "businessRegisterNumber" : { - "type" : "string" - }, - "legalRegisterName" : { - "type" : "string" - }, - "legalRegisterNumber" : { - "type" : "string" - }, - "vatNumberGroup" : { - "type" : "boolean" - } - } - }, - "PaymentServiceProviderRequest" : { - "title" : "PaymentServiceProviderRequest", - "type" : "object", - "properties" : { - "abiCode" : { - "type" : "string" - }, - "businessRegisterNumber" : { - "type" : "string" - }, - "legalRegisterName" : { - "type" : "string" - }, - "legalRegisterNumber" : { - "type" : "string" - }, - "vatNumberGroup" : { - "type" : "boolean" - } - } - }, - "PaymentServiceProviderResponse" : { - "title" : "PaymentServiceProviderResponse", - "type" : "object", - "properties" : { - "abiCode" : { - "type" : "string" - }, - "businessRegisterNumber" : { - "type" : "string" - }, - "legalRegisterName" : { - "type" : "string" - }, - "legalRegisterNumber" : { - "type" : "string" - }, - "vatNumberGroup" : { - "type" : "boolean" - } - } - }, - "PdaInstitutionRequest" : { - "title" : "PdaInstitutionRequest", - "type" : "object", - "properties" : { - "billing" : { - "$ref" : "#/components/schemas/BillingRequest" - }, - "description" : { - "type" : "string" - }, - "injectionInstitutionType" : { - "type" : "string" - }, - "taxCode" : { - "type" : "string" - } - } - }, - "Problem" : { - "title" : "Problem", - "type" : "object", - "properties" : { - "errors" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/ProblemError" - } - }, - "status" : { - "type" : "integer", - "format" : "int32" - } - } - }, - "ProblemError" : { - "title" : "ProblemError", - "type" : "object" - }, - "RootParentResponse" : { - "title" : "RootParentResponse", - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "id" : { - "type" : "string" - } - } - }, - "UserToOnboard" : { - "title" : "UserToOnboard", - "type" : "object", - "properties" : { - "email" : { - "type" : "string" - }, - "env" : { - "type" : "string", - "enum" : [ "COLL", "DEV", "PROD", "ROOT" ] - }, - "id" : { - "type" : "string" - }, - "name" : { - "type" : "string" - }, - "productRole" : { - "type" : "string" - }, - "role" : { - "type" : "string", - "enum" : [ "DELEGATE", "MANAGER", "OPERATOR", "SUB_DELEGATE" ] - }, - "roleLabel" : { - "type" : "string" - }, - "surname" : { - "type" : "string" - }, - "taxCode" : { - "type" : "string" - } - } - } - }, - "securitySchemes" : { - "bearerAuth" : { - "type" : "http", - "description" : "A bearer token in the format of a JWS and conformed to the specifications included in [RFC8725](https://tools.ietf.org/html/RFC8725)", - "scheme" : "bearer", - "bearerFormat" : "JWT" - } - } - } -} \ No newline at end of file diff --git a/apps/institution-ms-new/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java b/apps/institution-ms-new/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java deleted file mode 100644 index 572f386..0000000 --- a/apps/institution-ms-new/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package it.pagopa.selfcare.mscore.web.config; - -import com.fasterxml.jackson.databind.ObjectMapper; -import it.pagopa.selfcare.mscore.core.*; -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.http.MediaType; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import springfox.documentation.oas.annotations.EnableOpenApi; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -@SpringBootTest(classes = { - SwaggerConfig.class, - WebConfig.class -}) -@EnableOpenApi -@EnableWebMvc -@Slf4j -@ComponentScan(basePackages = {"it.pagopa.selfcare.mscore.web.controller","it.pagopa.selfcare.mscore.web.model"}) -@TestPropertySource(locations = "classpath:config/application.yml") -class SwaggerConfigTest { - - @MockBean - ExternalService externalService; - - @MockBean - InstitutionService institutionService; - - @MockBean - OnboardingService onboardingService; - - @Autowired - WebApplicationContext context; - - @MockBean - DelegationService delegationService; - - @Autowired - private ObjectMapper objectMapper; - - @Test - void swaggerSpringPlugin() throws Exception { - MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(context).build(); - mockMvc.perform(MockMvcRequestBuilders.get("/v3/api-docs").accept(MediaType.APPLICATION_JSON)) - .andExpect(MockMvcResultMatchers.status().is2xxSuccessful()).andDo(result -> { - assertNotNull(result); - assertNotNull(result.getResponse()); - final String content = result.getResponse().getContentAsString(); - checkPlaceholders(content); - assertFalse(content.isBlank()); - assertFalse(content.contains("${"), "Generated swagger contains placeholders"); - Object swagger = objectMapper.readValue(result.getResponse().getContentAsString(), Object.class); - String formatted = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(swagger); - Path basePath = Paths.get("src/main/resources/swagger/"); - Files.createDirectories(basePath); - Files.write(basePath.resolve("api-docs.json"), formatted.getBytes()); - }); - } - - private static void checkPlaceholders(String content) { - Pattern pattern = Pattern.compile("\\$\\{(.*?)\\}"); - Matcher matcher = pattern.matcher(content); - while (matcher.find()) { - log.error("\033[31m An error occurred with placeholder: {}", matcher.group(1)); - } - } -} - diff --git a/apps/institution-ms-new/connector-api/pom.xml b/apps/institution-ms-new/connector-api/pom.xml deleted file mode 100644 index a2f0c26..0000000 --- a/apps/institution-ms-new/connector-api/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - 4.0.0 - - selc-ms-core - it.pagopa.selfcare - 1.0-SNAPSHOT - - - selc-ms-core-connector-api - - - - com.fasterxml.jackson.core - jackson-annotations - 2.13.4 - - - com.fasterxml.jackson.core - jackson-databind - - - - org.springframework.data - spring-data-commons - - - it.pagopa.selfcare - selc-commons-base - - - - it.pagopa.selfcare - onboarding-sdk-product - 0.1.15 - - - - - - selfcare-onboarding - Selfcare Onboarding SDK - https://maven.pkg.github.com/pagopa/selfcare-onboarding - - - - diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/DelegationConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/DelegationConnector.java deleted file mode 100644 index 3f2eff6..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/DelegationConnector.java +++ /dev/null @@ -1,22 +0,0 @@ -package it.pagopa.selfcare.mscore.api; - -import it.pagopa.selfcare.mscore.constant.DelegationState; -import it.pagopa.selfcare.mscore.constant.Order; -import it.pagopa.selfcare.mscore.model.delegation.Delegation; -import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; -import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; -import it.pagopa.selfcare.mscore.model.institution.Institution; - -import java.util.List; - -public interface DelegationConnector { - - Delegation save(Delegation delegation); - boolean checkIfExistsWithStatus(Delegation delegation, DelegationState status); - List find(String from, String to, String productId, String search, String taxCode, Order order, Integer page, Integer size); - DelegationWithPagination findAndCount(GetDelegationParameters delegationParameters); - Delegation findByIdAndModifyStatus(String delegationId, DelegationState status); - boolean checkIfDelegationsAreActive(String institutionId); - Delegation findAndActivate(String from, String to, String productId); - void updateDelegation(Institution update); -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/EmailConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/EmailConnector.java deleted file mode 100644 index 9c9733f..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/EmailConnector.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.api; - -import java.io.File; -import java.util.List; -import java.util.Map; - -public interface EmailConnector { - - void sendMail(String templateName, List destinationMail, File pdf, String productName, Map mailParameters, String nameFile); - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/FileStorageConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/FileStorageConnector.java deleted file mode 100644 index 73020d7..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/FileStorageConnector.java +++ /dev/null @@ -1,19 +0,0 @@ -package it.pagopa.selfcare.mscore.api; - -import it.pagopa.selfcare.mscore.model.onboarding.ResourceResponse; -import org.springframework.web.multipart.MultipartFile; - -import java.io.File; - -public interface FileStorageConnector { - - ResourceResponse getFile(String fileName); - - String getTemplateFile(String templateName); - - String uploadContract(String id, MultipartFile contract); - - void removeContract(String fileName, String tokenId); - - File getFileAsPdf(String contractTemplate); -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/InstitutionConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/InstitutionConnector.java deleted file mode 100644 index 661f7a4..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/InstitutionConnector.java +++ /dev/null @@ -1,62 +0,0 @@ -package it.pagopa.selfcare.mscore.api; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.constant.SearchMode; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; - -import java.time.OffsetDateTime; -import java.util.List; -import java.util.Optional; - -public interface InstitutionConnector { - - Institution save(Institution example); - - List findAll(); - - void deleteById(String id); - - void findAndDeleteOnboarding(String institutionId, String productId); - - List findByTaxCodeSubunitCodeAndOrigin(String taxtCode, String subunitCode, String origin, String originId); - - Boolean existsByTaxCodeAndSubunitCodeAndProductAndStatusList(String taxtCode, String subunitCode, Optional productId, List validRelationshipStates); - - Optional findByExternalId(String externalId); - - List findWithFilter(String externalId, String productId, List validRelationshipStates); - - Institution findById(String id); - - Institution findAndUpdateStatus(String id, String tokenId, RelationshipState state); - - Institution findAndUpdate(String id, Onboarding onboarding, List geographicTaxonomies, InstitutionUpdate institutionUpdate); - - Institution findByExternalIdAndProductId(String externalId, String productId); - - List findOnboardingByIdAndProductId(String externalId, String productId); - - List findInstitutionsByProductId(String productId, Integer page, Integer size); - - void findAndRemoveOnboarding(String institutionId, Onboarding onboarding); - - List findByGeotaxonomies(List geo, SearchMode searchMode); - - List findByProductId(String productId); - - List findAllByIds(List ids); - - List findByExternalIdsAndProductId(List externalIds, String productId); - - Institution updateOnboardedProductCreatedAt(String institutionId, String productId, OffsetDateTime createdAt); - - List findBrokers(String productId, InstitutionType type); - - List findByTaxCodeAndSubunitCode(String taxCode, String subunitCode); - - List findByOriginAndOriginId(String origin, String originId); - - Boolean existsOnboardingByFilters(VerifyOnboardingFilters filters); -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/NotificationServiceConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/NotificationServiceConnector.java deleted file mode 100644 index e934b0e..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/NotificationServiceConnector.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.api; - - -import it.pagopa.selfcare.mscore.model.notification.MessageRequest; -import it.pagopa.selfcare.mscore.model.notification.MultipleReceiverMessageRequest; - -public interface NotificationServiceConnector { - void sendNotificationToUser(MessageRequest messageRequest); - void sendNotificationToUsers(MultipleReceiverMessageRequest multipleReceiverMessageRequest); - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PartyRegistryProxyConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PartyRegistryProxyConnector.java deleted file mode 100644 index bf81a39..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PartyRegistryProxyConnector.java +++ /dev/null @@ -1,28 +0,0 @@ -package it.pagopa.selfcare.mscore.api; - -import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; -import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; -import it.pagopa.selfcare.mscore.model.institution.*; - -import java.util.List; - -public interface PartyRegistryProxyConnector { - - InstitutionProxyInfo getInstitutionById(String id); - - CategoryProxyInfo getCategory(String origin, String code); - - List getInstitutionsByLegal(String taxId); - - NationalRegistriesProfessionalAddress getLegalAddress(String taxId); - - GeographicTaxonomies getExtByCode(String code); - - AreaOrganizzativaOmogenea getAooById(String aooId); - - UnitaOrganizzativa getUoById(String uoId); - - SaResource getSAFromAnac(String taxId); - - ASResource getASFromIvass(String ivassCode); -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PecNotificationConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PecNotificationConnector.java deleted file mode 100644 index 003c214..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PecNotificationConnector.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.api; - -import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; - -public interface PecNotificationConnector { - - boolean findAndDeletePecNotification(String institutionId, String productId); - - boolean insertPecNotification(PecNotification pecNotification); -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/ProductConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/ProductConnector.java deleted file mode 100644 index 5ff62c7..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/ProductConnector.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.api; - - -import it.pagopa.selfcare.product.entity.Product; - -public interface ProductConnector { - Product getProductById(String productId); - - Product getProductValidById(String productId); -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserApiConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserApiConnector.java deleted file mode 100644 index 383081c..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserApiConnector.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.api; - - -import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; - -import java.util.List; - -public interface UserApiConnector { - - List getUserEmails(String institutionId, String productId); - - void updateUserInstitution(String institutionId, InstitutionUpdate institutionUpdate); - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserRegistryConnector.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserRegistryConnector.java deleted file mode 100644 index 2bff80e..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserRegistryConnector.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.pagopa.selfcare.mscore.api; - -import it.pagopa.selfcare.mscore.model.user.User; - -public interface UserRegistryConnector { - - User getUserByInternalIdWithFiscalCode(String userId); - - User getUserByInternalId(String userId); - - User getUserByInternalIdWithCustomFields(String userId, String fieldList); - - User getUserByFiscalCode(String fiscalCode); - - User persistUserUsingPatch(String name, String familyName, String fiscalCode, String email, String institutionId); - - User persistUserWorksContractUsingPatch(String fiscalCode, String email, String institutionId); -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/AzureStorageConfig.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/AzureStorageConfig.java deleted file mode 100644 index 22a5e8d..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/AzureStorageConfig.java +++ /dev/null @@ -1,25 +0,0 @@ -package it.pagopa.selfcare.mscore.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.context.annotation.PropertySource; - -@Data -@Configuration -@PropertySource("classpath:config/azure-storage-config.properties") -@ConfigurationProperties(prefix = "blob-storage") -@Profile("AzureStorage") -public class AzureStorageConfig { - - private String connectionString; - private String accountName; - private String endpointSuffix; - private String accountKey; - - private String container; - private String contractPath; - - private String checkoutTemplateContainer; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/CoreConfig.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/CoreConfig.java deleted file mode 100644 index 0741d36..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/CoreConfig.java +++ /dev/null @@ -1,36 +0,0 @@ -package it.pagopa.selfcare.mscore.config; - -import lombok.Data; -import lombok.ToString; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; - -import java.util.List; - -@Configuration -@PropertySource("classpath:config/core-config.properties") -@ConfigurationProperties(prefix = "mscore") -@Data -@ToString -public class CoreConfig { - - private String logoPath; - private String senderMail; - private List destinationMails; - private String institutionAlternativeEmail; - private boolean sendEmailToInstitution; - private boolean infoCamereEnable; - private boolean enableSendDelegationMail; - private BlobStorage blobStorage; - private String awsSesSecretId; - private String awsSesSecretKey; - private String awsSesRegion; - - @Data - public static class BlobStorage { - private String containerProduct; - private String filepathProduct; - private String connectionStringProduct; - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/MailTemplateConfig.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/MailTemplateConfig.java deleted file mode 100644 index dc111e9..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/MailTemplateConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package it.pagopa.selfcare.mscore.config; - -import lombok.Data; -import lombok.ToString; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; - -@Configuration -@PropertySource("classpath:config/core-config.properties") -@ConfigurationProperties(prefix = "mscore.mail-template.placeholders.onboarding") -@Data -@ToString -public class MailTemplateConfig { - - private String delegationNotificationPath; - private String delegationUserNotificationPath; - private String delegationPartnerName; - - private String institutionDescription; - - private String notificationProductName; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/CustomError.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/CustomError.java deleted file mode 100644 index 8f0f4f5..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/CustomError.java +++ /dev/null @@ -1,68 +0,0 @@ -package it.pagopa.selfcare.mscore.constant; - -public enum CustomError { - - RELATIONSHIP_ID_NOT_FOUND("0008", "Relationship %s not found"), - GET_INSTITUTION_MANAGER_NOT_FOUND("0043", "Cannot find active manager for institution having externalId %s and product %s"), - USER_NOT_FOUND_ERROR("0031", "User having userId %s not found"), - USERS_NOT_FOUND_ERROR("0031", "Users having userIds %s not found"), - USERS_SIZE_NOT_ADMITTED("0030","At least one user for onboarding PG"), - PRODUCT_ALREADY_ONBOARDED("0032", "Product %s already onboarded for institution having externalId %s"), - MANAGER_NOT_FOUND_GENERIC_ERROR("0033", "No onboarded managers"), - MANAGER_NOT_FOUND_ERROR("0033", "No onboarded managers for at least one of the institutions %s and product %s"), - ROLES_NOT_ADMITTED_ERROR("0034","Roles %s are not admitted for this operation"), - INSTITUTION_NOT_ONBOARDED("0004", "Institution having externalId %s is not onboarded for product %s"), - INSTITUTION_NOT_ONBOARDED_BY_FILTERS("0004", "Has not been found an onboarded Institution with the provided filters"), - INSTITUTION_NOT_FOUND("0036", "Cannot find Institution using institutionId %s and externalInstitutionId %s"), - INSTITUTION_LEGAL_NOT_FOUND("0037", "Institution with externalInstitutionId %s is not related to user"), - CREATE_INSTITUTION_CONFLICT("0038", "Institution having externalId %s already exists"), - CREATE_INSTITUTION_IPA_CONFLICT("0038", "Institution having taxCode %s and subunitCode %s already exists"), - CREATE_INSTITUTION_ORIGIN_CONFLICT("0038", "Institution having origin %s and originId %s already exists"), - CREATE_INSTITUTION_NOT_FOUND("0039", "Institution having externalId %s not exists in registry"), - INSTITUTION_TAX_CODE_NOT_FOUND("0040", "Cannot find Institution using taxCode %s"), - ONBOARDING_INVALID_UPDATES("0046", "Cannot perform data overrides on institution having external id %s"), - GEO_TAXONOMY_CODE_NOT_FOUND("0049", "Error on retrieve geographic taxonomy code: %s"), - PRODUCTS_NOT_FOUND_ERROR("0030", "Products not found for institution having internalId %s"), - ONBOARDING_INFO_INSTITUTION_NOT_FOUND("0050", "No onboarding information found for %s"), - ONBOARDING_INFO_ERROR("0051", "Error getting onboarding info"), - ONBOARDING_INFO_FILTERS_ERROR("0052", "Invalid filters parameters to retrieve onboarding info"), - ONBOARDING_BILLING_ERROR("0000", "Billing vatNumber and recipientCode are required"), - ONBOARDING_BILLING_VATNUMBER_ERROR("0000", "Billing vatNumber is required"), - ONBOARDING_PENDING("0000", "There is already an onboarding request for product %s pending"), - TOKEN_ALREADY_CONSUMED("0040", "Token %s has already consumed"), - TOKEN_EXPIRED("0040", "Token %s is expired in %s and is status is DELETED"), - TOKEN_NOT_FOUND("0014", "Token %s not found"), - CONTRACT_NOT_FOUND("0015", "Token for institution %s and product %s not found or is in invalid status"), - DOCUMENT_NOT_FOUND("0016", "Document for relationship %s not found"), - GET_INSTITUTION_BILLING_ERROR("0044", "Error while retrieving institution having externalId %s and productId %s"), - RELATIONSHIP_NOT_ACTIVABLE("0007", "Relationship %s cannot be activated"), - INVALID_STATUS_CHANGE("0000", "Cannot update state from value %s to value %s"), - RELATIONSHIP_NOT_SUSPENDABLE("0010", "Relationship %s cannot be suspended"), - MISSING_QUERY_PARAMETER("0045", "At least one query parameter between [userId, institutionId] must be passed"), - RELATIONSHIP_NOT_FOUND("0008", "Relationship not found for Institution %s, User %s and Role %s"), - CREATE_DELEGATION_CONFLICT("0041", "Delegation with parameters [from, to, productId, type] already exists"), - INSTITUTION_NOT_FOUND_IN_REGISTRY("0042", "NOT_FOUND_IN_REGISTRY"), - ROLE_NOT_FOUND("0000", "ROLE_NOT_FOUND"), - ROLE_IS_NULL("0000", "ROLE_IS_NULL - Role is required if productRole is present"), - PRODUCT_ROLE_NOT_FOUND("0000", "PRODUCT_ROLE_NOT_FOUND"), - DELEGATION_NOT_FOUND("0047", "Cannot find Delegation with parameters: to %s, from %s, productId: %s"); - - - - private final String code; - private final String detail; - - CustomError(String code, String detail) { - this.code = code; - this.detail = detail; - } - - public String getCode() { - return code; - } - - public String getMessage() { - return detail; - } - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationState.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationState.java deleted file mode 100644 index cb78d40..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationState.java +++ /dev/null @@ -1,6 +0,0 @@ -package it.pagopa.selfcare.mscore.constant; - -public enum DelegationState { - ACTIVE, - DELETED, -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationType.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationType.java deleted file mode 100644 index 5d96f18..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationType.java +++ /dev/null @@ -1,7 +0,0 @@ -package it.pagopa.selfcare.mscore.constant; - -public enum DelegationType { - PT, - AOO, - EA -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Env.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Env.java deleted file mode 100644 index b94d52a..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Env.java +++ /dev/null @@ -1,8 +0,0 @@ -package it.pagopa.selfcare.mscore.constant; - -public enum Env { - ROOT, - DEV, - COLL, - PROD -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/GenericError.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/GenericError.java deleted file mode 100644 index c7b0911..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/GenericError.java +++ /dev/null @@ -1,86 +0,0 @@ -package it.pagopa.selfcare.mscore.constant; - -public enum GenericError { - - GET_USER_INSTITUTION_RELATIONSHIP_ERROR("0023", "Error while retrieving user relationships"), - GET_INSTITUTION_BY_ID_ERROR("0040", "Error while retrieving institution having id %s"), - GET_INSTITUTION_BY_EXTERNAL_ID_ERROR("0041", "Error while retrieving institution having externalId %s"), - INSTITUTION_MANAGER_ERROR("0042", "Error while retrieving institution having externalId %s"), - INSTITUTION_BILLING_ERROR("0044", "Error while retrieving institution having externalId %s"), - CREATE_INSTITUTION_ERROR("0037", "Error while creating requested institution"), - INSTITUTION_INFOCAMERE_NOTFOUND("0039", "Institution %s not found on INFOCAMERE"), - ONBOARDING_OPERATION_ERROR("0017", "Error while performing onboarding operation"), - CREATE_DELEGATION_ERROR("001-0027", "Error while creating requested delegation"), - SEND_MAIL_FOR_DELEGATION_ERROR("002-0027", "Error during send mail for delegation"), - DELETE_DELEGATION_ERROR("0003-0027", "Error while deleting delegation"), - UPDATE_DELEGATION_ERROR("004-0027", "Error while updating delegation"), - ONBOARDING_VERIFICATION_ERROR("0015", "Error while verifying onboarding"), - GETTING_ONBOARDING_INFO_ERROR("0016", "Error while getting onboarding info"), - GET_PRODUCTS_ERROR("0031", "Error while getting products"), - CONTRACT_PATH_ERROR("0100", "Contract Path is required"), - MANAGER_EMAIL_NOT_FOUND("0101", "Manager email not found"), - VERIFY_TOKEN_FAILED("0041", "Something went wrong trying to verify token"), - - SIGNATURE_NOT_FOUND("002-1007", "No signature found"), - SIGNATURE_VALIDATION_ERROR("002-1004", "The tax code related to signature does not match anyone contained in the relationships"), - ORIGINAL_DOCUMENT_NOT_FOUND("002-1008", "Original document information not found"), - - INSTITUTION_NOT_ONBOARDED("002-1009", "Institution having externalId %s has already onboarded for product %s"), - DOCUMENT_VALIDATION_FAIL("002-1000", "Error trying to validate document, due: %s"), - INVALID_SIGNATURE_FORMS("002-1003", "Only CAdES signature form is admitted. Invalid signatures forms detected: %s"), - INVALIDATE_ONBOARDING_ERROR("0022", "Error while invalidating onboarding"), - CONFIRM_ONBOARDING_ERROR("0021", "Error while confirming onboarding"), - INVALID_DOCUMENT_SIGNATURE("002-1002", "Document signature is invalid"), - INVALID_CONTRACT_DIGEST("002-1001", "Invalid file digest"), - - INVALIDE_SIGNATURE_TAX_CODE_FORMAT("002-1005", "Invalid tax code format found in digital signature"), - TAX_CODE_NOT_FOUND_IN_SIGNATURE("002-1006", "No tax code has been found in digital signature"), - INVALID_SIGNATURE_TAX_CODE("002-1004", "The tax code related to signature does not match anyone contained in the relationships"), - UNABLE_TO_DOWNLOAD_FILE("1102", "Unable to download template %s"), - INVALID_SIGNATURE("002-1005", "Signature not valid: "), - ERROR_DURING_SEND_MAIL("0000", "Error during send mail"), - ERROR_DURING_UPLOAD_FILE("0000", "Error during upload file %s"), - - ERROR_DURING_DELETED_FILE("0000", "Error during deleted file %s"), - ERROR_DURING_DOWNLOAD_FILE("0000", "Error during download file %s"), - ERROR_DURING_COMPRESS_FILE("0000", "Error compressing the file %s"), - RETRIEVING_USER_RELATIONSHIP_ERROR("0023", "Error while retrieving user relationships"), - ACTIVATE_RELATIONSHIP_ERROR("0024", "Error while activating relationship"), - SUSPEND_RELATIONSHIP_ERROR("0025", "Error while suspending relationship"), - PUT_INSTITUTION_ERROR("0051", "Error while updating institution"), - ONBOARDING_SUBDELEGATES_ERROR("0019", "Error while onboarding subdelegates"), - ONBOARDING_OPERATORS_ERROR("0020", "Error while onboarding operators"), - ONBOARDING_LEGALS_ERROR("0018", "Error while onboarding legals"), - RETRIEVE_GEO_TAXONOMIES_ERROR("0050", "Error while retrieving institution geographic taxonomy"), - GET_RELATIONSHIP_ERROR("0028", "Error while getting relationship"), - CREATE_PERSON_ERROR("0009", "Error while creating person"), - GET_INSTITUTION_ATTRIBUTES_ERROR("0022", "Error while getting party attributes"), - GET_INSTITUTION_BY_GEOTAXONOMY_ERROR("0053", "Error while searching institutions related to given geoTaxonomies"), - GET_INSTITUTION_BY_PRODUCTID_ERROR("0053", "Error while searching institutions related to given productId"), - GET_INSTITUTIONS_REQUEST_ERROR("0054", "Invalid request parameters sent. Allowed filters combinations taxCode and subunit or origin and originId"), - VERIFY_USER_ERROR("0000", "Error while searching institutions related to given productId"), - GET_USER_ERROR("0000", "Error while searching user given UserID"), - UPDATE_USER_INSTITUTION_ERROR("0000", "Error while updating InstitutionUser for id %s"), - GENERIC_ERROR("0000", "Generic Error"), - DELETE_ONBOARDED_OPERATION_ERROR("0000", "Error while deleting Onboarded Institution"), - DELETE_NOTIFICATION_OPERATION_ERROR ("0000", "PecNotificationEntity was not deleted because either it does not exist or there are multiple records"), - INVALID_INSERT_PEC_NOTIFICATION_ERROR ("0001", "PecNotificationEntity was not inserted because either it exist or the data are invalid"); - - private final String code; - private final String detail; - - - GenericError(String code, String detail) { - this.code = code; - this.detail = detail; - } - - public String getCode() { - return code; - } - - public String getMessage() { - return detail; - } - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Order.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Order.java deleted file mode 100644 index c02e8db..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Order.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.pagopa.selfcare.mscore.constant; - -public enum Order { - - NONE, - ASC, - DESC; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Origin.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Origin.java deleted file mode 100644 index 31bcbbb..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Origin.java +++ /dev/null @@ -1,48 +0,0 @@ -package it.pagopa.selfcare.mscore.constant; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonValue; -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import org.springframework.util.StringUtils; - -import java.util.Arrays; - -public enum Origin { - MOCK("MOCK"), - IPA("IPA"), - SELC("SELC"), - ANAC("ANAC"), - UNKNOWN("UNKNOWN"), - ADE("ADE"), - INFOCAMERE("INFOCAMERE"), - IVASS("IVASS"); - - private final String value; - - Origin(String value) { - this.value = value; - } - - public String getValue() { - return value; - } - - @Override - @JsonValue - public String toString() { - return value; - } - - @JsonCreator - public static Origin fromValue(String value) { - if(StringUtils.hasText(value)) { - return Arrays.stream(values()) - .filter(origin -> origin.toString().equals(value)) - .findAny() - .orElseThrow(() -> new InvalidRequestException("Valid value for Origin are: IPA, INFOCAMERE, SELC or static", "0000")); - }else{ - return Origin.UNKNOWN; - } - } - -} \ No newline at end of file diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/PricingPlan.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/PricingPlan.java deleted file mode 100644 index 42c8326..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/PricingPlan.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.constant; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -@Getter -@AllArgsConstructor -public enum PricingPlan { - - FA("FAST"), - BASE("BASE"), - PREMIUM("PREMIUM"); - - private final String value; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/ProductId.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/ProductId.java deleted file mode 100644 index 7657544..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/ProductId.java +++ /dev/null @@ -1,32 +0,0 @@ -package it.pagopa.selfcare.mscore.constant; - -import com.fasterxml.jackson.annotation.JsonValue; - -public enum ProductId { - - PROD_INTEROP("prod-interop"), - PROD_PN("prod-pn"), - PROD_FD("prod-fd"), - PROD_FD_GARANTITO("prod-fd-garantito"), - PROD_IO("prod-io"), - PROD_INTEROP_COLL("prod-interop-coll"), - PROD_IO_SIGN("prod-io-sign"), - PROD_PAGOPA("prod-pagopa"), - PROD_IO_PREMIUM("prod-io-premium"); - - private final String value; - - ProductId(String value) { - this.value = value; - } - - public String getValue() { - return value; - } - - @Override - @JsonValue - public String toString() { - return value; - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/RelationshipState.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/RelationshipState.java deleted file mode 100644 index 89bac4c..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/RelationshipState.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.constant; - -public enum RelationshipState { - ACTIVE, - PENDING, - TOBEVALIDATED, - SUSPENDED, - DELETED, - REJECTED -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/SearchMode.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/SearchMode.java deleted file mode 100644 index 0075c6e..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/SearchMode.java +++ /dev/null @@ -1,7 +0,0 @@ -package it.pagopa.selfcare.mscore.constant; - -public enum SearchMode { - ALL, - ANY, - EXACT -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/TokenType.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/TokenType.java deleted file mode 100644 index f424c78..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/TokenType.java +++ /dev/null @@ -1,6 +0,0 @@ -package it.pagopa.selfcare.mscore.constant; - -public enum TokenType { - INSTITUTION, - LEGALS -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/BadGatewayException.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/BadGatewayException.java deleted file mode 100644 index 604792b..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/BadGatewayException.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.exception; - -import lombok.NoArgsConstructor; - -@NoArgsConstructor -public class BadGatewayException extends RuntimeException { - - public BadGatewayException(String message) { - super(message); - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/InvalidRequestException.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/InvalidRequestException.java deleted file mode 100644 index 58218f3..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/InvalidRequestException.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.exception; - -public class InvalidRequestException extends RuntimeException{ - private final String code; - - public InvalidRequestException(String message, String code) { - super(message); - this.code = code; - } - - public String getCode() { - return code; - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/MsCoreException.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/MsCoreException.java deleted file mode 100644 index 04a9b2f..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/MsCoreException.java +++ /dev/null @@ -1,15 +0,0 @@ -package it.pagopa.selfcare.mscore.exception; - -public class MsCoreException extends RuntimeException { - - private final String code; - - public MsCoreException(String message, String code) { - super(message); - this.code = code; - } - - public String getCode() { - return code; - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceConflictException.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceConflictException.java deleted file mode 100644 index 3e0386e..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceConflictException.java +++ /dev/null @@ -1,15 +0,0 @@ -package it.pagopa.selfcare.mscore.exception; - - -public class ResourceConflictException extends RuntimeException { - - private final String code; - public ResourceConflictException(String message, String code) { - super(message); - this.code = code; - } - - public String getCode() { - return code; - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceForbiddenException.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceForbiddenException.java deleted file mode 100644 index c38a896..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceForbiddenException.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.exception; - -public class ResourceForbiddenException extends RuntimeException{ - private final String code; - - public ResourceForbiddenException(String message, String code) { - super(message); - this.code = code; - } - - public String getCode() { - return code; - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundException.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundException.java deleted file mode 100644 index e3eeb6f..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundException.java +++ /dev/null @@ -1,15 +0,0 @@ -package it.pagopa.selfcare.mscore.exception; - - -public class ResourceNotFoundException extends RuntimeException { - - private final String code; - public ResourceNotFoundException(String message, String code) { - super(message); - this.code = code; - } - - public String getCode() { - return code; - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ServiceUnavailableException.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ServiceUnavailableException.java deleted file mode 100644 index d51d4c4..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ServiceUnavailableException.java +++ /dev/null @@ -1,4 +0,0 @@ -package it.pagopa.selfcare.mscore.exception; - -public class ServiceUnavailableException extends RuntimeException { -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/AreaOrganizzativaOmogenea.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/AreaOrganizzativaOmogenea.java deleted file mode 100644 index ec9a832..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/AreaOrganizzativaOmogenea.java +++ /dev/null @@ -1,22 +0,0 @@ -package it.pagopa.selfcare.mscore.model; - -import it.pagopa.selfcare.mscore.constant.Origin; -import lombok.Data; - -@Data -public class AreaOrganizzativaOmogenea { - - private String id; - private String codiceIpa; - private String denominazioneEnte; - private String codiceFiscaleEnte; - private String codiceUniAoo; - private String denominazioneAoo; - private String mail1; - private String tipoMail1; - private String codAoo; - private Origin origin; - private String indirizzo; - private String CAP; - private String codiceComuneISTAT; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/Certification.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/Certification.java deleted file mode 100644 index d27f90b..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/Certification.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.pagopa.selfcare.mscore.model; - -public enum Certification { - NONE, SPID; - - public static boolean isCertified(Certification certification) { - return certification != null && !Certification.NONE.equals(certification); - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/CertifiedField.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/CertifiedField.java deleted file mode 100644 index 983c4f9..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/CertifiedField.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.pagopa.selfcare.mscore.model; - -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -public class CertifiedField { - - private Certification certification; - private T value; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/InstitutionToNotify.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/InstitutionToNotify.java deleted file mode 100644 index ce6e8bf..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/InstitutionToNotify.java +++ /dev/null @@ -1,34 +0,0 @@ -package it.pagopa.selfcare.mscore.model; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) -public class InstitutionToNotify { - - private InstitutionType institutionType; - private String description; - private String digitalAddress; - private String address; - private String taxCode; - private String origin; - private String originId; - private String zipCode; - private PaymentServiceProvider paymentServiceProvider; - private String istatCode; - private String city; - private String country; - private String county; - private String subUnitCode; - private String category; - private String subUnitType; - private RootParent rootParent; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/QueueEvent.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/QueueEvent.java deleted file mode 100644 index a2c907d..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/QueueEvent.java +++ /dev/null @@ -1,6 +0,0 @@ -package it.pagopa.selfcare.mscore.model; - -public enum QueueEvent { - ADD, - UPDATE -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/RootParent.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/RootParent.java deleted file mode 100644 index 9d55f2d..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/RootParent.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.model; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class RootParent { - private String id; - private String originId; - private String description; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UnitaOrganizzativa.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UnitaOrganizzativa.java deleted file mode 100644 index 51cd888..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UnitaOrganizzativa.java +++ /dev/null @@ -1,23 +0,0 @@ -package it.pagopa.selfcare.mscore.model; - -import it.pagopa.selfcare.mscore.constant.Origin; -import lombok.Data; - -@Data -public class UnitaOrganizzativa { - - private String id; - private String codiceIpa; - private String denominazioneEnte; - private String codiceFiscaleEnte; - private String codiceUniUo; - private String codiceUniUoPadre; - private String codiceUniAoo; - private String descrizioneUo; - private String mail1; - private String tipoMail1; - private Origin origin; - private String indirizzo; - private String CAP; - private String codiceComuneISTAT; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UserToNotify.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UserToNotify.java deleted file mode 100644 index d7e16d3..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UserToNotify.java +++ /dev/null @@ -1,22 +0,0 @@ -package it.pagopa.selfcare.mscore.model; - -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class UserToNotify { - - private String userId; - private String name; - private String familyName; - private String email; - private PartyRole role; - private String productRole; - private RelationshipState relationshipStatus; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/QueryCount.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/QueryCount.java deleted file mode 100644 index 09a23b2..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/QueryCount.java +++ /dev/null @@ -1,15 +0,0 @@ -package it.pagopa.selfcare.mscore.model.aggregation; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.FieldNameConstants; - -@Data -@FieldNameConstants(asEnum = true) -@AllArgsConstructor -@NoArgsConstructor -public class QueryCount { - private String _id; - private Integer count; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionAggregation.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionAggregation.java deleted file mode 100644 index 86bcfe5..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionAggregation.java +++ /dev/null @@ -1,19 +0,0 @@ -package it.pagopa.selfcare.mscore.model.aggregation; - -import it.pagopa.selfcare.mscore.model.institution.Institution; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.FieldNameConstants; - -import java.util.List; - -@Data -@FieldNameConstants(asEnum = true) -@AllArgsConstructor -@NoArgsConstructor -public class UserInstitutionAggregation { - private String id; - private UserInstitutionBinding bindings; - private List institutions; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionBinding.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionBinding.java deleted file mode 100644 index 171d78b..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionBinding.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.model.aggregation; - -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.FieldNameConstants; - -@Data -@FieldNameConstants(asEnum = true) -@AllArgsConstructor -@NoArgsConstructor -public class UserInstitutionBinding { - private String institutionId; - private OnboardedProduct products; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionFilter.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionFilter.java deleted file mode 100644 index 964a20f..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionFilter.java +++ /dev/null @@ -1,24 +0,0 @@ -package it.pagopa.selfcare.mscore.model.aggregation; - -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@NoArgsConstructor -public class UserInstitutionFilter { - private String fromCollection = "User"; - private String toCollection = "Institution"; - private String userId; - private String institutionId; - private String externalId; - private List states; - - public UserInstitutionFilter(String userId, String institutionId, String externalId, List states) { - this.userId = userId; - this.institutionId = institutionId; - this.externalId = externalId; - this.states = states; - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/Delegation.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/Delegation.java deleted file mode 100644 index ac280c7..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/Delegation.java +++ /dev/null @@ -1,39 +0,0 @@ -package it.pagopa.selfcare.mscore.model.delegation; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.DelegationState; -import it.pagopa.selfcare.mscore.constant.DelegationType; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.time.OffsetDateTime; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) -public class Delegation { - - private String id; - private String from; - private String institutionFromName; - private String institutionToName; - private String institutionFromRootName; - private DelegationType type; - private String to; - private String productId; - private InstitutionType institutionType; - private String taxCode; - private String toTaxCode; - private String fromTaxCode; - private InstitutionType brokerType; - private String brokerTaxCode; - private String fromSubunitCode; - private String toSubunitCode; - private DelegationState status; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationInstitution.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationInstitution.java deleted file mode 100644 index d8ae94f..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationInstitution.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.pagopa.selfcare.mscore.model.delegation; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) -public class DelegationInstitution extends Delegation { - private List institutions; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationWithPagination.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationWithPagination.java deleted file mode 100644 index 21caece..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationWithPagination.java +++ /dev/null @@ -1,19 +0,0 @@ -package it.pagopa.selfcare.mscore.model.delegation; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) -public class DelegationWithPagination { - - private List delegations; - private PageInfo pageInfo; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/GetDelegationParameters.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/GetDelegationParameters.java deleted file mode 100644 index 902fcf5..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/GetDelegationParameters.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.pagopa.selfcare.mscore.model.delegation; - -import it.pagopa.selfcare.mscore.constant.Order; -import lombok.Builder; -import lombok.Data; - -@Data -@Builder -public class GetDelegationParameters { - private String from; - private String to; - private String productId; - private String search; - private String taxCode; - private Order order; - private Integer page; - private Integer size; -} \ No newline at end of file diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/PageInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/PageInfo.java deleted file mode 100644 index 7927725..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/PageInfo.java +++ /dev/null @@ -1,17 +0,0 @@ -package it.pagopa.selfcare.mscore.model.delegation; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) -public class PageInfo { - private long pageSize; - private long pageNo; - private long totalElements; - private long totalPages; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/Problem.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/Problem.java deleted file mode 100644 index 3e29c6d..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/Problem.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.model.error; - -import lombok.Data; - -import java.util.List; - -@Data -public class Problem { - private Integer status; - private List errors; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/ProblemError.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/ProblemError.java deleted file mode 100644 index 0e81b2c..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/ProblemError.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.model.error; - -import lombok.Builder; - - -@Builder -public class ProblemError { - private String code; - private String detail; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ASResource.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ASResource.java deleted file mode 100644 index 98d2568..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ASResource.java +++ /dev/null @@ -1,17 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import it.pagopa.selfcare.mscore.constant.Origin; -import lombok.Data; - -@Data -public class ASResource { - private String id; - private String originId; - private String taxCode; - private String description; - private String digitalAddress; - private String workType; - private String registerType; - private String address; - private Origin origin; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/AdditionalInformations.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/AdditionalInformations.java deleted file mode 100644 index 04847ad..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/AdditionalInformations.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.Data; - -@Data -public class AdditionalInformations { - private boolean belongRegulatedMarket; - private String regulatedMarketNote; - private boolean ipa; - private String ipaCode; - private boolean establishedByRegulatoryProvision; - private String establishedByRegulatoryProvisionNote; - private boolean agentOfPublicService; - private String agentOfPublicServiceNote; - private String otherNote; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Attributes.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Attributes.java deleted file mode 100644 index 51c3b66..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Attributes.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.Data; - -@Data -public class Attributes { - private String origin; - private String code; - private String description; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Billing.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Billing.java deleted file mode 100644 index bd79c5a..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Billing.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -@Data -public class Billing { - - @JsonProperty("vatNumber") - private String vatNumber; - - @JsonProperty("taxCodeInvoicing") - private String taxCodeInvoicing; - - @JsonProperty("recipientCode") - private String recipientCode; - - @JsonProperty("publicServices") - private boolean publicServices; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/CategoryProxyInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/CategoryProxyInfo.java deleted file mode 100644 index f6fd86a..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/CategoryProxyInfo.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.Data; - -@Data -public class CategoryProxyInfo { - private String code; - private String name; - private String kind; - private String origin; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/DataProtectionOfficer.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/DataProtectionOfficer.java deleted file mode 100644 index b1f80b6..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/DataProtectionOfficer.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.FieldNameConstants; - -@Data -@AllArgsConstructor -@NoArgsConstructor -@FieldNameConstants(asEnum = true) -public class DataProtectionOfficer { - - private String address; - private String email; - private String pec; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomies.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomies.java deleted file mode 100644 index b586660..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomies.java +++ /dev/null @@ -1,26 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -@Data -public class GeographicTaxonomies { - @JsonProperty("code") - private String geotaxId; //REQUIRED - @JsonProperty("desc") - private String description; - @JsonProperty("istat_code")//REQUIRED - private String istatCode; - @JsonProperty("province_id") - private String provinceId; - @JsonProperty("province_abbreviation") - private String provinceAbbreviation; - @JsonProperty("region_id") - private String regionId; - @JsonProperty("country") - private String country; - @JsonProperty("country_abbreviation") - private String countryAbbreviation; - @JsonProperty("enabled") - private boolean enable; //REQUIRED -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomyPage.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomyPage.java deleted file mode 100644 index fe9e2b1..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomyPage.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.Data; - -import java.util.List; - -@Data -public class GeographicTaxonomyPage { - private Integer total; - private List data; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Institution.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Institution.java deleted file mode 100644 index 84c6b61..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Institution.java +++ /dev/null @@ -1,54 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.time.OffsetDateTime; -import java.util.List; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) -public class Institution { - - private String id; - private String externalId; - private String origin; - private String originId; - private String description; - private InstitutionType institutionType; - private String digitalAddress; - private String address; - private String zipCode; - private String taxCode; - private String ivassCode; - private String city; - private String county; - private String country; - private String istatCode; - private Billing billing; - private List onboarding; - private List geographicTaxonomies; - private List attributes; - private PaymentServiceProvider paymentServiceProvider; - private DataProtectionOfficer dataProtectionOfficer; - private String rea; - private String shareCapital; - private String businessRegisterPlace; - private String supportEmail; - private String supportPhone; - private boolean imported; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - private String subunitCode; - private String subunitType; - private String rootParentId; - private String parentDescription; - private PaAttributes paAttributes; - private boolean delegation; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionByLegal.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionByLegal.java deleted file mode 100644 index 37c7316..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionByLegal.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.Data; - -@Data -public class InstitutionByLegal { - private String businessName; - private String businessTaxId; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomies.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomies.java deleted file mode 100644 index ccc76f9..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomies.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class InstitutionGeographicTaxonomies { - private String code; - private String desc; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomyPage.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomyPage.java deleted file mode 100644 index 23ebe6a..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomyPage.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.Data; - -import java.util.List; - -@Data -public class InstitutionGeographicTaxonomyPage { - private Integer total; - private List data; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionProxyInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionProxyInfo.java deleted file mode 100644 index ee0e4ec..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionProxyInfo.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.Data; - -@Data -public class InstitutionProxyInfo { - private String id; - private String originId; - private String o; - private String ou; - private String aoo; - private String taxCode; - private String category; - private String description; - private String digitalAddress; - private String address; - private String zipCode; - private String origin; - private String istatCode; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionUpdate.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionUpdate.java deleted file mode 100644 index 902bfb7..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionUpdate.java +++ /dev/null @@ -1,36 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import lombok.Data; -import lombok.experimental.FieldNameConstants; - -import java.util.List; - -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@FieldNameConstants(asEnum = true) -public class InstitutionUpdate { - private InstitutionType institutionType; - private String description; - private String digitalAddress; - private String address; - private String taxCode; - private String zipCode; - private String city; - private String county; - private String country; - private PaymentServiceProvider paymentServiceProvider; - private DataProtectionOfficer dataProtectionOfficer; - private List geographicTaxonomies; - private String rea; - private String shareCapital; - private String businessRegisterPlace; - private String supportEmail; - private String supportPhone; - private String ivassCode; - private boolean imported; - private AdditionalInformations additionalInformations; - private Boolean delegation; - private String parentDescription; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/NationalRegistriesProfessionalAddress.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/NationalRegistriesProfessionalAddress.java deleted file mode 100644 index 6dcf220..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/NationalRegistriesProfessionalAddress.java +++ /dev/null @@ -1,12 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.Data; - -@Data -public class NationalRegistriesProfessionalAddress { - private String description; - private String municipality; - private String province; - private String address; - private String zipCode; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Onboarding.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Onboarding.java deleted file mode 100644 index 8d3e97c..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Onboarding.java +++ /dev/null @@ -1,23 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import lombok.Data; -import lombok.experimental.FieldNameConstants; - -import java.time.OffsetDateTime; - -@Data -@FieldNameConstants(asEnum = true) -public class Onboarding { - - private String productId; - private String tokenId; - private RelationshipState status; - private String contract; - private String pricingPlan; - private Billing billing; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - private OffsetDateTime closedAt; - private Boolean isAggregator; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/OnboardingPage.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/OnboardingPage.java deleted file mode 100644 index 7211e76..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/OnboardingPage.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.Data; - -import java.util.List; - -@Data -public class OnboardingPage { - private Integer total; - private List data; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaAttributes.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaAttributes.java deleted file mode 100644 index b401f63..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaAttributes.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.Data; - -@Data -public class PaAttributes { - - private String aooParentCode; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaymentServiceProvider.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaymentServiceProvider.java deleted file mode 100644 index 053228f..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaymentServiceProvider.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.FieldNameConstants; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@FieldNameConstants(asEnum = true) -public class PaymentServiceProvider { - - private String abiCode; - private String businessRegisterNumber; - private String legalRegisterName; - private String legalRegisterNumber; - private boolean vatNumberGroup; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Premium.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Premium.java deleted file mode 100644 index ca7cbaa..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Premium.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import com.fasterxml.jackson.annotation.JsonProperty; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import lombok.Data; - -@Data -public class Premium { - - @JsonProperty("status") - private RelationshipState status; - - @JsonProperty("contract") - private String contract; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/SaResource.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/SaResource.java deleted file mode 100644 index 6c90169..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/SaResource.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.Data; - -@Data -public class SaResource { - private String id; - private String originId; - private boolean anacEngaged; - private boolean anacEnabled; - private String taxCode; - private String description; - private String digitalAddress; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ValidInstitution.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ValidInstitution.java deleted file mode 100644 index a99ad17..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ValidInstitution.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class ValidInstitution { - private String id; - private String description; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/WorkContact.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/WorkContact.java deleted file mode 100644 index bffa736..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/WorkContact.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.pagopa.selfcare.mscore.model.institution; - -import it.pagopa.selfcare.mscore.model.CertifiedField; -import lombok.Data; - -@Data -public class WorkContact { - private CertifiedField email; - - public String getEmail() { - return email != null ? email.getValue() : ""; - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MessageRequest.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MessageRequest.java deleted file mode 100644 index fc6549b..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MessageRequest.java +++ /dev/null @@ -1,12 +0,0 @@ -package it.pagopa.selfcare.mscore.model.notification; - -import lombok.Data; - -@Data -public class MessageRequest { - - String content; - String subject; - String senderEmail; - String receiverEmail; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MultipleReceiverMessageRequest.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MultipleReceiverMessageRequest.java deleted file mode 100644 index c13613a..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MultipleReceiverMessageRequest.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.pagopa.selfcare.mscore.model.notification; - -import lombok.Data; - -import java.util.List; - -@Data -public class MultipleReceiverMessageRequest { - - String content; - String subject; - List receiverEmails; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Contract.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Contract.java deleted file mode 100644 index f0b71a5..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Contract.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import lombok.Data; - -@Data -public class Contract { - private String version; - private String path; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ContractImported.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ContractImported.java deleted file mode 100644 index 0902293..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ContractImported.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import lombok.Data; - -@Data -public class ContractImported { - private String fileName; - private String filePath; - private String contractType; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/MailTemplate.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/MailTemplate.java deleted file mode 100644 index c6f34e6..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/MailTemplate.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import lombok.Data; - -import java.nio.charset.StandardCharsets; -import java.util.Base64; - -@Data -public class MailTemplate { - private String subject; - private String body; - - public String getSubject() { - return new String(Base64.getDecoder().decode(subject), StandardCharsets.UTF_8); - } - - public String getBody() { - return new String(Base64.getDecoder().decode(body), StandardCharsets.UTF_8); - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedProduct.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedProduct.java deleted file mode 100644 index 6fa9513..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedProduct.java +++ /dev/null @@ -1,27 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.mscore.constant.Env; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import lombok.Data; -import lombok.experimental.FieldNameConstants; - -import java.time.OffsetDateTime; - -import static it.pagopa.selfcare.mscore.constant.Env.ROOT; - -@Data -@FieldNameConstants(asEnum = true) -public class OnboardedProduct { - - private String relationshipId; - private String productId; - private RelationshipState status; - private String contract; - private String productRole; - private PartyRole role; - private String tokenId; - private Env env = ROOT; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedUser.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedUser.java deleted file mode 100644 index fe72999..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedUser.java +++ /dev/null @@ -1,17 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import it.pagopa.selfcare.mscore.model.user.UserBinding; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import java.time.OffsetDateTime; -import java.util.List; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class OnboardedUser { - private String id; - private List bindings; - private OffsetDateTime createdAt; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingInfo.java deleted file mode 100644 index 755142b..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingInfo.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionBinding; -import it.pagopa.selfcare.mscore.model.institution.*; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class OnboardingInfo { - private String userId; - private Institution institution; - private UserInstitutionBinding binding; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingLegalsRequest.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingLegalsRequest.java deleted file mode 100644 index 402d02e..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingLegalsRequest.java +++ /dev/null @@ -1,19 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import it.pagopa.selfcare.mscore.model.user.UserToOnboard; -import it.pagopa.selfcare.mscore.constant.TokenType; -import lombok.Data; -import java.util.List; - -@Data -public class OnboardingLegalsRequest { - - private TokenType tokenType; - private String productId; - private String productName; - private List users; - private String institutionExternalId; - private String institutionId; - private Contract contract; - private boolean signContract; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingOperatorsRequest.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingOperatorsRequest.java deleted file mode 100644 index f34cefa..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingOperatorsRequest.java +++ /dev/null @@ -1,15 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import it.pagopa.selfcare.mscore.model.user.UserToOnboard; -import lombok.Data; -import java.util.List; - -@Data -public class OnboardingOperatorsRequest { - - private String productId; - private String productTitle; - private List users; - private String institutionId; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRequest.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRequest.java deleted file mode 100644 index 5657c02..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRequest.java +++ /dev/null @@ -1,44 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.TokenType; -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import it.pagopa.selfcare.mscore.model.institution.Billing; -import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; -import it.pagopa.selfcare.mscore.model.user.UserToOnboard; -import lombok.Data; -import org.springframework.util.StringUtils; - -import java.time.OffsetDateTime; -import java.util.List; - -import static it.pagopa.selfcare.mscore.constant.GenericError.CONTRACT_PATH_ERROR; - -@Data -public class OnboardingRequest { - - private String productId; - private String productName; - private List users; - private String institutionExternalId; - private InstitutionUpdate institutionUpdate; - private String pricingPlan; - private Billing billingRequest; - private Contract contract; - - private Boolean signContract; - private TokenType tokenType; - private String contractFilePath; - private OffsetDateTime contractCreatedAt; - private OffsetDateTime contractActivatedAt; - private Boolean sendCompleteOnboardingEmail; - - public Contract getContract() { - if ((institutionUpdate != null && InstitutionType.PG == institutionUpdate.getInstitutionType()) - || (contract != null && StringUtils.hasText(contract.getPath()))) { - return contract; - } else { - throw new InvalidRequestException(CONTRACT_PATH_ERROR.getMessage(), CONTRACT_PATH_ERROR.getCode()); - } - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRollback.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRollback.java deleted file mode 100644 index 928024f..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRollback.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Map; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class OnboardingRollback { - private Token token; - private Onboarding onboarding; - private Map productMap; - private Institution updatedInstitution; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUpdateRollback.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUpdateRollback.java deleted file mode 100644 index 5c81b60..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUpdateRollback.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import it.pagopa.selfcare.mscore.model.institution.Institution; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class OnboardingUpdateRollback { - private Token token; - private List userList; - private Institution updatedInstitution; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUsersRequest.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUsersRequest.java deleted file mode 100644 index 032999d..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUsersRequest.java +++ /dev/null @@ -1,17 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import it.pagopa.selfcare.mscore.model.user.UserToOnboard; -import lombok.Data; - -import java.util.List; - -@Data -public class OnboardingUsersRequest { - - private String productId; - private List users; - private String institutionTaxCode; - private String institutionSubunitCode; - private Boolean sendCreateUserNotificationEmail; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ResourceResponse.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ResourceResponse.java deleted file mode 100644 index fb38fd0..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ResourceResponse.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import lombok.Data; - -@Data -public class ResourceResponse { - private byte[] data; - private String fileName; - private String mimetype; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Token.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Token.java deleted file mode 100644 index 3a6c553..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Token.java +++ /dev/null @@ -1,36 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.constant.TokenType; -import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.time.OffsetDateTime; -import java.util.List; -@Data -@NoArgsConstructor -@AllArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) -public class Token { - private String id; - private TokenType type; - private RelationshipState status; - private String institutionId; - private String productId; - private OffsetDateTime expiringDate; - private String checksum; - private String contractVersion; - private String contractTemplate; - private String contractSigned; - private String contentType; - private List users; - private InstitutionUpdate institutionUpdate; - private OffsetDateTime createdAt; - private OffsetDateTime activatedAt; - private OffsetDateTime updatedAt; - private OffsetDateTime deletedAt; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenRelationships.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenRelationships.java deleted file mode 100644 index 9140bd7..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenRelationships.java +++ /dev/null @@ -1,31 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.constant.TokenType; -import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.time.OffsetDateTime; -import java.util.List; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class TokenRelationships { - private String tokenId; - private String checksum; - private TokenType type; - private String institutionId; - private String productId; - private String contractSigned; - private String contentType; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - private OffsetDateTime closedAt; - private OffsetDateTime activatedAt; - private RelationshipState status; - private List users; - private InstitutionUpdate institutionUpdate; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenUser.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenUser.java deleted file mode 100644 index 8c7e80d..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenUser.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import it.pagopa.selfcare.commons.base.security.PartyRole; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class TokenUser { - private String userId; - private PartyRole role; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/VerifyOnboardingFilters.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/VerifyOnboardingFilters.java deleted file mode 100644 index 3f1ea91..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/VerifyOnboardingFilters.java +++ /dev/null @@ -1,45 +0,0 @@ -package it.pagopa.selfcare.mscore.model.onboarding; - -import it.pagopa.selfcare.mscore.constant.CustomError; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import lombok.Data; -import org.springframework.util.StringUtils; - -import java.util.List; - -@Data -public class VerifyOnboardingFilters { - private String productId; - private String externalId; - private String taxCode; - private String origin; - private String originId; - private String subunitCode; - private List validRelationshipStates; - - public VerifyOnboardingFilters(String productId, String externalId, String taxCode, String origin, String originId, String subunitCode) { - this.productId = productId; - - /* - We don't set the values of all the attributes of the class, but try to value only a portion of them based on different - search patterns priority that we intend to convey. - And if the provided parameters do not fall within the identified cases for a search then return exception. - */ - if (StringUtils.hasText(externalId)) { - this.externalId = externalId; - } else if (StringUtils.hasText(taxCode)) { - this.taxCode = taxCode; - this.subunitCode = subunitCode; - this.origin = origin; - } else if(StringUtils.hasText(subunitCode)) { - this.subunitCode = subunitCode; - this.origin = origin; - } else if (StringUtils.hasText(origin) && StringUtils.hasText(originId)) { - this.origin = origin; - this.originId = originId; - } else { - throw new InvalidRequestException(CustomError.ONBOARDING_INFO_FILTERS_ERROR.getMessage(), CustomError.ONBOARDING_INFO_FILTERS_ERROR.getCode()); - } - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java deleted file mode 100644 index f6fcf92..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java +++ /dev/null @@ -1,23 +0,0 @@ -package it.pagopa.selfcare.mscore.model.pecnotification; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.time.OffsetDateTime; -import java.util.List; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class PecNotification { - - private String id; - private String institutionId; - private String productId; - private Integer moduleDayOfTheEpoch; - private String digitalAddress; - - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/Product.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/Product.java deleted file mode 100644 index a8e976e..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/Product.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.pagopa.selfcare.mscore.model.product; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import it.pagopa.selfcare.commons.base.security.PartyRole; -import lombok.Data; - -import java.util.EnumMap; - -@Data -@JsonIgnoreProperties(ignoreUnknown = true) -public class Product { - - private String id; - private EnumMap roleMappings; - private String contractTemplatePath; - private String contractTemplateVersion; - private String title; - private String parentId; - private ProductStatus status; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductRoleInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductRoleInfo.java deleted file mode 100644 index 1d177d8..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductRoleInfo.java +++ /dev/null @@ -1,23 +0,0 @@ -package it.pagopa.selfcare.mscore.model.product; - -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.util.List; - -@Data -public class ProductRoleInfo { - - private boolean multiroleAllowed; - private List roles; - - - @Data - @EqualsAndHashCode(of = "code") - public static class ProductRole { - private String code; - private String label; - private String description; - } - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductStatus.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductStatus.java deleted file mode 100644 index b174336..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductStatus.java +++ /dev/null @@ -1,6 +0,0 @@ -package it.pagopa.selfcare.mscore.model.product; - -public enum ProductStatus { - - ACTIVE, TESTING, PHASE_OUT, INACTIVE -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/ProductManagerInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/ProductManagerInfo.java deleted file mode 100644 index e57f15e..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/ProductManagerInfo.java +++ /dev/null @@ -1,19 +0,0 @@ -package it.pagopa.selfcare.mscore.model.user; - -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class ProductManagerInfo { - - private String userId; - private Institution institution; - private List products; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipInfo.java deleted file mode 100644 index 34a0a9c..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipInfo.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.pagopa.selfcare.mscore.model.user; - -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - - -@NoArgsConstructor -@AllArgsConstructor -@Data -public class RelationshipInfo { - - Institution institution; - String userId; - OnboardedProduct onboardedProduct; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPage.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPage.java deleted file mode 100644 index a2af676..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPage.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.model.user; - -import lombok.Data; - -import java.util.List; - -@Data -public class RelationshipPage { - private Integer total; - private List data; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPageElement.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPageElement.java deleted file mode 100644 index 47f551a..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPageElement.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.model.user; - -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import lombok.Data; - -@Data -public class RelationshipPageElement { - private String userId; - private OnboardedProduct product; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/User.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/User.java deleted file mode 100644 index b0f1d5a..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/User.java +++ /dev/null @@ -1,35 +0,0 @@ -package it.pagopa.selfcare.mscore.model.user; - -import it.pagopa.selfcare.mscore.model.CertifiedField; -import it.pagopa.selfcare.mscore.model.institution.WorkContact; -import lombok.Data; -import lombok.experimental.FieldNameConstants; - -import java.util.Map; - -@Data -@FieldNameConstants(asEnum = true) -public class User { - - @FieldNameConstants.Exclude - private String id; - private String fiscalCode; - private CertifiedField name; - private CertifiedField familyName; - @FieldNameConstants.Exclude - private CertifiedField email; - - private Map workContacts; - - public String getName() { - return name != null ? name.getValue() : ""; - } - - public String getFamilyName() { - return familyName != null ? familyName.getValue() : ""; - } - - public String getEmail() { - return email != null ? email.getValue() : ""; - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserBinding.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserBinding.java deleted file mode 100644 index 4733b7c..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserBinding.java +++ /dev/null @@ -1,25 +0,0 @@ -package it.pagopa.selfcare.mscore.model.user; - -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.FieldNameConstants; - -import java.util.List; - -@Data -@FieldNameConstants(asEnum = true) -@AllArgsConstructor -@NoArgsConstructor -public class UserBinding { - private String institutionId; - private String institutionName; - private String institutionRootName; - private List products; - - public UserBinding(String institutionId, List products) { - this.institutionId = institutionId; - this.products = products; - } -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserInfo.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserInfo.java deleted file mode 100644 index 6af23c1..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserInfo.java +++ /dev/null @@ -1,15 +0,0 @@ -package it.pagopa.selfcare.mscore.model.user; - -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import lombok.Data; - -import java.util.List; - -@Data -public class UserInfo { - - private String id; - private User user; - private List products; - -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserToOnboard.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserToOnboard.java deleted file mode 100644 index 64cc151..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserToOnboard.java +++ /dev/null @@ -1,19 +0,0 @@ -package it.pagopa.selfcare.mscore.model.user; - -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.mscore.constant.Env; -import lombok.Data; - -@Data -public class UserToOnboard { - - private String id; - private String taxCode; - private String name; - private String surname; - private String email; - private PartyRole role; - private String productRole; - private String roleLabel; - private Env env; -} diff --git a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/utils/MaskDataUtils.java b/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/utils/MaskDataUtils.java deleted file mode 100644 index c3103f8..0000000 --- a/apps/institution-ms-new/connector-api/src/main/java/it/pagopa/selfcare/mscore/utils/MaskDataUtils.java +++ /dev/null @@ -1,97 +0,0 @@ -package it.pagopa.selfcare.mscore.utils; - -import io.micrometer.core.instrument.util.StringUtils; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; -@NoArgsConstructor(access = AccessLevel.NONE) -public class MaskDataUtils { - - private static final int MATCHER_GROUP = 2; - private static final int MASK_STRING_END = 3; - private static final int CHARACTER_LIMIT = 4; - private static final String REGEX_ELENCO_CF = "(\"elencoCf\")\\s*:\\s*\\[\"(.*?)\""; - private static final String REGEX_TAX_ID = "(\"taxId\"|\"legalTaxId\"|\"businessTaxId\"|\"vatNumber\")\\s*:\\s*\"(.*?)\""; - private static final String REGEX_ADDRESS = "(\"description\"|\"at\"|\"address\"|\"zip\"|\"municipality\"|\"municipalityDetails\"|\"province\"|\"foreignState\"|\"codiceStato\"|\"descrizioneStato\"|\"descrizioneLocalita\"|\"denominazione\"|\"numeroCivico\"|\"digitalAddress\")\\s*:\\s*\"(.*?)\""; - private static final String REGEX_PEC = "(\"pecProfessionista\"|\"cf\"|\"codFiscale\"|\"codiceFiscale\"|\"cognome\"|\"nome\"|\"sesso\"|\"dataNascita\")\\s*:\\s*\"(.*?)\""; - private static final String REGEX_TOKEN = "(\"access_token\")\\s*:\\s*\"(.*?)\""; - private static final Pattern PATTERN_ELENCO_CF = Pattern.compile(REGEX_ELENCO_CF); - private static final Pattern PATTERN_TAX_ID = Pattern.compile(REGEX_TAX_ID); - private static final Pattern PATTERN_ADDRESS = Pattern.compile(REGEX_ADDRESS); - private static final Pattern PATTERN_PEC = Pattern.compile(REGEX_PEC); - private static final Pattern PATTERN_TOKEN = Pattern.compile(REGEX_TOKEN); - - public static String maskInformation(String dataBuffered){ - - dataBuffered = maskMatcher(PATTERN_ELENCO_CF, dataBuffered); - dataBuffered = maskMatcher(PATTERN_TAX_ID, dataBuffered); - dataBuffered = maskMatcher(PATTERN_ADDRESS, dataBuffered); - dataBuffered = maskMatcher(PATTERN_PEC, dataBuffered); - dataBuffered = maskMatcher(PATTERN_TOKEN, dataBuffered); - - return dataBuffered; - } - - private static String maskMatcher(Pattern pattern, String dataBuffered){ - Matcher matcher = pattern.matcher(dataBuffered); - while(matcher.find()){ - String toBeMasked = matcher.group(MATCHER_GROUP); - String valueMasked = mask(toBeMasked); - if(!toBeMasked.isBlank()){ - dataBuffered = dataBuffered.replace("\""+toBeMasked+"\"","\""+valueMasked+"\""); - } - } - return dataBuffered; - } - - private static String mask(String unmasked){ - if(unmasked.contains(",")){ - return maskAddress(unmasked); - } - else if(unmasked.contains("@")){ - return maskEmailAddress(unmasked); - } - else{ - return maskString(unmasked); - } - } - - - private static String maskAddress(String strAddress){ - String[] parts = strAddress.split(","); - StringBuilder masked = new StringBuilder(); - for (String part : parts) { - masked.append(maskString(part)).append(","); - } - return masked.substring(0,masked.length()-1); - } - - private static String maskEmailAddress(String strEmail) { - String[] parts = strEmail.split("@"); - String strId = maskString(parts[0]); - return strId + "@" + parts[1]; - } - - public static String maskString(String strText) { - int start = 1; - int end = strText.length()-MASK_STRING_END; - String maskChar = String.valueOf('*'); - if(StringUtils.isEmpty(strText)){ - return strText; - } - if(strText.length() < CHARACTER_LIMIT){ - end = strText.length(); - } - int maskLength = end - start; - if(maskLength == 0){ - return maskChar; - } - String sbMaskString = maskChar.repeat(Math.max(0, maskLength)); - return strText.substring(0, start) - + sbMaskString - + strText.substring(start + maskLength); - } - -} diff --git a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/InvalidRequestExceptionTest.java b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/InvalidRequestExceptionTest.java deleted file mode 100644 index 91dba2e..0000000 --- a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/InvalidRequestExceptionTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package it.pagopa.selfcare.mscore.exception; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -class InvalidRequestExceptionTest { - /** - * Methods under test: - * - *
    - *
  • {@link InvalidRequestException#InvalidRequestException(String, String)} - *
  • {@link InvalidRequestException#getCode()} - *
- */ - @Test - void testConstructor() { - assertEquals("Code", (new InvalidRequestException("An error occurred", "Code")).getCode()); - } -} - diff --git a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/MsCoreExceptionTest.java b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/MsCoreExceptionTest.java deleted file mode 100644 index 05a609b..0000000 --- a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/MsCoreExceptionTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package it.pagopa.selfcare.mscore.exception; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -class MsCoreExceptionTest { - /** - * Methods under test: - * - *
    - *
  • {@link MsCoreException#MsCoreException(String, String)} - *
  • {@link MsCoreException#getCode()} - *
- */ - @Test - void testConstructor() { - assertEquals("Code", (new MsCoreException("An error occurred", "Code")).getCode()); - } -} - diff --git a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceConflictExceptionTest.java b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceConflictExceptionTest.java deleted file mode 100644 index f6a3206..0000000 --- a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceConflictExceptionTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package it.pagopa.selfcare.mscore.exception; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -class ResourceConflictExceptionTest { - /** - * Methods under test: - * - *
    - *
  • {@link ResourceConflictException#ResourceConflictException(String, String)} - *
  • {@link ResourceConflictException#getCode()} - *
- */ - @Test - void testConstructor() { - assertEquals("Code", (new ResourceConflictException("An error occurred", "Code")).getCode()); - } -} - diff --git a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundExceptionTest.java b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundExceptionTest.java deleted file mode 100644 index 615d4bf..0000000 --- a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundExceptionTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package it.pagopa.selfcare.mscore.exception; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -class ResourceNotFoundExceptionTest { - /** - * Methods under test: - * - *
    - *
  • {@link ResourceNotFoundException#ResourceNotFoundException(String, String)} - *
  • {@link ResourceNotFoundException#getCode()} - *
- */ - @Test - void testConstructor() { - assertEquals("Code", (new ResourceNotFoundException("An error occurred", "Code")).getCode()); - } -} - diff --git a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/utils/MaskDataUtilsTest.java b/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/utils/MaskDataUtilsTest.java deleted file mode 100644 index b3aec2e..0000000 --- a/apps/institution-ms-new/connector-api/src/test/java/it/pagopa/selfcare/mscore/utils/MaskDataUtilsTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package it.pagopa.selfcare.mscore.utils; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -class MaskDataUtilsTest { - /** - * Method under test: {@link MaskDataUtils#maskInformation(String)} - */ - @Test - void testMaskInformation() { - assertEquals("Data Buffered", MaskDataUtils.maskInformation("Data Buffered")); - assertEquals("\"elencoCf\" : [\"U*\"", MaskDataUtils.maskInformation("\"elencoCf\" : [\"UU\"")); - assertEquals("\"elencoCf\" : [\"V***********ssi, **\"", MaskDataUtils.maskInformation("\"elencoCf\" : [\"Via Mario Rossi, 47\"")); - assertEquals("\"elencoCf\" : [\"m******ssi@mario.rossi\"", MaskDataUtils.maskInformation("\"elencoCf\" : [\"mariorossi@mario.rossi\"")); - - } - - /** - * Method under test: {@link MaskDataUtils#maskString(String)} - */ - @Test - void testMaskString() { - assertEquals("S****ext", MaskDataUtils.maskString("Str Text")); - assertEquals("", MaskDataUtils.maskString("")); - } -} - diff --git a/apps/institution-ms-new/connector/azure-storage/pom.xml b/apps/institution-ms-new/connector/azure-storage/pom.xml deleted file mode 100644 index 5bf605f..0000000 --- a/apps/institution-ms-new/connector/azure-storage/pom.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - 4.0.0 - - selc-ms-core-connector - it.pagopa.selfcare - 1.0-SNAPSHOT - - - selc-ms-core-connector-azure-storage - - - - com.microsoft.azure - azure-storage - 8.6.6 - - - - \ No newline at end of file diff --git a/apps/institution-ms-new/connector/azure-storage/src/main/java/it/pagopa/selfcare/mscore/connector/azure_storage/AzureBlobClient.java b/apps/institution-ms-new/connector/azure-storage/src/main/java/it/pagopa/selfcare/mscore/connector/azure_storage/AzureBlobClient.java deleted file mode 100644 index 646d54a..0000000 --- a/apps/institution-ms-new/connector/azure-storage/src/main/java/it/pagopa/selfcare/mscore/connector/azure_storage/AzureBlobClient.java +++ /dev/null @@ -1,170 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.azure_storage; - -import com.microsoft.azure.storage.CloudStorageAccount; -import com.microsoft.azure.storage.StorageCredentials; -import com.microsoft.azure.storage.StorageCredentialsAccountAndKey; -import com.microsoft.azure.storage.StorageException; -import com.microsoft.azure.storage.blob.*; -import it.pagopa.selfcare.mscore.api.FileStorageConnector; -import it.pagopa.selfcare.mscore.config.AzureStorageConfig; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.onboarding.ResourceResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Profile; -import org.springframework.context.annotation.PropertySource; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.net.URISyntaxException; -import java.nio.file.Paths; - -import static it.pagopa.selfcare.mscore.constant.GenericError.*; - -@Slf4j -@Service -@PropertySource("classpath:config/azure-storage-config.properties") -@Profile("AzureStorage") -class AzureBlobClient implements FileStorageConnector { - - private final CloudBlobClient blobClient; - private final AzureStorageConfig azureStorageConfig; - - AzureBlobClient(AzureStorageConfig azureStorageConfig) throws URISyntaxException { - log.trace("AzureBlobClient.AzureBlobClient"); - this.azureStorageConfig = azureStorageConfig; - final CloudStorageAccount storageAccount = buildStorageAccount(); - this.blobClient = storageAccount.createCloudBlobClient(); - } - - private CloudStorageAccount buildStorageAccount() throws URISyntaxException { - StorageCredentials storageCredentials = new StorageCredentialsAccountAndKey(azureStorageConfig.getAccountName(), azureStorageConfig.getAccountKey()); - return new CloudStorageAccount(storageCredentials, - true, - azureStorageConfig.getEndpointSuffix(), - azureStorageConfig.getAccountName()); - } - - @Override - public ResourceResponse getFile(String fileName) { - log.info("START - getFile for path: {}", fileName); - try { - ResourceResponse response = new ResourceResponse(); - final CloudBlobContainer blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); - final CloudBlockBlob blob = blobContainer.getBlockBlobReference(fileName); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - BlobProperties properties = blob.getProperties(); - blob.download(outputStream); - log.info("END - getFile - path {}", fileName); - response.setData(outputStream.toByteArray()); - response.setFileName(blob.getName()); - response.setMimetype(properties.getContentType()); - return response; - } catch (StorageException e) { - if (e.getHttpStatusCode() == 404) { - throw new ResourceNotFoundException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), fileName), - ERROR_DURING_DOWNLOAD_FILE.getCode()); - } - throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), fileName), - ERROR_DURING_DOWNLOAD_FILE.getCode()); - } catch (URISyntaxException e) { - throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), fileName), - ERROR_DURING_DOWNLOAD_FILE.getCode()); - } - } - - @Override - public String getTemplateFile(String templateName) { - log.info("START - getTemplateFile for template: {}", templateName); - try { - final CloudBlobContainer blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); - final CloudBlockBlob blob = blobContainer.getBlockBlobReference(templateName); - String downloaded = blob.downloadText(); - log.info("END - getTemplateFile - Downloaded {}", templateName); - return downloaded; - } catch (StorageException | URISyntaxException | IOException e) { - log.error(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), templateName), e); - throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), templateName), - ERROR_DURING_DOWNLOAD_FILE.getCode()); - } - } - - @Override - public File getFileAsPdf(String contractTemplate){ - log.info("START - getFileAsPdf for template: {}", contractTemplate); - - final CloudBlobContainer blobContainer; - final CloudBlockBlob blob; - final File downloadedFile; - - try { - blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); - blob = blobContainer.getBlockBlobReference(contractTemplate); - - String fileName = Paths.get(contractTemplate).getFileName().toString(); - downloadedFile = File.createTempFile(fileName, ".pdf"); - } catch (URISyntaxException | StorageException | IOException e) { - log.error(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), contractTemplate), e); - throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), contractTemplate), - ERROR_DURING_DOWNLOAD_FILE.getCode()); - } - - try (BlobInputStream blobInputStream = blob.openInputStream(); - FileOutputStream fileOutputStream = new FileOutputStream(downloadedFile)){ - - byte[] buffer = new byte[4096]; - int bytesRead; - while ((bytesRead = blobInputStream.read(buffer)) != -1) { - fileOutputStream.write(buffer, 0, bytesRead); - } - - } catch (IOException | StorageException e) { - log.error(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), contractTemplate), e); - throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), contractTemplate), - ERROR_DURING_DOWNLOAD_FILE.getCode()); - } - - log.info("END - getFileAsPdf"); - return downloadedFile; - } - - @Override - public String uploadContract(String id, MultipartFile contract) { - log.info("START - uploadContract for token: {}", id); - String fileName = Paths.get(azureStorageConfig.getContractPath(), id, contract.getOriginalFilename()).toString(); - log.debug("uploadContract fileName = {}, contentType = {}", fileName, contract.getContentType()); - try { - final CloudBlobContainer blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); - final CloudBlockBlob blob = blobContainer.getBlockBlobReference(fileName); - blob.getProperties().setContentType(contract.getContentType()); - blob.upload(contract.getInputStream(), contract.getInputStream().available()); - log.info("Uploaded {}", fileName); - return fileName; - } catch (StorageException | URISyntaxException | IOException e) { - log.error(String.format(ERROR_DURING_UPLOAD_FILE.getMessage(), fileName), e); - throw new MsCoreException(String.format(ERROR_DURING_UPLOAD_FILE.getMessage(), fileName), - ERROR_DURING_UPLOAD_FILE.getCode()); - } - } - - @Override - public void removeContract(String fileName, String tokenId) { - log.info("START - deleteContract for token: {}", tokenId); - - try { - final CloudBlobContainer blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); - final CloudBlockBlob blob = blobContainer.getBlockBlobReference(fileName); - blob.deleteIfExists(); - log.info("Deleted {}", fileName); - } catch (StorageException | URISyntaxException e) { - log.error(String.format(ERROR_DURING_DELETED_FILE.getMessage(), fileName), e); - throw new MsCoreException(String.format(ERROR_DURING_DELETED_FILE.getMessage(), fileName), - ERROR_DURING_DELETED_FILE.getCode()); - } - } - -} diff --git a/apps/institution-ms-new/connector/azure-storage/src/test/java/it/pagopa/selfcare/mscore/connector/azure_storage/config/AzureStorageConfigTest.java b/apps/institution-ms-new/connector/azure-storage/src/test/java/it/pagopa/selfcare/mscore/connector/azure_storage/config/AzureStorageConfigTest.java deleted file mode 100644 index 5015bfc..0000000 --- a/apps/institution-ms-new/connector/azure-storage/src/test/java/it/pagopa/selfcare/mscore/connector/azure_storage/config/AzureStorageConfigTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.azure_storage.config; - -import it.pagopa.selfcare.mscore.config.AzureStorageConfig; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class AzureStorageConfigTest { - - /** - * Method under test: {@link AzureStorageConfig#getConnectionString()} - */ - @Test - void testGetConnectionString2() { - - AzureStorageConfig azureStorageConfig = new AzureStorageConfig(); - azureStorageConfig.setConnectionString("42"); - assertEquals("42", azureStorageConfig.getConnectionString()); - } - - /** - * Method under test: {@link AzureStorageConfig#getContainer()} ()); - } - - /** - * Method under test: {@link AzureStorageConfig#getContainer()} ()} - */ - @Test - void testGetContractsTemplateContainer3() { - - AzureStorageConfig azureStorageConfig = new AzureStorageConfig(); - azureStorageConfig.setContractPath("42"); - assertEquals("42", azureStorageConfig.getContractPath()); - } - - @Test - void testGetContractsTemplateContainer4() { - - AzureStorageConfig azureStorageConfig = new AzureStorageConfig(); - azureStorageConfig.setConnectionString("42"); - azureStorageConfig.setContainer("42"); - azureStorageConfig.setContractPath("42"); - - assertEquals("AzureStorageConfig(connectionString=42, accountName=null, endpointSuffix=null, accountKey=null, container=42, contractPath=42, checkoutTemplateContainer=null)", azureStorageConfig.toString()); - } -} - diff --git a/apps/institution-ms-new/connector/dao/pom.xml b/apps/institution-ms-new/connector/dao/pom.xml deleted file mode 100644 index 93e3b22..0000000 --- a/apps/institution-ms-new/connector/dao/pom.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - 4.0.0 - - selc-ms-core-connector - it.pagopa.selfcare - 1.0-SNAPSHOT - - - selc-ms-core-connector-dao - - - - org.springframework.boot - spring-boot-starter-data-mongodb - - - de.flapdoodle.embed - de.flapdoodle.embed.mongo - test - - - it.pagopa.selfcare - selc-ms-core-connector-rest - - - - diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilder.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilder.java deleted file mode 100644 index c1a88e4..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilder.java +++ /dev/null @@ -1,50 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.lang.NonNull; -import org.springframework.lang.Nullable; - -import java.util.List; - -public class CriteriaBuilder { - - private Criteria criteria; - private boolean first; - - private CriteriaBuilder() { - criteria = new Criteria(); - first = true; - } - - public static CriteriaBuilder builder() { - return new CriteriaBuilder(); - } - - public Criteria build() { - return criteria; - } - - public CriteriaBuilder inIfNotEmpty(@NonNull String key, @Nullable List value) { - if (value != null && !value.isEmpty()) { - if (first) { - criteria = Criteria.where(key).in(value); - first = false; - } else { - criteria = criteria.and(key).in(value); - } - } - return this; - } - - public CriteriaBuilder isIfNotNull(@NonNull String key, @Nullable Object value) { - if (value != null) { - if (first) { - criteria = Criteria.where(key).is(value); - first = false; - } else { - criteria = criteria.and(key).is(value); - } - } - return this; - } -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImpl.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImpl.java deleted file mode 100644 index 9aaa08a..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImpl.java +++ /dev/null @@ -1,180 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import it.pagopa.selfcare.mscore.api.DelegationConnector; -import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationEntityMapper; -import it.pagopa.selfcare.mscore.constant.DelegationState; -import it.pagopa.selfcare.mscore.constant.Order; -import it.pagopa.selfcare.mscore.model.delegation.Delegation; -import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; -import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; -import it.pagopa.selfcare.mscore.model.delegation.PageInfo; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import lombok.extern.slf4j.Slf4j; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.mongodb.core.FindAndModifyOptions; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.data.mongodb.core.query.Update; -import org.springframework.data.support.PageableExecutionUtils; -import org.springframework.stereotype.Component; - -import java.time.OffsetDateTime; -import java.util.*; -import java.util.regex.Pattern; - -@Slf4j -@Component -public class DelegationConnectorImpl implements DelegationConnector { - - public static final String INSTITUTION = "Institution"; - public static final String INSTITUTIONS = "institutions"; - public static final String DELEGATIONS = "Delegations"; - private final DelegationRepository repository; - private final DelegationEntityMapper delegationMapper; - private final MongoTemplate mongoTemplate; - - public DelegationConnectorImpl(DelegationRepository repository, - DelegationEntityMapper delegationMapper, - MongoTemplate mongoTemplate) { - this.repository = repository; - this.delegationMapper = delegationMapper; - this.mongoTemplate = mongoTemplate; - } - - @Override - public Delegation save(Delegation delegation) { - final DelegationEntity entity = delegationMapper.convertToDelegationEntity(delegation); - return delegationMapper.convertToDelegation(repository.save(entity)); - } - - @Override - public boolean checkIfExistsWithStatus(Delegation delegation, DelegationState status) { - Optional opt = repository.findByFromAndToAndProductIdAndTypeAndStatus( - delegation.getFrom(), - delegation.getTo(), - delegation.getProductId(), - delegation.getType(), - status - ); - return opt.isPresent(); - } - - private List getCriterias(String from, String to, String productId, String search, String taxCode) { - List criterias = new ArrayList<>(); - - criterias.add(Criteria.where(DelegationEntity.Fields.status.name()).is(DelegationState.ACTIVE.name())); - - if (Objects.nonNull(from)) { - criterias.add(Criteria.where(DelegationEntity.Fields.from.name()).is(from)); - if(Objects.nonNull(taxCode)) { - criterias.add(Criteria.where(DelegationEntity.Fields.toTaxCode.name()).is(taxCode)); - } - } - if (Objects.nonNull(to)) { - criterias.add(Criteria.where(DelegationEntity.Fields.to.name()).is(to)); - if(Objects.nonNull(taxCode)) { - criterias.add(Criteria.where(DelegationEntity.Fields.fromTaxCode.name()).is(taxCode)); - } - } - if (Objects.nonNull(productId)) { - criterias.add(Criteria.where(DelegationEntity.Fields.productId.name()).is(productId)); - } - if (Objects.nonNull(search)) { - criterias.add(Criteria.where(DelegationEntity.Fields.institutionFromName.name()).regex("(?i)" + Pattern.quote(search))); - } - return criterias; - } - - @Override - public List find(String from, String to, String productId, String search, String taxCode, Order order, Integer page, Integer size) { - Criteria criteria = new Criteria(); - Pageable pageable = PageRequest.of(page, size); - List criterias = getCriterias(from, to, productId, search, taxCode); - - Sort.Direction sortDirection = order.equals(Order.ASC) ? Sort.Direction.ASC : Sort.Direction.DESC; - - Query query = Query.query(criteria.andOperator(criterias)); - - if (!order.equals(Order.NONE)) { - query = query.with(Sort.by(sortDirection, DelegationEntity.Fields.institutionFromName.name())); - } - - return repository.find(query, pageable, DelegationEntity.class) - .stream() - .map(delegationMapper::convertToDelegation) - .toList(); - } - - @Override - public DelegationWithPagination findAndCount(GetDelegationParameters delegationParameters) { - - List delegations = find(delegationParameters.getFrom(), delegationParameters.getTo(), delegationParameters.getProductId(), - delegationParameters.getSearch(), delegationParameters.getTaxCode(), delegationParameters.getOrder(), - delegationParameters.getPage(), delegationParameters.getSize()); - - Query query = Query.query(new Criteria().andOperator(getCriterias(delegationParameters.getFrom(), delegationParameters.getTo(), - delegationParameters.getProductId(), delegationParameters.getSearch(), delegationParameters.getTaxCode()))); - - long count = mongoTemplate.count(query, DelegationEntity.class); - - Pageable pageable = PageRequest.of(delegationParameters.getPage(), delegationParameters.getSize()); - Page result = PageableExecutionUtils.getPage(delegations, pageable, () -> count); - - PageInfo pageInfo = new PageInfo(result.getSize(), result.getNumber(), result.getTotalElements(), result.getTotalPages()); - return new DelegationWithPagination(delegations, pageInfo); - } - - @Override - public Delegation findByIdAndModifyStatus(String delegationId, DelegationState status) { - Query query = Query.query(Criteria.where(DelegationEntity.Fields.id.name()).is(delegationId)); - Update update = new Update(); - update.set(DelegationEntity.Fields.updatedAt.name(), OffsetDateTime.now()); - update.set(DelegationEntity.Fields.status.name(), status); - FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false); - return delegationMapper.convertToDelegation(repository.findAndModify(query, update, findAndModifyOptions, DelegationEntity.class)); - } - - @Override - public boolean checkIfDelegationsAreActive(String institutionId) { - List opt = repository.findByToAndStatus(institutionId, DelegationState.ACTIVE).orElse(Collections.emptyList()); - return !opt.isEmpty(); - } - - @Override - public Delegation findAndActivate(String from, String to, String productId) { - Query query = Query.query(Criteria.where(DelegationEntity.Fields.from.name()).is(from).and(DelegationEntity.Fields.to.name()).is(to).and(DelegationEntity.Fields.productId.name()).is(productId)); - Update update = new Update(); - update.set(DelegationEntity.Fields.updatedAt.name(), OffsetDateTime.now()); - update.set(DelegationEntity.Fields.status.name(), DelegationState.ACTIVE); - FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); - return delegationMapper.convertToDelegation(repository.findAndModify(query, update, findAndModifyOptions, DelegationEntity.class)); - } - - @Override - public void updateDelegation(Institution institutionUpdate) { - - // If institution own some delegations, we also update "to" reference - // isDelegation is true if institution own some delegations - if (institutionUpdate.isDelegation()) { - Update updateFrom = new Update(); - Query queryFrom = Query.query(Criteria.where(DelegationEntity.Fields.to.name()).is(institutionUpdate.getId())); - updateFrom.set(DelegationEntity.Fields.institutionToName.name(), institutionUpdate.getDescription()); - repository.updateMulti(queryFrom, updateFrom, DelegationEntity.class); - } - - Update updateTo = new Update(); - Query queryTo = Query.query(Criteria.where(DelegationEntity.Fields.from.name()).is(institutionUpdate.getId())); - updateTo.set(DelegationEntity.Fields.institutionFromName.name(), institutionUpdate.getDescription()); - if (Objects.nonNull(institutionUpdate.getParentDescription())) { - updateTo.set(DelegationEntity.Fields.institutionFromRootName.name(), institutionUpdate.getParentDescription()); - } - repository.updateMulti(queryTo, updateTo, DelegationEntity.class); - - } - -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepository.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepository.java deleted file mode 100644 index 352b2bd..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepository.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; -import it.pagopa.selfcare.mscore.constant.DelegationState; -import it.pagopa.selfcare.mscore.constant.DelegationType; -import org.springframework.data.mongodb.repository.MongoRepository; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; - -@Repository -public interface DelegationRepository extends MongoRepository, MongoCustomConnector { - - Optional findByFromAndToAndProductIdAndTypeAndStatus(String from, String to, String productId, DelegationType type, DelegationState status); - - Optional> findByToAndStatus(String to, DelegationState status); -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImpl.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImpl.java deleted file mode 100644 index 04bea06..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImpl.java +++ /dev/null @@ -1,359 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.GeoTaxonomyEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardingEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionEntityMapper; -import it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionMapperHelper; -import it.pagopa.selfcare.mscore.constant.GenericError; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.constant.SearchMode; -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; -import it.pagopa.selfcare.product.entity.ProductStatus; -import lombok.extern.slf4j.Slf4j; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.data.mongodb.core.FindAndModifyOptions; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.data.mongodb.core.query.Update; -import org.springframework.stereotype.Component; - -import java.time.OffsetDateTime; -import java.util.*; -import java.util.stream.Collectors; - -import static it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionMapperHelper.addGeographicTaxonomies; -import static it.pagopa.selfcare.mscore.constant.CustomError.GET_INSTITUTION_BILLING_ERROR; -import static it.pagopa.selfcare.mscore.constant.CustomError.INSTITUTION_NOT_FOUND; - -@Slf4j -@Component -public class InstitutionConnectorImpl implements InstitutionConnector { - - private static final String CURRENT_ONBOARDING = "current."; - private static final String CURRENT_ONBOARDING_REFER = "$[current]"; - - private final InstitutionRepository repository; - private final InstitutionEntityMapper institutionMapper; - - public InstitutionConnectorImpl(InstitutionRepository repository, InstitutionEntityMapper institutionMapper) { - this.repository = repository; - this.institutionMapper = institutionMapper; - } - - @Override - public List findAll() { - return repository.findAll().stream().map(institutionMapper::convertToInstitution).collect(Collectors.toList()); - } - - @Override - public Institution save(Institution institution) { - final InstitutionEntity entity = institutionMapper.convertToInstitutionEntity(institution); - return institutionMapper.convertToInstitution(repository.save(entity)); - } - - @Override - public List findByExternalIdsAndProductId(List validInstitutionList, String productId) { - List externalIds = validInstitutionList.stream().map(ValidInstitution::getId).collect(Collectors.toList()); - Query query = Query.query(Criteria.where(constructQuery(Onboarding.Fields.productId.name())).is(productId) - .and(InstitutionEntity.Fields.externalId.name()).in(externalIds)); - return repository.find(query, InstitutionEntity.class).stream() - .map(InstitutionEntity::getExternalId) - .collect(Collectors.toList()); - } - - @Override - public void deleteById(String id) { - repository.deleteById(id); - } - - @Override - public Institution findById(String id) { - return repository.findById(id) - .map(institution -> { - log.info("Founded institution {}", institution.getExternalId()); - return institutionMapper.convertToInstitution(institution); - }) - .orElseThrow(() -> new ResourceNotFoundException(String.format(INSTITUTION_NOT_FOUND.getMessage(), id, "UNDEFINED"), INSTITUTION_NOT_FOUND.getCode())); - } - - @Override - public Institution findAndUpdateStatus(String institutionId, String tokenId, RelationshipState status) { - OffsetDateTime now = OffsetDateTime.now(); - - Query query = Query.query(Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); - Update update = new Update() - .set(constructQuery(CURRENT_ONBOARDING_REFER, Onboarding.Fields.status.name()), status) - .set(constructQuery(CURRENT_ONBOARDING_REFER, Onboarding.Fields.updatedAt.name()), now) - .filterArray(Criteria.where(CURRENT_ONBOARDING + Onboarding.Fields.tokenId.name()).is(tokenId)); - if (status == RelationshipState.DELETED) { - update.set(constructQuery(CURRENT_ONBOARDING_REFER, Onboarding.Fields.closedAt.name()), now); - } - FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); - return institutionMapper.convertToInstitution(repository.findAndModify(query, update, findAndModifyOptions, InstitutionEntity.class)); - } - - @Override - public Institution findAndUpdate(String institutionId, Onboarding onboarding, List geographicTaxonomiesList, InstitutionUpdate institutionUpdate) { - Query query = Query.query(Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); - Update update = new Update(); - update.set(InstitutionEntity.Fields.updatedAt.name(), OffsetDateTime.now()); - if (onboarding != null) { - update.addToSet(InstitutionEntity.Fields.onboarding.name(), onboarding); - } - if (institutionUpdate != null) { - Map map = InstitutionMapperHelper.getNotNullField(institutionUpdate); - map.forEach(update::set); - } - addGeographicTaxonomies(geographicTaxonomiesList, update); - FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); - return institutionMapper.convertToInstitution(repository.findAndModify(query, update, findAndModifyOptions, InstitutionEntity.class)); - } - - @Override - public List findByGeotaxonomies(List geo, SearchMode searchMode) { - Query query = constructQueryWithSearchMode(geo, searchMode); - return repository.find(query, InstitutionEntity.class).stream() - .map(institutionMapper::convertToInstitution) - .collect(Collectors.toList()); - } - - @Override - public List findByProductId(String productId) { - Query query = Query.query(Criteria.where(constructQuery(Onboarding.Fields.productId.name())).is(productId)); - return repository.find(query, InstitutionEntity.class).stream() - .map(institutionMapper::convertToInstitution) - .collect(Collectors.toList()); - } - - @Override - public List findAllByIds(List ids) { - List list = new ArrayList<>(); - repository.findAllById(ids) - .forEach(entity -> list.add(institutionMapper.convertToInstitution(entity))); - return list; - } - - @Override - public Institution findByExternalIdAndProductId(String externalId, String productId) { - Query query = Query.query(Criteria.where(InstitutionEntity.Fields.externalId.name()).is(externalId) - .and(constructQuery(Onboarding.Fields.productId.name())).is(productId)); - - return repository.find(query, InstitutionEntity.class).stream() - .map(institutionMapper::convertToInstitution) - .findFirst().orElseThrow(() -> new ResourceNotFoundException(String.format(GET_INSTITUTION_BILLING_ERROR.getMessage(), externalId, productId), - GET_INSTITUTION_BILLING_ERROR.getCode())); - } - - @Override - public List findOnboardingByIdAndProductId(String institutionId, String productId) { - - Optional optionalInstitution = Objects.nonNull(productId) - ? Optional - .ofNullable(repository.findByInstitutionIdAndOnboardingProductId(institutionId, productId)) - : repository.findById(institutionId); - return optionalInstitution - .map(institutionMapper::convertToInstitution) - .map(Institution::getOnboarding) - .orElse(List.of()); - } - - @Override - public List findInstitutionsByProductId(String productId, Integer page, Integer size) { - - Query query = Query.query(Criteria.where(InstitutionEntity.Fields.onboarding.name()). - elemMatch(Criteria.where(Onboarding.Fields.productId.name()).is(productId))); - - Pageable pageable = PageRequest.of(Objects.nonNull(page) ? page : 0, - Objects.nonNull(size) ? size : 100); - - Page institutionEntities = repository.find(query, pageable, InstitutionEntity.class); - return institutionEntities.getContent().stream() - .map(institutionMapper::convertToInstitution) - .collect(Collectors.toList()); - } - - @Override - public void findAndRemoveOnboarding(String institutionId, Onboarding onboarding) { - Query query = Query.query(Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); - Update update = new Update(); - update.set(InstitutionEntity.Fields.updatedAt.name(), OffsetDateTime.now()); - if (onboarding != null) { - update.pull(InstitutionEntity.Fields.onboarding.name(), onboarding); - } - FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(false); - repository.findAndModify(query, update, findAndModifyOptions, InstitutionEntity.class); - } - - @Override - public void findAndDeleteOnboarding(String institutionId, String productId) { - - Query query = Query.query( - Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); - - Update update = new Update(); - update.set(InstitutionEntity.Fields.updatedAt.name(), OffsetDateTime.now()); - update.set("onboarding.$[elem].status", RelationshipState.DELETED.name()); - update.set("onboarding.$[elem].updatedAt", OffsetDateTime.now()); - - update.filterArray(Criteria.where("elem.productId").is(productId) - .and("elem.status").is(RelationshipState.ACTIVE.name())); - - FindAndModifyOptions options = FindAndModifyOptions.options().upsert(false).returnNew(false); - InstitutionEntity updatedEntity = repository.findAndModify(query, update, options, InstitutionEntity.class); - } - - - @Override - public List findByTaxCodeSubunitCodeAndOrigin(String taxCode, String subunitCode, String origin, String originId) { - return repository.find(Query.query(CriteriaBuilder.builder() - .isIfNotNull(InstitutionEntity.Fields.taxCode.name(), taxCode) - .isIfNotNull(InstitutionEntity.Fields.subunitCode.name(), subunitCode) - .isIfNotNull(InstitutionEntity.Fields.origin.name(), origin) - .isIfNotNull(InstitutionEntity.Fields.originId.name(), originId) - .build() - ), - InstitutionEntity.class).stream() - .map(institutionMapper::convertToInstitution) - .collect(Collectors.toList()); - } - - @Override - public Boolean existsByTaxCodeAndSubunitCodeAndProductAndStatusList(String taxCode, String subunitCode, - Optional optProductId, List validRelationshipStates) { - - Criteria criteriaInstitution = Criteria.where(InstitutionEntity.Fields.taxCode.name()).is(taxCode) - .and(InstitutionEntity.Fields.subunitCode.name()).is(subunitCode); - - Criteria criteriaOnboarding = Criteria.where(Onboarding.Fields.status.name()).in(validRelationshipStates); - optProductId.ifPresent(productId -> criteriaOnboarding.and(Onboarding.Fields.productId.name()).is(productId)); - - return repository.exists(Query.query(criteriaInstitution) - .addCriteria(Criteria.where(InstitutionEntity.Fields.onboarding.name()) - .elemMatch(criteriaOnboarding)) - , InstitutionEntity.class); - } - - @Override - public Optional findByExternalId(String externalId) { - return repository.find(Query.query(Criteria.where(InstitutionEntity.Fields.externalId.name()).is(externalId)), - InstitutionEntity.class).stream() - .map(institutionMapper::convertToInstitution) - .findFirst(); - } - - @Override - public List findWithFilter(String externalId, String productId, List validRelationshipStates) { - Query query = Query.query(Criteria.where(InstitutionEntity.Fields.externalId.name()).is(externalId)) - .addCriteria(Criteria.where(InstitutionEntity.Fields.onboarding.name()) - .elemMatch(Criteria.where(Onboarding.Fields.productId.name()).is(productId) - .and(Onboarding.Fields.status.name()).in(validRelationshipStates))); - - return repository.find(query, InstitutionEntity.class).stream() - .map(institutionMapper::convertToInstitution) - .collect(Collectors.toList()); - } - - @Override - public Institution updateOnboardedProductCreatedAt(String institutionId, String productId, OffsetDateTime createdAt) { - Query query = Query.query(Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); - - Update update = new Update(); - update.set(constructQuery(CURRENT_ONBOARDING_REFER, OnboardingEntity.Fields.createdAt.name()), createdAt) - .set(constructQuery(CURRENT_ONBOARDING_REFER, OnboardingEntity.Fields.updatedAt.name()), OffsetDateTime.now()) - .filterArray(Criteria.where(CURRENT_ONBOARDING + OnboardingEntity.Fields.productId.name()).is(productId) - .and(CURRENT_ONBOARDING + OnboardingEntity.Fields.status.name()).is(RelationshipState.ACTIVE.name())); - - Update updateInstitutionEntityUpdatedAt = new Update(); - updateInstitutionEntityUpdatedAt.set(InstitutionEntity.Fields.updatedAt.name(), OffsetDateTime.now()); - - FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); - repository.findAndModify(query, update, findAndModifyOptions, InstitutionEntity.class); - return institutionMapper.convertToInstitution(repository.findAndModify(query, updateInstitutionEntityUpdatedAt, findAndModifyOptions, InstitutionEntity.class)); - } - - @Override - public List findBrokers(String productId, InstitutionType type) { - - Query query = Query.query(Criteria.where(InstitutionEntity.Fields.institutionType.name()).is(type) - .and(InstitutionEntity.Fields.onboarding.name()).elemMatch(Criteria.where(Onboarding.Fields.productId.name()).is(productId) - .and(Onboarding.Fields.status.name()).is(ProductStatus.ACTIVE))); - - List institutionEntities = repository.find(query, InstitutionEntity.class); - return institutionEntities.stream() - .map(institutionMapper::convertToInstitution) - .collect(Collectors.toList()); - } - - @Override - public List findByTaxCodeAndSubunitCode(String taxCode, String subunitCode) { - return repository.find(Query.query(Criteria.where(InstitutionEntity.Fields.taxCode.name()).is(taxCode) - .and(InstitutionEntity.Fields.subunitCode.name()).is(subunitCode) - ), - InstitutionEntity.class).stream() - .map(institutionMapper::convertToInstitution) - .collect(Collectors.toList()); - } - - @Override - public List findByOriginAndOriginId(String origin, String originId) { - return repository.find(Query.query(CriteriaBuilder.builder() - .isIfNotNull(InstitutionEntity.Fields.origin.name(), origin) - .isIfNotNull(InstitutionEntity.Fields.originId.name(), originId) - .build() - ), - InstitutionEntity.class).stream() - .map(institutionMapper::convertToInstitution) - .collect(Collectors.toList()); - } - - @Override - public Boolean existsOnboardingByFilters(VerifyOnboardingFilters filters) { - Criteria criteriaInstitution = CriteriaBuilder.builder() - .isIfNotNull(InstitutionEntity.Fields.externalId.name(), filters.getExternalId()) - .isIfNotNull(InstitutionEntity.Fields.taxCode.name(), filters.getTaxCode()) - .isIfNotNull(InstitutionEntity.Fields.origin.name(), filters.getOrigin()) - .isIfNotNull(InstitutionEntity.Fields.originId.name(), filters.getOriginId()) - .build(); - - criteriaInstitution.and(InstitutionEntity.Fields.subunitCode.name()).is(filters.getSubunitCode()); - - Criteria criteriaOnboarding = Criteria.where(Onboarding.Fields.status.name()).in(filters.getValidRelationshipStates()) - .and(Onboarding.Fields.productId.name()).is(filters.getProductId()); - - return repository.exists(Query.query(criteriaInstitution) - .addCriteria(Criteria.where(InstitutionEntity.Fields.onboarding.name()) - .elemMatch(criteriaOnboarding)) - , InstitutionEntity.class); - } - - private Query constructQueryWithSearchMode(List geo, SearchMode searchMode) { - String geoQuery = InstitutionEntity.Fields.geographicTaxonomies.name() - + "." + GeoTaxonomyEntity.Fields.code.name(); - switch (searchMode) { - case ALL: - return Query.query(Criteria.where(geoQuery).all(geo)); - case ANY: - return Query.query(Criteria.where(geoQuery).in(geo)); - case EXACT: - return Query.query(Criteria.where(geoQuery).all(geo) - .and(InstitutionEntity.Fields.geographicTaxonomies.name()).size(geo.size())); - default: - throw new InvalidRequestException("Invalid search mode", "0000"); - } - } - - private String constructQuery(String... variables) { - StringBuilder builder = new StringBuilder(); - builder.append(InstitutionEntity.Fields.onboarding.name()); - Arrays.stream(variables).forEach(s -> builder.append(".").append(s)); - return builder.toString(); - } -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepository.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepository.java deleted file mode 100644 index e742364..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepository.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; -import org.springframework.data.mongodb.repository.MongoRepository; -import org.springframework.data.mongodb.repository.Query; -import org.springframework.stereotype.Repository; - -@Repository -public interface InstitutionRepository extends MongoRepository, MongoCustomConnector { - - @Query(value = "{ '_id' : ?0, 'onboarding' : { $elemMatch: { 'productId' : ?1 } } }", - fields = "{ 'onboarding': { $elemMatch: { 'productId' : ?1 } } }") - InstitutionEntity findByInstitutionIdAndOnboardingProductId(String institutionId, String productId); - - -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnector.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnector.java deleted file mode 100644 index 5fbb442..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnector.java +++ /dev/null @@ -1,28 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import com.mongodb.client.result.UpdateResult; -import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionFilter; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.mongodb.core.FindAndModifyOptions; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.data.mongodb.core.query.UpdateDefinition; - -import java.util.List; - -public interface MongoCustomConnector { - - boolean exists(Query query, Class outputType); - - Long count(Query query, Class outputType); - - List find(Query query, Class outputType); - - Page find(Query query, Pageable pageable, Class outputType); - - O findAndModify(Query query, UpdateDefinition updateDefinition, FindAndModifyOptions findAndModifyOptions, Class outputType); - - List findUserInstitutionAggregation(UserInstitutionFilter filter, Class outputType); - - UpdateResult updateMulti(Query query, UpdateDefinition updateDefinition, Class outputType); -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImpl.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImpl.java deleted file mode 100644 index a9c352a..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImpl.java +++ /dev/null @@ -1,107 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import com.mongodb.client.result.UpdateResult; -import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionFilter; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; -import org.springframework.data.mongodb.core.FindAndModifyOptions; -import org.springframework.data.mongodb.core.MongoOperations; -import org.springframework.data.mongodb.core.aggregation.Aggregation; -import org.springframework.data.mongodb.core.aggregation.GraphLookupOperation; -import org.springframework.data.mongodb.core.aggregation.MatchOperation; -import org.springframework.data.mongodb.core.aggregation.UnwindOperation; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.data.mongodb.core.query.UpdateDefinition; -import org.springframework.util.StringUtils; - -import java.util.ArrayList; -import java.util.List; - -public class MongoCustomConnectorImpl implements MongoCustomConnector { - private static final String INSTITUTION_ID = "institutionId"; - private static final String INSTITUTIONS = "institutions"; - private static final String ENTITY_ID = "_id"; - private static final String BINDINGS = "$bindings"; - private final MongoOperations mongoOperations; - - public MongoCustomConnectorImpl(MongoOperations mongoOperations) { - this.mongoOperations = mongoOperations; - } - - - @Override - public boolean exists(Query query, Class outputType) { - return mongoOperations.exists(query, outputType); - } - - @Override - public Long count(Query query, Class outputType) { - return mongoOperations.count(query, outputType); - } - - @Override - public List find(Query query, Class outputType) { - return mongoOperations.find(query, outputType); - } - - @Override - public Page find(Query query, Pageable pageable, Class outputType) { - long count = mongoOperations.count(query, outputType); - List list = new ArrayList<>(); - if (count > 0) { - list = mongoOperations.find(query.with(pageable), outputType); - } - return new PageImpl<>(list, pageable, count); - } - - @Override - public O findAndModify(Query query, UpdateDefinition updateDefinition, FindAndModifyOptions findAndModifyOptions, Class outputType) { - return mongoOperations.findAndModify(query, updateDefinition, findAndModifyOptions, outputType); - } - - @Override - public List findUserInstitutionAggregation(UserInstitutionFilter filter, Class outputType) { - MatchOperation matchUserId = Aggregation.match(Criteria.where(ENTITY_ID).is(filter.getUserId())); - //Output a new document for each userBindings - UnwindOperation unwindBindings = Aggregation.unwind(BINDINGS); - //retrieve institution for each binding - GraphLookupOperation.GraphLookupOperationBuilder graphLookupInstitution = Aggregation.graphLookup(filter.getToCollection()) - .startWith(BINDINGS + "." + INSTITUTION_ID) - .connectFrom(INSTITUTION_ID) - .connectTo(ENTITY_ID) - .maxDepth(2); - //Output a new document for each product in bindings - UnwindOperation unwindProducts = Aggregation.unwind(BINDINGS + ".products"); - //remove document with product status not in filter - MatchOperation matchProductStatus = Aggregation.match(Criteria.where("bindings.products.status").in(filter.getStates())); - //remove document with no institution - MatchOperation matchInstitutionExist = Aggregation.match(Criteria.where(INSTITUTIONS).size(1)); - - Aggregation aggregation; - if (StringUtils.hasText(filter.getInstitutionId())) { - MatchOperation matchInstitutionId = checkIfInstitutionIdIsPresent(filter); - aggregation = Aggregation.newAggregation(matchUserId, unwindBindings, graphLookupInstitution.as(INSTITUTIONS), matchInstitutionId, unwindProducts, matchProductStatus, matchInstitutionExist); - } else if (StringUtils.hasText(filter.getExternalId())) { - checkIfExternalIdIsPresent(filter, graphLookupInstitution); - aggregation = Aggregation.newAggregation(matchUserId, unwindBindings, graphLookupInstitution.as(INSTITUTIONS), unwindProducts, matchProductStatus, matchInstitutionExist); - } else { - aggregation = Aggregation.newAggregation(matchUserId, unwindBindings, graphLookupInstitution.as(INSTITUTIONS), unwindProducts, matchProductStatus, matchInstitutionExist); - } - return mongoOperations.aggregate(aggregation, filter.getFromCollection(), outputType).getMappedResults(); - } - - private MatchOperation checkIfInstitutionIdIsPresent(UserInstitutionFilter filter) { - return Aggregation.match(Criteria.where("bindings." + INSTITUTION_ID).is(filter.getInstitutionId())); - } - - private void checkIfExternalIdIsPresent(UserInstitutionFilter filter, GraphLookupOperation.GraphLookupOperationBuilder graphLookupOperation) { - graphLookupOperation.restrict(Criteria.where("externalId").is(filter.getExternalId())); - } - - @Override - public UpdateResult updateMulti(Query query, UpdateDefinition updateDefinition, Class outputType){ - return mongoOperations.updateMulti(query, updateDefinition, outputType); - } -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImpl.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImpl.java deleted file mode 100644 index c6ee1c3..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImpl.java +++ /dev/null @@ -1,67 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import it.pagopa.selfcare.mscore.api.PecNotificationConnector; -import it.pagopa.selfcare.mscore.connector.dao.model.PecNotificationEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.mapper.PecNotificationEntityMapper; -import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; -import lombok.extern.slf4j.Slf4j; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.Objects; - -@Slf4j -@Component -public class PecNotificationConnectorImpl implements PecNotificationConnector { - - private final PecNotificationRepository repository; - private final PecNotificationEntityMapper pecNotificationMapper; - - public PecNotificationConnectorImpl(PecNotificationRepository repository, PecNotificationEntityMapper pecNotificationMapper) { - this.repository = repository; - this.pecNotificationMapper = pecNotificationMapper; - } - - @Override - public boolean findAndDeletePecNotification(String institutionId, String productId) { - - Query query = Query.query(Criteria.where(PecNotificationEntity.Fields.institutionId.name()).is(institutionId) - .and(PecNotificationEntity.Fields.productId.name()).is(productId)); - - List pecNotificationEntityList = repository.find(query, PecNotificationEntity.class); - - if(Objects.nonNull(pecNotificationEntityList) && pecNotificationEntityList.size() == 1) { - repository.delete(pecNotificationEntityList.get(0)); - log.trace("Deleted PecNotification with institutionId: {} and productId: {}", institutionId, productId); - return true; - } - - if (Objects.nonNull(pecNotificationEntityList) && pecNotificationEntityList.size() > 1) { - log.trace("Cannot delete PecNotification with institutionId: {} and productId: {}, because there are multiple entries", institutionId, productId); - return false; - } - - log.trace("Cannot delete PecNotification with institutionId: {} and productId: {}, because it does not exist", institutionId, productId); - return false; - } - - @Override - public boolean insertPecNotification(PecNotification pecNotification){ - - PecNotificationEntity pecNotificationEntity = this.pecNotificationMapper.convertToPecNotificationEntity(pecNotification); - - boolean exist = repository.existsByInstitutionIdAndProductId(pecNotificationEntity.getInstitutionId(), pecNotificationEntity.getProductId()); - - if (exist){ - log.trace("Cannot insert the PecNotification: {}, as it already exists in the collection", pecNotification.toString()); - return false; - } - - repository.insert(pecNotificationEntity); - log.trace("Inserted PecNotification: {}", pecNotification.toString()); - return true; - } - -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationRepository.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationRepository.java deleted file mode 100644 index 87c8f85..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import it.pagopa.selfcare.mscore.connector.dao.model.PecNotificationEntity; -import org.springframework.data.mongodb.repository.MongoRepository; - -public interface PecNotificationRepository extends MongoRepository, MongoCustomConnector { - boolean existsByInstitutionIdAndProductId(String institutionId, String productId); -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/TokenRepository.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/TokenRepository.java deleted file mode 100644 index 483a662..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/TokenRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import it.pagopa.selfcare.mscore.connector.dao.model.TokenEntity; -import org.springframework.data.mongodb.repository.MongoRepository; - -public interface TokenRepository extends MongoRepository, MongoCustomConnector { - -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/UserRepository.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/UserRepository.java deleted file mode 100644 index ee21f99..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/UserRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import it.pagopa.selfcare.mscore.connector.dao.model.UserEntity; -import org.springframework.data.mongodb.repository.MongoRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface UserRepository extends MongoRepository,MongoCustomConnector { - -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfig.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfig.java deleted file mode 100644 index 6e55562..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfig.java +++ /dev/null @@ -1,22 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; -import org.springframework.data.mongodb.core.convert.MongoCustomConversions; - -import java.util.Arrays; - -@Configuration -@PropertySource("classpath:config/dao-config.properties") -class DaoConfig{ - - @Bean - public MongoCustomConversions customConversions() { - return new MongoCustomConversions(Arrays.asList( - new OffsetDateTimeToStringConverter(), - new StringToOffsetDateTimeConverter() - )); - } - -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverter.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverter.java deleted file mode 100644 index 161d0c2..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverter.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.config; - -import org.springframework.core.convert.converter.Converter; - -import java.time.OffsetDateTime; -import java.time.ZoneOffset; -import java.time.format.DateTimeFormatter; - -class OffsetDateTimeToStringConverter implements Converter { - - @Override - public String convert(OffsetDateTime source) { - return source.toInstant().atOffset(ZoneOffset.UTC).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); - } - -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverter.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverter.java deleted file mode 100644 index 686f031..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverter.java +++ /dev/null @@ -1,15 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.config; - -import org.springframework.core.convert.converter.Converter; - -import java.time.OffsetDateTime; -import java.time.format.DateTimeFormatter; - -class StringToOffsetDateTimeConverter implements Converter { - - @Override - public OffsetDateTime convert(String source) { - return OffsetDateTime.parse(source, DateTimeFormatter.ISO_OFFSET_DATE_TIME); - } - -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/DelegationEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/DelegationEntity.java deleted file mode 100644 index 4b14e6b..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/DelegationEntity.java +++ /dev/null @@ -1,36 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model; - -import it.pagopa.selfcare.mscore.constant.DelegationState; -import it.pagopa.selfcare.mscore.constant.DelegationType; -import lombok.Data; -import lombok.experimental.FieldNameConstants; -import org.springframework.data.annotation.Id; -import org.springframework.data.mongodb.core.mapping.Document; -import org.springframework.data.mongodb.core.mapping.Sharded; - -import java.time.OffsetDateTime; - -@Data -@Document("Delegations") -@Sharded(shardKey = {"id"}) -@FieldNameConstants(asEnum = true) -public class DelegationEntity { - - @Id - private String id; - private String from; - private String institutionFromName; - private String institutionToName; - private String institutionFromRootName; - private String to; - private String toTaxCode; - private String fromTaxCode; - private String toType; - private String fromType; - private String productId; - private DelegationType type; - private DelegationState status; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/InstitutionEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/InstitutionEntity.java deleted file mode 100644 index b370791..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/InstitutionEntity.java +++ /dev/null @@ -1,61 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.*; -import it.pagopa.selfcare.mscore.constant.Origin; -import lombok.Data; -import lombok.experimental.FieldNameConstants; -import org.springframework.data.annotation.Id; -import org.springframework.data.mongodb.core.index.Indexed; -import org.springframework.data.mongodb.core.mapping.Document; -import org.springframework.data.mongodb.core.mapping.Sharded; - -import java.time.OffsetDateTime; -import java.util.List; - -@Data -@Document("Institution") -@Sharded(shardKey = {"id"}) -@FieldNameConstants(asEnum = true) -public class InstitutionEntity { - - @Id - private String id; - - @Indexed(unique = true) - private String externalId; - - private Origin origin; - private String originId; - private String description; - private InstitutionType institutionType; - private String digitalAddress; - private String address; - private String zipCode; - private String taxCode; - private String city; - private String county; - private String country; - private String istatCode; - private BillingEntity billing; - private List onboarding; - private List geographicTaxonomies; - private List attributes; - private PaymentServiceProviderEntity paymentServiceProvider; - private DataProtectionOfficerEntity dataProtectionOfficer; - private String rea; - private String shareCapital; - private String businessRegisterPlace; - private String supportEmail; - private String supportPhone; - private boolean imported; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - private String subunitCode; - private String subunitType; - private String parentDescription; - private String rootParentId; - private PaAttributesEntity paAttributes; - private boolean delegation; - -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java deleted file mode 100644 index ac2c57a..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java +++ /dev/null @@ -1,29 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model; - -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.FieldNameConstants; -import org.springframework.data.annotation.Id; -import org.springframework.data.mongodb.core.mapping.Document; -import org.springframework.data.mongodb.core.mapping.Sharded; - -import java.time.OffsetDateTime; - -@Data -@NoArgsConstructor -@Document("PecNotification") -@Sharded(shardKey = {"id"}) -@FieldNameConstants(asEnum = true) -public class PecNotificationEntity { - - @Id - private String id; - private String institutionId; - private String productId; - private Integer moduleDayOfTheEpoch; - private String digitalAddress; - - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - -} \ No newline at end of file diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/TokenEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/TokenEntity.java deleted file mode 100644 index 03a6c23..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/TokenEntity.java +++ /dev/null @@ -1,46 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model; - -import it.pagopa.selfcare.mscore.connector.dao.model.inner.InstitutionUpdateEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.TokenUserEntity; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.constant.TokenType; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.FieldNameConstants; -import org.springframework.data.annotation.Id; -import org.springframework.data.mongodb.core.index.Indexed; -import org.springframework.data.mongodb.core.mapping.Document; -import org.springframework.data.mongodb.core.mapping.Sharded; - -import java.time.OffsetDateTime; -import java.util.List; - -@Data -@NoArgsConstructor -@Document("Token") -@Sharded(shardKey = {"id"}) -@FieldNameConstants(asEnum = true) -public class TokenEntity { - - @Id - private String id; - private TokenType type; - private RelationshipState status; - private String institutionId; - private String productId; - private OffsetDateTime expiringDate; - private String checksum; - private String contractVersion; - private String contractTemplate; - private String contractSigned; - private String contentType; - private List users; - private InstitutionUpdateEntity institutionUpdate; - @Indexed - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - private OffsetDateTime deletedAt; - private OffsetDateTime activatedAt; - -} - diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/UserEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/UserEntity.java deleted file mode 100644 index 1162bfc..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/UserEntity.java +++ /dev/null @@ -1,27 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model; - -import it.pagopa.selfcare.mscore.connector.dao.model.inner.UserBindingEntity; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.FieldNameConstants; -import org.springframework.data.annotation.Id; -import org.springframework.data.mongodb.core.mapping.Document; -import org.springframework.data.mongodb.core.mapping.Sharded; - -import java.time.OffsetDateTime; -import java.util.List; - -@Data -@NoArgsConstructor -@Document("User") -@Sharded(shardKey = {"id"}) -@FieldNameConstants(asEnum = true) -public class UserEntity { - - @Id - private String id; - private List bindings; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionAggregationEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionAggregationEntity.java deleted file mode 100644 index e4ef1ad..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionAggregationEntity.java +++ /dev/null @@ -1,25 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.aggregation; - - -import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.FieldNameConstants; -import org.springframework.data.annotation.Id; -import org.springframework.data.mongodb.core.mapping.Document; -import org.springframework.data.mongodb.core.mapping.Sharded; - -import java.util.List; - -@Data -@NoArgsConstructor -@Document("User") -@Sharded(shardKey = {"id"}) -@FieldNameConstants(asEnum = true) -public class UserInstitutionAggregationEntity { - - @Id - private String id; - private UserInstitutionBindingEntity bindings; - private List institutions; -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionBindingEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionBindingEntity.java deleted file mode 100644 index f5a6ed5..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionBindingEntity.java +++ /dev/null @@ -1,17 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.aggregation; - -import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardedProductEntity; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.FieldNameConstants; - -@Data -@FieldNameConstants(asEnum = true) -@AllArgsConstructor -@NoArgsConstructor -public class UserInstitutionBindingEntity { - - private String institutionId; - private OnboardedProductEntity products; -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AdditionalInformationsEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AdditionalInformationsEntity.java deleted file mode 100644 index a53ff98..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AdditionalInformationsEntity.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.inner; - -import lombok.Data; -import lombok.experimental.FieldNameConstants; - -@Data -@FieldNameConstants(asEnum = true) -public class AdditionalInformationsEntity { - private boolean belongRegulatedMarket; - private String regulatedMarketNote; - private boolean ipa; - private String ipaCode; - private boolean establishedByRegulatoryProvision; - private String establishedByRegulatoryProvisionNote; - private boolean agentOfPublicService; - private String agentOfPublicServiceNote; - private String otherNote; -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AttributesEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AttributesEntity.java deleted file mode 100644 index 67248df..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AttributesEntity.java +++ /dev/null @@ -1,12 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.inner; - -import lombok.Data; -import lombok.experimental.FieldNameConstants; - -@Data -@FieldNameConstants(asEnum = true) -public class AttributesEntity { - private String origin; - private String code; - private String description; -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/BillingEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/BillingEntity.java deleted file mode 100644 index 47e5edd..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/BillingEntity.java +++ /dev/null @@ -1,15 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.inner; - -import lombok.Data; -import lombok.experimental.FieldNameConstants; - -@Data -@FieldNameConstants(asEnum = true) -public class BillingEntity { - - private String vatNumber; - private String taxCodeInvoicing; - private String recipientCode; - private boolean publicServices; - -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/DataProtectionOfficerEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/DataProtectionOfficerEntity.java deleted file mode 100644 index d6224c5..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/DataProtectionOfficerEntity.java +++ /dev/null @@ -1,12 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.inner; - -import lombok.Data; -import lombok.experimental.FieldNameConstants; - -@Data -@FieldNameConstants(asEnum = true) -public class DataProtectionOfficerEntity { - private String address; - private String email; - private String pec; -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/GeoTaxonomyEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/GeoTaxonomyEntity.java deleted file mode 100644 index 518e0fb..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/GeoTaxonomyEntity.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.inner; - -import lombok.Data; -import lombok.experimental.FieldNameConstants; - -@Data -@FieldNameConstants(asEnum = true) -public class GeoTaxonomyEntity { - private String code; - private String desc; -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/InstitutionUpdateEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/InstitutionUpdateEntity.java deleted file mode 100644 index 4a2cd3b..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/InstitutionUpdateEntity.java +++ /dev/null @@ -1,30 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.inner; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import lombok.Data; - -import java.util.List; - -@Data -public class InstitutionUpdateEntity { - - private InstitutionType institutionType; - private String description; - private String digitalAddress; - private String address; - private String taxCode; - private String zipCode; - private String city; - private String county; - private String country; - private PaymentServiceProviderEntity paymentServiceProvider; - private DataProtectionOfficerEntity dataProtectionOfficer; - private List geographicTaxonomies; - private String rea; - private String shareCapital; - private String businessRegisterPlace; - private String supportEmail; - private String supportPhone; - private boolean imported; - private AdditionalInformationsEntity additionalInformations; -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardedProductEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardedProductEntity.java deleted file mode 100644 index e8a040d..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardedProductEntity.java +++ /dev/null @@ -1,30 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.inner; - -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.mscore.constant.Env; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import lombok.Data; -import lombok.experimental.FieldNameConstants; -import org.springframework.data.mongodb.core.index.Indexed; - -import java.time.OffsetDateTime; - -import static it.pagopa.selfcare.mscore.constant.Env.ROOT; - -@Data -@FieldNameConstants(asEnum = true) -public class OnboardedProductEntity { - - @Indexed - private String productId; - - private String relationshipId; - private String tokenId; - private RelationshipState status; - private String contract; - private String productRole; - private PartyRole role; - private Env env = ROOT; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardingEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardingEntity.java deleted file mode 100644 index 6c86903..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardingEntity.java +++ /dev/null @@ -1,25 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.inner; - -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import lombok.Data; -import lombok.experimental.FieldNameConstants; -import org.springframework.data.mongodb.core.index.Indexed; - -import java.time.OffsetDateTime; - -@Data -@FieldNameConstants(asEnum = true) -public class OnboardingEntity { - - @Indexed(unique = true) - private String productId; - private RelationshipState status; - private String tokenId; - private String contract; - private String pricingPlan; - private BillingEntity billing; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - private OffsetDateTime closedAt; - private Boolean isAggregator; -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaAttributesEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaAttributesEntity.java deleted file mode 100644 index e2c7098..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaAttributesEntity.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.inner; - -import lombok.Data; - -@Data -public class PaAttributesEntity { - - private String aooParentCode; -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaymentServiceProviderEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaymentServiceProviderEntity.java deleted file mode 100644 index d7f4bf6..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaymentServiceProviderEntity.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.inner; - -import lombok.Data; -import lombok.experimental.FieldNameConstants; - -@Data -@FieldNameConstants(asEnum = true) -public class PaymentServiceProviderEntity { - private String abiCode; - private String businessRegisterNumber; - private String legalRegisterName; - private String legalRegisterNumber; - private boolean vatNumberGroup; -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/TokenUserEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/TokenUserEntity.java deleted file mode 100644 index 9e3ef4f..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/TokenUserEntity.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.inner; - -import it.pagopa.selfcare.commons.base.security.PartyRole; -import lombok.Data; - -@Data -public class TokenUserEntity { - private String userId; - private PartyRole role; -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/UserBindingEntity.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/UserBindingEntity.java deleted file mode 100644 index ce3fad0..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/UserBindingEntity.java +++ /dev/null @@ -1,22 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.inner; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.FieldNameConstants; -import org.springframework.data.mongodb.core.index.Indexed; - -import java.util.List; - -@Data -@FieldNameConstants(asEnum = true) -@AllArgsConstructor -@NoArgsConstructor -public class UserBindingEntity { - - @Indexed(unique = true) - private String institutionId; - private String institutionName; - private String institutionRootName; - private List products; -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationEntityMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationEntityMapper.java deleted file mode 100644 index b762a79..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationEntityMapper.java +++ /dev/null @@ -1,23 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.mapper; - - -import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; -import it.pagopa.selfcare.mscore.model.delegation.Delegation; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -import java.util.UUID; - -@Mapper(componentModel = "spring", imports = UUID.class) -public interface DelegationEntityMapper { - - @Mapping(target = "id", defaultExpression = "java(UUID.randomUUID().toString())") - @Mapping(target = "toType", source = "brokerType") - @Mapping(target = "fromType", source = "institutionType") - DelegationEntity convertToDelegationEntity(Delegation delegation); - - @Mapping(target = "brokerType", source = "toType") - @Mapping(target = "institutionType", source = "fromType") - Delegation convertToDelegation(DelegationEntity entity); - -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationInstitutionMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationInstitutionMapper.java deleted file mode 100644 index 7b84a97..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationInstitutionMapper.java +++ /dev/null @@ -1,34 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.mapper; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.model.delegation.Delegation; -import it.pagopa.selfcare.mscore.model.delegation.DelegationInstitution; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Named; - -import java.util.List; - -@Mapper(componentModel = "spring") -public interface DelegationInstitutionMapper { - - @Mapping(source = "institutions", target = "taxCode", qualifiedByName = "setTaxCode") - @Mapping(source = "institutions", target = "institutionType", qualifiedByName = "setInstitutionType") - Delegation convertToDelegationInstitution(DelegationInstitution delegation); - - @Mapping(source = "institutions", target = "brokerTaxCode", qualifiedByName = "setTaxCode") - @Mapping(source = "institutions", target = "brokerType", qualifiedByName = "setInstitutionType") - Delegation convertToDelegationBroker(DelegationInstitution delegation); - - @Named("setTaxCode") - default String setTaxCode(List institutionList) { - return !institutionList.isEmpty() ? institutionList.get(0).getTaxCode() : null; - } - - @Named("setInstitutionType") - default InstitutionType setInstitutionType(List institutionList) { - return !institutionList.isEmpty()? institutionList.get(0).getInstitutionType() : null; - } - -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionEntityMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionEntityMapper.java deleted file mode 100644 index 73c4e9b..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionEntityMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.mapper; - - -import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -import java.util.UUID; - -@Mapper(componentModel = "spring", imports = UUID.class) -public interface InstitutionEntityMapper { - - @Mapping(target = "id", defaultExpression = "java(UUID.randomUUID().toString())") - InstitutionEntity convertToInstitutionEntity(Institution institution); - - Institution convertToInstitution(InstitutionEntity entity); -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapper.java deleted file mode 100644 index bc0abcf..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapper.java +++ /dev/null @@ -1,96 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.mapper; - -import it.pagopa.selfcare.mscore.connector.dao.model.inner.AdditionalInformationsEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.DataProtectionOfficerEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.GeoTaxonomyEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.PaymentServiceProviderEntity; -import it.pagopa.selfcare.mscore.model.institution.AdditionalInformations; -import it.pagopa.selfcare.mscore.model.institution.DataProtectionOfficer; -import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; -import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -import java.util.ArrayList; -import java.util.List; - -/** Deprecated: Use InstitutionEntityMapper */ -@Deprecated -@NoArgsConstructor(access = AccessLevel.NONE) -public class InstitutionMapper { - - public static DataProtectionOfficer toDataProtectionOfficer(DataProtectionOfficerEntity dataProtectionOfficer) { - DataProtectionOfficer data = new DataProtectionOfficer(); - data.setPec(dataProtectionOfficer.getPec()); - data.setEmail(dataProtectionOfficer.getEmail()); - data.setAddress(dataProtectionOfficer.getAddress()); - return data; - } - - public static AdditionalInformations toAdditionalInformations(AdditionalInformationsEntity additionalInformations) { - AdditionalInformations additionalInfo = new AdditionalInformations(); - additionalInfo.setIpa(additionalInformations.isIpa()); - additionalInfo.setIpaCode(additionalInformations.getIpaCode()); - additionalInfo.setAgentOfPublicService(additionalInformations.isAgentOfPublicService()); - additionalInfo.setAgentOfPublicServiceNote(additionalInformations.getAgentOfPublicServiceNote()); - additionalInfo.setBelongRegulatedMarket(additionalInformations.isBelongRegulatedMarket()); - additionalInfo.setRegulatedMarketNote(additionalInformations.getRegulatedMarketNote()); - additionalInfo.setEstablishedByRegulatoryProvision(additionalInformations.isEstablishedByRegulatoryProvision()); - additionalInfo.setEstablishedByRegulatoryProvisionNote(additionalInformations.getEstablishedByRegulatoryProvisionNote()); - additionalInfo.setOtherNote(additionalInformations.getOtherNote()); - return additionalInfo; - } - - public static PaymentServiceProvider toPaymentServiceProvider(PaymentServiceProviderEntity paymentServiceProvider) { - PaymentServiceProvider provider = new PaymentServiceProvider(); - provider.setLegalRegisterName(paymentServiceProvider.getLegalRegisterName()); - provider.setAbiCode(paymentServiceProvider.getAbiCode()); - provider.setLegalRegisterNumber(paymentServiceProvider.getLegalRegisterNumber()); - provider.setVatNumberGroup(paymentServiceProvider.isVatNumberGroup()); - provider.setBusinessRegisterNumber(paymentServiceProvider.getBusinessRegisterNumber()); - return provider; - } - - public static List toGeoTaxonomyEntity(List geographicTaxonomies) { - List list = new ArrayList<>(); - for(InstitutionGeographicTaxonomies geo : geographicTaxonomies){ - GeoTaxonomyEntity entity = new GeoTaxonomyEntity(); - entity.setDesc(geo.getDesc()); - entity.setCode(geo.getCode()); - list.add(entity); - } - return list; - } - - public static DataProtectionOfficerEntity toDataProtectionOfficerEntity(DataProtectionOfficer dataProtectionOfficer) { - DataProtectionOfficerEntity data = new DataProtectionOfficerEntity(); - data.setPec(dataProtectionOfficer.getPec()); - data.setEmail(dataProtectionOfficer.getEmail()); - data.setAddress(dataProtectionOfficer.getAddress()); - return data; - } - - public static AdditionalInformationsEntity toAdditionalInformationsEntity(AdditionalInformations additionalInformations) { - AdditionalInformationsEntity additionalInfo = new AdditionalInformationsEntity(); - additionalInfo.setIpa(additionalInformations.isIpa()); - additionalInfo.setIpaCode(additionalInformations.getIpaCode()); - additionalInfo.setAgentOfPublicService(additionalInformations.isAgentOfPublicService()); - additionalInfo.setAgentOfPublicServiceNote(additionalInformations.getAgentOfPublicServiceNote()); - additionalInfo.setBelongRegulatedMarket(additionalInformations.isBelongRegulatedMarket()); - additionalInfo.setRegulatedMarketNote(additionalInformations.getRegulatedMarketNote()); - additionalInfo.setEstablishedByRegulatoryProvision(additionalInformations.isEstablishedByRegulatoryProvision()); - additionalInfo.setEstablishedByRegulatoryProvisionNote(additionalInformations.getEstablishedByRegulatoryProvisionNote()); - additionalInfo.setOtherNote(additionalInformations.getOtherNote()); - return additionalInfo; - } - - public static PaymentServiceProviderEntity toPaymentServiceProviderEntity(PaymentServiceProvider paymentServiceProvider) { - PaymentServiceProviderEntity provider = new PaymentServiceProviderEntity(); - provider.setLegalRegisterName(paymentServiceProvider.getLegalRegisterName()); - provider.setAbiCode(paymentServiceProvider.getAbiCode()); - provider.setLegalRegisterNumber(paymentServiceProvider.getLegalRegisterNumber()); - provider.setVatNumberGroup(paymentServiceProvider.isVatNumberGroup()); - provider.setBusinessRegisterNumber(paymentServiceProvider.getBusinessRegisterNumber()); - return provider; - } -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapperHelper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapperHelper.java deleted file mode 100644 index 88543fc..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapperHelper.java +++ /dev/null @@ -1,87 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.mapper; - -import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.GeoTaxonomyEntity; -import it.pagopa.selfcare.mscore.model.institution.DataProtectionOfficer; -import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; -import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; -import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import org.springframework.data.mongodb.core.query.Update; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.stream.Collectors; - -@NoArgsConstructor(access = AccessLevel.NONE) -public class InstitutionMapperHelper { - - - public static void addGeographicTaxonomies(List taxonomiesList, Update update) { - if (taxonomiesList != null && !taxonomiesList.isEmpty()) { - List list = taxonomiesList.stream().map(geographicTaxonomies -> { - GeoTaxonomyEntity entity = new GeoTaxonomyEntity(); - entity.setCode(geographicTaxonomies.getCode()); - entity.setDesc(geographicTaxonomies.getDesc()); - return entity; - }).collect(Collectors.toList()); - update.set(InstitutionEntity.Fields.geographicTaxonomies.name(), list); - } - } - - public static Map getNotNullField(InstitutionUpdate institutionUpdate) { - Map response = new HashMap<>(); - if(institutionUpdate.getInstitutionType() != null) { - response.put(InstitutionUpdate.Fields.institutionType.name(), institutionUpdate.getInstitutionType().name()); - } - response.put(InstitutionUpdate.Fields.description.name(), institutionUpdate.getDescription()); - response.put(InstitutionUpdate.Fields.parentDescription.name(), institutionUpdate.getParentDescription()); - response.put(InstitutionUpdate.Fields.digitalAddress.name(), institutionUpdate.getDigitalAddress()); - response.put(InstitutionUpdate.Fields.address.name(), institutionUpdate.getAddress()); - response.put(InstitutionUpdate.Fields.taxCode.name(), institutionUpdate.getTaxCode()); - response.put(InstitutionUpdate.Fields.zipCode.name(), institutionUpdate.getZipCode()); - response.put(InstitutionUpdate.Fields.rea.name(), institutionUpdate.getRea()); - response.put(InstitutionUpdate.Fields.shareCapital.name(), institutionUpdate.getShareCapital()); - response.put(InstitutionUpdate.Fields.businessRegisterPlace.name(), institutionUpdate.getBusinessRegisterPlace()); - response.put(InstitutionUpdate.Fields.supportEmail.name(), institutionUpdate.getSupportEmail()); - response.put(InstitutionUpdate.Fields.supportPhone.name(), institutionUpdate.getSupportPhone()); - response.put(InstitutionUpdate.Fields.imported.name(), institutionUpdate.isImported()); - response.put(InstitutionUpdate.Fields.delegation.name(), institutionUpdate.getDelegation()); - - if(institutionUpdate.getPaymentServiceProvider() != null) { - response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.abiCode.name()), - institutionUpdate.getPaymentServiceProvider().getAbiCode()); - response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.businessRegisterNumber.name()), - institutionUpdate.getPaymentServiceProvider().getBusinessRegisterNumber()); - response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.legalRegisterNumber.name()), - institutionUpdate.getPaymentServiceProvider().getLegalRegisterNumber()); - response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.legalRegisterName.name()), - institutionUpdate.getPaymentServiceProvider().getLegalRegisterName()); - response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.vatNumberGroup.name()), - institutionUpdate.getPaymentServiceProvider().isVatNumberGroup()); - } - - if(institutionUpdate.getDataProtectionOfficer() != null){ - response.put(constructProtectionOfficerInnerField(DataProtectionOfficer.Fields.pec.name()), - institutionUpdate.getDataProtectionOfficer().getPec()); - response.put(constructProtectionOfficerInnerField(DataProtectionOfficer.Fields.address.name()), - institutionUpdate.getDataProtectionOfficer().getAddress()); - response.put(constructProtectionOfficerInnerField(DataProtectionOfficer.Fields.email.name()), - institutionUpdate.getDataProtectionOfficer().getEmail()); - } - - response.values().removeIf(Objects::isNull); - return response; - } - - private static String constructProtectionOfficerInnerField(String name) { - return InstitutionUpdate.Fields.dataProtectionOfficer.name() + "." + name; - } - - private static String constructPaymentInnerField(String name) { - return InstitutionUpdate.Fields.businessRegisterPlace.name() + "." + name; - } -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/OnboardedProductMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/OnboardedProductMapper.java deleted file mode 100644 index bd392bf..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/OnboardedProductMapper.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.mapper; - -import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardedProductEntity; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import org.mapstruct.Mapper; - -@Mapper(componentModel = "spring") -public interface OnboardedProductMapper { - OnboardedProduct toOnboardedProduct(OnboardedProductEntity onboardedProductEntity); -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java deleted file mode 100644 index fe31aad..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.mapper; - -import it.pagopa.selfcare.mscore.connector.dao.model.PecNotificationEntity; -import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -import java.util.UUID; - -@Mapper(componentModel = "spring", imports = UUID.class) -public interface PecNotificationEntityMapper { - - @Mapping(target = "id", defaultExpression = "java(UUID.randomUUID().toString())") - PecNotificationEntity convertToPecNotificationEntity(PecNotification institution); - - PecNotification convertToPecNotification(PecNotificationEntity entity); -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserEntityMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserEntityMapper.java deleted file mode 100644 index 9da1c6a..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserEntityMapper.java +++ /dev/null @@ -1,43 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.mapper; - - -import it.pagopa.selfcare.mscore.connector.dao.model.UserEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.UserBindingEntity; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedUser; -import it.pagopa.selfcare.mscore.model.user.UserInfo; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Named; -import org.mapstruct.factory.Mappers; - -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.UUID; -import java.util.stream.Collectors; - -@Mapper(componentModel = "spring", imports = UUID.class) -public interface UserEntityMapper { - - OnboardedProductMapper productMapper = Mappers.getMapper(OnboardedProductMapper.class); - - OnboardedUser toOnboardedUser(UserEntity entity); - - @Mapping(target = "products", expression = "java(setProducts(entity.getBindings(), institutionId))") - UserInfo toUserInfoByFirstInstitution(UserEntity entity, String institutionId); - - @Named("setProducts") - default List setProducts(List bindings, String institutionId) { - if(Objects.nonNull(bindings) && !bindings.isEmpty()) { - UserBindingEntity filteredEntity = bindings.stream().filter(el -> institutionId.equals(el.getInstitutionId())).findFirst().orElse(null); - return Objects.nonNull(filteredEntity) ? - filteredEntity.getProducts().stream().map(productMapper::toOnboardedProduct).collect(Collectors.toList()) - : Collections.emptyList(); - } - return Collections.emptyList(); - } - - @Mapping(target = "id", defaultExpression = "java(UUID.randomUUID().toString())") - UserEntity toUserEntity(OnboardedUser user); -} diff --git a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserInstitutionAggregationMapper.java b/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserInstitutionAggregationMapper.java deleted file mode 100644 index e226111..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserInstitutionAggregationMapper.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.mapper; - -import it.pagopa.selfcare.mscore.connector.dao.model.aggregation.UserInstitutionAggregationEntity; -import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionAggregation; -import org.mapstruct.Mapper; - -@Mapper(componentModel = "spring", uses = {InstitutionEntityMapper.class}) -public interface UserInstitutionAggregationMapper { - - UserInstitutionAggregation constructUserInstitutionAggregation(UserInstitutionAggregationEntity entity); -} diff --git a/apps/institution-ms-new/connector/dao/src/main/resources/config/dao-config.properties b/apps/institution-ms-new/connector/dao/src/main/resources/config/dao-config.properties deleted file mode 100644 index 93dce21..0000000 --- a/apps/institution-ms-new/connector/dao/src/main/resources/config/dao-config.properties +++ /dev/null @@ -1,3 +0,0 @@ -spring.data.mongodb.uri=${MONGODB_CONNECTION_URI::mongodb://localhost:27017/?readPreference=primary&appname=MongoDB%20Compass&directConnection=true&ssl=false}&appname=${MONGODB_APPNAME:selcMsCore} -spring.data.mongodb.database=${MONGODB_NAME_SELC_MSCORE:selcMsCore} -##spring.data.mongodb.auto-index-creation=true \ No newline at end of file diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilderTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilderTest.java deleted file mode 100644 index b20f591..0000000 --- a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilderTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.test.context.ContextConfiguration; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -@ContextConfiguration(classes = {CriteriaBuilder.class}) -@ExtendWith(MockitoExtension.class) -class CriteriaBuilderTest { - - @Test - void testInIfNotEmpty() { - Criteria criteria = CriteriaBuilder.builder() - .inIfNotEmpty("colors", List.of("red", "green", "blue")) - .inIfNotEmpty("sizes", List.of("small", "medium", "large")) - .build(); - - org.bson.conversions.Bson bson = criteria.getCriteriaObject(); - assertEquals("Document{{colors=Document{{$in=[red, green, blue]}}, sizes=Document{{$in=[small, medium, large]}}}}", bson.toString()); - } - - @Test - void testIsIfNotNull() { - Criteria criteria = CriteriaBuilder.builder() - .isIfNotNull("quantity", 10) - .isIfNotNull("price", 19.99) - .build(); - - org.bson.conversions.Bson bson = criteria.getCriteriaObject(); - - assertEquals("Document{{quantity=10, price=19.99}}", bson.toString()); - } -} diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImplTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImplTest.java deleted file mode 100644 index 142f591..0000000 --- a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImplTest.java +++ /dev/null @@ -1,350 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationEntityMapper; -import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationEntityMapperImpl; -import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationInstitutionMapper; -import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationInstitutionMapperImpl; -import it.pagopa.selfcare.mscore.constant.DelegationState; -import it.pagopa.selfcare.mscore.constant.DelegationType; -import it.pagopa.selfcare.mscore.constant.Order; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.model.delegation.*; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.api.function.Executable; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.Spy; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.support.PageableExecutionUtils; -import org.springframework.test.context.ContextConfiguration; - -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_DELEGATION_ERROR; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.*; - -@ContextConfiguration(classes = {DelegationConnectorImpl.class}) -@ExtendWith(MockitoExtension.class) -class DelegationConnectorImplTest { - - public static final int PAGE_SIZE = 0; - public static final int MAX_PAGE_SIZE = 100; - static Institution dummyInstitution; - static DelegationInstitution dummyDelegationEntity; - - static { - dummyInstitution = new Institution(); - dummyInstitution.setTaxCode("taxCode"); - dummyInstitution.setInstitutionType(InstitutionType.PT); - dummyDelegationEntity = new DelegationInstitution(); - dummyDelegationEntity.setId("id"); - dummyDelegationEntity.setProductId("productId"); - dummyDelegationEntity.setType(DelegationType.PT); - dummyDelegationEntity.setTo("To"); - dummyDelegationEntity.setFrom("From"); - dummyDelegationEntity.setInstitutionFromName("setInstitutionFromName"); - dummyDelegationEntity.setInstitutionFromRootName("setInstitutionFromRootName"); - dummyDelegationEntity.setInstitutions(List.of(dummyInstitution)); - } - - @InjectMocks - private DelegationConnectorImpl delegationConnectorImpl; - - @Mock - private DelegationRepository delegationRepository; - - @Mock - private MongoTemplate mongoTemplate; - - @Spy - private DelegationEntityMapper delegationMapper = new DelegationEntityMapperImpl(); - - @Spy - private DelegationInstitutionMapper delegationInstitutionMapper = new DelegationInstitutionMapperImpl(); - - @Test - void testSaveDelegation() { - DelegationEntity delegationEntity = new DelegationEntity(); - delegationEntity.setId("id"); - delegationEntity.setType(DelegationType.PT); - when(delegationRepository.save(Mockito.any())).thenReturn(delegationEntity); - Delegation response = delegationConnectorImpl.save(new Delegation()); - assertNotNull(response); - assertNotNull(response.getId()); - assertEquals(response.getId(), delegationEntity.getId()); - assertEquals(response.getType(), delegationEntity.getType()); - } - - @Test - void testSaveDelegationWithError() { - when(delegationRepository.save(any())).thenThrow(new MsCoreException(CREATE_DELEGATION_ERROR.getMessage(), CREATE_DELEGATION_ERROR.getCode())); - assertThrows(MsCoreException.class, () -> delegationConnectorImpl.save(new Delegation())); - verify(delegationRepository).save(any()); - } - - @Test - void testCheckIfExists() { - Delegation delegation = new Delegation(); - delegation.setTo("to"); - delegation.setFrom("from"); - delegation.setType(DelegationType.PT); - delegation.setProductId("prod"); - delegation.setStatus(DelegationState.DELETED); - when(delegationRepository.findByFromAndToAndProductIdAndTypeAndStatus(any(), any(), any(), any(), any())).thenReturn(Optional.of(new DelegationEntity())); - boolean response = delegationConnectorImpl.checkIfExistsWithStatus(delegation, DelegationState.DELETED); - assertTrue(response); - - } - - @Test - void find_shouldGetData() { - DelegationEntity delegationEntity = new DelegationEntity(); - delegationEntity.setId("id"); - delegationEntity.setProductId("productId"); - delegationEntity.setType(DelegationType.PT); - delegationEntity.setTo("To"); - delegationEntity.setFrom("From"); - delegationEntity.setInstitutionFromName("setInstitutionFromName"); - delegationEntity.setInstitutionFromRootName("setInstitutionFromRootName"); - - List delegationEntities = List.of(delegationEntity); - Page delegationEntityPage = new PageImpl<>(delegationEntities); - //When - - doReturn(delegationEntityPage) - .when(delegationRepository) - .find(any(), any(), any()); - - List response = delegationConnectorImpl.find(delegationEntity.getFrom(), - delegationEntity.getTo(), delegationEntity.getProductId(), null, null, Order.NONE, PAGE_SIZE, MAX_PAGE_SIZE); - - //Then - assertNotNull(response); - assertFalse(response.isEmpty()); - Delegation actual = response.get(0); - - assertEquals(actual.getId(), delegationEntity.getId()); - assertEquals(actual.getType(), delegationEntity.getType()); - assertEquals(actual.getProductId(), delegationEntity.getProductId()); - assertEquals(actual.getTo(), delegationEntity.getTo()); - assertEquals(actual.getFrom(), delegationEntity.getFrom()); - assertEquals(actual.getInstitutionFromName(), delegationEntity.getInstitutionFromName()); - assertEquals(actual.getInstitutionFromRootName(), delegationEntity.getInstitutionFromRootName()); - assertEquals(actual.getToTaxCode(), delegationEntity.getToTaxCode()); - assertEquals(actual.getFromTaxCode(), delegationEntity.getFromTaxCode()); - } - - @Test - void findByIdAndModifyStatus() { - DelegationEntity delegationEntity = new DelegationEntity(); - delegationEntity.setId("id"); - delegationEntity.setStatus(DelegationState.ACTIVE); - when(delegationRepository.findAndModify(any(), any(), any(), any())).thenReturn(delegationEntity); - Delegation delegation = delegationConnectorImpl.findByIdAndModifyStatus(delegationEntity.getId(), DelegationState.DELETED); - assertNotNull(delegation); - assertEquals(delegation.getId(), delegationEntity.getId()); - } - - @Test - void checkIfDelegationsAreActive_true() { - when(delegationRepository.findByToAndStatus(anyString(), any())).thenReturn(Optional.of(List.of(new DelegationEntity()))); - boolean response = delegationConnectorImpl.checkIfDelegationsAreActive("id"); - assertTrue(response); - } - - @Test - void checkIfDelegationsAreActive_false() { - when(delegationRepository.findByToAndStatus(anyString(), any())).thenReturn(Optional.of(Collections.emptyList())); - boolean response = delegationConnectorImpl.checkIfDelegationsAreActive("id"); - assertFalse(response); - } - - - @Test - void find_shouldGetDataPaginated() { - DelegationEntity delegationEntity = new DelegationEntity(); - delegationEntity.setId("id"); - delegationEntity.setProductId("productId"); - delegationEntity.setType(DelegationType.PT); - delegationEntity.setTo("To"); - delegationEntity.setFrom("From"); - delegationEntity.setInstitutionFromName("setInstitutionFromName"); - delegationEntity.setInstitutionFromRootName("setInstitutionFromRootName"); - - List delegationEntities = List.of(delegationEntity); - Page delegationEntityPage = new PageImpl<>(delegationEntities); - - //When - doReturn(delegationEntityPage) - .when(delegationRepository) - .find(any(), any(), any()); - - List response = delegationConnectorImpl.find(null, delegationEntity.getTo(), "productId", - null, null, Order.NONE, 0, 1); - - //Then - assertNotNull(response); - assertFalse(response.isEmpty()); - assertEquals(1, response.size()); - - Delegation actual = response.get(0); - - assertEquals(actual.getId(), delegationEntity.getId()); - assertEquals(actual.getType(), delegationEntity.getType()); - assertEquals(actual.getProductId(), delegationEntity.getProductId()); - assertEquals(actual.getTo(), delegationEntity.getTo()); - assertEquals(actual.getFrom(), delegationEntity.getFrom()); - assertEquals(actual.getFromTaxCode(), delegationEntity.getFromTaxCode()); - assertEquals(actual.getToTaxCode(), delegationEntity.getToTaxCode()); - - } - - @Test - void findAndActivate() { - DelegationEntity delegationEntity = new DelegationEntity(); - delegationEntity.setId("id"); - delegationEntity.setFrom("from"); - delegationEntity.setTo("to"); - delegationEntity.setProductId("prod-io"); - delegationEntity.setStatus(DelegationState.ACTIVE); - when(delegationRepository.findAndModify(any(), any(), any(), any())).thenReturn(delegationEntity); - Delegation delegation = delegationConnectorImpl.findAndActivate(delegationEntity.getFrom(), delegationEntity.getTo(), delegationEntity.getProductId()); - assertNotNull(delegation); - assertEquals(delegation.getId(), delegationEntity.getId()); - } - - private DelegationInstitution createAggregation(String pattern, String from, String to) { - Institution institution = new Institution(); - institution.setTaxCode("taxCode_" + pattern); - institution.setInstitutionType(InstitutionType.PT); - DelegationInstitution delegationEntity = new DelegationInstitution(); - delegationEntity.setId("id_" + pattern); - delegationEntity.setProductId("productId"); - delegationEntity.setType(DelegationType.PT); - delegationEntity.setTo(to); - delegationEntity.setFrom(from); - delegationEntity.setInstitutionFromName("name_" + from); - delegationEntity.setInstitutions(List.of(institution)); - return delegationEntity; - } - - @Test - void findAndCount_shouldGetData() { - - DelegationEntity delegationEntity = new DelegationEntity(); - delegationEntity.setId("id"); - delegationEntity.setProductId("productId"); - delegationEntity.setType(DelegationType.PT); - delegationEntity.setTo("To"); - delegationEntity.setFrom("From"); - delegationEntity.setInstitutionFromName("setInstitutionFromName"); - delegationEntity.setInstitutionFromRootName("setInstitutionFromRootName"); - - - List delegationEntities = List.of(delegationEntity); - Page delegationEntityPage = new PageImpl<>(delegationEntities); - - Pageable pageable = PageRequest.of(PAGE_SIZE, MAX_PAGE_SIZE); - Page result = PageableExecutionUtils.getPage(List.of(new Delegation()), pageable, () -> 1L); - PageInfo expectedPageInfo = new PageInfo(result.getSize(), result.getNumber(), result.getTotalElements(), result.getTotalPages()); - - //When - - doReturn(delegationEntityPage) - .when(delegationRepository) - .find(any(), any(), any()); - - doReturn(1L) - .when(mongoTemplate) - .count(any(), eq(DelegationEntity.class)); - - DelegationWithPagination response = delegationConnectorImpl.findAndCount(createDelegationParameters(delegationEntity.getFrom(), - delegationEntity.getTo(), delegationEntity.getProductId(), null, null, Order.NONE, PAGE_SIZE, MAX_PAGE_SIZE)); - - //Then - assertNotNull(response); - assertNotNull(response.getDelegations()); - assertNotNull(response.getPageInfo()); - assertFalse(response.getDelegations().isEmpty()); - Delegation actualDelegation = response.getDelegations().get(0); - PageInfo actualPageInfo = response.getPageInfo(); - - assertEquals(actualDelegation.getId(), delegationEntity.getId()); - assertEquals(actualDelegation.getType(), delegationEntity.getType()); - assertEquals(actualDelegation.getProductId(), delegationEntity.getProductId()); - assertEquals(actualDelegation.getTo(), delegationEntity.getTo()); - assertEquals(actualDelegation.getFrom(), delegationEntity.getFrom()); - assertEquals(actualDelegation.getInstitutionFromName(), delegationEntity.getInstitutionFromName()); - assertEquals(actualDelegation.getInstitutionFromRootName(), delegationEntity.getInstitutionFromRootName()); - assertEquals(actualPageInfo, expectedPageInfo); - } - private GetDelegationParameters createDelegationParameters(String from, String to, String productId, - String search, String taxCode, Order order, - Integer page, Integer size) { - return GetDelegationParameters.builder() - .from(from) - .to(to) - .productId(productId) - .search(search) - .taxCode(taxCode) - .order(order) - .page(page) - .size(size) - .build(); - } - - @Test - void updateDelegation() { - - String description = "description"; - String rootName = "rootName"; - String institutionId = "institutionId"; - - Institution institutionUpdate = new Institution(); - institutionUpdate.setId(institutionId); - institutionUpdate.setDescription(description); - institutionUpdate.setParentDescription(rootName); - institutionUpdate.setDelegation(true); - - //when - final Executable executable = () -> delegationConnectorImpl.updateDelegation(institutionUpdate); - - Assertions.assertDoesNotThrow(executable); - verify(delegationRepository, times(2)).updateMulti(any(), any(), any()); - - } - - @Test - void updateDelegation_noDelegation() { - - String description = "description"; - String institutionId = "institutionId"; - - Institution institutionUpdate = new Institution(); - institutionUpdate.setId(institutionId); - institutionUpdate.setDescription(description); - - //when - final Executable executable = () -> delegationConnectorImpl.updateDelegation(institutionUpdate); - - Assertions.assertDoesNotThrow(executable); - verify(delegationRepository, times(1)).updateMulti(any(), any(), any()); - - } -} diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepositoryTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepositoryTest.java deleted file mode 100644 index 028ce05..0000000 --- a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepositoryTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import it.pagopa.selfcare.mscore.connector.dao.config.DaoConfigTest; -import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; -import it.pagopa.selfcare.mscore.constant.DelegationType; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; -import org.springframework.test.context.ContextConfiguration; - -import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; -import static it.pagopa.selfcare.commons.utils.TestUtils.reflectionEqualsByName; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -@DataMongoTest -@EnableAutoConfiguration -@ContextConfiguration(classes = {DelegationEntity.class, DaoConfigTest.class}) -class DelegationRepositoryTest { - - @Autowired - private DelegationRepository repository; - - @Test - void create() { - // Given - DelegationEntity delegationEntity = mockInstance(new DelegationEntity()); - delegationEntity.setFrom("from"); - delegationEntity.setTo("to"); - delegationEntity.setType(DelegationType.PT); - delegationEntity.setProductId("productId"); - // When - DelegationEntity savedDelegationEntity = repository.save(delegationEntity); - // Then - assertFalse(repository.findAll().isEmpty()); - assertNotNull(savedDelegationEntity); - reflectionEqualsByName(delegationEntity, savedDelegationEntity); - } - -} diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImplTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImplTest.java deleted file mode 100644 index 17b3531..0000000 --- a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImplTest.java +++ /dev/null @@ -1,739 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.*; -import it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionEntityMapper; -import it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionEntityMapperImpl; -import it.pagopa.selfcare.mscore.connector.dao.utils.TestUtils; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.constant.SearchMode; -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.*; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; -import org.springframework.data.mongodb.core.FindAndModifyOptions; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.data.mongodb.core.query.Update; -import org.springframework.test.context.ContextConfiguration; - -import java.time.OffsetDateTime; -import java.util.*; - -import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; - -@ContextConfiguration(classes = {InstitutionConnectorImpl.class}) -@ExtendWith(MockitoExtension.class) -class InstitutionConnectorImplTest { - - @InjectMocks - InstitutionConnectorImpl institutionConnectorImpl; - - @Mock - InstitutionRepository institutionRepository; - - @Spy - InstitutionEntityMapper institutionMapper = new InstitutionEntityMapperImpl(); - - @Captor - ArgumentCaptor queryArgumentCaptor; - - @Captor - ArgumentCaptor updateArgumentCaptor; - - @Captor - ArgumentCaptor findAndModifyOptionsArgumentCaptor; - - @Captor - ArgumentCaptor pageableArgumentCaptor; - - /** - * Method under test: {@link InstitutionConnectorImpl#findAll()} - */ - @Test - void testFindAll() { - when(institutionRepository.findAll()).thenReturn(new ArrayList<>()); - assertTrue(institutionConnectorImpl.findAll().isEmpty()); - verify(institutionRepository).findAll(); - } - - /** - * Method under test: {@link InstitutionConnectorImpl#findAll()} - */ - @Test - void testFindAll2() { - InstitutionEntity institutionEntity = TestUtils.createSimpleInstitutionEntity(); - - ArrayList institutionEntityList = new ArrayList<>(); - institutionEntityList.add(institutionEntity); - when(institutionRepository.findAll()).thenReturn(institutionEntityList); - assertEquals(1, institutionConnectorImpl.findAll().size()); - verify(institutionRepository).findAll(); - } - - /** - * Method under test: {@link InstitutionConnectorImpl#findAll()} - */ - @Test - void testFindAll4() { - when(institutionRepository.findAll()).thenThrow(new InvalidRequestException("An error occurred", "Code")); - assertThrows(InvalidRequestException.class, () -> institutionConnectorImpl.findAll()); - verify(institutionRepository).findAll(); - } - - @Test - void findById() { - InstitutionEntity institutionEntity = new InstitutionEntity(); - institutionEntity.setId("507f1f77bcf86cd799439011"); - Optional response = institutionConnectorImpl.findByExternalId("id"); - Assertions.assertTrue(response.isEmpty()); - } - - @Test - void shouldSaveInstitution() { - List geographicTaxonomies = new ArrayList<>(); - geographicTaxonomies.add(new InstitutionGeographicTaxonomies()); - List onboardings = new ArrayList<>(); - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(new Billing()); - onboarding.setContract("contract"); - onboarding.setStatus(RelationshipState.ACTIVE); - onboarding.setCreatedAt(OffsetDateTime.now()); - onboarding.setProductId("productId"); - onboarding.setUpdatedAt(OffsetDateTime.now()); - onboarding.setPricingPlan("pricingPal"); - onboardings.add(onboarding); - - Institution institution = new Institution(); - institution.setExternalId("ext"); - institution.setId("507f1f77bcf86cd799439011"); - institution.setParentDescription("parentDescription"); - institution.setOnboarding(onboardings); - institution.setZipCode("zipCpde"); - institution.setRea("rea"); - institution.setGeographicTaxonomies(geographicTaxonomies); - - when(institutionRepository.save(any())).thenAnswer(arg -> arg.getArguments()[0]); - - Institution response = institutionConnectorImpl.save(institution); - Assertions.assertEquals(institution.getId(), response.getId()); - Assertions.assertEquals(institution.getExternalId(), response.getExternalId()); - Assertions.assertEquals(institution.getParentDescription(), response.getParentDescription()); - Assertions.assertEquals(institution.getRea(), response.getRea()); - Assertions.assertEquals(institution.getZipCode(), response.getZipCode()); - Assertions.assertEquals(institution.getOnboarding().size(), response.getOnboarding().size()); - - Onboarding responseOnboarding = institution.getOnboarding().get(0); - Assertions.assertEquals(onboarding.getContract(), responseOnboarding.getContract()); - Assertions.assertEquals(onboarding.getStatus(), responseOnboarding.getStatus()); - Assertions.assertEquals(onboarding.getCreatedAt(), responseOnboarding.getCreatedAt()); - Assertions.assertEquals(onboarding.getProductId(), responseOnboarding.getProductId()); - Assertions.assertEquals(onboarding.getUpdatedAt(), responseOnboarding.getUpdatedAt()); - Assertions.assertEquals(onboarding.getPricingPlan(), responseOnboarding.getPricingPlan()); - } - - @Test - void findByExternalIdTest() { - InstitutionEntity institutionEntity = new InstitutionEntity(); - institutionEntity.setId("507f1f77bcf86cd799439011"); - when(institutionRepository.find(any(), any())).thenReturn(new ArrayList<>()); - Optional response = institutionConnectorImpl.findByExternalId("ext"); - Assertions.assertFalse(response.isPresent()); - } - - @Test - void findByExternalIdNotFoundTest() { - InstitutionEntity institutionEntity = new InstitutionEntity(); - institutionEntity.setId("507f1f77bcf86cd799439011"); - Optional response = institutionConnectorImpl.findByExternalId("ext"); - Assertions.assertTrue(response.isEmpty()); - } - - @Test - void deleteById() { - doNothing().when(institutionRepository).deleteById(any()); - Assertions.assertDoesNotThrow(() -> institutionConnectorImpl.deleteById("507f1f77bcf86cd799439011")); - } - - @Test - void testFindById() { - when(institutionRepository.findById(any())).thenReturn(Optional.empty()); - assertThrows(ResourceNotFoundException.class, () -> institutionConnectorImpl.findById("42")); - } - - @Test - void testFindById2() { - InstitutionEntity institutionEntity = new InstitutionEntity(); - List onboardings = new ArrayList<>(); - onboardings.add(new OnboardingEntity()); - institutionEntity.setAttributes(new ArrayList<>()); - institutionEntity.setOnboarding(onboardings); - institutionEntity.setGeographicTaxonomies(new ArrayList<>()); - institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); - institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); - when(institutionRepository.findById(any())).thenReturn(Optional.of(institutionEntity)); - assertNotNull(institutionConnectorImpl.findById("id")); - } - - @Test - void testFindAndUpdate() { - InstitutionEntity institutionEntity = new InstitutionEntity(); - List onboardings = new ArrayList<>(); - onboardings.add(new OnboardingEntity()); - institutionEntity.setAttributes(new ArrayList<>()); - institutionEntity.setOnboarding(onboardings); - institutionEntity.setGeographicTaxonomies(new ArrayList<>()); - institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); - institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); - when(institutionRepository.findAndModify(any(), any(), any(), any())).thenReturn(institutionEntity); - List geographicTaxonomies = new ArrayList<>(); - InstitutionGeographicTaxonomies geographicTaxonomies1 = new InstitutionGeographicTaxonomies(); - geographicTaxonomies1.setCode("code"); - geographicTaxonomies1.setDesc("desc"); - geographicTaxonomies.add(geographicTaxonomies1); - Institution response = institutionConnectorImpl.findAndUpdate("institutionId", new Onboarding(), geographicTaxonomies, new InstitutionUpdate()); - assertNotNull(response); - } - - /** - * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} - */ - @Test - void testFindByGeotaxonomies() { - when(institutionRepository.find(org.mockito.Mockito.any(), org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); - assertTrue(institutionConnectorImpl.findByGeotaxonomies(new ArrayList<>(), SearchMode.ALL).isEmpty()); - verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); - } - - /** - * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} - */ - @Test - void testFindByGeotaxonomies2() { - InstitutionEntity institutionEntity = TestUtils.createSimpleInstitutionEntity(); - - ArrayList institutionEntityList = new ArrayList<>(); - institutionEntityList.add(institutionEntity); - when(institutionRepository.find(org.mockito.Mockito.any(), - (Class) org.mockito.Mockito.any())).thenReturn(institutionEntityList); - assertEquals(1, institutionConnectorImpl.findByGeotaxonomies(new ArrayList<>(), SearchMode.ALL).size()); - verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); - } - - /** - * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} - */ - @Test - void testFindByGeotaxonomies4() { - when(institutionRepository.find(org.mockito.Mockito.any(),org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); - assertTrue(institutionConnectorImpl.findByGeotaxonomies(new ArrayList<>(), SearchMode.ANY).isEmpty()); - verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); - } - - /** - * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} - */ - @Test - void testFindByGeotaxonomies5() { - when(institutionRepository.find(org.mockito.Mockito.any(), org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); - assertTrue(institutionConnectorImpl.findByGeotaxonomies(new ArrayList<>(), SearchMode.EXACT).isEmpty()); - verify(institutionRepository).find(org.mockito.Mockito.any(),org.mockito.Mockito.any()); - } - - /** - * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} - */ - @Test - void testFindByGeotaxonomies6() { - when(institutionRepository.find(org.mockito.Mockito.any(), org.mockito.Mockito.any())) - .thenThrow(new InvalidRequestException("An error occurred", "Code")); - List list = new ArrayList<>(); - assertThrows(InvalidRequestException.class, - () -> institutionConnectorImpl.findByGeotaxonomies(list, SearchMode.ALL)); - verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); - } - - /** - * Method under test: {@link InstitutionConnectorImpl#findByProductId} - */ - @Test - void testFindByProductId() { - when(institutionRepository.find(org.mockito.Mockito.any(),org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); - assertTrue(institutionConnectorImpl.findByProductId("42").isEmpty()); - verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); - } - - /** - * Method under test: {@link InstitutionConnectorImpl#findByProductId} - */ - @Test - void testFindByProductId2() { - InstitutionEntity institutionEntity = TestUtils.createSimpleInstitutionEntity(); - - ArrayList institutionEntityList = new ArrayList<>(); - institutionEntityList.add(institutionEntity); - when(institutionRepository.find(org.mockito.Mockito.any(), - (Class) org.mockito.Mockito.any())).thenReturn(institutionEntityList); - assertEquals(1, institutionConnectorImpl.findByProductId("42").size()); - verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); - } - - /** - * Method under test: {@link InstitutionConnectorImpl#findByProductId} - */ - @Test - void testFindByProductId4() { - when(institutionRepository.find(org.mockito.Mockito.any(), - (Class) org.mockito.Mockito.any())) - .thenThrow(new InvalidRequestException("An error occurred", ".")); - assertThrows(InvalidRequestException.class, () -> institutionConnectorImpl.findByProductId("42")); - verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); - } - - /** - * Method under test: {@link InstitutionConnectorImpl#findAllByIds(List)} - */ - @Test - void testFindAllByIds3() { - when(institutionRepository.findAllById(org.mockito.Mockito.any())) - .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); - List ids = new ArrayList<>(); - assertThrows(ResourceNotFoundException.class, () -> institutionConnectorImpl.findAllByIds(ids)); - verify(institutionRepository).findAllById(org.mockito.Mockito.any()); - } - - @Test - void testFindAllByIds2() { - when(institutionRepository.findAllById(org.mockito.Mockito.any())).thenReturn(List.of(new InstitutionEntity())); - List ids = new ArrayList<>(); - assertDoesNotThrow(() -> institutionConnectorImpl.findAllByIds(ids)); - verify(institutionRepository).findAllById(org.mockito.Mockito.any()); - } - - @Test - void testFindWithFilter() { - when(institutionRepository.find(any(), any())).thenReturn(new ArrayList<>()); - List response = institutionConnectorImpl.findWithFilter("externalId", "productId", new ArrayList<>()); - assertNotNull(response); - } - - @Test - void testFindInstitutionProduct() { - when(institutionRepository.find(any(), any())).thenReturn(new ArrayList<>()); - assertThrows(ResourceNotFoundException.class, () -> institutionConnectorImpl.findByExternalIdAndProductId("externalId", "productId")); - } - - /** - * Method under test: {@link InstitutionConnectorImpl#findByExternalIdsAndProductId(List, String)} - */ - @Test - void testFindByExternalIdAndProductId() { - when(institutionRepository.find(org.mockito.Mockito.any(),org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); - assertTrue(institutionConnectorImpl.findByExternalIdsAndProductId(new ArrayList<>(), "42").isEmpty()); - verify(institutionRepository).find( org.mockito.Mockito.any(),org.mockito.Mockito.any()); - } - - /** - * Method under test: {@link InstitutionConnectorImpl#findByExternalIdsAndProductId(List, String)} - */ - @Test - void testFindByExternalIdAndProductId2() { - when(institutionRepository.find( org.mockito.Mockito.any(),org.mockito.Mockito.any())) - .thenThrow(new InvalidRequestException("An error occurred", ".")); - List list = new ArrayList<>(); - assertThrows(InvalidRequestException.class, - () -> institutionConnectorImpl.findByExternalIdsAndProductId(list, "42")); - verify(institutionRepository).find(org.mockito.Mockito.any(),org.mockito.Mockito.any()); - } - - @Test - void findAndUpdateStatus() { - InstitutionEntity institutionEntity = new InstitutionEntity(); - List onboardings = new ArrayList<>(); - onboardings.add(new OnboardingEntity()); - institutionEntity.setAttributes(new ArrayList<>()); - institutionEntity.setOnboarding(onboardings); - institutionEntity.setGeographicTaxonomies(new ArrayList<>()); - institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); - institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); - when(institutionRepository.findAndModify(any(), any(), any(), any())).thenReturn(institutionEntity); - institutionConnectorImpl.findAndUpdateStatus("institutionId", "tokenId", RelationshipState.ACTIVE); - assertNotNull(institutionEntity); - } - - @Test - void findAndUpdateStatus2() { - InstitutionEntity institutionEntity = new InstitutionEntity(); - List onboardings = new ArrayList<>(); - onboardings.add(new OnboardingEntity()); - institutionEntity.setAttributes(new ArrayList<>()); - institutionEntity.setOnboarding(onboardings); - institutionEntity.setGeographicTaxonomies(new ArrayList<>()); - institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); - institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); - when(institutionRepository.findAndModify(any(), any(), any(), any())).thenReturn(institutionEntity); - institutionConnectorImpl.findAndUpdateStatus("institutionId", "tokenId", RelationshipState.DELETED); - assertNotNull(institutionEntity); - } - - @Test - void findAndRemoveOnboarding() { - InstitutionEntity institutionEntity = new InstitutionEntity(); - List onboardings = new ArrayList<>(); - onboardings.add(new OnboardingEntity()); - institutionEntity.setAttributes(new ArrayList<>()); - institutionEntity.setOnboarding(onboardings); - institutionEntity.setGeographicTaxonomies(new ArrayList<>()); - institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); - institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); - when(institutionRepository.findAndModify(any(), any(), any(), any())).thenReturn(institutionEntity); - institutionConnectorImpl.findAndRemoveOnboarding("institutionId", new Onboarding()); - assertNotNull(institutionEntity); - } - - @Test - void updateOnboardedProductCreatedAt() { - // Given - String institutionIdMock = "InstitutionIdMock"; - String productIdMock = "ProductIdMock"; - OffsetDateTime createdAt = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); - InstitutionEntity updatedInstitutionMock = mockInstance(new InstitutionEntity()); - OnboardingEntity onboardingEntityMock = mockInstance(new OnboardingEntity()); - onboardingEntityMock.setProductId(productIdMock); - updatedInstitutionMock.setOnboarding(List.of(onboardingEntityMock)); - updatedInstitutionMock.setId(institutionIdMock); - updatedInstitutionMock.setInstitutionType(InstitutionType.PA); - updatedInstitutionMock.setOrigin(Origin.IPA); - when(institutionRepository.findAndModify(any(), any(), any(), any())) - .thenReturn(updatedInstitutionMock); - // When - Institution result = institutionConnectorImpl.updateOnboardedProductCreatedAt(institutionIdMock, productIdMock, createdAt); - // Then - assertNotNull(result); - assertEquals(result.getId(), institutionIdMock); - verify(institutionRepository, times(2)) - .findAndModify(queryArgumentCaptor.capture(), updateArgumentCaptor.capture(), findAndModifyOptionsArgumentCaptor.capture(), Mockito.eq(InstitutionEntity.class)); - List capturedQuery = queryArgumentCaptor.getAllValues(); - assertEquals(2, capturedQuery.size()); - assertSame(capturedQuery.get(0).getQueryObject().get(InstitutionEntity.Fields.id.name()), institutionIdMock); - assertSame(capturedQuery.get(1).getQueryObject().get(InstitutionEntity.Fields.id.name()), institutionIdMock); - assertEquals(2, updateArgumentCaptor.getAllValues().size()); - Update updateOnboardedProduct = updateArgumentCaptor.getAllValues().get(0); - Update updateInstitutionEntityUpdatedAt = updateArgumentCaptor.getAllValues().get(1); - assertEquals(1, updateOnboardedProduct.getArrayFilters().size()); - assertTrue(updateInstitutionEntityUpdatedAt.getArrayFilters().isEmpty()); - assertTrue(updateInstitutionEntityUpdatedAt.getUpdateObject().get("$set").toString().contains(InstitutionEntity.Fields.updatedAt.name())); - assertTrue(updateOnboardedProduct.getUpdateObject().get("$set").toString().contains("onboarding.$[current].createdAt") && - updateOnboardedProduct.getUpdateObject().get("$set").toString().contains("onboarding.$[current].updatedAt") && - updateOnboardedProduct.getUpdateObject().get("$set").toString().contains(createdAt.toString())); - verifyNoMoreInteractions(institutionRepository); - } - - @Test - void shouldFindOnboardingByIdAndProductId() { - InstitutionEntity institutionEntity = new InstitutionEntity(); - institutionEntity.setOnboarding(List.of(new OnboardingEntity())); - when(institutionRepository.findByInstitutionIdAndOnboardingProductId(anyString(), anyString())) - .thenReturn(institutionEntity); - - List onboardings = institutionConnectorImpl - .findOnboardingByIdAndProductId("example", "example"); - - assertFalse(onboardings.isEmpty()); - } - - @Test - void shouldFindOnboardingByIdAndProductIdIfProductIsNull() { - InstitutionEntity institutionEntity = new InstitutionEntity(); - institutionEntity.setOnboarding(List.of(new OnboardingEntity())); - when(institutionRepository.findById(anyString())) - .thenReturn(Optional.of(institutionEntity)); - - List onboardings = institutionConnectorImpl - .findOnboardingByIdAndProductId("example", null); - - assertFalse(onboardings.isEmpty()); - } - - @Test - void shouldFindByTaxCodeAndSubunitCode() { - InstitutionEntity institutionEntity = new InstitutionEntity(); - - when(institutionRepository.find(any(), any())) - .thenReturn(List.of(institutionEntity)); - - List onboardings = institutionConnectorImpl - .findByTaxCodeAndSubunitCode("example", "example"); - - assertFalse(onboardings.isEmpty()); - } - - @Test - void shouldExistsByTaxCodeAndSubunitCodeAndProductAndStatusList() { - - when(institutionRepository.exists(any(), any())).thenReturn(Boolean.TRUE); - - Boolean exists = institutionConnectorImpl.existsByTaxCodeAndSubunitCodeAndProductAndStatusList("example", - "example", Optional.of("example"), List.of()); - - assertTrue(exists); - } - - @Test - void testRetrieveByProduct() { - String productId = "productId"; - Integer pageNumber = 0; - Integer sizeNumber = 5; - - BillingEntity billingEntity = createSimpleBillingEntity(); - DataProtectionOfficerEntity dataProtectionOfficerEntity = createSimpleDPOEntity(); - PaymentServiceProviderEntity paymentServiceProviderEntity = createSimpleServiceProviderEntity(); - OnboardingEntity onboardingEntity = createSimpleOnboardingEntity(productId, billingEntity); - InstitutionEntity institutionEntity = createSimpleInstitutionEntity(billingEntity, dataProtectionOfficerEntity, onboardingEntity, paymentServiceProviderEntity); - - BillingEntity billingEntity1 = createSimpleBillingEntity(); - DataProtectionOfficerEntity dataProtectionOfficerEntity1 = createSimpleDPOEntity(); - PaymentServiceProviderEntity paymentServiceProviderEntity1 = createSimpleServiceProviderEntity(); - OnboardingEntity onboardingEntity1 = createSimpleOnboardingEntity(productId, billingEntity1); - InstitutionEntity institutionEntity1 = createSimpleInstitutionEntity(billingEntity1, dataProtectionOfficerEntity1, onboardingEntity1, paymentServiceProviderEntity1); - - - List institutionEntityList = new ArrayList<>(); - institutionEntityList.add(institutionEntity1); - institutionEntityList.add(institutionEntity); - Page institutionEntityPage = new PageImpl<>(institutionEntityList); - - doReturn(institutionEntityPage) - .when(institutionRepository) - .find(any(), any(), any()); - - // When - List institutionsResult = institutionConnectorImpl.findInstitutionsByProductId(productId, - pageNumber, sizeNumber); - // Then - assertNotNull(institutionsResult); - assertEquals(2, institutionsResult.size()); - verify(institutionRepository, times(1)) - .find(queryArgumentCaptor.capture(), pageableArgumentCaptor.capture(), Mockito.eq(InstitutionEntity.class)); - - Pageable capturedPage = pageableArgumentCaptor.getValue(); - assertEquals(pageNumber, capturedPage.getPageNumber()); - verifyNoMoreInteractions(institutionRepository); - } - - @Test - void findBrokers() { - - final String productId = "productId"; - - BillingEntity billingEntity = createSimpleBillingEntity(); - DataProtectionOfficerEntity dataProtectionOfficerEntity = createSimpleDPOEntity(); - PaymentServiceProviderEntity paymentServiceProviderEntity = createSimpleServiceProviderEntity(); - OnboardingEntity onboardingEntity = createSimpleOnboardingEntity(productId, billingEntity); - InstitutionEntity institutionEntity = createSimpleInstitutionEntity(billingEntity, dataProtectionOfficerEntity, onboardingEntity, paymentServiceProviderEntity); - - BillingEntity billingEntity1 = createSimpleBillingEntity(); - DataProtectionOfficerEntity dataProtectionOfficerEntity1 = createSimpleDPOEntity(); - PaymentServiceProviderEntity paymentServiceProviderEntity1 = createSimpleServiceProviderEntity(); - OnboardingEntity onboardingEntity1 = createSimpleOnboardingEntity(productId, billingEntity1); - InstitutionEntity institutionEntity1 =createSimpleInstitutionEntity(billingEntity1, dataProtectionOfficerEntity1, onboardingEntity1, paymentServiceProviderEntity1); - - List institutionEntityList = List.of(institutionEntity, institutionEntity1); - - doReturn(institutionEntityList) - .when(institutionRepository) - .find(any(), any()); - - // When - List institutionsResult = institutionConnectorImpl.findBrokers(productId, InstitutionType.PT); - // Then - assertNotNull(institutionsResult); - assertEquals(2, institutionsResult.size()); - verify(institutionRepository, times(1)) - .find(queryArgumentCaptor.capture(), Mockito.eq(InstitutionEntity.class)); - verifyNoMoreInteractions(institutionRepository); - } - - private BillingEntity createSimpleBillingEntity() { - BillingEntity billingEntity = new BillingEntity(); - billingEntity.setPublicServices(true); - billingEntity.setRecipientCode("Recipient Code"); - billingEntity.setVatNumber("42"); - return billingEntity; - } - - private DataProtectionOfficerEntity createSimpleDPOEntity() { - DataProtectionOfficerEntity dataProtectionOfficerEntity = new DataProtectionOfficerEntity(); - dataProtectionOfficerEntity.setAddress("42 Main St"); - dataProtectionOfficerEntity.setEmail("jane.doe@example.org"); - dataProtectionOfficerEntity.setPec("Pec"); - return dataProtectionOfficerEntity; - } - - private PaymentServiceProviderEntity createSimpleServiceProviderEntity() { - PaymentServiceProviderEntity paymentServiceProviderEntity = new PaymentServiceProviderEntity(); - paymentServiceProviderEntity.setAbiCode("Abi Code"); - paymentServiceProviderEntity.setBusinessRegisterNumber("42"); - paymentServiceProviderEntity.setLegalRegisterName("Legal Register Name"); - paymentServiceProviderEntity.setLegalRegisterNumber("42"); - paymentServiceProviderEntity.setVatNumberGroup(true); - return paymentServiceProviderEntity; - } - - private OnboardingEntity createSimpleOnboardingEntity(String productId, BillingEntity billingEntity) { - OnboardingEntity onboardingEntity = new OnboardingEntity(); - onboardingEntity.setBilling(billingEntity); - onboardingEntity.setClosedAt(null); - onboardingEntity.setContract("Contract"); - onboardingEntity.setCreatedAt(null); - onboardingEntity.setPricingPlan("Pricing Plan"); - onboardingEntity.setProductId(productId); - onboardingEntity.setStatus(RelationshipState.PENDING); - onboardingEntity.setTokenId("42"); - onboardingEntity.setUpdatedAt(null); - return onboardingEntity; - } - - private InstitutionEntity createSimpleInstitutionEntity(BillingEntity billingEntity, - DataProtectionOfficerEntity dpoEntity, - OnboardingEntity onboardingEntity, - PaymentServiceProviderEntity serviceProviderEntity) { - InstitutionEntity institutionEntity = new InstitutionEntity(); - institutionEntity.setAddress("42 Main St"); - institutionEntity.setAttributes(new ArrayList<>()); - institutionEntity.setBilling(billingEntity); - institutionEntity.setBusinessRegisterPlace("Business Register Place"); - institutionEntity.setCreatedAt(null); - institutionEntity.setDataProtectionOfficer(dpoEntity); - institutionEntity.setDescription("The characteristics of someone or something"); - institutionEntity.setDigitalAddress("42 Main St"); - institutionEntity.setExternalId("42"); - institutionEntity.setGeographicTaxonomies(new ArrayList<>()); - institutionEntity.setId("42"); - institutionEntity.setImported(true); - institutionEntity.setInstitutionType(InstitutionType.PA); - institutionEntity.setOnboarding(List.of(onboardingEntity)); - institutionEntity.setOrigin(Origin.MOCK); - institutionEntity.setOriginId("42"); - institutionEntity.setPaymentServiceProvider(serviceProviderEntity); - institutionEntity.setRea("Rea"); - institutionEntity.setShareCapital("Share Capital"); - institutionEntity.setSupportEmail("jane.doe@example.org"); - institutionEntity.setSupportPhone("6625550144"); - institutionEntity.setTaxCode("Tax Code"); - institutionEntity.setUpdatedAt(null); - institutionEntity.setZipCode("21654"); - return institutionEntity; - } - - @Test - void findByOriginOriginId() { - InstitutionEntity institutionEntity = new InstitutionEntity(); - - when(institutionRepository.find(any(), any())) - .thenReturn(List.of(institutionEntity)); - - List onboardings = institutionConnectorImpl - .findByOriginAndOriginId("example", "example"); - - assertFalse(onboardings.isEmpty()); - } - - @Test - @DisplayName("Should return true when onboarding exists by filters") - void shouldReturnTrueWhenOnboardingExistsByFilters() { - // Given - VerifyOnboardingFilters filters = new VerifyOnboardingFilters("productId", "externalId", "taxCode", "origin", "originId", "subunitCode"); - filters.setValidRelationshipStates(List.of(RelationshipState.ACTIVE)); - when(institutionRepository.exists(any(Query.class), any())).thenReturn(true); - - // When - Boolean exists = institutionConnectorImpl.existsOnboardingByFilters(filters); - - // Then - assertTrue(exists); - } - - @Test - @DisplayName("Should return true when onboarding exists by filters when subunitCode is null") - void shouldReturnTrueWhenOnboardingExistsByFiltersAndSubunitCodeIsNull() { - // Given - VerifyOnboardingFilters filters = new VerifyOnboardingFilters("productId", "externalId", "taxCode", "origin", "originId", null); - filters.setValidRelationshipStates(List.of(RelationshipState.ACTIVE)); - when(institutionRepository.exists(any(Query.class), any())).thenReturn(true); - - // When - Boolean exists = institutionConnectorImpl.existsOnboardingByFilters(filters); - - // Then - assertTrue(exists); - } - - @Test - @DisplayName("Should return false when onboarding exists by filters when subunitCode is null") - void shouldReturnFalseWhenOnboardingExistsByFiltersAndSubunitCodeIsNull() { - // Given - VerifyOnboardingFilters filters = new VerifyOnboardingFilters("productId", "externalId", "taxCode", "origin", "originId", null); - filters.setValidRelationshipStates(List.of(RelationshipState.ACTIVE)); - when(institutionRepository.exists(any(Query.class), any())).thenReturn(false); - - // When - Boolean exists = institutionConnectorImpl.existsOnboardingByFilters(filters); - - // Then - assertFalse(exists); - } - - @Test - @DisplayName("Should return false when onboarding does not exist by filters") - void shouldReturnFalseWhenOnboardingDoesNotExistByFilters() { - // Given - VerifyOnboardingFilters filters = new VerifyOnboardingFilters("productId", "externalId", "taxCode", "origin", "originId", "subunitCode"); - filters.setValidRelationshipStates(List.of(RelationshipState.ACTIVE)); - - when(institutionRepository.exists(any(Query.class), any())).thenReturn(false); - - // When - Boolean exists = institutionConnectorImpl.existsOnboardingByFilters(filters); - - // Then - assertFalse(exists); - } - @Test - public void testFindAndDeleteOnboarding() { - - String institutionId = UUID.randomUUID().toString(); - String productId = "prod-io"; - - OnboardingEntity mockOnboarding = new OnboardingEntity(); - mockOnboarding.setProductId(productId); - mockOnboarding.setUpdatedAt(OffsetDateTime.now()); - mockOnboarding.setStatus(RelationshipState.ACTIVE); - - InstitutionEntity mockEntity = new InstitutionEntity(); - mockEntity.setId(institutionId); - mockEntity.setOnboarding(Collections.singletonList(mockOnboarding)); - - when(institutionRepository.findAndModify(any(Query.class), any(Update.class), - any(FindAndModifyOptions.class), eq(InstitutionEntity.class))) - .thenReturn(mockEntity); - - institutionConnectorImpl.findAndDeleteOnboarding(institutionId, productId); - - verify(institutionRepository, times(1)).findAndModify(any(Query.class), any(Update.class), any(FindAndModifyOptions.class), eq(InstitutionEntity.class)); - assertNotNull(mockEntity); - } -} \ No newline at end of file diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepositoryTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepositoryTest.java deleted file mode 100644 index 62a1be8..0000000 --- a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepositoryTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.connector.dao.config.DaoConfigTest; -import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.AttributesEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.GeoTaxonomyEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardingEntity; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; -import org.springframework.test.context.ContextConfiguration; - -import java.time.OffsetDateTime; -import java.util.List; - -import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; -import static it.pagopa.selfcare.commons.utils.TestUtils.reflectionEqualsByName; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -@DataMongoTest -@EnableAutoConfiguration -@ContextConfiguration(classes = {InstitutionEntity.class, OnboardingEntity.class, InstitutionRepository.class, DaoConfigTest.class}) -class InstitutionRepositoryTest { - - @Autowired - private InstitutionRepository repository; - - - @AfterEach - void clear() { - repository.deleteAll(); - } - - @Test - void create() { - // Given - InstitutionEntity institutionEntity = mockInstance(new InstitutionEntity()); - institutionEntity.setOrigin(Origin.IPA); - institutionEntity.setInstitutionType(InstitutionType.PA); - institutionEntity.setCreatedAt(OffsetDateTime.parse("2020-11-01T02:15:30Z")); - institutionEntity.setUpdatedAt(OffsetDateTime.parse("2021-12-12T02:15:30Z")); - OnboardingEntity onboardingEntity1 = mockInstance(new OnboardingEntity(), 1); - onboardingEntity1.setProductId("prod-io"); - onboardingEntity1.setStatus(RelationshipState.ACTIVE); - onboardingEntity1.setCreatedAt(OffsetDateTime.parse("2020-11-01T02:15:30Z")); - onboardingEntity1.setUpdatedAt(null); - onboardingEntity1.setClosedAt(null); - OnboardingEntity onboardingEntity2 = mockInstance(new OnboardingEntity(), 2); - onboardingEntity1.setProductId("prod-pagopa"); - onboardingEntity2.setStatus(RelationshipState.ACTIVE); - onboardingEntity2.setCreatedAt(OffsetDateTime.parse("2021-12-12T02:15:30Z")); - onboardingEntity2.setUpdatedAt(null); - onboardingEntity2.setClosedAt(null); - institutionEntity.setOnboarding(List.of(onboardingEntity1, onboardingEntity2)); - institutionEntity.setGeographicTaxonomies(List.of(mockInstance(new GeoTaxonomyEntity()))); - institutionEntity.setAttributes(List.of(mockInstance(new AttributesEntity()))); - // When - InstitutionEntity savedInstitutionEntity = repository.save(institutionEntity); - // Then - assertFalse(repository.findAll().isEmpty()); - assertNotNull(savedInstitutionEntity); - reflectionEqualsByName(institutionEntity, savedInstitutionEntity); - } - -} diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImplTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImplTest.java deleted file mode 100644 index 79a58c6..0000000 --- a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImplTest.java +++ /dev/null @@ -1,139 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import com.mongodb.client.result.UpdateResult; -import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionAggregation; -import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionFilter; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.data.domain.Pageable; -import org.springframework.data.mongodb.core.FindAndModifyOptions; -import org.springframework.data.mongodb.core.MongoOperations; -import org.springframework.data.mongodb.core.aggregation.Aggregation; -import org.springframework.data.mongodb.core.aggregation.AggregationResults; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.data.mongodb.core.query.Update; -import org.springframework.data.mongodb.core.query.UpdateDefinition; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.ArrayList; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -@ExtendWith(SpringExtension.class) -class MongoCustomConnectorImplTest { - @InjectMocks - private MongoCustomConnectorImpl mongoCustomConnector; - - @Mock - private MongoOperations mongoOperations; - - @Test - void testExist() { - when(mongoOperations.exists(any(), (Class) any())).thenReturn(true); - Query query = new Query(); - assertTrue(mongoCustomConnector.exists(query, Object.class)); - } - - @Test - void testCount() { - when(mongoOperations.count(any(), (Class) any())).thenReturn(10L); - Query query = new Query(); - assertEquals(10L, mongoCustomConnector.count(query, Object.class)); - } - - - @Test - void testFind() { - List list = new ArrayList<>(); - when(mongoOperations.find(any(), any())).thenReturn(list); - Query query = new Query(); - assertNotNull(mongoCustomConnector.find(query, Object.class)); - } - - @Test - void testFind2() { - List list = new ArrayList<>(); - when(mongoOperations.find(any(), any())).thenReturn(list); - Query query = new Query(); - Pageable page = Pageable.ofSize(3); - assertNotNull(mongoCustomConnector.find(query, page, Object.class)); - } - - @Test - void testFind3() { - Object a = new Object(); - List list = new ArrayList<>(); - list.add(a); - when(mongoOperations.count(any(), (Class) any())).thenReturn(1L); - when(mongoOperations.find(any(), any())).thenReturn(list); - Query query = new Query(); - Pageable page = Pageable.ofSize(3); - assertNotNull(mongoCustomConnector.find(query, page, Object.class)); - } - - @Test - void findAndModify() { - Object a = new Object(); - List list = new ArrayList<>(); - list.add(a); - when(mongoOperations.findAndModify(any(), any(), any(), (Class) any())).thenReturn(list); - Query query = new Query(); - UpdateDefinition updateDefinition = new Update(); - FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); - assertNotNull(mongoCustomConnector.findAndModify(query, updateDefinition, findAndModifyOptions, Object.class)); - } - - @Test - void findUserAndInstitution() { - AggregationResults results = mock(AggregationResults.class); - when(results.getUniqueMappedResult()).thenReturn(new Object()); - when(mongoOperations.aggregate((Aggregation) any(), anyString(), any())).thenReturn(results); - UserInstitutionFilter filter = new UserInstitutionFilter(); - filter.setUserId("userId"); - Assertions.assertDoesNotThrow(() -> mongoCustomConnector.findUserInstitutionAggregation(filter, UserInstitutionAggregation.class)); - - } - - @Test - void findUserAndInstitutionWithInstitutionId() { - AggregationResults results = mock(AggregationResults.class); - when(results.getUniqueMappedResult()).thenReturn(new Object()); - when(mongoOperations.aggregate((Aggregation) any(), anyString(), any())).thenReturn(results); - UserInstitutionFilter filter = new UserInstitutionFilter(); - filter.setUserId("userId"); - filter.setInstitutionId("institutionId"); - Assertions.assertDoesNotThrow(() -> mongoCustomConnector.findUserInstitutionAggregation(filter, UserInstitutionAggregation.class)); - - } - - @Test - void findUserAndInstitutionWithExternalId() { - AggregationResults results = mock(AggregationResults.class); - when(results.getUniqueMappedResult()).thenReturn(new Object()); - when(mongoOperations.aggregate((Aggregation) any(), anyString(), any())).thenReturn(results); - UserInstitutionFilter filter = new UserInstitutionFilter(); - filter.setUserId("userId"); - filter.setExternalId("externalId"); - Assertions.assertDoesNotThrow(() -> mongoCustomConnector.findUserInstitutionAggregation(filter, UserInstitutionAggregation.class)); - - } - - @Test - void updateMulti() { - UpdateResult updateResult = mock(UpdateResult.class); - when(mongoOperations.updateMulti(any(), any(), (Class) any())).thenReturn(updateResult); - Query query = new Query(); - UpdateDefinition updateDefinition = new Update(); - assertNotNull(mongoCustomConnector.updateMulti(query, updateDefinition, Object.class)); - } - -} - diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImplTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImplTest.java deleted file mode 100644 index 43d6f95..0000000 --- a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImplTest.java +++ /dev/null @@ -1,107 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao; - -import java.util.Collections; -import java.util.List; -import java.util.UUID; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.test.context.ContextConfiguration; - -import it.pagopa.selfcare.mscore.connector.dao.model.PecNotificationEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.mapper.PecNotificationEntityMapper; -import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; - -@ContextConfiguration(classes = {PecNotificationConnectorImpl.class}) -@ExtendWith(MockitoExtension.class) -class PecNotificationConnectorImplTest { - - @Mock - private PecNotificationRepository repository; - - @Mock - private PecNotificationEntityMapper pecNotificationMapper; - - @InjectMocks - private PecNotificationConnectorImpl pecNotificationConnector; - - private String institutionId; - private String productId; - private PecNotificationEntity pecNotificationEntity; - private PecNotification pecNotification; - - @BeforeEach - void setUp() { - institutionId = UUID.randomUUID().toString(); - productId = "prod-io"; - pecNotificationEntity = new PecNotificationEntity(); - pecNotificationEntity.setInstitutionId(institutionId); - pecNotificationEntity.setProductId(productId); - pecNotification = new PecNotification(); - } - - @Test - void findAndDeletePecNotification_success() { - when(repository.find(any(), eq(PecNotificationEntity.class))) - .thenReturn(Collections.singletonList(pecNotificationEntity)); - - boolean result = pecNotificationConnector.findAndDeletePecNotification(institutionId, productId); - - assertTrue(result); - verify(repository, times(1)).delete(pecNotificationEntity); - } - - @Test - void findAndDeletePecNotification_multipleEntries() { - when(repository.find(any(), eq(PecNotificationEntity.class))) - .thenReturn(List.of(pecNotificationEntity, pecNotificationEntity)); - - boolean result = pecNotificationConnector.findAndDeletePecNotification(institutionId, productId); - - assertFalse(result); - verify(repository, never()).delete(any()); - } - - @Test - void findAndDeletePecNotification_notExist() { - List pecNotificationList = Collections.emptyList(); - when(repository.find(any(), eq(PecNotificationEntity.class))) - .thenReturn(pecNotificationList); - - boolean result = pecNotificationConnector.findAndDeletePecNotification(institutionId, productId); - - assertFalse(result); - verify(repository, never()).delete(any()); - } - - @Test - void insertPecNotification_success() { - when(pecNotificationMapper.convertToPecNotificationEntity(pecNotification)).thenReturn(pecNotificationEntity); - when(repository.existsByInstitutionIdAndProductId(any(), any())).thenReturn(false); - - boolean result = pecNotificationConnector.insertPecNotification(pecNotification); - - assertTrue(result); - verify(repository, times(1)).insert(pecNotificationEntity); - } - - @Test - void insertPecNotification_alreadyExists() { - when(pecNotificationMapper.convertToPecNotificationEntity(pecNotification)).thenReturn(pecNotificationEntity); - when(repository.existsByInstitutionIdAndProductId(any(), any())).thenReturn(true); - - boolean result = pecNotificationConnector.insertPecNotification(pecNotification); - - assertFalse(result); - verify(repository, never()).insert(pecNotificationEntity); - - } - -} diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfigTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfigTest.java deleted file mode 100644 index aef5628..0000000 --- a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfigTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.config; - -import com.mongodb.assertions.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.boot.test.context.TestConfiguration; -import org.springframework.context.annotation.Import; -import org.springframework.data.mongodb.MongoDatabaseFactory; -import org.springframework.test.context.junit.jupiter.SpringExtension; - - -@ExtendWith(SpringExtension.class) -@TestConfiguration -@Import(DaoConfig.class) -public class DaoConfigTest { - @InjectMocks - private DaoConfig daoConfig; - - @Mock - private MongoDatabaseFactory mongoDatabaseFactory; - - - @Test - void testCustomConversions() { - Assertions.assertNotNull(daoConfig.customConversions()); - } - -} - diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverterTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverterTest.java deleted file mode 100644 index e7e5b52..0000000 --- a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverterTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.config; - -import java.time.OffsetDateTime; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -@ExtendWith(SpringExtension.class) -class OffsetDateTimeToStringConverterTest { - - @Test - void testConvert() { - String offsetDateTime = new OffsetDateTimeToStringConverter().convert(OffsetDateTime.now()); - Assertions.assertDoesNotThrow(() -> offsetDateTime); - } -} - diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverterTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverterTest.java deleted file mode 100644 index fe89941..0000000 --- a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverterTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.config; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import java.time.OffsetDateTime; - -class StringToOffsetDateTimeConverterTest { - /** - * Method under test: {@link StringToOffsetDateTimeConverter#convert(String)} - */ - @Test - void testConvert() { - OffsetDateTime offsetDateTime = new StringToOffsetDateTimeConverter().convert("2011-12-03T10:15:30+01:00"); - Assertions.assertDoesNotThrow(() -> offsetDateTime); - } -} - diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserMapperTest.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserMapperTest.java deleted file mode 100644 index 9c401f2..0000000 --- a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserMapperTest.java +++ /dev/null @@ -1,210 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.model.mapper; - -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.mscore.connector.dao.model.UserEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardedProductEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.UserBindingEntity; -import it.pagopa.selfcare.mscore.constant.Env; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedUser; -import it.pagopa.selfcare.mscore.model.user.UserBinding; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - -class UserMapperTest { - - private final UserEntityMapper userMapper = new UserEntityMapperImpl(); - /** - * Method under test: {@link UserEntityMapper#toOnboardedUser(UserEntity)} - */ - @Test - void testToOnboardedUser() { - UserEntity userEntity = new UserEntity(); - ArrayList userBindingEntityList = new ArrayList<>(); - userEntity.setBindings(userBindingEntityList); - userEntity.setCreatedAt(null); - userEntity.setId("42"); - userEntity.setUpdatedAt(null); - OnboardedUser actualToOnboardedUserResult = userMapper.toOnboardedUser(userEntity); - assertEquals("42", actualToOnboardedUserResult.getId()); - assertNull(actualToOnboardedUserResult.getCreatedAt()); - } - - /** - * Method under test: {@link UserEntityMapper#toOnboardedUser(UserEntity)} - */ - @Test - void testToOnboardedUser2() { - UserEntity userEntity = new UserEntity(); - userEntity.setCreatedAt(null); - userEntity.setId("42"); - userEntity.setUpdatedAt(null); - userEntity.setBindings(null); - OnboardedUser actualToOnboardedUserResult = userMapper.toOnboardedUser(userEntity); - assertEquals("42", actualToOnboardedUserResult.getId()); - assertNull(actualToOnboardedUserResult.getCreatedAt()); - } - - /** - * Method under test: {@link UserEntityMapper#toOnboardedUser(UserEntity)} - */ - @Test - void testToOnboardedUser3() { - UserBindingEntity userBindingEntity = new UserBindingEntity(); - userBindingEntity.setProducts(null); - - UserBindingEntity userBindingEntity1 = new UserBindingEntity(); - userBindingEntity1.setProducts(null); - - OnboardedProductEntity onboardedProductEntity = new OnboardedProductEntity(); - onboardedProductEntity.setContract("Contract"); - onboardedProductEntity.setCreatedAt(null); - onboardedProductEntity.setEnv(Env.ROOT); - onboardedProductEntity.setProductId("42"); - onboardedProductEntity.setProductRole("Product Role"); - onboardedProductEntity.setRelationshipId("42"); - onboardedProductEntity.setRole(PartyRole.MANAGER); - onboardedProductEntity.setStatus(RelationshipState.PENDING); - onboardedProductEntity.setTokenId("42"); - onboardedProductEntity.setUpdatedAt(null); - - ArrayList onboardedProductEntityList = new ArrayList<>(); - onboardedProductEntityList.add(onboardedProductEntity); - - UserBindingEntity userBindingEntity2 = new UserBindingEntity(); - userBindingEntity2.setProducts(onboardedProductEntityList); - - ArrayList userBindingEntityList = new ArrayList<>(); - userBindingEntityList.add(new UserBindingEntity()); - userBindingEntityList.add(userBindingEntity); - userBindingEntityList.add(userBindingEntity1); - userBindingEntityList.add(userBindingEntity2); - - UserEntity userEntity = new UserEntity(); - userEntity.setCreatedAt(null); - userEntity.setId("42"); - userEntity.setUpdatedAt(null); - userEntity.setBindings(userBindingEntityList); - OnboardedUser actualToOnboardedUserResult = userMapper.toOnboardedUser(userEntity); - List bindings = actualToOnboardedUserResult.getBindings(); - assertEquals(4, bindings.size()); - assertEquals("42", actualToOnboardedUserResult.getId()); - assertNull(actualToOnboardedUserResult.getCreatedAt()); - UserBinding getResult = bindings.get(3); - assertEquals(1, getResult.getProducts().size()); - assertNull(bindings.get(0).getInstitutionId()); - assertNull(getResult.getInstitutionId()); - assertNull(bindings.get(1).getInstitutionId()); - assertNull(bindings.get(2).getInstitutionId()); - } - - /** - * Method under test: {@link UserEntityMapper#toOnboardedUser(UserEntity)} - */ - @Test - void testToOnboardedUser4() { - List userBindingEntityList = new ArrayList<>(); - - UserEntity userEntity = new UserEntity(); - userEntity.setCreatedAt(null); - userEntity.setId("42"); - userEntity.setUpdatedAt(null); - userEntity.setBindings(userBindingEntityList); - OnboardedUser actualToOnboardedUserResult = userMapper.toOnboardedUser(userEntity); - assertTrue(actualToOnboardedUserResult.getBindings().isEmpty()); - assertEquals("42", actualToOnboardedUserResult.getId()); - assertNull(actualToOnboardedUserResult.getCreatedAt()); - } - - /** - * Method under test: {@link UserEntityMapper#toUserEntity(OnboardedUser)} - */ - @Test - void testToUserEntity() { - assertNull(userMapper.toUserEntity(new OnboardedUser()).getCreatedAt()); - } - - /** - * Method under test: {@link UserEntityMapper#toUserEntity(OnboardedUser)} - */ - @Test - void testToUserEntity2() { - OnboardedUser onboardedUser = new OnboardedUser(); - ArrayList userBindingList = new ArrayList<>(); - onboardedUser.setBindings(userBindingList); - onboardedUser.setId(null); - UserEntity actualToUserEntityResult = userMapper.toUserEntity(onboardedUser); - assertNull(actualToUserEntityResult.getCreatedAt()); - } - - /** - * Method under test: {@link UserEntityMapper#toUserEntity(OnboardedUser)} - */ - @Test - void testToUserEntity3() { - UserBinding userBinding = new UserBinding(); - userBinding.setProducts(null); - - UserBinding userBinding1 = new UserBinding(); - userBinding1.setProducts(null); - - OnboardedProduct onboardedProduct = new OnboardedProduct(); - onboardedProduct.setContract("Contract"); - onboardedProduct.setCreatedAt(null); - onboardedProduct.setEnv(Env.ROOT); - onboardedProduct.setProductId("42"); - onboardedProduct.setProductRole("Product Role"); - onboardedProduct.setRelationshipId("42"); - onboardedProduct.setRole(PartyRole.MANAGER); - onboardedProduct.setStatus(RelationshipState.PENDING); - onboardedProduct.setTokenId("42"); - onboardedProduct.setUpdatedAt(null); - - ArrayList onboardedProductList = new ArrayList<>(); - onboardedProductList.add(onboardedProduct); - - UserBinding userBinding2 = new UserBinding(); - userBinding2.setProducts(onboardedProductList); - - ArrayList userBindingList = new ArrayList<>(); - userBindingList.add(new UserBinding()); - userBindingList.add(userBinding); - userBindingList.add(userBinding1); - userBindingList.add(userBinding2); - - OnboardedUser onboardedUser = new OnboardedUser(); - onboardedUser.setBindings(userBindingList); - onboardedUser.setId(null); - UserEntity actualToUserEntityResult = userMapper.toUserEntity(onboardedUser); - List bindings = actualToUserEntityResult.getBindings(); - assertEquals(4, bindings.size()); - assertNull(actualToUserEntityResult.getCreatedAt()); - UserBindingEntity getResult = bindings.get(3); - assertEquals(1, getResult.getProducts().size()); - assertNull(bindings.get(2).getInstitutionId()); - assertNull(getResult.getInstitutionId()); - assertNull(bindings.get(0).getInstitutionId()); - assertNull(bindings.get(1).getInstitutionId()); - } - - /** - * Method under test: {@link UserEntityMapper#toUserEntity(OnboardedUser)} - */ - @Test - void testToUserEntity4() { - OnboardedUser onboardedUser = new OnboardedUser(); - onboardedUser.setBindings(null); - onboardedUser.setId("foo"); - UserEntity actualToUserEntityResult = userMapper.toUserEntity(onboardedUser); - assertEquals("foo", actualToUserEntityResult.getId()); - assertNull(actualToUserEntityResult.getCreatedAt()); - } -} - diff --git a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/utils/TestUtils.java b/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/utils/TestUtils.java deleted file mode 100644 index f1c1500..0000000 --- a/apps/institution-ms-new/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/utils/TestUtils.java +++ /dev/null @@ -1,155 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.dao.utils; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.BillingEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.DataProtectionOfficerEntity; -import it.pagopa.selfcare.mscore.connector.dao.model.inner.PaymentServiceProviderEntity; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.constant.TokenType; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.model.onboarding.Token; - -import java.util.ArrayList; - -public class TestUtils { - public static PaymentServiceProvider createSimplePaymentServiceProvider() { - - PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); - paymentServiceProvider.setAbiCode("Abi Code"); - paymentServiceProvider.setBusinessRegisterNumber("42"); - paymentServiceProvider.setLegalRegisterName("Legal Register Name"); - paymentServiceProvider.setLegalRegisterNumber("42"); - paymentServiceProvider.setVatNumberGroup(true); - return paymentServiceProvider; - } - - public static DataProtectionOfficer createSimpleDataProtectionOfficer() { - - DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); - dataProtectionOfficer.setAddress("42 Main St"); - dataProtectionOfficer.setEmail("jane.doe@example.org"); - dataProtectionOfficer.setPec("Pec"); - return dataProtectionOfficer; - } - DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); - - - public static InstitutionUpdate createSimpleInstitutionUpdatePA() { - - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setAddress("42 Main St"); - institutionUpdate.setBusinessRegisterPlace("Business Register Place"); - institutionUpdate.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); - institutionUpdate.setDescription("The characteristics of someone or something"); - institutionUpdate.setDigitalAddress("42 Main St"); - institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); - institutionUpdate.setImported(true); - institutionUpdate.setInstitutionType(InstitutionType.PA); - institutionUpdate.setPaymentServiceProvider(createSimplePaymentServiceProvider()); - institutionUpdate.setRea("Rea"); - institutionUpdate.setShareCapital("Share Capital"); - institutionUpdate.setSupportEmail("jane.doe@example.org"); - institutionUpdate.setSupportPhone("6625550144"); - institutionUpdate.setTaxCode("Tax Code"); - institutionUpdate.setZipCode("21654"); - return institutionUpdate; - } - - public static BillingEntity createSimpleBillingEntity() { - BillingEntity billingEntity = new BillingEntity(); - billingEntity.setPublicServices(true); - billingEntity.setRecipientCode("Recipient Code"); - billingEntity.setVatNumber("42"); - return billingEntity; - } - - public static DataProtectionOfficerEntity createSimpleDataProtectionOfficerEntity() { - DataProtectionOfficerEntity dataProtectionOfficerEntity = new DataProtectionOfficerEntity(); - dataProtectionOfficerEntity.setAddress("42 Main St"); - dataProtectionOfficerEntity.setEmail("jane.doe@example.org"); - dataProtectionOfficerEntity.setPec("Pec"); - return dataProtectionOfficerEntity; - } - - public static PaymentServiceProviderEntity createSimplePaymentServiceProviderEntity() { - PaymentServiceProviderEntity paymentServiceProviderEntity = new PaymentServiceProviderEntity(); - paymentServiceProviderEntity.setAbiCode("Abi Code"); - paymentServiceProviderEntity.setBusinessRegisterNumber("42"); - paymentServiceProviderEntity.setLegalRegisterName("Legal Register Name"); - paymentServiceProviderEntity.setLegalRegisterNumber("42"); - paymentServiceProviderEntity.setVatNumberGroup(true); - return paymentServiceProviderEntity; - } - - public static InstitutionEntity createSimpleInstitutionEntity() { - InstitutionEntity institutionEntity = new InstitutionEntity(); - institutionEntity.setAddress("42 Main St"); - institutionEntity.setAttributes(new ArrayList<>()); - institutionEntity.setBilling(createSimpleBillingEntity()); - institutionEntity.setBusinessRegisterPlace("Business Register Place"); - institutionEntity.setCreatedAt(null); - institutionEntity.setDataProtectionOfficer(createSimpleDataProtectionOfficerEntity()); - institutionEntity.setDescription("The characteristics of someone or something"); - institutionEntity.setDigitalAddress("42 Main St"); - institutionEntity.setExternalId("42"); - institutionEntity.setGeographicTaxonomies(new ArrayList<>()); - institutionEntity.setId("42"); - institutionEntity.setImported(true); - institutionEntity.setInstitutionType(InstitutionType.PA); - institutionEntity.setOnboarding(new ArrayList<>()); - institutionEntity.setOrigin(Origin.MOCK); - institutionEntity.setOriginId("42"); - institutionEntity.setPaymentServiceProvider(createSimplePaymentServiceProviderEntity()); - institutionEntity.setRea("Rea"); - institutionEntity.setShareCapital("Share Capital"); - institutionEntity.setSupportEmail("jane.doe@example.org"); - institutionEntity.setSupportPhone("6625550144"); - institutionEntity.setTaxCode("Tax Code"); - institutionEntity.setUpdatedAt(null); - institutionEntity.setZipCode("21654"); - return institutionEntity; - } - - public static Billing createSimpleBilling() { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - return billing; - } - - public static Onboarding createSimpleOnboarding() { - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(createSimpleBilling()); - onboarding.setClosedAt(null); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setTokenId("42"); - onboarding.setUpdatedAt(null); - return onboarding; - } - - public static Token createSimpleToken(InstitutionUpdate institutionUpdate) { - Token token = new Token(); - token.setChecksum("Checksum"); - token.setDeletedAt(null); - token.setContractSigned("Contract Signed"); - token.setContractTemplate("Contract Template"); - token.setCreatedAt(null); - token.setExpiringDate(null); - token.setId("42"); - token.setInstitutionId("42"); - token.setInstitutionUpdate(institutionUpdate); - token.setProductId("42"); - token.setStatus(RelationshipState.PENDING); - token.setType(TokenType.INSTITUTION); - token.setUpdatedAt(null); - token.setUsers(new ArrayList<>()); - return token; - } -} diff --git a/apps/institution-ms-new/connector/email/pom.xml b/apps/institution-ms-new/connector/email/pom.xml deleted file mode 100644 index 976bae7..0000000 --- a/apps/institution-ms-new/connector/email/pom.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - 4.0.0 - - selc-ms-core-connector - it.pagopa.selfcare - 1.0-SNAPSHOT - - - - selc-ms-core-connector-email - - - - org.springframework.boot - spring-boot-starter-mail - - - it.pagopa.selfcare - selc-ms-core-connector-azure-storage - - - org.apache.commons - commons-text - 1.10.0 - compile - - - - \ No newline at end of file diff --git a/apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImpl.java b/apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImpl.java deleted file mode 100644 index 947c749..0000000 --- a/apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImpl.java +++ /dev/null @@ -1,100 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.email; - -import com.fasterxml.jackson.databind.ObjectMapper; -import it.pagopa.selfcare.mscore.api.EmailConnector; -import it.pagopa.selfcare.mscore.api.FileStorageConnector; -import it.pagopa.selfcare.mscore.config.CoreConfig; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.model.onboarding.MailTemplate; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.text.StringSubstitutor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.mail.javamail.MimeMessageHelper; -import org.springframework.stereotype.Service; -import org.springframework.util.FileCopyUtils; -import org.springframework.util.StringUtils; - -import javax.activation.DataSource; -import javax.mail.internet.MimeMessage; -import javax.mail.util.ByteArrayDataSource; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import static it.pagopa.selfcare.mscore.constant.GenericError.ERROR_DURING_COMPRESS_FILE; -import static it.pagopa.selfcare.mscore.constant.GenericError.ERROR_DURING_SEND_MAIL; - -@Slf4j -@Service -public class EmailConnectorImpl implements EmailConnector { - - private final JavaMailSender mailSender; - private final FileStorageConnector fileStorageConnector; - private final ObjectMapper mapper; - private final CoreConfig coreConfig; - - @Autowired - public EmailConnectorImpl(JavaMailSender javaMailSender, - FileStorageConnector fileStorageConnector, - ObjectMapper mapper, - CoreConfig coreConfig) { - this.mailSender = javaMailSender; - this.fileStorageConnector = fileStorageConnector; - this.mapper = mapper; - this.coreConfig = coreConfig; - } - - @Override - public void sendMail(String templateName, List destinationMail, File pdf, String productName, Map mailParameters, String fileName) { - try { - log.info("START - sendMail to {}, for product {}", destinationMail, productName); - String template = fileStorageConnector.getTemplateFile(templateName); - MailTemplate mailTemplate = mapper.readValue(template, MailTemplate.class); - String html = StringSubstitutor.replace(mailTemplate.getBody(), mailParameters); - log.trace("sendMessage start"); - MimeMessage mimeMessage = mailSender.createMimeMessage(); - - MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8"); - - message.setSubject(productName + ": " + mailTemplate.getSubject()); - message.setFrom(coreConfig.getSenderMail()); - message.setTo(destinationMail.toArray(new String[0])); - message.setText(html, true); - if(pdf != null && StringUtils.hasText(fileName)) { - byte[] bytes = zipBytes(fileName, pdf); - DataSource source = new ByteArrayDataSource(bytes, "application/zip"); - message.addAttachment(fileName + ".zip", source); - log.info("sendMail to: {}, attached file: {}, for product {}", destinationMail, pdf.getName(), productName); - } - mailSender.send(mimeMessage); - log.info("END - sendMail to {}, for product {}", destinationMail, productName); - } catch (Exception e) { - log.error(ERROR_DURING_SEND_MAIL.getMessage() + ":", e.getMessage(), e); - throw new MsCoreException(ERROR_DURING_SEND_MAIL.getMessage(), ERROR_DURING_SEND_MAIL.getCode()); - } - log.trace("sendMessage end"); - } - - public byte[] zipBytes(String filename, File pdf) { - try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ZipOutputStream zos = new ZipOutputStream(baos)) { - ZipEntry entry = new ZipEntry(filename); - byte[] pdfToByte = FileCopyUtils.copyToByteArray(pdf); - zos.putNextEntry(entry); - zos.write(pdfToByte); - zos.closeEntry(); - zos.finish(); - return baos.toByteArray(); - } catch (IOException e) { - log.error(String.format(ERROR_DURING_COMPRESS_FILE.getMessage(), filename), e); - throw new MsCoreException(String.format(ERROR_DURING_COMPRESS_FILE.getMessage(), filename), - ERROR_DURING_COMPRESS_FILE.getCode()); - } - } -} - diff --git a/apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/config/EmailBaseConfig.java b/apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/config/EmailBaseConfig.java deleted file mode 100644 index 9f2b4da..0000000 --- a/apps/institution-ms-new/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/config/EmailBaseConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.email.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; - -@Configuration -@PropertySource("classpath:config/email.properties") -public class EmailBaseConfig { -} diff --git a/apps/institution-ms-new/connector/email/src/main/resources/config/email.properties b/apps/institution-ms-new/connector/email/src/main/resources/config/email.properties deleted file mode 100644 index a5fe663..0000000 --- a/apps/institution-ms-new/connector/email/src/main/resources/config/email.properties +++ /dev/null @@ -1,7 +0,0 @@ -spring.mail.host=${SMTP_HOST} -spring.mail.port=${SMTP_PORT} -spring.mail.username=${SMTP_USR} -spring.mail.password=${SMTP_PSW} -spring.mail.properties.mail.smtp.auth=${SMTP_AUTH:true} -spring.mail.properties.mail.smtp.starttls.enable=${SMTP_SSL:true} -spring.mail.protocol=${MAIL_SERVER_PROTOCOL:smtps} \ No newline at end of file diff --git a/apps/institution-ms-new/connector/email/src/test/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImplTest.java b/apps/institution-ms-new/connector/email/src/test/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImplTest.java deleted file mode 100644 index 6cb7d39..0000000 --- a/apps/institution-ms-new/connector/email/src/test/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImplTest.java +++ /dev/null @@ -1,101 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.email; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import it.pagopa.selfcare.mscore.api.FileStorageConnector; -import it.pagopa.selfcare.mscore.config.CoreConfig; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.model.onboarding.MailTemplate; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import javax.mail.internet.MimeMessage; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashMap; - -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.*; - -@ExtendWith(SpringExtension.class) -class EmailConnectorImplTest { - - @InjectMocks - private EmailConnectorImpl emailConnector; - - @Mock - private ObjectMapper mapper; - - @Mock - private FileStorageConnector fileStorageConnector; - - @Mock - private JavaMailSender javaMailSender; - - @Mock - private CoreConfig coreConfig; - - @Test - void testSendMail() throws IOException { - when(fileStorageConnector.getTemplateFile(any())).thenReturn("templateFile"); - MailTemplate mailTemplate = new MailTemplate(); - Path path = Files.createTempFile("contratto", ".pdf"); - File pdf = new File(path.toUri()); - String fileName = "text.pdf"; - byte [] bytes = emailConnector.zipBytes(fileName, pdf); - assertNotNull(bytes); - mailTemplate.setBody("body"); - mailTemplate.setSubject("subject"); - when(mapper.readValue("templateFile", MailTemplate.class)).thenReturn(mailTemplate); - - MimeMessage mimeMessage = mock(MimeMessage.class); - when(javaMailSender.createMimeMessage()).thenReturn(mimeMessage); - when(coreConfig.getSenderMail()).thenReturn("senderMail"); - - ArrayList destinationMail = new ArrayList<>(); - - Assertions.assertDoesNotThrow(() -> emailConnector.sendMail("Template Name", destinationMail, pdf, "Product Name", new HashMap<>(), "foo.txt")); - } - - @Test - void testSendMailWithoutAttachment() throws JsonProcessingException { - when(fileStorageConnector.getTemplateFile(any())).thenReturn("templateFile"); - MailTemplate mailTemplate = new MailTemplate(); - mailTemplate.setBody("body"); - mailTemplate.setSubject("subject"); - when(mapper.readValue("templateFile", MailTemplate.class)).thenReturn(mailTemplate); - - MimeMessage mimeMessage = mock(MimeMessage.class); - when(javaMailSender.createMimeMessage()).thenReturn(mimeMessage); - when(coreConfig.getSenderMail()).thenReturn("senderMail"); - - ArrayList destinationMail = new ArrayList<>(); - Assertions.assertDoesNotThrow(() -> emailConnector.sendMail("Template Name", destinationMail, null, "Product Name", new HashMap<>(), null)); - } - - @Test - void testSendMail2() { - FileStorageConnector fileStorageConnector = mock(FileStorageConnector.class); - when(fileStorageConnector.getTemplateFile(any())).thenReturn("Template File"); - ObjectMapper mapper = new ObjectMapper(); - EmailConnectorImpl emailConnectorImpl = new EmailConnectorImpl(null, fileStorageConnector, mapper, - new CoreConfig()); - ArrayList destinationMail = new ArrayList<>(); - File pdf = Paths.get(System.getProperty("java.io.tmpdir"), "test.txt").toFile(); - assertThrows(MsCoreException.class, () -> emailConnectorImpl.sendMail("Template Name", destinationMail, pdf, - "Product Name", new HashMap<>(), "foo.txt")); - verify(fileStorageConnector).getTemplateFile(any()); - } - -} - diff --git a/apps/institution-ms-new/connector/pom.xml b/apps/institution-ms-new/connector/pom.xml deleted file mode 100644 index 7220fdf..0000000 --- a/apps/institution-ms-new/connector/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - 4.0.0 - - selc-ms-core - it.pagopa.selfcare - 1.0-SNAPSHOT - - - selc-ms-core-connector - pom - - dao - rest - azure-storage - email - - - - - it.pagopa.selfcare - selc-ms-core-connector-api - - - \ No newline at end of file diff --git a/apps/institution-ms-new/connector/rest/docs/openapi/registry_proxy.json b/apps/institution-ms-new/connector/rest/docs/openapi/registry_proxy.json deleted file mode 100644 index fa2a92c..0000000 --- a/apps/institution-ms-new/connector/rest/docs/openapi/registry_proxy.json +++ /dev/null @@ -1,2199 +0,0 @@ -{ - "openapi" : "3.0.3", - "info" : { - "title" : "selc-party-registry-proxy", - "description" : "Party Registry Proxy API documentation", - "version" : "0.0.1-SNAPSHOT" - }, - "servers" : [ { - "url" : "{url}:{port}{basePath}", - "variables" : { - "url" : { - "default" : "http://localhost" - }, - "port" : { - "default" : "80" - }, - "basePath" : { - "default" : "" - } - } - } ], - "tags" : [ { - "name" : "GeographicTaxonomies", - "description" : "Geographic Taxonomies Controller" - }, { - "name" : "aoo", - "description" : "AOO Controller" - }, { - "name" : "category", - "description" : "Category operations" - }, { - "name" : "infocamere", - "description" : "Info Camere Controller" - }, { - "name" : "institution", - "description" : "Institution operations" - }, { - "name" : "insurance-companies", - "description" : "Ivass Controller" - }, { - "name" : "nationalRegistries", - "description" : "National Registries Controller" - }, { - "name" : "stations", - "description" : "Station Controller" - }, { - "name" : "uo", - "description" : "UO Controller" - } ], - "paths" : { - "/aoo" : { - "get" : { - "tags" : [ "aoo" ], - "summary" : "Retrieve all AOO from IPA", - "description" : "Returns the AOO list", - "operationId" : "findAllUsingGET", - "parameters" : [ { - "name" : "page", - "in" : "query", - "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - }, { - "name" : "limit", - "in" : "query", - "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/AOOsResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/aoo/{codiceUniAoo}" : { - "get" : { - "tags" : [ "aoo" ], - "summary" : "Retrieve an AOO given its code", - "description" : "Returns an AOO", - "operationId" : "findByUnicodeUsingGET", - "parameters" : [ { - "name" : "codiceUniAoo", - "in" : "path", - "description" : "AOO unique identifier, the same of Id", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - }, { - "name" : "categories", - "in" : "query", - "description" : "Filter from origin category", - "required" : false, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/AOOResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/categories" : { - "get" : { - "tags" : [ "category" ], - "summary" : "Get all categories", - "description" : "Returns the categories list", - "operationId" : "findCategoriesUsingGET", - "parameters" : [ { - "name" : "origin", - "in" : "query", - "description" : "Describes which is the source of data", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string", - "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] - } - }, { - "name" : "page", - "in" : "query", - "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - }, { - "name" : "limit", - "in" : "query", - "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/CategoriesResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/origins/{origin}/categories/{code}" : { - "get" : { - "tags" : [ "category" ], - "summary" : "Get a category", - "description" : "Returns a category", - "operationId" : "findCategoryUsingGET", - "parameters" : [ { - "name" : "origin", - "in" : "path", - "description" : "Describes which is the source of data", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string", - "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] - } - }, { - "name" : "code", - "in" : "path", - "description" : "code", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/CategoryResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/geotaxonomies" : { - "get" : { - "tags" : [ "GeographicTaxonomies" ], - "summary" : "retrieves the geographic taxonomies by description", - "description" : "retrieves the geographic taxonomies by description", - "operationId" : "retrieveGeoTaxonomiesByDescriptionUsingGET", - "parameters" : [ { - "name" : "description", - "in" : "query", - "description" : "geographic taxonomy description", - "required" : true, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "offset", - "in" : "query", - "description" : "identifies the page 0-based index, default to 0", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - }, { - "name" : "limit", - "in" : "query", - "description" : "identifies the number of entries in a page, default to 10", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/GeographicTaxonomyResource" - } - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/geotaxonomies/{geotaxId}" : { - "get" : { - "tags" : [ "GeographicTaxonomies" ], - "summary" : "retrieves the geographic taxonomy by code", - "description" : "retrieves the geographic taxonomy by code", - "operationId" : "retrieveGeoTaxonomiesByCodeUsingGET", - "parameters" : [ { - "name" : "geotaxId", - "in" : "path", - "description" : "Geographic taxonomy unique identifier ", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/GeographicTaxonomyResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/info-camere/institutions" : { - "post" : { - "tags" : [ "infocamere" ], - "summary" : "Get institutions by legal tax id", - "description" : "Get the list of companies represented by the tax code of the person (physical or juridical) passed as a parameter", - "operationId" : "institutionsByLegalTaxIdUsingPOST", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/GetInstitutionsByLegalDto" - } - } - } - }, - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/BusinessesResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions" : { - "get" : { - "tags" : [ "institution" ], - "summary" : "Search institutions", - "description" : "Returns a list of Institutions.", - "operationId" : "searchUsingGET", - "parameters" : [ { - "name" : "search", - "in" : "query", - "description" : "if passed, the result is filtered based on the contained value.", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "page", - "in" : "query", - "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - }, { - "name" : "limit", - "in" : "query", - "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - }, { - "name" : "categories", - "in" : "query", - "description" : "Filter from origin category", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionsResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/institutions/{id}" : { - "get" : { - "tags" : [ "institution" ], - "summary" : "Find institution by ID", - "description" : "Returns a single institution. If 'origin' param is filled, the ID to find is treated as 'originId' ($ref: '#/components/schemas/Institution'); otherwise is treated as 'id' ($ref: '#/components/schemas/Institution') ", - "operationId" : "findInstitutionUsingGET", - "parameters" : [ { - "name" : "id", - "in" : "path", - "description" : "The institution ID. It change semantic based on the origin param value (see notes)", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - }, { - "name" : "origin", - "in" : "query", - "description" : "Describes which is the source of data", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string", - "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] - } - }, { - "name" : "categories", - "in" : "query", - "description" : "Filter from origin category", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InstitutionResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/insurance-companies" : { - "get" : { - "tags" : [ "insurance-companies" ], - "summary" : "Search insurance company", - "description" : "Returns a list of insurance companies", - "operationId" : "searchUsingGET_1", - "parameters" : [ { - "name" : "search", - "in" : "query", - "description" : "Optional search field. Users can provide a search string to filter results", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "page", - "in" : "query", - "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - }, { - "name" : "limit", - "in" : "query", - "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InsuranceCompaniesResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/insurance-companies/origin/{originId}" : { - "get" : { - "tags" : [ "insurance-companies" ], - "summary" : "Search insurance company by its taxCode", - "description" : "Returns only one insurance company.", - "operationId" : "searchByOriginIdUsingGET", - "parameters" : [ { - "name" : "originId", - "in" : "path", - "description" : "insurance company's IVASS unique identifier", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InsuranceCompanyResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/insurance-companies/{taxId}" : { - "get" : { - "tags" : [ "insurance-companies" ], - "summary" : "Search insurance company by its taxCode", - "description" : "Returns only one insurance company.", - "operationId" : "searchByTaxCodeUsingGET", - "parameters" : [ { - "name" : "taxId", - "in" : "path", - "description" : "taxCode of insurance company", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/InsuranceCompanyResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/national-registries/legal-address" : { - "get" : { - "tags" : [ "nationalRegistries" ], - "summary" : "Retrieve data from AdE and InfoCamere", - "description" : "Get the legal address of the business", - "operationId" : "legalAddressUsingGET", - "parameters" : [ { - "name" : "taxId", - "in" : "query", - "description" : "taxId", - "required" : true, - "style" : "form", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/LegalAddressResponse" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/national-registries/verify-legal" : { - "get" : { - "tags" : [ "nationalRegistries" ], - "summary" : "Retrieve data from AdE and InfoCamere", - "description" : "verify if given taxId is legal of given institution identified with vatNumber", - "operationId" : "verifyLegalUsingGET", - "parameters" : [ { - "name" : "taxId", - "in" : "query", - "description" : "taxId", - "required" : true, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "vatNumber", - "in" : "query", - "description" : "vatNumber", - "required" : true, - "style" : "form", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/LegalVerificationResult" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/stations" : { - "get" : { - "tags" : [ "stations" ], - "summary" : "Search station", - "description" : "Returns a list of station.", - "operationId" : "searchUsingGET_2", - "parameters" : [ { - "name" : "search", - "in" : "query", - "description" : "Optional search field. Users can provide a search string to filter results", - "required" : false, - "style" : "form", - "schema" : { - "type" : "string" - } - }, { - "name" : "page", - "in" : "query", - "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - }, { - "name" : "limit", - "in" : "query", - "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/StationsResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/stations/{taxId}" : { - "get" : { - "tags" : [ "stations" ], - "summary" : "Search station by its taxCode", - "description" : "Returns only one station.", - "operationId" : "searchByTaxCodeUsingGET_1", - "parameters" : [ { - "name" : "taxId", - "in" : "path", - "description" : "taxCode of station", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/StationResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/uo" : { - "get" : { - "tags" : [ "uo" ], - "summary" : "Retrieve all UO from IPA", - "description" : "Returns the UO list", - "operationId" : "findAllUsingGET_1", - "parameters" : [ { - "name" : "page", - "in" : "query", - "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - }, { - "name" : "limit", - "in" : "query", - "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", - "required" : false, - "style" : "form", - "schema" : { - "type" : "integer", - "format" : "int32" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UOsResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - }, - "/uo/{codiceUniAoo}" : { - "get" : { - "tags" : [ "uo" ], - "summary" : "Retrieve a UO given its code", - "description" : "Returns a UO", - "operationId" : "findByUnicodeUsingGET_1", - "parameters" : [ { - "name" : "codiceUniAoo", - "in" : "path", - "description" : "UO unique identifier, the same of Id", - "required" : true, - "style" : "simple", - "schema" : { - "type" : "string" - } - }, { - "name" : "categories", - "in" : "query", - "description" : "Filter from origin category", - "required" : false, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UOResource" - } - } - } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "401" : { - "description" : "Unauthorized", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "bearerAuth" : [ "global" ] - } ] - } - } - }, - "components" : { - "schemas" : { - "AOOResource" : { - "title" : "AOOResource", - "type" : "object", - "properties" : { - "cap" : { - "type" : "string" - }, - "codAoo" : { - "type" : "string", - "description" : "AOO code" - }, - "codiceCatastaleComune" : { - "type" : "string", - "description" : "AOO land registry code" - }, - "codiceComuneISTAT" : { - "type" : "string", - "description" : "AOO istat code" - }, - "codiceFiscaleEnte" : { - "type" : "string", - "description" : "AOO fiscal code" - }, - "codiceIpa" : { - "type" : "string", - "description" : "AOO ipa code" - }, - "codiceUniAoo" : { - "type" : "string", - "description" : "AOO unique identifier, the same of Id" - }, - "cognomeResponsabile" : { - "type" : "string", - "description" : "AOO manager lastname" - }, - "dataAggiornamento" : { - "type" : "string", - "description" : "Identifies date of last update on the specific AOO" - }, - "dataIstituzione" : { - "type" : "string", - "description" : "Identifies date of first creation for AOO" - }, - "denominazioneAoo" : { - "type" : "string", - "description" : "AOO description" - }, - "denominazioneEnte" : { - "type" : "string", - "description" : "AOO parent description" - }, - "fax" : { - "type" : "string", - "description" : "AOO fax" - }, - "id" : { - "type" : "string" - }, - "indirizzo" : { - "type" : "string", - "description" : "AOO address" - }, - "mail1" : { - "type" : "string" - }, - "mailResponsabile" : { - "type" : "string", - "description" : "AOO manager email" - }, - "nomeResponsabile" : { - "type" : "string", - "description" : "AOO manager firstname" - }, - "origin" : { - "type" : "string", - "description" : "{swagger.model.*.origin}", - "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] - }, - "protocolloInformatico" : { - "type" : "string", - "description" : "AOO IT protocol" - }, - "telefono" : { - "type" : "string", - "description" : "AOO phone number" - }, - "telefonoResponsabile" : { - "type" : "string", - "description" : "AOO manager phone number" - }, - "tipoMail1" : { - "type" : "string" - }, - "uriprotocolloInformatico" : { - "type" : "string" - } - } - }, - "AOOsResource" : { - "title" : "AOOsResource", - "required" : [ "count", "items" ], - "type" : "object", - "properties" : { - "count" : { - "type" : "integer", - "description" : "Total count of items", - "format" : "int64" - }, - "items" : { - "type" : "array", - "description" : "List of AOO resource", - "items" : { - "$ref" : "#/components/schemas/AOOResource" - } - } - } - }, - "BusinessResource" : { - "title" : "BusinessResource", - "type" : "object", - "properties" : { - "businessName" : { - "type" : "string" - }, - "businessTaxId" : { - "type" : "string" - } - } - }, - "BusinessesResource" : { - "title" : "BusinessesResource", - "type" : "object", - "properties" : { - "businesses" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BusinessResource" - } - }, - "legalTaxId" : { - "type" : "string" - }, - "requestDateTime" : { - "type" : "string" - } - } - }, - "CategoriesResource" : { - "title" : "CategoriesResource", - "required" : [ "items" ], - "type" : "object", - "properties" : { - "items" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/CategoryResource" - } - } - } - }, - "CategoryResource" : { - "title" : "CategoryResource", - "type" : "object", - "properties" : { - "code" : { - "type" : "string" - }, - "id" : { - "type" : "string" - }, - "kind" : { - "type" : "string" - }, - "name" : { - "type" : "string" - }, - "origin" : { - "type" : "string", - "description" : "Describes which is the source of data", - "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] - } - } - }, - "GeographicTaxonomyResource" : { - "title" : "GeographicTaxonomyResource", - "type" : "object", - "properties" : { - "code" : { - "type" : "string", - "description" : "Geographic taxonomy unique identifier " - }, - "country" : { - "type" : "string", - "description" : "Geographic taxonomy country" - }, - "country_abbreviation" : { - "type" : "string", - "description" : "Geographic taxonomy country abbreviation" - }, - "desc" : { - "type" : "string", - "description" : "Geographic taxonomy description" - }, - "enabled" : { - "type" : "boolean", - "description" : "Geographic taxonomy enabled", - "example" : false - }, - "istat_code" : { - "type" : "string", - "description" : "Geographic taxonomy istat code" - }, - "province_abbreviation" : { - "type" : "string", - "description" : "Geographic taxonomy province abbreviation" - }, - "province_id" : { - "type" : "string", - "description" : "Geographic taxonomy province unique identifier" - }, - "region_id" : { - "type" : "string", - "description" : "Geographic taxonomy region unique identifier" - } - } - }, - "GetInstitutionsByLegalDto" : { - "title" : "GetInstitutionsByLegalDto", - "type" : "object", - "properties" : { - "filter" : { - "$ref" : "#/components/schemas/GetInstitutionsByLegalFilterDto" - } - } - }, - "GetInstitutionsByLegalFilterDto" : { - "title" : "GetInstitutionsByLegalFilterDto", - "type" : "object", - "properties" : { - "legalTaxId" : { - "type" : "string" - } - } - }, - "InstitutionResource" : { - "title" : "InstitutionResource", - "type" : "object", - "properties" : { - "address" : { - "type" : "string", - "description" : "Institution address" - }, - "aoo" : { - "type" : "string", - "description" : "Area organizzativa omogenea" - }, - "category" : { - "type" : "string", - "description" : "Institution category" - }, - "description" : { - "type" : "string", - "description" : "Institution description" - }, - "digitalAddress" : { - "type" : "string", - "description" : "Institution digital address" - }, - "id" : { - "type" : "string", - "description" : "Semantic id to recognize a party between origins (or externalId)" - }, - "istatCode" : { - "type" : "string", - "description" : "Institution istat Code" - }, - "o" : { - "type" : "string", - "description" : "o" - }, - "origin" : { - "type" : "string", - "description" : "Describes which is the source of data", - "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] - }, - "originId" : { - "type" : "string", - "description" : "Id of the institution from its origin" - }, - "ou" : { - "type" : "string", - "description" : "ou" - }, - "taxCode" : { - "type" : "string", - "description" : "Institution fiscal code" - }, - "zipCode" : { - "type" : "string", - "description" : "Institution zipCode" - } - } - }, - "InstitutionsResource" : { - "title" : "InstitutionsResource", - "required" : [ "count", "items" ], - "type" : "object", - "properties" : { - "count" : { - "type" : "integer", - "format" : "int64" - }, - "items" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/InstitutionResource" - } - } - } - }, - "InsuranceCompaniesResource" : { - "title" : "InsuranceCompaniesResource", - "required" : [ "count", "items" ], - "type" : "object", - "properties" : { - "count" : { - "type" : "integer", - "description" : "list of companies resource size", - "format" : "int64" - }, - "items" : { - "type" : "array", - "description" : "list of insurance companies resource", - "items" : { - "$ref" : "#/components/schemas/InsuranceCompanyResource" - } - } - } - }, - "InsuranceCompanyResource" : { - "title" : "InsuranceCompanyResource", - "type" : "object", - "properties" : { - "address" : { - "type" : "string", - "description" : "Identifies legal address of insurance company" - }, - "description" : { - "type" : "string", - "description" : "insurance company's name" - }, - "digitalAddress" : { - "type" : "string", - "description" : "insurance company's mail address" - }, - "id" : { - "type" : "string", - "description" : "insurance company's unique identifier" - }, - "origin" : { - "type" : "string", - "description" : "Describes which is the source of data", - "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] - }, - "originId" : { - "type" : "string", - "description" : "insurance company's IVASS unique identifier" - }, - "registerType" : { - "type" : "string", - "description" : "Identifies register type for company" - }, - "taxCode" : { - "type" : "string", - "description" : "taxCode of insurance company" - }, - "workType" : { - "type" : "string", - "description" : "Identifies work type for company" - } - } - }, - "InvalidParam" : { - "title" : "InvalidParam", - "required" : [ "name", "reason" ], - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "description" : "Invalid parameter name." - }, - "reason" : { - "type" : "string", - "description" : "Invalid parameter reason." - } - } - }, - "LegalAddressResponse" : { - "title" : "LegalAddressResponse", - "type" : "object", - "properties" : { - "address" : { - "type" : "string" - }, - "zipCode" : { - "type" : "string" - } - } - }, - "LegalVerificationResult" : { - "title" : "LegalVerificationResult", - "type" : "object", - "properties" : { - "resultCode" : { - "type" : "string" - }, - "resultDetail" : { - "type" : "string" - }, - "verificationResult" : { - "type" : "boolean" - } - } - }, - "Problem" : { - "title" : "Problem", - "required" : [ "status", "title" ], - "type" : "object", - "properties" : { - "detail" : { - "type" : "string", - "description" : "Human-readable description of this specific problem." - }, - "instance" : { - "type" : "string", - "description" : "A URI that describes where the problem occurred." - }, - "invalidParams" : { - "type" : "array", - "description" : "A list of invalid parameters details.", - "items" : { - "$ref" : "#/components/schemas/InvalidParam" - } - }, - "status" : { - "type" : "integer", - "description" : "The HTTP status code.", - "format" : "int32", - "example" : 500 - }, - "title" : { - "type" : "string", - "description" : "Short human-readable summary of the problem." - }, - "type" : { - "type" : "string", - "description" : "A URL to a page with more details regarding the problem." - } - }, - "description" : "A \"problem detail\" as a way to carry machine-readable details of errors (https://datatracker.ietf.org/doc/html/rfc7807)" - }, - "StationResource" : { - "title" : "StationResource", - "type" : "object", - "properties" : { - "anacEnabled" : { - "type" : "boolean", - "description" : "Identifies if ANAC station is enabled", - "example" : false - }, - "anacEngaged" : { - "type" : "boolean", - "description" : "Identifies if ANAC station is engaged", - "example" : false - }, - "description" : { - "type" : "string", - "description" : "station's name" - }, - "digitalAddress" : { - "type" : "string", - "description" : "station's mail address" - }, - "id" : { - "type" : "string", - "description" : "station's unique identifier" - }, - "origin" : { - "type" : "string", - "description" : "Describes which is the source of data", - "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] - }, - "originId" : { - "type" : "string", - "description" : "station's anac unique identifier" - }, - "taxCode" : { - "type" : "string", - "description" : "taxCode of station" - } - } - }, - "StationsResource" : { - "title" : "StationsResource", - "required" : [ "count", "items" ], - "type" : "object", - "properties" : { - "count" : { - "type" : "integer", - "description" : "list of station resource size", - "format" : "int64" - }, - "items" : { - "type" : "array", - "description" : "list of station resource", - "items" : { - "$ref" : "#/components/schemas/StationResource" - } - } - } - }, - "UOResource" : { - "title" : "UOResource", - "type" : "object", - "properties" : { - "cap" : { - "type" : "string" - }, - "codiceCatastaleComune" : { - "type" : "string", - "description" : "UO land registry code" - }, - "codiceComuneISTAT" : { - "type" : "string", - "description" : "UO istat code" - }, - "codiceFiscaleEnte" : { - "type" : "string", - "description" : "UO fiscal code" - }, - "codiceIpa" : { - "type" : "string", - "description" : "UO ipa code" - }, - "codiceUniAoo" : { - "type" : "string", - "description" : "AOO unique identifier, the same of Id" - }, - "codiceUniUo" : { - "type" : "string", - "description" : "UO unique identifier, the same of Id" - }, - "codiceUniUoPadre" : { - "type" : "string", - "description" : "UO parent code" - }, - "cognomeResponsabile" : { - "type" : "string", - "description" : "UO manager lastname" - }, - "dataAggiornamento" : { - "type" : "string", - "description" : "Identifies date of last update on the specific UO" - }, - "dataIstituzione" : { - "type" : "string", - "description" : "Identifies date of first creation for UO" - }, - "denominazioneEnte" : { - "type" : "string", - "description" : "UO parent description" - }, - "descrizioneUo" : { - "type" : "string", - "description" : "UO description" - }, - "fax" : { - "type" : "string", - "description" : "UO fax" - }, - "id" : { - "type" : "string" - }, - "indirizzo" : { - "type" : "string", - "description" : "UO address" - }, - "mail1" : { - "type" : "string" - }, - "mailResponsabile" : { - "type" : "string", - "description" : "UO manager email" - }, - "nomeResponsabile" : { - "type" : "string", - "description" : "UO manager firstname" - }, - "origin" : { - "type" : "string", - "description" : "Describes which is the source of data", - "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] - }, - "telefono" : { - "type" : "string", - "description" : "UO phone number" - }, - "telefonoResponsabile" : { - "type" : "string", - "description" : "UO manager phone number" - }, - "tipoMail1" : { - "type" : "string" - }, - "url" : { - "type" : "string", - "description" : "UO url" - } - } - }, - "UOsResource" : { - "title" : "UOsResource", - "required" : [ "count", "items" ], - "type" : "object", - "properties" : { - "count" : { - "type" : "integer", - "description" : "Total count of items", - "format" : "int64" - }, - "items" : { - "type" : "array", - "description" : "List of UO resource", - "items" : { - "$ref" : "#/components/schemas/UOResource" - } - } - } - } - }, - "securitySchemes" : { - "bearerAuth" : { - "type" : "http", - "description" : "A bearer token in the format of a JWS and conformed to the specifications included in [RFC8725](https://tools.ietf.org/html/RFC8725)", - "scheme" : "bearer", - "bearerFormat" : "JWT" - } - } - } -} \ No newline at end of file diff --git a/apps/institution-ms-new/connector/rest/docs/openapi/selfcare-user-docs.json b/apps/institution-ms-new/connector/rest/docs/openapi/selfcare-user-docs.json deleted file mode 100644 index 2cbbda3..0000000 --- a/apps/institution-ms-new/connector/rest/docs/openapi/selfcare-user-docs.json +++ /dev/null @@ -1,1550 +0,0 @@ -{ - "openapi" : "3.0.3", - "info" : { - "title" : "User API", - "version" : "1.0.0" - }, - "servers" : [ { - "url" : "http://localhost:8080", - "description" : "Auto generated value" - }, { - "url" : "http://0.0.0.0:8080", - "description" : "Auto generated value" - } ], - "paths" : { - "/authorize" : { - "get" : { - "tags" : [ "User Permission Controller" ], - "summary" : "Get permission for a user in an institution", - "parameters" : [ { - "name" : "institutionId", - "in" : "query", - "schema" : { - "type" : "string" - } - }, { - "name" : "permission", - "in" : "query", - "required" : true, - "schema" : { - "$ref" : "#/components/schemas/PermissionTypeEnum" - } - }, { - "name" : "productId", - "in" : "query", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "boolean" - } - } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/institutions/{institutionId}" : { - "put" : { - "tags" : [ "Institution Controller" ], - "summary" : "The API updates the description in all occurrences of userInstitution, given a certain institutionId.", - "parameters" : [ { - "name" : "institutionId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UpdateDescriptionDto" - } - } - } - }, - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/institutions/{institutionId}/products/{productId}/createdAt" : { - "put" : { - "tags" : [ "Institution Controller" ], - "summary" : "The API updates user's onboarded product with createdAt passed in input", - "parameters" : [ { - "name" : "institutionId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "productId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "createdAt", - "in" : "query", - "required" : true, - "schema" : { - "$ref" : "#/components/schemas/LocalDateTime" - } - }, { - "name" : "userIds", - "in" : "query", - "required" : true, - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/institutions/{institutionId}/user-institutions" : { - "get" : { - "tags" : [ "Institution Controller" ], - "summary" : "The API retrieves users with optional filters in input as query params", - "parameters" : [ { - "name" : "institutionId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "productRoles", - "in" : "query", - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - }, { - "name" : "products", - "in" : "query", - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - }, { - "name" : "roles", - "in" : "query", - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - }, { - "name" : "states", - "in" : "query", - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - }, { - "name" : "userId", - "in" : "query", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/UserInstitutionResponse" - } - } - } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/institutions/{institutionId}/users" : { - "get" : { - "tags" : [ "Institution Controller" ], - "summary" : "The API retrieves user's info including details of roles on products", - "parameters" : [ { - "name" : "institutionId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/UserProductResponse" - } - } - } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/users" : { - "get" : { - "tags" : [ "User Controller" ], - "summary" : "The API retrieves paged users with optional filters in input as query params", - "parameters" : [ { - "name" : "institutionId", - "in" : "query", - "schema" : { - "type" : "string" - } - }, { - "name" : "page", - "in" : "query", - "schema" : { - "format" : "int32", - "default" : "0", - "type" : "integer" - } - }, { - "name" : "productRoles", - "in" : "query", - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - }, { - "name" : "products", - "in" : "query", - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - }, { - "name" : "roles", - "in" : "query", - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/PartyRole" - } - } - }, { - "name" : "size", - "in" : "query", - "schema" : { - "format" : "int32", - "default" : "100", - "type" : "integer" - } - }, { - "name" : "states", - "in" : "query", - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - }, { - "name" : "userId", - "in" : "query", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/UserInstitutionResponse" - } - } - } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - }, - "post" : { - "tags" : [ "User Controller" ], - "summary" : "The createOrUpdateByFiscalCode function is used to create a new user or update an existing one.", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/CreateUserDto" - } - } - } - }, - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "string" - } - } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/users/emails" : { - "get" : { - "tags" : [ "User Controller" ], - "summary" : "The API retrieves Users' emails using institution id and product id", - "parameters" : [ { - "name" : "institutionId", - "in" : "query", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "productId", - "in" : "query", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/users/ids" : { - "get" : { - "tags" : [ "User Controller" ], - "summary" : "Retrieve all users given their userIds", - "parameters" : [ { - "name" : "userIds", - "in" : "query", - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/UserInstitutionResponse" - } - } - } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/users/notification" : { - "get" : { - "tags" : [ "User Controller" ], - "summary" : "Retrieve all SC-User for DataLake filtered by optional productId", - "parameters" : [ { - "name" : "page", - "in" : "query", - "schema" : { - "format" : "int32", - "default" : "0", - "type" : "integer" - } - }, { - "name" : "productId", - "in" : "query", - "schema" : { - "type" : "string" - } - }, { - "name" : "size", - "in" : "query", - "schema" : { - "format" : "int32", - "default" : "100", - "type" : "integer" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UsersNotificationResponse" - } - } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/users/search" : { - "post" : { - "tags" : [ "User Controller" ], - "summary" : "Search user by fiscalCode", - "parameters" : [ { - "name" : "institutionId", - "in" : "query", - "schema" : { - "type" : "string" - } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/SearchUserDto" - } - } - } - }, - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UserDetailResponse" - } - } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/users/{id}" : { - "get" : { - "tags" : [ "User Controller" ], - "summary" : "Retrieves user given userId and optional ProductId", - "parameters" : [ { - "name" : "id", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "institutionId", - "in" : "query", - "schema" : { - "type" : "string" - } - }, { - "name" : "productId", - "in" : "query", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UserResponse" - } - } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/users/{id}/details" : { - "get" : { - "tags" : [ "User Controller" ], - "summary" : "Retrieves user's information from pdv: name, familyName, email, fiscalCode and workContacts", - "parameters" : [ { - "name" : "id", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "field", - "in" : "query", - "schema" : { - "type" : "string" - } - }, { - "name" : "institutionId", - "in" : "query", - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UserDetailResponse" - } - } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/users/{id}/institution/{institutionId}/product/{productId}/status" : { - "put" : { - "tags" : [ "User Controller" ], - "summary" : "Service to update user product status", - "parameters" : [ { - "name" : "id", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "institutionId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "productId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "productRole", - "in" : "query", - "schema" : { - "type" : "string" - } - }, { - "name" : "status", - "in" : "query", - "required" : true, - "schema" : { - "$ref" : "#/components/schemas/OnboardedProductState" - } - } ], - "responses" : { - "204" : { - "description" : "No Content" - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/users/{id}/status" : { - "put" : { - "tags" : [ "User Controller" ], - "summary" : "Update user status with optional filter for institution, product, role and productRole", - "parameters" : [ { - "name" : "id", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "institutionId", - "in" : "query", - "schema" : { - "type" : "string" - } - }, { - "name" : "productId", - "in" : "query", - "schema" : { - "type" : "string" - } - }, { - "name" : "productRole", - "in" : "query", - "schema" : { - "type" : "string" - } - }, { - "name" : "role", - "in" : "query", - "schema" : { - "$ref" : "#/components/schemas/PartyRole" - } - }, { - "name" : "status", - "in" : "query", - "schema" : { - "$ref" : "#/components/schemas/OnboardedProductState" - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/users/{id}/user-registry" : { - "put" : { - "tags" : [ "User Controller" ], - "summary" : "Service to update user in user-registry and send notification when user data gets updated", - "parameters" : [ { - "name" : "id", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "institutionId", - "in" : "query", - "schema" : { - "type" : "string" - } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UpdateUserRequest" - } - } - } - }, - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/users/{userId}" : { - "post" : { - "tags" : [ "User Controller" ], - "summary" : "The createOrUpdateByUserId function is used to update existing user adding userRole.", - "parameters" : [ { - "name" : "userId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/AddUserRoleDto" - } - } - } - }, - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/users/{userId}/institution/{institutionId}" : { - "get" : { - "tags" : [ "User Controller" ], - "summary" : "The retrieveUsers function is used to retrieve a list of users from the UserInstitution collection and userRegistry.\nAt first it try to retrieve a UserInstitution document associated with a logged user (admin)\nIf this userInstitution object is not null, so user has AdminRole, it try to retriew the userInstitutions filtered by given institutionId, roles, states, products and productRoles\nand optional given personId, otherwise it do the same query using the logged user id instead of personId.\nAfter that it retrieve personal user data, foreach userId retrieved, from userRegistry and return a stream of UserDataResponse objects containing the requested user data.", - "parameters" : [ { - "name" : "institutionId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "userId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "personId", - "in" : "query", - "schema" : { - "type" : "string" - } - }, { - "name" : "productRoles", - "in" : "query", - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - }, { - "name" : "products", - "in" : "query", - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - }, { - "name" : "roles", - "in" : "query", - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - }, { - "name" : "states", - "in" : "query", - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/UserDataResponse" - } - } - } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/users/{userId}/institutions" : { - "get" : { - "tags" : [ "User Controller" ], - "summary" : "Retrieves products info and role which the user is enabled", - "parameters" : [ { - "name" : "userId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "institutionId", - "in" : "query", - "schema" : { - "type" : "string" - } - }, { - "name" : "states", - "in" : "query", - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UserInfoResponse" - } - } - } - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - }, - "/users/{userId}/institutions/{institutionId}/products/{productId}" : { - "delete" : { - "tags" : [ "User Controller" ], - "summary" : "Delete logically the association institution and product", - "parameters" : [ { - "name" : "institutionId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "productId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "userId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "204" : { - "description" : "No Content" - }, - "403" : { - "description" : "Not Allowed" - }, - "401" : { - "description" : "Not Authorized" - } - }, - "security" : [ { - "SecurityScheme" : [ ] - } ] - } - } - }, - "components" : { - "schemas" : { - "AddUserRoleDto" : { - "required" : [ "institutionId", "product" ], - "type" : "object", - "properties" : { - "institutionId" : { - "minLength" : 1, - "type" : "string" - }, - "product" : { - "$ref" : "#/components/schemas/Product" - }, - "institutionDescription" : { - "type" : "string" - }, - "institutionRootName" : { - "type" : "string" - }, - "userMailUuid" : { - "type" : "string" - }, - "hasToSendEmail" : { - "type" : "boolean" - } - } - }, - "CertifiableFieldResponseString" : { - "type" : "object", - "properties" : { - "value" : { - "type" : "string" - }, - "certified" : { - "$ref" : "#/components/schemas/CertificationEnum" - } - } - }, - "CertificationEnum" : { - "enum" : [ "NONE", "SPID" ], - "type" : "string" - }, - "CreateUserDto" : { - "required" : [ "institutionId", "user", "product" ], - "type" : "object", - "properties" : { - "institutionId" : { - "minLength" : 1, - "type" : "string" - }, - "user" : { - "$ref" : "#/components/schemas/User" - }, - "product" : { - "$ref" : "#/components/schemas/Product1" - }, - "institutionDescription" : { - "type" : "string" - }, - "institutionRootName" : { - "type" : "string" - }, - "hasToSendEmail" : { - "type" : "boolean" - } - } - }, - "Env" : { - "enum" : [ "ROOT", "DEV", "COLL", "PROD" ], - "type" : "string" - }, - "LocalDateTime" : { - "format" : "date-time", - "type" : "string", - "example" : "2022-03-10T12:15:50" - }, - "OnboardedProductResponse" : { - "type" : "object", - "properties" : { - "productId" : { - "type" : "string" - }, - "tokenId" : { - "type" : "string" - }, - "status" : { - "$ref" : "#/components/schemas/OnboardedProductState" - }, - "productRole" : { - "type" : "string" - }, - "role" : { - "$ref" : "#/components/schemas/PartyRole" - }, - "env" : { - "$ref" : "#/components/schemas/Env" - }, - "createdAt" : { - "$ref" : "#/components/schemas/LocalDateTime" - }, - "updatedAt" : { - "$ref" : "#/components/schemas/LocalDateTime" - } - } - }, - "OnboardedProductState" : { - "enum" : [ "ACTIVE", "PENDING", "TOBEVALIDATED", "SUSPENDED", "DELETED", "REJECTED" ], - "type" : "string" - }, - "PartyRole" : { - "enum" : [ "MANAGER", "DELEGATE", "SUB_DELEGATE", "OPERATOR" ], - "type" : "string" - }, - "PermissionTypeEnum" : { - "enum" : [ "ADMIN", "ANY" ], - "type" : "string" - }, - "Product" : { - "required" : [ "productId", "role", "productRoles" ], - "type" : "object", - "properties" : { - "productId" : { - "minLength" : 1, - "type" : "string" - }, - "role" : { - "$ref" : "#/components/schemas/PartyRole" - }, - "tokenId" : { - "type" : "string" - }, - "productRoles" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - }, - "Product1" : { - "required" : [ "productId", "role", "productRoles" ], - "type" : "object", - "properties" : { - "productId" : { - "minLength" : 1, - "type" : "string" - }, - "role" : { - "$ref" : "#/components/schemas/PartyRole" - }, - "tokenId" : { - "type" : "string" - }, - "productRoles" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - }, - "QueueEvent" : { - "enum" : [ "ADD", "UPDATE" ], - "type" : "string" - }, - "SearchUserDto" : { - "required" : [ "fiscalCode" ], - "type" : "object", - "properties" : { - "fiscalCode" : { - "type" : "string" - } - } - }, - "UpdateDescriptionDto" : { - "required" : [ "institutionDescription" ], - "type" : "object", - "properties" : { - "institutionDescription" : { - "minLength" : 1, - "type" : "string" - }, - "institutionRootName" : { - "type" : "string" - } - } - }, - "UpdateUserRequest" : { - "required" : [ "email" ], - "type" : "object", - "properties" : { - "name" : { - "type" : "string" - }, - "familyName" : { - "type" : "string" - }, - "email" : { - "type" : "string" - } - } - }, - "User" : { - "required" : [ "fiscalCode", "institutionEmail" ], - "type" : "object", - "properties" : { - "birthDate" : { - "type" : "string" - }, - "familyName" : { - "type" : "string" - }, - "name" : { - "type" : "string" - }, - "fiscalCode" : { - "minLength" : 1, - "type" : "string" - }, - "institutionEmail" : { - "minLength" : 1, - "type" : "string" - } - } - }, - "UserDataResponse" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string" - }, - "userId" : { - "type" : "string" - }, - "institutionId" : { - "type" : "string" - }, - "institutionDescription" : { - "type" : "string" - }, - "institutionRootName" : { - "type" : "string" - }, - "userMailUuid" : { - "type" : "string" - }, - "role" : { - "type" : "string" - }, - "status" : { - "type" : "string" - }, - "products" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/OnboardedProductResponse" - } - }, - "userResponse" : { - "$ref" : "#/components/schemas/UserResponse" - } - } - }, - "UserDetailResponse" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string" - }, - "fiscalCode" : { - "type" : "string" - }, - "name" : { - "$ref" : "#/components/schemas/CertifiableFieldResponseString" - }, - "familyName" : { - "$ref" : "#/components/schemas/CertifiableFieldResponseString" - }, - "email" : { - "$ref" : "#/components/schemas/CertifiableFieldResponseString" - }, - "workContacts" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/components/schemas/WorkContactResponse" - } - } - } - }, - "UserInfoResponse" : { - "type" : "object", - "properties" : { - "userId" : { - "type" : "string" - }, - "institutions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/UserInstitutionRoleResponse" - } - } - } - }, - "UserInstitutionResponse" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string" - }, - "userId" : { - "type" : "string" - }, - "institutionId" : { - "type" : "string" - }, - "institutionDescription" : { - "type" : "string" - }, - "institutionRootName" : { - "type" : "string" - }, - "userMailUuid" : { - "type" : "string" - }, - "products" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/OnboardedProductResponse" - } - } - } - }, - "UserInstitutionRoleResponse" : { - "type" : "object", - "properties" : { - "institutionId" : { - "type" : "string" - }, - "institutionName" : { - "type" : "string" - }, - "institutionRootName" : { - "type" : "string" - }, - "role" : { - "$ref" : "#/components/schemas/PartyRole" - }, - "status" : { - "$ref" : "#/components/schemas/OnboardedProductState" - } - } - }, - "UserNotificationResponse" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string" - }, - "institutionId" : { - "type" : "string" - }, - "productId" : { - "type" : "string" - }, - "onboardingTokenId" : { - "type" : "string" - }, - "createdAt" : { - "$ref" : "#/components/schemas/LocalDateTime" - }, - "updatedAt" : { - "$ref" : "#/components/schemas/LocalDateTime" - }, - "eventType" : { - "$ref" : "#/components/schemas/QueueEvent" - }, - "user" : { - "$ref" : "#/components/schemas/UserToNotify" - } - } - }, - "UserProductResponse" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string" - }, - "taxCode" : { - "type" : "string" - }, - "name" : { - "type" : "string" - }, - "surname" : { - "type" : "string" - }, - "email" : { - "type" : "string" - }, - "products" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/OnboardedProductResponse" - } - } - } - }, - "UserResponse" : { - "required" : [ "id", "name", "surname" ], - "type" : "object", - "properties" : { - "id" : { - "minLength" : 1, - "type" : "string" - }, - "taxCode" : { - "type" : "string" - }, - "name" : { - "pattern" : "\\S", - "type" : "string" - }, - "surname" : { - "pattern" : "\\S", - "type" : "string" - }, - "email" : { - "type" : "string" - }, - "workContacts" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - } - } - } - }, - "UserToNotify" : { - "type" : "object", - "properties" : { - "userId" : { - "type" : "string" - }, - "name" : { - "type" : "string" - }, - "familyName" : { - "type" : "string" - }, - "email" : { - "type" : "string" - }, - "role" : { - "$ref" : "#/components/schemas/PartyRole" - }, - "productRole" : { - "type" : "string" - }, - "relationshipStatus" : { - "$ref" : "#/components/schemas/OnboardedProductState" - } - } - }, - "UsersNotificationResponse" : { - "type" : "object", - "properties" : { - "users" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/UserNotificationResponse" - } - } - } - }, - "WorkContactResponse" : { - "type" : "object", - "properties" : { - "email" : { - "$ref" : "#/components/schemas/CertifiableFieldResponseString" - } - } - } - }, - "securitySchemes" : { - "SecurityScheme" : { - "type" : "http", - "description" : "Authentication", - "scheme" : "bearer", - "bearerFormat" : "JWT" - } - } - } -} \ No newline at end of file diff --git a/apps/institution-ms-new/connector/rest/docs/openapi/user_registry.json b/apps/institution-ms-new/connector/rest/docs/openapi/user_registry.json deleted file mode 100644 index c6ac022..0000000 --- a/apps/institution-ms-new/connector/rest/docs/openapi/user_registry.json +++ /dev/null @@ -1,596 +0,0 @@ -{ - "openapi" : "3.0.1", - "info" : { - "title" : "pdv-u-user-registry-api", - "description" : "User Registry API documentation", - "version" : "1.0-SNAPSHOT" - }, - "servers" : [ { - "url" : "https://api.uat.pdv.pagopa.it/{basePath}", - "variables" : { - "basePath" : { - "default" : "user-registry/v1" - } - } - } ], - "tags" : [ { - "name" : "user", - "description" : "User operations" - } ], - "paths" : { - "/users" : { - "patch" : { - "tags" : [ "user" ], - "summary" : "Upsert user", - "description" : "Update the given subset fields of an existing user by external id, if not present create a new one", - "operationId" : "saveUsingPATCH", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/SaveUserDto" - } - } - }, - "required" : true - }, - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UserId" - } - } - } - }, - "429" : { - "description" : "Too Many Requests", - "content" : { } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "403" : { - "description" : "Forbidden", - "content" : { } - } - }, - "security" : [ { - "api_key" : [ ] - } ] - } - }, - "/users/{id}" : { - "get" : { - "tags" : [ "user" ], - "summary" : "Find user", - "description" : "Retrieve the user by its internal id", - "operationId" : "findByIdUsingGET", - "parameters" : [ { - "name" : "fl", - "in" : "query", - "description" : "Field list. Subset of fields to be retrieved for the requested resource", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "id", - "in" : "path", - "description" : "User internal id", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UserResource" - } - } - } - }, - "429" : { - "description" : "Too Many Requests", - "content" : { } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "403" : { - "description" : "Forbidden", - "content" : { } - } - }, - "security" : [ { - "api_key" : [ ] - } ] - }, - "delete" : { - "tags" : [ "user" ], - "summary" : "Delete user", - "description" : "Delete the user by its internal id", - "operationId" : "deleteByIdUsingDELETE", - "parameters" : [ { - "name" : "id", - "in" : "path", - "description" : "User internal id", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "429" : { - "description" : "Too Many Requests", - "content" : { } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "204" : { - "description" : "No Content", - "content" : { } - }, - "403" : { - "description" : "Forbidden", - "content" : { } - } - }, - "security" : [ { - "api_key" : [ ] - } ] - }, - "patch" : { - "tags" : [ "user" ], - "summary" : "Update user", - "description" : "Update the given subset fields of an existing user by its internal id, if not present an error is returned", - "operationId" : "updateUsingPATCH", - "parameters" : [ { - "name" : "id", - "in" : "path", - "description" : "User internal id", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/MutableUserFieldsDto" - } - } - }, - "required" : true - }, - "responses" : { - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "204" : { - "description" : "No Content", - "content" : { } - }, - "403" : { - "description" : "Forbidden", - "content" : { } - }, - "404" : { - "description" : "Not Found", - "content" : { } - }, - "429" : { - "description" : "Too Many Requests", - "content" : { } - }, - "409" : { - "description" : "Conflict", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - } - }, - "security" : [ { - "api_key" : [ ] - } ] - } - }, - "/users/search" : { - "post" : { - "tags" : [ "user" ], - "summary" : "Search user", - "description" : "Search a user given its fiscal code", - "operationId" : "searchUsingPOST", - "parameters" : [ { - "name" : "fl", - "in" : "query", - "description" : "Field list. Subset of fields to be retrieved for the requested resource", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UserSearchDto" - } - } - }, - "required" : true - }, - "responses" : { - "404" : { - "description" : "Not Found", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "200" : { - "description" : "OK", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UserResource" - } - } - } - }, - "429" : { - "description" : "Too Many Requests", - "content" : { } - }, - "400" : { - "description" : "Bad Request", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "500" : { - "description" : "Internal Server Error", - "content" : { - "application/problem+json" : { - "schema" : { - "$ref" : "#/components/schemas/Problem" - } - } - } - }, - "403" : { - "description" : "Forbidden", - "content" : { } - } - }, - "security" : [ { - "api_key" : [ ] - } ] - } - } - }, - "components" : { - "schemas" : { - "UserSearchDto" : { - "title" : "UserSearchDto", - "required" : [ "fiscalCode" ], - "type" : "object", - "properties" : { - "fiscalCode" : { - "type" : "string", - "description" : "User fiscal code" - } - } - }, - "WorkContactResource" : { - "title" : "WorkContactResource", - "type" : "object", - "properties" : { - "email" : { - "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" - } - } - }, - "CertifiableFieldResourceOfstring" : { - "title" : "CertifiableFieldResourceOfstring", - "required" : [ "certification", "value" ], - "type" : "object", - "properties" : { - "certification" : { - "type" : "string", - "description" : "Certified source of information", - "enum" : [ "NONE", "SPID" ] - }, - "value" : { - "type" : "string", - "description" : "Field value" - } - } - }, - "UserId" : { - "title" : "UserId", - "required" : [ "id" ], - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "User internal id", - "format" : "uuid" - } - } - }, - "MutableUserFieldsDto" : { - "title" : "MutableUserFieldsDto", - "type" : "object", - "properties" : { - "birthDate" : { - "$ref" : "#/components/schemas/CertifiableFieldResourceOfLocalDate" - }, - "email" : { - "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" - }, - "familyName" : { - "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" - }, - "name" : { - "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" - }, - "workContacts" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/components/schemas/WorkContactResource" - }, - "description" : "User work contacts" - } - } - }, - "CertifiableFieldResourceOfLocalDate" : { - "title" : "CertifiableFieldResourceOfLocalDate", - "required" : [ "certification", "value" ], - "type" : "object", - "properties" : { - "certification" : { - "type" : "string", - "description" : "Certified source of information", - "enum" : [ "NONE", "SPID" ] - }, - "value" : { - "type" : "string", - "description" : "Field value", - "format" : "date" - } - } - }, - "UserResource" : { - "title" : "UserResource", - "required" : [ "id" ], - "type" : "object", - "properties" : { - "birthDate" : { - "$ref" : "#/components/schemas/CertifiableFieldResourceOfLocalDate" - }, - "email" : { - "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" - }, - "familyName" : { - "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" - }, - "fiscalCode" : { - "type" : "string", - "description" : "User fiscal code" - }, - "id" : { - "type" : "string", - "description" : "User internal id", - "format" : "uuid" - }, - "name" : { - "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" - }, - "workContacts" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/components/schemas/WorkContactResource" - }, - "description" : "User work contacts" - } - } - }, - "SaveUserDto" : { - "title" : "SaveUserDto", - "required" : [ "fiscalCode" ], - "type" : "object", - "properties" : { - "birthDate" : { - "$ref" : "#/components/schemas/CertifiableFieldResourceOfLocalDate" - }, - "email" : { - "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" - }, - "familyName" : { - "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" - }, - "fiscalCode" : { - "type" : "string", - "description" : "User fiscal code" - }, - "name" : { - "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" - }, - "workContacts" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/components/schemas/WorkContactResource" - }, - "description" : "User work contacts" - } - } - }, - "Problem" : { - "title" : "Problem", - "required" : [ "status", "title" ], - "type" : "object", - "properties" : { - "detail" : { - "type" : "string", - "description" : "Human-readable description of this specific problem." - }, - "instance" : { - "type" : "string", - "description" : "A URI that describes where the problem occurred." - }, - "invalidParams" : { - "type" : "array", - "description" : "A list of invalid parameters details.", - "items" : { - "$ref" : "#/components/schemas/InvalidParam" - } - }, - "status" : { - "type" : "integer", - "description" : "The HTTP status code.", - "format" : "int32" - }, - "title" : { - "type" : "string", - "description" : "Short human-readable summary of the problem." - }, - "type" : { - "type" : "string", - "description" : "A URL to a page with more details regarding the problem." - } - }, - "description" : "A \"problem detail\" as a way to carry machine-readable details of errors (https://datatracker.ietf.org/doc/html/rfc7807)" - }, - "InvalidParam" : { - "title" : "InvalidParam", - "required" : [ "name", "reason" ], - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "description" : "Invalid parameter name." - }, - "reason" : { - "type" : "string", - "description" : "Invalid parameter reason." - } - } - } - }, - "securitySchemes" : { - "api_key" : { - "type" : "apiKey", - "name" : "x-api-key", - "in" : "header" - } - } - } -} \ No newline at end of file diff --git a/apps/institution-ms-new/connector/rest/pom.xml b/apps/institution-ms-new/connector/rest/pom.xml deleted file mode 100644 index dd13b27..0000000 --- a/apps/institution-ms-new/connector/rest/pom.xml +++ /dev/null @@ -1,152 +0,0 @@ - - - 4.0.0 - - selc-ms-core-connector - it.pagopa.selfcare - 1.0-SNAPSHOT - - - selc-ms-core-connector-rest - - - - it.pagopa.selfcare - selc-commons-connector-rest - - - it.pagopa.selfcare - selc-commons-connector-rest - test-jar - test - - - org.springframework.cloud - spring-cloud-contract-wiremock - test - - - io.github.openfeign - feign-okhttp - - - io.github.resilience4j - resilience4j-spring-boot2 - - - - - - - - org.openapitools - openapi-generator-maven-plugin - 6.3.0 - - - selfcare-user-registry - - generate - - process-resources - - ${project.basedir}/docs/openapi/user_registry.json - spring - spring-cloud - - false - false - - true - ${project.groupId}.user_registry.generated.openapi.v1 - ${project.groupId}.user_registry.generated.openapi.v1.dto - ${project.groupId}.user_registry.generated.openapi.v1.api - ${project.groupId}.user_registry.generated.openapi.v1.config - @lombok.Builder; @lombok.NoArgsConstructor; @lombok.AllArgsConstructor - java8 - true - true - none - source - false - false - true - - - - - selfcare-registry-proxy - - generate - - process-resources - - ${project.basedir}/docs/openapi/registry_proxy.json - spring - spring-cloud - - false - false - - true - ${project.groupId}.registry_proxy.generated.openapi.v1 - ${project.groupId}.registry_proxy.generated.openapi.v1.dto - ${project.groupId}.registry_proxy.generated.openapi.v1.api - ${project.groupId}.registry_proxy.generated.openapi.v1.config - @lombok.Builder; @lombok.NoArgsConstructor; @lombok.AllArgsConstructor - java8 - true - true - none - source - false - false - true - - - - - - - org.openapitools - openapi-generator-maven-plugin - 6.3.0 - - - user-ms - - generate - - process-resources - - ${project.basedir}/docs/openapi/selfcare-user-docs.json - spring - spring-cloud - - false - false - - true - ${project.groupId}.user.generated.openapi.v1 - ${project.groupId}.user.generated.openapi.v1.dto - ${project.groupId}.user.generated.openapi.v1.api - ${project.groupId}.user.generated.openapi.v1.config - @lombok.Builder; @lombok.NoArgsConstructor; @lombok.AllArgsConstructor - java8-localdatetime - true - true - none - source - false - false - true - - - - - - - - - diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImpl.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImpl.java deleted file mode 100644 index 0053c3c..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImpl.java +++ /dev/null @@ -1,213 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest; - -import feign.FeignException; -import io.github.resilience4j.retry.annotation.Retry; -import it.pagopa.selfcare.commons.base.logging.LogUtils; -import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; -import it.pagopa.selfcare.mscore.connector.rest.client.PartyRegistryProxyRestClient; -import it.pagopa.selfcare.mscore.connector.rest.mapper.AooMapper; -import it.pagopa.selfcare.mscore.connector.rest.mapper.AsMapper; -import it.pagopa.selfcare.mscore.connector.rest.mapper.SaMapper; -import it.pagopa.selfcare.mscore.connector.rest.mapper.UoMapper; -import it.pagopa.selfcare.mscore.connector.rest.model.geotaxonomy.GeographicTaxonomiesResponse; -import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.*; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; -import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.registry_proxy.generated.openapi.v1.dto.InsuranceCompanyResource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.util.Assert; - -import java.util.ArrayList; -import java.util.List; - -import static it.pagopa.selfcare.mscore.constant.CustomError.CREATE_INSTITUTION_NOT_FOUND; - -@Slf4j -@Service -public class PartyRegistryProxyConnectorImpl implements PartyRegistryProxyConnector { - - public static final String CODE_IS_REQUIRED = "Code is required"; - private final PartyRegistryProxyRestClient restClient; - private final AooMapper aooMapper; - private final UoMapper uoMapper; - - private final SaMapper saMapper; - private final AsMapper asMapper; - - public PartyRegistryProxyConnectorImpl(PartyRegistryProxyRestClient restClient, AooMapper aooMapper, UoMapper uoMapper, SaMapper saMapper, AsMapper asMapper) { - this.restClient = restClient; - this.aooMapper = aooMapper; - this.uoMapper = uoMapper; - this.saMapper = saMapper; - this.asMapper = asMapper; - } - - @Override - public InstitutionProxyInfo getInstitutionById(String id) { - try { - ProxyInstitutionResponse response = restClient.getInstitutionById(id); - if (response == null) { - throw new ResourceNotFoundException(String.format(CREATE_INSTITUTION_NOT_FOUND.getMessage(), id), CREATE_INSTITUTION_NOT_FOUND.getCode()); - } - return convertInstitutionProxyInfo(response); - } catch (FeignException e) { - throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); - } - } - - @Override - public CategoryProxyInfo getCategory(String origin, String code) { - try { - ProxyCategoryResponse response = restClient.getCategory(origin, code); - return convertCategoryProxyInfo(response); - } catch (FeignException e) { - throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); - } - } - - @Override - public List getInstitutionsByLegal(String taxId) { - try { - InstitutionsByLegalResponse response = restClient.getInstitutionsByLegal(toInstitutionsByLegalRequest(taxId)); - return toInstitutionsByLegalResponse(response); - } catch (FeignException e) { - throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); - } - } - - @Override - public NationalRegistriesProfessionalAddress getLegalAddress(String taxId) { - try { - return restClient.getLegalAddress(taxId); - } catch (FeignException e) { - log.error("LegalAddress not found for taxId {}", taxId); - throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); - } - } - - private List toInstitutionsByLegalResponse(InstitutionsByLegalResponse response) { - List list = new ArrayList<>(); - if (response.getBusinesses() != null && !response.getBusinesses().isEmpty()) { - response.getBusinesses().forEach(institutions -> { - InstitutionByLegal institutionByLegal = new InstitutionByLegal(); - institutionByLegal.setBusinessName(institutions.getBusinessName()); - institutionByLegal.setBusinessTaxId(institutions.getBusinessTaxId()); - list.add(institutionByLegal); - }); - } - return list; - } - - private InstitutionsByLegalRequest toInstitutionsByLegalRequest(String taxId) { - InstitutionsByLegalRequest institutions = new InstitutionsByLegalRequest(); - LegalFilter legalFilter = new LegalFilter(); - legalFilter.setLegalTaxId(taxId); - institutions.setFilter(legalFilter); - return institutions; - } - - private InstitutionProxyInfo convertInstitutionProxyInfo(ProxyInstitutionResponse response) { - InstitutionProxyInfo info = new InstitutionProxyInfo(); - info.setId(response.getId()); - info.setOriginId(response.getOriginId()); - info.setO(response.getO()); - info.setOu(response.getOu()); - info.setAoo(response.getAoo()); - info.setTaxCode(response.getTaxCode()); - info.setCategory(response.getCategory()); - info.setDescription(response.getDescription()); - info.setDigitalAddress(response.getDigitalAddress()); - info.setAddress(response.getAddress()); - info.setZipCode(response.getZipCode()); - info.setOrigin(response.getOrigin()); - info.setIstatCode(response.getIstatCode()); - return info; - } - - private CategoryProxyInfo convertCategoryProxyInfo(ProxyCategoryResponse response) { - CategoryProxyInfo info = new CategoryProxyInfo(); - info.setCode(response.getCode()); - info.setName(response.getName()); - info.setKind(response.getKind()); - info.setOrigin(response.getOrigin()); - return info; - } - - @Override - @Retry(name = "retryTimeout") - public GeographicTaxonomies getExtByCode(String code) { - log.debug(LogUtils.CONFIDENTIAL_MARKER, "getExtByCode code = {}", code); - Assert.hasText(code, CODE_IS_REQUIRED); - GeographicTaxonomiesResponse result = restClient.getExtByCode(code); - log.debug(LogUtils.CONFIDENTIAL_MARKER, "getExtByCode result = {}", result); - return toGeoTaxonomies(result); - } - - @Override - public AreaOrganizzativaOmogenea getAooById(String aooId) { - log.debug("getAooById id = {}", aooId); - Assert.hasText(aooId, CODE_IS_REQUIRED); - AooResponse result = restClient.getAooById(aooId); - log.debug("getAooById id = {}", aooId); - return aooMapper.toEntity(result); - } - - @Override - public UnitaOrganizzativa getUoById(String uoId) { - log.debug("getUoById id = {}", uoId); - Assert.hasText(uoId, CODE_IS_REQUIRED); - UoResponse result = restClient.getUoById(uoId); - log.debug("getUoById id = {}", uoId); - return uoMapper.toEntity(result); - } - - @Override - public SaResource getSAFromAnac(String taxId) { - try { - log.debug("getSaByTaxId = {}", taxId); - Assert.hasText(taxId, "TaxId is required"); - PdndResponse result = restClient.getSaByTaxId(taxId); - log.debug("getSaByTaxId = {}", taxId); - if (result != null) { - return saMapper.toResource(result); - } - throw new ResourceNotFoundException(String.format(CREATE_INSTITUTION_NOT_FOUND.getMessage(), taxId), CREATE_INSTITUTION_NOT_FOUND.getCode()); - } catch (FeignException e) { - throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); - } - } - - @Override - public ASResource getASFromIvass(String ivassCode) { - try { - if (ivassCode.matches("\\w*")) { log.debug("getASFromIvass = {}", ivassCode); } - Assert.hasText(ivassCode, "IvassCode is required"); - ResponseEntity result = restClient._searchByOriginIdUsingGET(ivassCode); - if (result != null) { - return asMapper.toResource(result.getBody()); - } - throw new ResourceNotFoundException(String.format(CREATE_INSTITUTION_NOT_FOUND.getMessage(), ivassCode), CREATE_INSTITUTION_NOT_FOUND.getCode()); - } catch (FeignException e) { - throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); - } - } - - private GeographicTaxonomies toGeoTaxonomies(GeographicTaxonomiesResponse result) { - GeographicTaxonomies geographicTaxonomies = new GeographicTaxonomies(); - geographicTaxonomies.setDescription(result.getDescription()); - geographicTaxonomies.setGeotaxId(result.getGeotaxId()); - geographicTaxonomies.setEnable(result.isEnable()); - geographicTaxonomies.setRegionId(result.getRegionId()); - geographicTaxonomies.setProvinceId(result.getProvinceId()); - geographicTaxonomies.setProvinceAbbreviation(result.getProvinceAbbreviation()); - geographicTaxonomies.setCountry(result.getCountry()); - geographicTaxonomies.setCountryAbbreviation(result.getCountryAbbreviation()); - geographicTaxonomies.setIstatCode(result.getIstatCode()); - return geographicTaxonomies; - } -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImpl.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImpl.java deleted file mode 100644 index 7f73630..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImpl.java +++ /dev/null @@ -1,38 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest; - -import it.pagopa.selfcare.commons.base.logging.LogUtils; -import it.pagopa.selfcare.mscore.api.ProductConnector; -import it.pagopa.selfcare.product.entity.Product; -import it.pagopa.selfcare.product.service.ProductService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.util.Assert; - -@Slf4j -@Service -public class ProductConnectorImpl implements ProductConnector { - - private final ProductService productService; - - public ProductConnectorImpl(ProductService productService) { - this.productService = productService; - } - - @Override - public Product getProductById(String productId) { - log.debug(LogUtils.CONFIDENTIAL_MARKER, "getProductById productId = {}", productId); - Assert.hasText(productId, "A productId is required"); - Product result = productService.getProduct(productId); - log.debug(LogUtils.CONFIDENTIAL_MARKER, "getProductById result = {}", result); - return result; - } - - @Override - public Product getProductValidById(String productId) { - log.debug(LogUtils.CONFIDENTIAL_MARKER, "getProductValidById productId = {}", productId); - Assert.hasText(productId, "A productId is required"); - Product result = productService.getProductIsValid(productId); - log.debug(LogUtils.CONFIDENTIAL_MARKER, "getProductValidById result = {}", result); - return result; - } -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImpl.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImpl.java deleted file mode 100644 index 0abeec9..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImpl.java +++ /dev/null @@ -1,41 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest; - -import it.pagopa.selfcare.mscore.api.UserApiConnector; -import it.pagopa.selfcare.mscore.connector.rest.client.UserApiRestClient; -import it.pagopa.selfcare.mscore.connector.rest.client.UserInstitutionApiRestClient; -import it.pagopa.selfcare.mscore.connector.rest.mapper.UserMapperClient; -import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@Slf4j -public class UserApiConnectorImpl implements UserApiConnector { - - private final UserApiRestClient userApiRestClient; - - private final UserInstitutionApiRestClient userInstitutionApiRestClient; - - private final UserMapperClient userMapper; - - public UserApiConnectorImpl(UserApiRestClient userApiRestClient, UserInstitutionApiRestClient userInstitutionApiRestClient, UserMapperClient userMapper) { - this.userApiRestClient = userApiRestClient; - this.userInstitutionApiRestClient = userInstitutionApiRestClient; - this.userMapper = userMapper; - } - - @Override - public List getUserEmails(String institutionId, String productId){ - ResponseEntity> userEmails = userApiRestClient._usersEmailsGet(institutionId, productId); - return userEmails.getBody(); - } - - @Override - public void updateUserInstitution(String institutionId, InstitutionUpdate institutionUpdate){ - userInstitutionApiRestClient._institutionsInstitutionIdPut(institutionId, userMapper.toUpdateDescriptionDto(institutionUpdate)); - } - -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImpl.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImpl.java deleted file mode 100644 index 8059bf1..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest; - -import it.pagopa.selfcare.commons.base.logging.LogUtils; -import it.pagopa.selfcare.mscore.api.UserRegistryConnector; -import it.pagopa.selfcare.mscore.connector.rest.client.UserRegistryRestClient; -import it.pagopa.selfcare.mscore.connector.rest.mapper.UserMapperClient; -import it.pagopa.selfcare.mscore.model.user.User; -import it.pagopa.selfcare.user_registry.generated.openapi.v1.dto.*; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.util.Assert; - -import java.util.Map; -import java.util.Optional; - - -@Slf4j -@Service -public class UserRegistryConnectorImpl implements UserRegistryConnector { - - private final UserRegistryRestClient restClient; - private final UserMapperClient userMapper; - public static final String USERS_FIELD_LIST = "fiscalCode,name,familyName,workContacts"; - public static final String USERS_FIELD_LIST_WITHOUT_FISCAL_CODE = "name,familyName,workContacts"; - - @Autowired - public UserRegistryConnectorImpl(UserRegistryRestClient restClient, UserMapperClient userMapper) { - this.restClient = restClient; - this.userMapper = userMapper; - } - - @Override - public User getUserByInternalIdWithFiscalCode(String userId) { - log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalIdWithFiscalCode userId = {}", userId); - Assert.hasText(userId, "A userId is required"); - ResponseEntity result = restClient._findByIdUsingGET(USERS_FIELD_LIST, userId); - User user = userMapper.toUser(result.getBody()); - log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalIdWithFiscalCode result = {}", result); - return user; - } - - @Override - public User getUserByInternalId(String userId) { - log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalId userId = {}", userId); - Assert.hasText(userId, "A userId is required"); - ResponseEntity result = restClient._findByIdUsingGET(USERS_FIELD_LIST_WITHOUT_FISCAL_CODE, userId); - User user = userMapper.toUser(result.getBody()); - log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalId result = {}", result); - return user; - } - - @Override - public User getUserByInternalIdWithCustomFields(String userId, String fieldList) { - log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalId userId = {}", userId); - Assert.hasText(userId, "A userId is required"); - ResponseEntity result = restClient._findByIdUsingGET(fieldList, userId); - User user = userMapper.toUser(result.getBody()); - log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalId result = {}", result); - return user; - } - - - @Override - public User getUserByFiscalCode(String fiscalCode) { - log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByFiscalCode fiscalCode = {}", fiscalCode); - Assert.hasText(fiscalCode, "A userId is required"); - UserResource result = restClient._searchUsingPOST(USERS_FIELD_LIST, new UserSearchDto().fiscalCode(fiscalCode)) - .getBody(); - User user = userMapper.toUser(result); - log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByFiscalCode result = {}", result); - return user; - } - - @Override - public User persistUserUsingPatch(String name, String familyName, String fiscalCode, String email, String institutionId) { - log.debug(LogUtils.CONFIDENTIAL_MARKER, "persistUserByFiscalCode fiscalCode = {}", fiscalCode); - Assert.hasText(fiscalCode, "A fiscalCode is required"); - - SaveUserDto.SaveUserDtoBuilder saveUserDtoBuilder = SaveUserDto.builder() - .name(CertifiableFieldResourceOfstring.builder() - .value(name) - .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) - .build()) - .familyName(CertifiableFieldResourceOfstring.builder() - .value(familyName) - .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) - .build()) - .fiscalCode(fiscalCode); - - Optional.ofNullable(email).ifPresent(emailValue -> saveUserDtoBuilder - .workContacts(Map.of(institutionId, WorkContactResource.builder() - .email(CertifiableFieldResourceOfstring.builder() - .value(emailValue) - .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) - .build()) - .build()))); - - UserId result = restClient._saveUsingPATCH(saveUserDtoBuilder.build()).getBody(); - log.debug(LogUtils.CONFIDENTIAL_MARKER, "persistUserByFiscalCode result = {}", result); - return userMapper.fromUserId(result); - } - - @Override - public User persistUserWorksContractUsingPatch(String fiscalCode, String email, String institutionId) { - log.debug(LogUtils.CONFIDENTIAL_MARKER, "persistUserByFiscalCode fiscalCode = {}", fiscalCode); - Assert.hasText(fiscalCode, "A fiscalCode is required"); - UserId result = restClient._saveUsingPATCH(SaveUserDto.builder() - .fiscalCode(fiscalCode) - .workContacts(Map.of(institutionId, WorkContactResource.builder() - .email(CertifiableFieldResourceOfstring.builder() - .value(email) - .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) - .build()) - .build())) - .build()) - .getBody(); - log.debug(LogUtils.CONFIDENTIAL_MARKER, "persistUserByFiscalCode result = {}", result); - return userMapper.fromUserId(result); - } - - -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/PartyRegistryProxyRestClient.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/PartyRegistryProxyRestClient.java deleted file mode 100644 index 2297aa7..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/PartyRegistryProxyRestClient.java +++ /dev/null @@ -1,47 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.client; - -import it.pagopa.selfcare.mscore.connector.rest.model.geotaxonomy.GeographicTaxonomiesResponse; -import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.*; -import it.pagopa.selfcare.mscore.model.institution.NationalRegistriesProfessionalAddress; -import it.pagopa.selfcare.registry_proxy.generated.openapi.v1.api.InsuranceCompaniesApi; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.*; - -import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; - -@FeignClient(name = "${rest-client.party-registry-proxy.serviceCode}", url = "${rest-client.party-registry-proxy.base-url}") -public interface PartyRegistryProxyRestClient extends InsuranceCompaniesApi { - - @GetMapping(value = "${rest-client.party-registry-proxy.getInstitutionById.path}", consumes = APPLICATION_JSON_VALUE) - @ResponseBody - ProxyInstitutionResponse getInstitutionById(@PathVariable("institutionId") String id); - - @GetMapping(value = "${rest-client.party-registry-proxy.getCategory.path}", consumes = APPLICATION_JSON_VALUE) - @ResponseBody - ProxyCategoryResponse getCategory(@PathVariable("origin") String origin, @PathVariable("code") String code); - - @PostMapping(value = "${rest-client.party-registry-proxy.getInstitutionsByLegal.path}", consumes = APPLICATION_JSON_VALUE) - @ResponseBody - InstitutionsByLegalResponse getInstitutionsByLegal(@RequestBody InstitutionsByLegalRequest institutions); - - @GetMapping(value = "${rest-client.party-registry-proxy.getLegalAddress.path}", consumes = APPLICATION_JSON_VALUE) - @ResponseBody - NationalRegistriesProfessionalAddress getLegalAddress(@RequestParam(value = "taxId") String taxId); - - @GetMapping(value = "${rest-client.party-registry-proxy.geo-taxonomies.getByCode.path}", consumes = APPLICATION_JSON_VALUE) - @ResponseBody - GeographicTaxonomiesResponse getExtByCode(@PathVariable(value = "geotax_id") String code); - - @GetMapping(value = "${rest-client.party-registry-proxy.aoo.getByCode.path}", consumes = APPLICATION_JSON_VALUE) - @ResponseBody - AooResponse getAooById(@PathVariable(value = "aooId") String aooId); - - @GetMapping(value = "${rest-client.party-registry-proxy.uo.getByCode.path}", consumes = APPLICATION_JSON_VALUE) - @ResponseBody - UoResponse getUoById(@PathVariable(value = "uoId") String uoId); - - @GetMapping(value = "${rest-client.party-registry-proxy.sa.getByTaxId.path}", consumes = APPLICATION_JSON_VALUE) - @ResponseBody - PdndResponse getSaByTaxId(@PathVariable(value = "taxId") String taxId); - -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserApiRestClient.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserApiRestClient.java deleted file mode 100644 index 8e26874..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserApiRestClient.java +++ /dev/null @@ -1,8 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.client; - -import it.pagopa.selfcare.user.generated.openapi.v1.api.UserControllerApi; -import org.springframework.cloud.openfeign.FeignClient; - -@FeignClient(name = "${rest-client.user-ms.serviceCode}", url = "${rest-client.user-ms.base-url}") -public interface UserApiRestClient extends UserControllerApi { -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserInstitutionApiRestClient.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserInstitutionApiRestClient.java deleted file mode 100644 index e1608dd..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserInstitutionApiRestClient.java +++ /dev/null @@ -1,8 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.client; - -import it.pagopa.selfcare.user.generated.openapi.v1.api.InstitutionControllerApi; -import org.springframework.cloud.openfeign.FeignClient; - -@FeignClient(name = "${rest-client.user-ms.institution.serviceCode}", url = "${rest-client.user-ms.base-url}") -public interface UserInstitutionApiRestClient extends InstitutionControllerApi { -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserRegistryRestClient.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserRegistryRestClient.java deleted file mode 100644 index 2fff4d2..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserRegistryRestClient.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.client; - - -import it.pagopa.selfcare.user_registry.generated.openapi.v1.api.UserApi; -import org.springframework.cloud.openfeign.FeignClient; - - -@FeignClient(name = "${rest-client.user-registry.serviceCode}", url = "${rest-client.user-registry.base-url}") -public interface UserRegistryRestClient extends UserApi { - -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/FeignClientConfig.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/FeignClientConfig.java deleted file mode 100644 index 6a5691d..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/FeignClientConfig.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.config; - - -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; - -@Configuration -@PropertySource("classpath:config/feign-client.properties") -public class FeignClientConfig { - -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/PartyRegistryProxyRestClientConfig.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/PartyRegistryProxyRestClientConfig.java deleted file mode 100644 index 8b7e6ce..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/PartyRegistryProxyRestClientConfig.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.config; - -import it.pagopa.selfcare.commons.connector.rest.config.RestClientBaseConfig; -import it.pagopa.selfcare.mscore.connector.rest.client.PartyRegistryProxyRestClient; -import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.PropertySource; - -@Configuration -@Import(RestClientBaseConfig.class) -@EnableFeignClients(clients = PartyRegistryProxyRestClient.class) -@PropertySource("classpath:config/party-registry-proxy-rest-client.properties") -public class PartyRegistryProxyRestClientConfig { - -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserApiRestClientConfig.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserApiRestClientConfig.java deleted file mode 100644 index c3aa77c..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserApiRestClientConfig.java +++ /dev/null @@ -1,15 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.config; - -import it.pagopa.selfcare.commons.connector.rest.config.RestClientBaseConfig; -import it.pagopa.selfcare.mscore.connector.rest.client.UserApiRestClient; -import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.PropertySource; - -@Configuration -@Import(RestClientBaseConfig.class) -@EnableFeignClients(clients = UserApiRestClient.class) -@PropertySource("classpath:config/user-rest-client.properties") -public class UserApiRestClientConfig { -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserInstitutionApiRestClientConfig.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserInstitutionApiRestClientConfig.java deleted file mode 100644 index f07eac2..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserInstitutionApiRestClientConfig.java +++ /dev/null @@ -1,15 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.config; - -import it.pagopa.selfcare.commons.connector.rest.config.RestClientBaseConfig; -import it.pagopa.selfcare.mscore.connector.rest.client.UserInstitutionApiRestClient; -import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.PropertySource; - -@Configuration -@Import(RestClientBaseConfig.class) -@EnableFeignClients(clients = UserInstitutionApiRestClient.class) -@PropertySource("classpath:config/user-rest-client.properties") -public class UserInstitutionApiRestClientConfig { -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserRegistryRestClientConfig.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserRegistryRestClientConfig.java deleted file mode 100644 index 727a484..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserRegistryRestClientConfig.java +++ /dev/null @@ -1,15 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.config; - -import it.pagopa.selfcare.commons.connector.rest.config.RestClientBaseConfig; -import it.pagopa.selfcare.mscore.connector.rest.client.UserRegistryRestClient; -import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.PropertySource; - -@Configuration -@Import({RestClientBaseConfig.class}) -@EnableFeignClients(clients = UserRegistryRestClient.class) -@PropertySource("classpath:config/user-registry-rest-client.properties") -class UserRegistryRestClientConfig { -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoder.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoder.java deleted file mode 100644 index 00fb137..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoder.java +++ /dev/null @@ -1,22 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.decoder; - -import feign.Response; -import feign.codec.ErrorDecoder; -import it.pagopa.selfcare.mscore.exception.BadGatewayException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.exception.ServiceUnavailableException; - -public class FeignErrorDecoder extends ErrorDecoder.Default { - - @Override - public Exception decode(String methodKey, Response response) { - if (response.status() == 503 || response.status() == 504) - throw new ServiceUnavailableException(); - if(response.status() >= 500 && response.status() <= 509) - throw new BadGatewayException(response.reason()); - if(response.status() == 404) - throw new ResourceNotFoundException(response.reason(), "0000"); - - return super.decode(methodKey, response); - } -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AooMapper.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AooMapper.java deleted file mode 100644 index 882107b..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AooMapper.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.mapper; - -import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.AooResponse; -import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; -import org.mapstruct.Mapper; - -@Mapper(componentModel = "spring") -public interface AooMapper { - - AreaOrganizzativaOmogenea toEntity(AooResponse response); -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AsMapper.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AsMapper.java deleted file mode 100644 index 3be6ac2..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AsMapper.java +++ /dev/null @@ -1,12 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.mapper; - -import it.pagopa.selfcare.mscore.model.institution.ASResource; -import it.pagopa.selfcare.registry_proxy.generated.openapi.v1.dto.InsuranceCompanyResource; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -@Mapper(componentModel = "spring") -public interface AsMapper { - @Mapping(target = "origin", source="origin.value") - ASResource toResource(InsuranceCompanyResource response); -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/SaMapper.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/SaMapper.java deleted file mode 100644 index 3bf756f..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/SaMapper.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.mapper; - -import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.PdndResponse; -import it.pagopa.selfcare.mscore.model.institution.SaResource; -import org.mapstruct.Mapper; - -@Mapper(componentModel = "spring") -public interface SaMapper { - - SaResource toResource(PdndResponse response); -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UoMapper.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UoMapper.java deleted file mode 100644 index ebf2ef0..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UoMapper.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.mapper; - -import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.AooResponse; -import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.UoResponse; -import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; -import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; -import org.mapstruct.Mapper; - -@Mapper(componentModel = "spring") -public interface UoMapper { - - UnitaOrganizzativa toEntity(UoResponse response); -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UserMapperClient.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UserMapperClient.java deleted file mode 100644 index ea13619..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UserMapperClient.java +++ /dev/null @@ -1,26 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.mapper; - -import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; -import it.pagopa.selfcare.mscore.model.user.User; -import it.pagopa.selfcare.user.generated.openapi.v1.dto.UpdateDescriptionDto; -import it.pagopa.selfcare.user_registry.generated.openapi.v1.dto.UserId; -import it.pagopa.selfcare.user_registry.generated.openapi.v1.dto.UserResource; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - - - - -@Mapper(componentModel = "spring") -public interface UserMapperClient { - - User toUser (UserResource userResource); - - @Mapping(target = "id", source = "userId.id") - User fromUserId (UserId userId); - - @Mapping(target = "institutionDescription", source = "description") - @Mapping(target = "institutionRootName", source = "parentDescription") - UpdateDescriptionDto toUpdateDescriptionDto (InstitutionUpdate institutionUpdate); - -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/geotaxonomy/GeographicTaxonomiesResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/geotaxonomy/GeographicTaxonomiesResponse.java deleted file mode 100644 index 1672eab..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/geotaxonomy/GeographicTaxonomiesResponse.java +++ /dev/null @@ -1,24 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.model.geotaxonomy; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -@Data -public class GeographicTaxonomiesResponse { - @JsonProperty("code") - private String geotaxId; //REQUIRED - @JsonProperty("desc") - private String description; - @JsonProperty("istat_code")//REQUIRED - private String istatCode; - @JsonProperty("province_id") - private String provinceId; - @JsonProperty("province_abbreviation") - private String provinceAbbreviation; - @JsonProperty("region_id") - private String regionId; - private String country; - @JsonProperty("country_abbreviation") - private String countryAbbreviation; - private boolean enable; //REQUIRED -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AooResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AooResponse.java deleted file mode 100644 index 84d8d44..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AooResponse.java +++ /dev/null @@ -1,38 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; - -import com.fasterxml.jackson.annotation.JsonProperty; -import it.pagopa.selfcare.mscore.constant.Origin; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -@Data -public class AooResponse { - - private String id; - private String codiceIpa; - private String denominazioneEnte; - private String codiceFiscaleEnte; - private String codiceUniAoo; - private String denominazioneAoo; - private String mail1; - private String codAoo; - private Origin origin; - - private String dataIstituzione; - private String nomeResponsabile; - private String cognomeResponsabile; - private String mailResponsabile; - private String telefonoResponsabile; - private String codiceComuneISTAT; - private String codiceCatastaleComune; - private String CAP; - private String indirizzo; - private String telefono; - private String fax; - private String tipoMail1; - private String protocolloInformatico; - private String URIProtocolloInformatico; - private String dataAggiornamento; -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AsResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AsResponse.java deleted file mode 100644 index ab04dfa..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AsResponse.java +++ /dev/null @@ -1,17 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; - -import it.pagopa.selfcare.mscore.constant.Origin; -import lombok.Data; - -@Data -public class AsResponse { - private String id; - private String originId; - private String taxCode; - private String description; - private String digitalAddress; - private String workType; - private String registerType; - private String address; - private Origin origin; -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/Institutions.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/Institutions.java deleted file mode 100644 index 3a620d4..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/Institutions.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; - -import lombok.Data; - -@Data -public class Institutions { - private String businessName; - private String businessTaxId; -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalRequest.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalRequest.java deleted file mode 100644 index 1339e17..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalRequest.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; - -import lombok.Data; - -@Data -public class InstitutionsByLegalRequest { - - private LegalFilter filter; -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalResponse.java deleted file mode 100644 index a02dee3..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; - -import lombok.Data; - -import java.util.List; - -@Data -public class InstitutionsByLegalResponse { - - private List businesses; - private String legalTaxId; - private String requestDateTime; - -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/LegalFilter.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/LegalFilter.java deleted file mode 100644 index 77ffb46..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/LegalFilter.java +++ /dev/null @@ -1,8 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; - -import lombok.Data; - -@Data -public class LegalFilter { - private String legalTaxId; -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/PdndResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/PdndResponse.java deleted file mode 100644 index bc25aa1..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/PdndResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; - -import lombok.Data; - -@Data -public class PdndResponse { - private String id; - private String originId; - private boolean anacEngaged; - private boolean anacEnabled; - private String taxCode; - private String description; - private String digitalAddress; -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyCategoryResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyCategoryResponse.java deleted file mode 100644 index bb1802a..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyCategoryResponse.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; - -import lombok.Data; - -@Data -public class ProxyCategoryResponse { - private String code; - private String name; - private String kind; - private String origin; -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyInstitutionResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyInstitutionResponse.java deleted file mode 100644 index d3245d4..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyInstitutionResponse.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; - -import lombok.Data; - -@Data -public class ProxyInstitutionResponse { - private String id; - private String originId; - private String o; - private String ou; - private String aoo; - private String taxCode; - private String category; - private String description; - private String digitalAddress; - private String address; - private String zipCode; - private String origin; - private String istatCode; -} diff --git a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/UoResponse.java b/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/UoResponse.java deleted file mode 100644 index 27befd6..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/UoResponse.java +++ /dev/null @@ -1,35 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; - -import it.pagopa.selfcare.mscore.constant.Origin; -import lombok.Data; - -@Data -public class UoResponse { - - private String id; - private String codiceIpa; - private String denominazioneEnte; - private String codiceFiscaleEnte; - private String codiceFiscaleSfe; - private String codiceUniUo; - private String codiceUniUoPadre; - private String codiceUniAoo; - private String descrizioneUo; - private String mail1; - private Origin origin; - - private String dataIstituzione; - private String nomeResponsabile; - private String cognomeResponsabile; - private String mailResponsabile; - private String telefonoResponsabile; - private String codiceComuneISTAT; - private String codiceCatastaleComune; - private String CAP; - private String indirizzo; - private String telefono; - private String fax; - private String tipoMail1; - private String url; - private String dataAggiornamento; -} diff --git a/apps/institution-ms-new/connector/rest/src/main/resources/config/feign-client.properties b/apps/institution-ms-new/connector/rest/src/main/resources/config/feign-client.properties deleted file mode 100644 index cf0dfbb..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/resources/config/feign-client.properties +++ /dev/null @@ -1,2 +0,0 @@ -feign.okhttp.enabled=true -feign.autoconfiguration.jackson.enabled=true \ No newline at end of file diff --git a/apps/institution-ms-new/connector/rest/src/main/resources/config/party-registry-proxy-rest-client.properties b/apps/institution-ms-new/connector/rest/src/main/resources/config/party-registry-proxy-rest-client.properties deleted file mode 100644 index e7f395d..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/resources/config/party-registry-proxy-rest-client.properties +++ /dev/null @@ -1,21 +0,0 @@ -rest-client.party-registry-proxy.serviceCode=party-registry-proxy -rest-client.party-registry-proxy.base-url=${USERVICE_PARTY_REGISTRY_PROXY_URL} -rest-client.party-registry-proxy.getInstitutionById.path=/institutions/{institutionId} -rest-client.party-registry-proxy.getCategory.path=/origins/{origin}/categories/{code} -rest-client.party-registry-proxy.getInstitutionsByLegal.path=/info-camere/institutions -rest-client.party-registry-proxy.getLegalAddress.path=/national-registries/legal-address -rest-client.party-registry-proxy.geo-taxonomies.getByCode.path=/geotaxonomies/{geotax_id} -rest-client.party-registry-proxy.aoo.getByCode.path=/aoo/{aooId} -rest-client.party-registry-proxy.uo.getByCode.path=/uo/{uoId} -rest-client.party-registry-proxy.sa.getByTaxId.path=/stations/{taxId} - -feign.client.config.party-registry-proxy.requestInterceptors[0]=it.pagopa.selfcare.commons.connector.rest.interceptor.AuthorizationHeaderInterceptor -feign.client.config.party-registry-proxy.requestInterceptors[1]=it.pagopa.selfcare.commons.connector.rest.interceptor.PartyTraceIdInterceptor -feign.client.config.party-registry-proxy.connectTimeout=${PARTY_REGISTRY_PROXY_CLIENT_CONNECT_TIMEOUT:${REST_CLIENT_CONNECT_TIMEOUT:5000}} -feign.client.config.party-registry-proxy.readTimeout=${PARTY_REGISTRY_PROXY_CLIENT_READ_TIMEOUT:${REST_CLIENT_READ_TIMEOUT:5000}} -feign.client.config.party-registry-proxy.loggerLevel=${PARTY_REGISTRY_PROXY_LOG_LEVEL:${REST_CLIENT_LOG_LEVEL:FULL}} - -feign.client.config.party-registry-proxy.errorDecoder=it.pagopa.selfcare.mscore.connector.rest.decoder.FeignErrorDecoder - - - diff --git a/apps/institution-ms-new/connector/rest/src/main/resources/config/user-registry-rest-client.properties b/apps/institution-ms-new/connector/rest/src/main/resources/config/user-registry-rest-client.properties deleted file mode 100644 index 5285e06..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/resources/config/user-registry-rest-client.properties +++ /dev/null @@ -1,3 +0,0 @@ -rest-client.user-registry.serviceCode=user-registry -rest-client.user-registry.base-url=${USERVICE_USER_REGISTRY_URL} -feign.client.config.user-registry.defaultRequestHeaders.x-api-key[0]=${USER_REGISTRY_API_KEY} diff --git a/apps/institution-ms-new/connector/rest/src/main/resources/config/user-rest-client.properties b/apps/institution-ms-new/connector/rest/src/main/resources/config/user-rest-client.properties deleted file mode 100644 index b15e498..0000000 --- a/apps/institution-ms-new/connector/rest/src/main/resources/config/user-rest-client.properties +++ /dev/null @@ -1,14 +0,0 @@ -rest-client.user-ms.base-url=${SELFCARE_USER_URL:http://localhost:8080} -rest-client.user-ms.serviceCode=user-ms -rest-client.user-ms.institution.serviceCode=user-institution-ms -rest-client.user-permission.serviceCode=user-permission -feign.client.config.user-ms.requestInterceptors[0]=it.pagopa.selfcare.commons.connector.rest.interceptor.AuthorizationHeaderInterceptor -feign.client.config.user-ms.connectTimeout=${SELFCARE_USER_REST_CLIENT_CONNECT_TIMEOUT:${REST_CLIENT_CONNECT_TIMEOUT:5000}} -feign.client.config.user-ms.readTimeout=${SELFCARE_USER_REST_CLIENT_READ_TIMEOUT:${REST_CLIENT_READ_TIMEOUT:5000}} -feign.client.config.user-ms.loggerLevel=${SELFCARE_USER_REST_CLIENT_LOGGER_LEVEL:${REST_CLIENT_LOGGER_LEVEL:FULL}} -feign.client.config.user-ms.errorDecoder=it.pagopa.selfcare.mscore.connector.rest.decoder.FeignErrorDecoder -feign.client.config.user-institution-ms.requestInterceptors[0]=it.pagopa.selfcare.commons.connector.rest.interceptor.AuthorizationHeaderInterceptor -feign.client.config.user-institution-ms.connectTimeout=${SELFCARE_USER_REST_CLIENT_CONNECT_TIMEOUT:${REST_CLIENT_CONNECT_TIMEOUT:5000}} -feign.client.config.user-institution-ms.readTimeout=${SELFCARE_USER_REST_CLIENT_READ_TIMEOUT:${REST_CLIENT_READ_TIMEOUT:5000}} -feign.client.config.user-institution-ms.loggerLevel=${SELFCARE_USER_REST_CLIENT_LOGGER_LEVEL:${REST_CLIENT_LOGGER_LEVEL:FULL}} -feign.client.config.user-institution-ms.errorDecoder=it.pagopa.selfcare.mscore.connector.rest.decoder.FeignErrorDecoder diff --git a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImplTest.java b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImplTest.java deleted file mode 100644 index 0c86b3b..0000000 --- a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImplTest.java +++ /dev/null @@ -1,591 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest; - -import feign.FeignException; -import it.pagopa.selfcare.mscore.connector.rest.client.PartyRegistryProxyRestClient; -import it.pagopa.selfcare.mscore.connector.rest.mapper.*; -import it.pagopa.selfcare.mscore.connector.rest.model.geotaxonomy.GeographicTaxonomiesResponse; -import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.*; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; -import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.registry_proxy.generated.openapi.v1.dto.InsuranceCompanyResource; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.api.function.Executable; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.ArrayList; -import java.util.List; - -import static it.pagopa.selfcare.commons.utils.TestUtils.checkNotNullFields; -import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -@ExtendWith(SpringExtension.class) -class PartyRegistryProxyConnectorImplTest { - @InjectMocks - private PartyRegistryProxyConnectorImpl partyRegistryProxyConnectorImpl; - - @Mock - private PartyRegistryProxyRestClient partyRegistryProxyRestClient; - - @Spy - private AooMapper aooMapper = new AooMapperImpl(); - - @Spy - private UoMapper uoMapper = new UoMapperImpl(); - - @Spy - private SaMapper saMapper = new SaMapperImpl(); - @Spy - private AsMapper asMapper = new AsMapperImpl(); - - private final static AooResponse aooResponse; - private final static UoResponse uoResponse; - private final static PdndResponse pdndResponse; - private final static InsuranceCompanyResource asResponse; - - static { - aooResponse = new AooResponse(); - aooResponse.setCodAoo("codAoo"); - aooResponse.setId("id"); - aooResponse.setOrigin(Origin.IPA); - - uoResponse = new UoResponse(); - uoResponse.setCodiceUniUo("codiceUniUo"); - uoResponse.setId("id"); - uoResponse.setOrigin(Origin.IPA); - pdndResponse = mockInstance(new PdndResponse()); - asResponse = mockInstance(new InsuranceCompanyResource()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionById(String)} - */ - @Test - void testGetInstitutionById() { - ProxyInstitutionResponse proxyInstitutionResponse = new ProxyInstitutionResponse(); - proxyInstitutionResponse.setAddress("42 Main St"); - proxyInstitutionResponse.setAoo("Aoo"); - proxyInstitutionResponse.setCategory("Category"); - proxyInstitutionResponse.setDescription("The characteristics of someone or something"); - proxyInstitutionResponse.setDigitalAddress("42 Main St"); - proxyInstitutionResponse.setId("42"); - proxyInstitutionResponse.setO("foo"); - proxyInstitutionResponse.setOrigin("Origin"); - proxyInstitutionResponse.setOriginId("42"); - proxyInstitutionResponse.setOu("Ou"); - proxyInstitutionResponse.setTaxCode("Tax Code"); - proxyInstitutionResponse.setZipCode("21654"); - when(partyRegistryProxyRestClient.getInstitutionById(any())).thenReturn(proxyInstitutionResponse); - InstitutionProxyInfo actualInstitutionById = partyRegistryProxyConnectorImpl.getInstitutionById("42"); - assertEquals("42 Main St", actualInstitutionById.getAddress()); - assertEquals("21654", actualInstitutionById.getZipCode()); - assertEquals("Tax Code", actualInstitutionById.getTaxCode()); - assertEquals("Ou", actualInstitutionById.getOu()); - assertEquals("42", actualInstitutionById.getOriginId()); - assertEquals("Origin", actualInstitutionById.getOrigin()); - assertEquals("foo", actualInstitutionById.getO()); - assertEquals("42", actualInstitutionById.getId()); - assertEquals("42 Main St", actualInstitutionById.getDigitalAddress()); - assertEquals("The characteristics of someone or something", actualInstitutionById.getDescription()); - assertEquals("Category", actualInstitutionById.getCategory()); - assertEquals("Aoo", actualInstitutionById.getAoo()); - verify(partyRegistryProxyRestClient).getInstitutionById(any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionById(String)} - */ - @Test - void testGetInstitutionById2() { - when(partyRegistryProxyRestClient.getInstitutionById(any())) - .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); - assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionById("42")); - verify(partyRegistryProxyRestClient).getInstitutionById(any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionById(String)} - */ - @Test - void testGetInstitutionById3() { - ProxyInstitutionResponse proxyInstitutionResponse = new ProxyInstitutionResponse(); - proxyInstitutionResponse.setAddress("42 Main St"); - proxyInstitutionResponse.setAoo("Aoo"); - proxyInstitutionResponse.setCategory("Category"); - proxyInstitutionResponse.setDescription("The characteristics of someone or something"); - proxyInstitutionResponse.setDigitalAddress("42 Main St"); - proxyInstitutionResponse.setId("42"); - proxyInstitutionResponse.setO("foo"); - proxyInstitutionResponse.setOrigin("Origin"); - proxyInstitutionResponse.setOriginId("42"); - proxyInstitutionResponse.setOu("Ou"); - proxyInstitutionResponse.setTaxCode("Tax Code"); - proxyInstitutionResponse.setZipCode("21654"); - when(partyRegistryProxyRestClient.getInstitutionById(any())).thenReturn(proxyInstitutionResponse); - InstitutionProxyInfo actualInstitutionById = partyRegistryProxyConnectorImpl.getInstitutionById("42"); - assertEquals("42 Main St", actualInstitutionById.getAddress()); - assertEquals("21654", actualInstitutionById.getZipCode()); - assertEquals("Tax Code", actualInstitutionById.getTaxCode()); - assertEquals("Ou", actualInstitutionById.getOu()); - assertEquals("42", actualInstitutionById.getOriginId()); - assertEquals("Origin", actualInstitutionById.getOrigin()); - assertEquals("foo", actualInstitutionById.getO()); - assertEquals("42", actualInstitutionById.getId()); - assertEquals("42 Main St", actualInstitutionById.getDigitalAddress()); - assertEquals("The characteristics of someone or something", actualInstitutionById.getDescription()); - assertEquals("Category", actualInstitutionById.getCategory()); - assertEquals("Aoo", actualInstitutionById.getAoo()); - verify(partyRegistryProxyRestClient).getInstitutionById(any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionById(String)} - */ - @Test - void testGetInstitutionById4() { - when(partyRegistryProxyRestClient.getInstitutionById(any())) - .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); - assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionById("42")); - verify(partyRegistryProxyRestClient).getInstitutionById(any()); - } - - @Test - void testGetInstitutionById5() { - FeignException feignException = mock(FeignException.class); - when(partyRegistryProxyRestClient.getInstitutionById(any())) - .thenThrow(feignException); - assertThrows(MsCoreException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionById("42")); - verify(partyRegistryProxyRestClient).getInstitutionById(any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getCategory(String, String)} - */ - @Test - void testGetCategory() { - ProxyCategoryResponse proxyCategoryResponse = new ProxyCategoryResponse(); - proxyCategoryResponse.setCode("Code"); - proxyCategoryResponse.setKind("Kind"); - proxyCategoryResponse.setName("Name"); - proxyCategoryResponse.setOrigin("Origin"); - when(partyRegistryProxyRestClient.getCategory(any(), any())).thenReturn(proxyCategoryResponse); - CategoryProxyInfo actualCategory = partyRegistryProxyConnectorImpl.getCategory("Origin", "Code"); - assertEquals("Code", actualCategory.getCode()); - assertEquals("Origin", actualCategory.getOrigin()); - assertEquals("Name", actualCategory.getName()); - assertEquals("Kind", actualCategory.getKind()); - verify(partyRegistryProxyRestClient).getCategory(any(), any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getCategory(String, String)} - */ - @Test - void testGetCategory2() { - when(partyRegistryProxyRestClient.getCategory(any(), any())) - .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); - assertThrows(ResourceNotFoundException.class, - () -> partyRegistryProxyConnectorImpl.getCategory("Origin", "Code")); - verify(partyRegistryProxyRestClient).getCategory(any(), any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getCategory(String, String)} - */ - @Test - void testGetCategory3() { - ProxyCategoryResponse proxyCategoryResponse = new ProxyCategoryResponse(); - proxyCategoryResponse.setCode("Code"); - proxyCategoryResponse.setKind("Kind"); - proxyCategoryResponse.setName("Name"); - proxyCategoryResponse.setOrigin("Origin"); - when(partyRegistryProxyRestClient.getCategory(any(), any())).thenReturn(proxyCategoryResponse); - CategoryProxyInfo actualCategory = partyRegistryProxyConnectorImpl.getCategory("Origin", "Code"); - assertEquals("Code", actualCategory.getCode()); - assertEquals("Origin", actualCategory.getOrigin()); - assertEquals("Name", actualCategory.getName()); - assertEquals("Kind", actualCategory.getKind()); - verify(partyRegistryProxyRestClient).getCategory(any(), any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getCategory(String, String)} - */ - @Test - void testGetCategory4() { - when(partyRegistryProxyRestClient.getCategory(any(), any())) - .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); - assertThrows(ResourceNotFoundException.class, - () -> partyRegistryProxyConnectorImpl.getCategory("Origin", "Code")); - verify(partyRegistryProxyRestClient).getCategory(any(), any()); - } - - @Test - void testGetCategory5() { - FeignException feignException = mock(FeignException.class); - when(partyRegistryProxyRestClient.getCategory(any(), any())) - .thenThrow(feignException); - assertThrows(MsCoreException.class, () -> partyRegistryProxyConnectorImpl.getCategory("origin", "code")); - verify(partyRegistryProxyRestClient).getCategory(any(), any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} - */ - @Test - void testGetInstitutionsByLegal() { - InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); - institutionsByLegalResponse.setBusinesses(new ArrayList<>()); - institutionsByLegalResponse.setLegalTaxId("42"); - institutionsByLegalResponse.setRequestDateTime("2020-03-01"); - when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) - .thenReturn(institutionsByLegalResponse); - assertTrue(partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42").isEmpty()); - verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} - */ - @Test - void testGetInstitutionsByLegal2() { - Institutions institutions = new Institutions(); - institutions.setBusinessName("Business Name"); - institutions.setBusinessTaxId("42"); - - ArrayList institutionsList = new ArrayList<>(); - institutionsList.add(institutions); - - InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); - institutionsByLegalResponse.setBusinesses(institutionsList); - institutionsByLegalResponse.setLegalTaxId("42"); - institutionsByLegalResponse.setRequestDateTime("2020-03-01"); - when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) - .thenReturn(institutionsByLegalResponse); - List actualInstitutionsByLegal = partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42"); - assertEquals(1, actualInstitutionsByLegal.size()); - InstitutionByLegal getResult = actualInstitutionsByLegal.get(0); - assertEquals("Business Name", getResult.getBusinessName()); - assertEquals("42", getResult.getBusinessTaxId()); - verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} - */ - @Test - void testGetInstitutionsByLegal3() { - Institutions institutions = new Institutions(); - institutions.setBusinessName("Business Name"); - institutions.setBusinessTaxId("42"); - - Institutions institutions1 = new Institutions(); - institutions1.setBusinessName("Business Name"); - institutions1.setBusinessTaxId("42"); - - ArrayList institutionsList = new ArrayList<>(); - institutionsList.add(institutions1); - institutionsList.add(institutions); - - InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); - institutionsByLegalResponse.setBusinesses(institutionsList); - institutionsByLegalResponse.setLegalTaxId("42"); - institutionsByLegalResponse.setRequestDateTime("2020-03-01"); - when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) - .thenReturn(institutionsByLegalResponse); - List actualInstitutionsByLegal = partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42"); - assertEquals(2, actualInstitutionsByLegal.size()); - InstitutionByLegal getResult = actualInstitutionsByLegal.get(0); - assertEquals("42", getResult.getBusinessTaxId()); - InstitutionByLegal getResult1 = actualInstitutionsByLegal.get(1); - assertEquals("42", getResult1.getBusinessTaxId()); - assertEquals("Business Name", getResult1.getBusinessName()); - assertEquals("Business Name", getResult.getBusinessName()); - verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} - */ - @Test - void testGetInstitutionsByLegal4() { - when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) - .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); - assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42")); - verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} - */ - @Test - void testGetInstitutionsByLegal5() { - InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); - institutionsByLegalResponse.setBusinesses(new ArrayList<>()); - institutionsByLegalResponse.setLegalTaxId("42"); - institutionsByLegalResponse.setRequestDateTime("2020-03-01"); - when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) - .thenReturn(institutionsByLegalResponse); - assertTrue(partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42").isEmpty()); - verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} - */ - @Test - void testGetInstitutionsByLegal6() { - Institutions institutions = new Institutions(); - institutions.setBusinessName("Business Name"); - institutions.setBusinessTaxId("42"); - - ArrayList institutionsList = new ArrayList<>(); - institutionsList.add(institutions); - - InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); - institutionsByLegalResponse.setBusinesses(institutionsList); - institutionsByLegalResponse.setLegalTaxId("42"); - institutionsByLegalResponse.setRequestDateTime("2020-03-01"); - when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) - .thenReturn(institutionsByLegalResponse); - List actualInstitutionsByLegal = partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42"); - assertEquals(1, actualInstitutionsByLegal.size()); - InstitutionByLegal getResult = actualInstitutionsByLegal.get(0); - assertEquals("Business Name", getResult.getBusinessName()); - assertEquals("42", getResult.getBusinessTaxId()); - verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} - */ - @Test - void testGetInstitutionsByLegal7() { - Institutions institutions = new Institutions(); - institutions.setBusinessName("Business Name"); - institutions.setBusinessTaxId("42"); - - Institutions institutions1 = new Institutions(); - institutions1.setBusinessName("Business Name"); - institutions1.setBusinessTaxId("42"); - - ArrayList institutionsList = new ArrayList<>(); - institutionsList.add(institutions1); - institutionsList.add(institutions); - - InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); - institutionsByLegalResponse.setBusinesses(institutionsList); - institutionsByLegalResponse.setLegalTaxId("42"); - institutionsByLegalResponse.setRequestDateTime("2020-03-01"); - when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) - .thenReturn(institutionsByLegalResponse); - List actualInstitutionsByLegal = partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42"); - assertEquals(2, actualInstitutionsByLegal.size()); - InstitutionByLegal getResult = actualInstitutionsByLegal.get(0); - assertEquals("42", getResult.getBusinessTaxId()); - InstitutionByLegal getResult1 = actualInstitutionsByLegal.get(1); - assertEquals("42", getResult1.getBusinessTaxId()); - assertEquals("Business Name", getResult1.getBusinessName()); - assertEquals("Business Name", getResult.getBusinessName()); - verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} - */ - @Test - void testGetInstitutionsByLegal8() { - when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) - .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); - assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42")); - verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); - } - - @Test - void testGetInstitutionsByLegal9() { - FeignException feignException = mock(FeignException.class); - when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) - .thenThrow(feignException); - assertThrows(MsCoreException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42")); - verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); - } - - @Test - void testGetInstitutionsByLegal10() { - InstitutionsByLegalResponse response = new InstitutionsByLegalResponse(); - when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())).thenReturn(response); - assertNotNull(partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42")); - } - - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getLegalAddress(String)} - */ - @Test - void testGetLegalAddress() { - NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); - nationalRegistriesProfessionalAddress.setAddress("42 Main St"); - nationalRegistriesProfessionalAddress.setZipCode("21654"); - when(partyRegistryProxyRestClient.getLegalAddress(any())) - .thenReturn(nationalRegistriesProfessionalAddress); - assertSame(nationalRegistriesProfessionalAddress, partyRegistryProxyConnectorImpl.getLegalAddress("42")); - verify(partyRegistryProxyRestClient).getLegalAddress(any()); - } - - /** - * Method under test: {@link PartyRegistryProxyConnectorImpl#getLegalAddress(String)} - */ - @Test - void testGetLegalAddress2() { - when(partyRegistryProxyRestClient.getLegalAddress(any())) - .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); - assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getLegalAddress("id")); - } - - @Test - void testGetLegalAddress3() { - FeignException feignException = mock(FeignException.class); - when(partyRegistryProxyRestClient.getLegalAddress(any())) - .thenThrow(feignException); - assertThrows(MsCoreException.class, () -> partyRegistryProxyConnectorImpl.getLegalAddress("42")); - verify(partyRegistryProxyRestClient).getLegalAddress(any()); - } - - @Test - void testGetInstitutionByIdThrow() { - when(partyRegistryProxyRestClient.getInstitutionById(any())).thenReturn(null); - assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionById("id")); - verify(partyRegistryProxyRestClient).getInstitutionById(any()); - } - - - @Test - void getExtByCode() { - GeographicTaxonomiesResponse geographicTaxonomiesResponse = new GeographicTaxonomiesResponse(); - geographicTaxonomiesResponse.setGeotaxId("Code"); - geographicTaxonomiesResponse.setCountry("GB"); - geographicTaxonomiesResponse.setCountryAbbreviation("GB"); - geographicTaxonomiesResponse.setDescription("The characteristics of someone or something"); - geographicTaxonomiesResponse.setEnable(true); - geographicTaxonomiesResponse.setIstatCode(""); - geographicTaxonomiesResponse.setProvinceId("Province"); - geographicTaxonomiesResponse.setProvinceAbbreviation("Province Abbreviation"); - geographicTaxonomiesResponse.setRegionId("us-east-2"); - when(partyRegistryProxyRestClient.getExtByCode(any())).thenReturn(geographicTaxonomiesResponse); - GeographicTaxonomies actualExtByCode = partyRegistryProxyConnectorImpl.getExtByCode("Code"); - assertEquals("Code", actualExtByCode.getGeotaxId()); - assertTrue(actualExtByCode.isEnable()); - assertEquals("The characteristics of someone or something", actualExtByCode.getDescription()); - verify(partyRegistryProxyRestClient).getExtByCode(any()); - } - - @Test - void getExtByCode_notFound() { - when(partyRegistryProxyRestClient.getExtByCode(any())).thenThrow(new ResourceNotFoundException("", "")); - assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getExtByCode("Code")); - } - - @Test - void shouldGetAoo() { - when(partyRegistryProxyRestClient.getAooById(anyString())) - .thenReturn(aooResponse); - - AreaOrganizzativaOmogenea aoo = partyRegistryProxyConnectorImpl.getAooById("example"); - assertEquals(aoo.getCodAoo(), aooResponse.getCodAoo()); - assertEquals(aoo.getId(), aooResponse.getId()); - assertEquals(aoo.getOrigin(), aooResponse.getOrigin()); - } - - @Test - void shouldGetUo() { - when(partyRegistryProxyRestClient.getUoById(anyString())) - .thenReturn(uoResponse); - - UnitaOrganizzativa uo = partyRegistryProxyConnectorImpl.getUoById("example"); - assertEquals(uo.getCodiceUniUo(), uoResponse.getCodiceUniUo()); - assertEquals(uo.getId(), uoResponse.getId()); - assertEquals(uo.getOrigin(), uoResponse.getOrigin()); - } - - @Test - void shouldGetSa() { - when(partyRegistryProxyRestClient.getUoById(anyString())) - .thenReturn(uoResponse); - - UnitaOrganizzativa uo = partyRegistryProxyConnectorImpl.getUoById("example"); - assertEquals(uo.getCodiceUniUo(), uoResponse.getCodiceUniUo()); - assertEquals(uo.getId(), uoResponse.getId()); - assertEquals(uo.getOrigin(), uoResponse.getOrigin()); - } - - @Test - void getSAFromAnac() { - //given - String taxId = "taxId"; - when(partyRegistryProxyRestClient.getSaByTaxId(anyString())).thenReturn(pdndResponse); - //when - SaResource result = partyRegistryProxyConnectorImpl.getSAFromAnac(taxId); - //then - checkNotNullFields(result); - verify(partyRegistryProxyRestClient, times(1)).getSaByTaxId(taxId); - } - - @Test - void getSAFromAnacNotFound() { - //given - String taxId = "taxId"; - when(partyRegistryProxyRestClient.getSaByTaxId(anyString())).thenThrow(ResourceNotFoundException.class); - //when - Executable executable = () -> partyRegistryProxyConnectorImpl.getSAFromAnac(taxId); - //then - assertThrows(ResourceNotFoundException.class, executable); - verify(partyRegistryProxyRestClient, times(1)).getSaByTaxId(taxId); - } - - @Test - void getASFromIvass() { - //given - ResponseEntity response = new ResponseEntity<>(asResponse, HttpStatus.FOUND); - String ivassCode = "ivassCode"; - when(partyRegistryProxyRestClient._searchByOriginIdUsingGET(anyString())).thenReturn(response); - //when - ASResource result = partyRegistryProxyConnectorImpl.getASFromIvass(ivassCode); - //then - checkNotNullFields(result); - verify(partyRegistryProxyRestClient, times(1))._searchByOriginIdUsingGET(ivassCode); - } - - @Test - void getASFromIvassNotFound() { - //given - String ivassCode = "ivassCode"; - when(partyRegistryProxyRestClient._searchByOriginIdUsingGET(anyString())).thenReturn(null); - - //when - Executable executable = () -> partyRegistryProxyConnectorImpl.getASFromIvass(ivassCode); - //then - assertThrows(ResourceNotFoundException.class, executable); - verify(partyRegistryProxyRestClient, times(1))._searchByOriginIdUsingGET(ivassCode); - } - - @Test - void shouldThrowResourceNotFoundExceptionWhenIvassCodeNotFound() { - String ivassCode = "12345"; - - when(partyRegistryProxyRestClient._searchByOriginIdUsingGET(ivassCode)).thenReturn(null); - - assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getASFromIvass(ivassCode)); - } -} - diff --git a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImplTest.java b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImplTest.java deleted file mode 100644 index a19eff0..0000000 --- a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImplTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest; - -import it.pagopa.selfcare.product.entity.Product; -import it.pagopa.selfcare.product.entity.ProductStatus; -import it.pagopa.selfcare.product.service.ProductService; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import static org.junit.jupiter.api.Assertions.assertSame; -import static org.mockito.Mockito.*; - -@ContextConfiguration(classes = {ProductConnectorImpl.class}) -@ExtendWith(SpringExtension.class) -class ProductConnectorImplTest { - @Autowired - private ProductConnectorImpl productConnectorImpl; - - @MockBean - private ProductService productService; - - /** - * Method under test: {@link ProductConnectorImpl#getProductById(String)} - */ - @Test - void testGetProductById() { - Product product = dummyProduct(); - when(productService.getProduct(any())).thenReturn(product); - assertSame(product, productConnectorImpl.getProductById("42")); - verify(productService).getProduct(any()); - } - - @Test - void testGetProductValid() { - Product product = dummyProduct(); - when(productService.getProductIsValid(any())).thenReturn(product); - assertSame(product, productConnectorImpl.getProductValidById("42")); - verify(productService).getProductIsValid(any()); - } - - private Product dummyProduct(){ - Product product = new Product(); - product.setContractTemplatePath("Contract Template Path"); - product.setContractTemplateVersion("1.0.2"); - product.setId("42"); - product.setParentId("42"); - product.setRoleMappings(null); - product.setStatus(ProductStatus.ACTIVE); - product.setTitle("Dr"); - return product; - } -} - diff --git a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImplTest.java b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImplTest.java deleted file mode 100644 index aba11a2..0000000 --- a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImplTest.java +++ /dev/null @@ -1,85 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest; - -import it.pagopa.selfcare.mscore.connector.rest.client.UserApiRestClient; -import it.pagopa.selfcare.mscore.connector.rest.client.UserInstitutionApiRestClient; -import it.pagopa.selfcare.mscore.connector.rest.mapper.UserMapperClient; -import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; -import it.pagopa.selfcare.user.generated.openapi.v1.dto.UpdateDescriptionDto; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.api.function.Executable; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.*; - -@ContextConfiguration(classes = {UserApiConnectorImpl.class}) -@ExtendWith(SpringExtension.class) -class UserApiConnectorImplTest { - - @Autowired - private UserApiConnectorImpl userApiConnector; - - @MockBean - private UserApiRestClient userApiRestClient; - - @MockBean - private UserInstitutionApiRestClient userInstitutionApiRestClient; - - @MockBean - private UserMapperClient userMapperClient; - - @Test - void getUserEmailsByInstitutionAndProduct(){ - //given - final String institutionId = "institutionId"; - final String productId = "productId"; - ResponseEntity> emails = new ResponseEntity<>(List.of("email"), HttpStatus.OK); - - when(userApiRestClient._usersEmailsGet(anyString(), anyString())).thenReturn(emails); - - //when - List userEmails = userApiConnector.getUserEmails(institutionId, productId); - //then - assertFalse(userEmails.isEmpty()); - verify(userApiRestClient, times(1))._usersEmailsGet(institutionId, productId); - - } - - @Test - void updateUserInstitution(){ - //given - final String institutionId = "institutionId"; - final String description = "description"; - final String rootName = "rootName"; - - UpdateDescriptionDto descriptionDto = new UpdateDescriptionDto(); - descriptionDto.setInstitutionDescription(description); - descriptionDto.setInstitutionRootName(rootName); - - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setDescription(description); - institutionUpdate.setParentDescription(rootName); - - when(userMapperClient.toUpdateDescriptionDto(any())).thenReturn(descriptionDto); - - //when - final Executable executable = () -> userApiConnector.updateUserInstitution(institutionId, institutionUpdate); - - //then - Assertions.assertDoesNotThrow(executable); - verify(userInstitutionApiRestClient)._institutionsInstitutionIdPut(institutionId, descriptionDto); - } - - - -} \ No newline at end of file diff --git a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImplTest.java b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImplTest.java deleted file mode 100644 index f10640f..0000000 --- a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImplTest.java +++ /dev/null @@ -1,155 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest; - - -import it.pagopa.selfcare.mscore.connector.rest.client.UserRegistryRestClient; -import it.pagopa.selfcare.mscore.connector.rest.mapper.UserMapperClientImpl; -import it.pagopa.selfcare.mscore.model.user.User; -import it.pagopa.selfcare.user_registry.generated.openapi.v1.dto.*; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.Map; -import java.util.UUID; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.*; - -@ContextConfiguration(classes = {UserRegistryConnectorImpl.class, UserMapperClientImpl.class}) -@ExtendWith(SpringExtension.class) -class UserRegistryConnectorImplTest { - @Autowired - private UserRegistryConnectorImpl userRegistryConnector; - - @MockBean - private UserRegistryRestClient userRegistryRestClient; - - @Test - void getUserByInternalIdWithCustomFields(){ - UserResource userResource = new UserResource(); - userResource.setFiscalCode("42"); - ResponseEntity userIdResponseEntity = ResponseEntity.ok(userResource); - when(userRegistryRestClient._findByIdUsingGET(any(), any())).thenReturn(userIdResponseEntity); - User user = userRegistryConnector.getUserByInternalIdWithCustomFields("42","workContacts"); - assertEquals(user.getFiscalCode(), userResource.getFiscalCode()); - verify(userRegistryRestClient)._findByIdUsingGET("workContacts", "42"); - - } - - /** - * Method under test: {@link UserRegistryConnectorImpl#getUserByFiscalCode(String)} - */ - @Test - void testGetUserByFiscalCode() { - UserResource userResource = new UserResource(); - userResource.setFiscalCode("42"); - ResponseEntity userIdResponseEntity = ResponseEntity.ok(userResource); - when(userRegistryRestClient._searchUsingPOST(any(), any())).thenReturn(userIdResponseEntity); - User user = userRegistryConnector.getUserByFiscalCode("42"); - assertEquals(user.getFiscalCode(), userResource.getFiscalCode()); - verify(userRegistryRestClient)._searchUsingPOST("fiscalCode,name,familyName,workContacts", UserSearchDto.builder().fiscalCode("42").build()); - } - - @Test - void testGetUserByInternalIdWithFiscalCode() { - UUID id = UUID.randomUUID(); - UserResource userResource = new UserResource(); - userResource.setId(id); - ResponseEntity userIdResponseEntity = ResponseEntity.ok(userResource); - when(userRegistryRestClient._findByIdUsingGET(any(), any())).thenReturn(userIdResponseEntity); - User user = userRegistryConnector.getUserByInternalIdWithFiscalCode(id.toString()); - assertEquals(user.getId(), userResource.getId().toString()); - verify(userRegistryRestClient)._findByIdUsingGET("fiscalCode,name,familyName,workContacts", id.toString()); - } - - @Test - void testPersistUserUsingPatch() { - UUID id = UUID.randomUUID(); - UserId userId = new UserId(); - userId.setId(id); - ResponseEntity userIdResponseEntity = ResponseEntity.ok(userId); - when(userRegistryRestClient._saveUsingPATCH(any())).thenReturn(userIdResponseEntity); - User user = userRegistryConnector.persistUserUsingPatch("name", "familyName", "fiscalCode", "email","institutionId"); - assertEquals(user.getId(), id.toString()); - SaveUserDto saveUserDto = SaveUserDto.builder() - .name(CertifiableFieldResourceOfstring.builder() - .value("name") - .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) - .build()) - .familyName(CertifiableFieldResourceOfstring.builder() - .value("familyName") - .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) - .build()) - .fiscalCode("fiscalCode") - .workContacts(Map.of("institutionId", WorkContactResource.builder() - .email(CertifiableFieldResourceOfstring.builder() - .value("email") - .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) - .build()) - .build())) - .build(); - verify(userRegistryRestClient)._saveUsingPATCH(saveUserDto); - } - - @Test - void testPersistUserUsingPatchWithEmailNull() { - UUID id = UUID.randomUUID(); - UserId userId = new UserId(); - userId.setId(id); - ResponseEntity userIdResponseEntity = ResponseEntity.ok(userId); - when(userRegistryRestClient._saveUsingPATCH(any())).thenReturn(userIdResponseEntity); - User user = userRegistryConnector.persistUserUsingPatch("name", "familyName", "fiscalCode", null,"institutionId"); - assertEquals(user.getId(), id.toString()); - SaveUserDto saveUserDto = SaveUserDto.builder() - .name(CertifiableFieldResourceOfstring.builder() - .value("name") - .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) - .build()) - .familyName(CertifiableFieldResourceOfstring.builder() - .value("familyName") - .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) - .build()) - .fiscalCode("fiscalCode") - .build(); - verify(userRegistryRestClient)._saveUsingPATCH(saveUserDto); - } - - @Test - void persistUserWorksContractUsingPatch() { - UUID id = UUID.randomUUID(); - UserId userId = new UserId(); - userId.setId(id); - ResponseEntity userIdResponseEntity = ResponseEntity.ok(userId); - when(userRegistryRestClient._saveUsingPATCH(any())).thenReturn(userIdResponseEntity); - User user = userRegistryConnector.persistUserWorksContractUsingPatch( "fiscalCode", "email","institutionId"); - assertEquals(user.getId(), id.toString()); - SaveUserDto saveUserDto = SaveUserDto.builder() - .fiscalCode("fiscalCode") - .workContacts(Map.of("institutionId", WorkContactResource.builder() - .email(CertifiableFieldResourceOfstring.builder() - .value("email") - .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) - .build()) - .build())) - .build(); - verify(userRegistryRestClient)._saveUsingPATCH(saveUserDto); - } - - @Test - void testGetUserById(){ - UUID id = UUID.randomUUID(); - UserResource userResource = new UserResource(); - userResource.setId(id); - ResponseEntity userIdResponseEntity = ResponseEntity.ok(userResource); - when(userRegistryRestClient._findByIdUsingGET(any(), any())).thenReturn(userIdResponseEntity); - User user = userRegistryConnector.getUserByInternalId(id.toString()); - assertEquals(user.getId(), userResource.getId().toString()); - verify(userRegistryRestClient)._findByIdUsingGET("name,familyName,workContacts", id.toString()); - } - -} - diff --git a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoderTest.java b/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoderTest.java deleted file mode 100644 index 0c50989..0000000 --- a/apps/institution-ms-new/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoderTest.java +++ /dev/null @@ -1,90 +0,0 @@ -package it.pagopa.selfcare.mscore.connector.rest.decoder; - -import feign.Request; -import feign.Response; -import it.pagopa.selfcare.mscore.exception.BadGatewayException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.function.Executable; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; - -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.Map; - -import static feign.Util.UTF_8; -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertThrows; - -class FeignErrorDecoderTest { - FeignErrorDecoder feignDecoder = new FeignErrorDecoder(); - - private final Map> headers = new LinkedHashMap<>(); - - @Test - void testDecodeToResourceNotFound() { - //given - Response response = Response.builder() - .status(404) - .reason("ResourceNotFound") - .request(Request.create(Request.HttpMethod.GET, "/api", Collections.emptyMap(), null, UTF_8)) - .headers(headers) - .body("hello world", UTF_8) - .build(); - //when - Executable executable = () -> feignDecoder.decode("", response); - //then - assertThrows(ResourceNotFoundException.class, executable); - } - - @ParameterizedTest - @ValueSource(ints = {500,502,509}) - void testDecodeToBadGateway(int status) { - //given - Response response = Response.builder() - .status(status) - .reason("Bad Gateway") - .request(Request.create(Request.HttpMethod.GET, "/api", Collections.emptyMap(), null, UTF_8)) - .headers(headers) - .body("hello world", UTF_8) - .build(); - //when - Executable executable = () -> feignDecoder.decode("", response); - //then - assertThrows(BadGatewayException.class, executable); - } - - @ParameterizedTest - @ValueSource(ints = {504,503,509}) - void testDecodeServiceUnvailable() { - //given - Response response = Response.builder() - .status(504) - .reason("Service Unvailable") - .request(Request.create(Request.HttpMethod.GET, "/api", Collections.emptyMap(), null, UTF_8)) - .headers(headers) - .body("hello world", UTF_8) - .build(); - //when - Executable executable = () -> feignDecoder.decode("", response); - //then - } - - @Test - void testDecodeDefault() { - //given - Response response = Response.builder() - .status(200) - .reason("OK") - .request(Request.create(Request.HttpMethod.GET, "/api", Collections.emptyMap(), null, UTF_8)) - .headers(headers) - .body("hello world", UTF_8) - .build(); - //when - Executable executable = () -> feignDecoder.decode("", response); - //then - assertDoesNotThrow(executable); - } -} diff --git a/apps/institution-ms-new/core/pom.xml b/apps/institution-ms-new/core/pom.xml deleted file mode 100644 index ff21c08..0000000 --- a/apps/institution-ms-new/core/pom.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - 4.0.0 - - selc-ms-core - it.pagopa.selfcare - 1.0-SNAPSHOT - - - selc-ms-core-core - - - - it.pagopa.selfcare - selc-ms-core-connector-api - - - - - com.openhtmltopdf - openhtmltopdf-core - 1.0.10 - - - - - com.openhtmltopdf - openhtmltopdf-pdfbox - 1.0.10 - - - - com.openhtmltopdf - openhtmltopdf-svg-support - 1.0.10 - - - xalan - serializer - - - xalan - xalan - - - - - - org.springframework.boot - spring-boot-starter-freemarker - - - - - com.openhtmltopdf - openhtmltopdf-slf4j - 1.0.10 - - - org.jsoup - jsoup - 1.15.3 - - - org.apache.commons - commons-text - 1.10.0 - compile - - - - org.springframework.data - spring-data-commons - - - io.github.openfeign - feign-core - - - - software.amazon.awssdk - ses - 2.20.88 - - - - diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStream.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStream.java deleted file mode 100644 index d09fae0..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStream.java +++ /dev/null @@ -1,28 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import com.openhtmltopdf.extend.FSStream; - -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.nio.charset.StandardCharsets; -import java.util.Objects; - -public class ClassPathStream implements FSStream { - - private final String uri; - - public ClassPathStream(String path) { - this.uri = path; - } - - @Override - public InputStream getStream() { - return this.getClass().getResourceAsStream(uri); - } - - @Override - public Reader getReader() { - return new InputStreamReader(Objects.requireNonNull(this.getClass().getResourceAsStream(uri)), StandardCharsets.UTF_8); - } -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactory.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactory.java deleted file mode 100644 index c3b1ef2..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactory.java +++ /dev/null @@ -1,26 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import com.openhtmltopdf.extend.FSStream; -import com.openhtmltopdf.extend.FSStreamFactory; -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import lombok.extern.slf4j.Slf4j; - -import java.net.URI; -import java.net.URISyntaxException; - -import static it.pagopa.selfcare.mscore.constant.GenericError.GENERIC_ERROR; - -@Slf4j -public class ClassPathStreamFactory implements FSStreamFactory { - @Override - public FSStream getUrl(String url) { - URI fullUri; - try { - fullUri = new URI(url); - return new ClassPathStream(fullUri.getPath()); - } catch (URISyntaxException e) { - log.error("URISintaxException in ClassPathStreamFactory: ",e); - throw new InvalidRequestException(GENERIC_ERROR.getMessage(), GENERIC_ERROR.getCode()); - } - } -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ContractService.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ContractService.java deleted file mode 100644 index b698fc4..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ContractService.java +++ /dev/null @@ -1,74 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.module.SimpleModule; -import it.pagopa.selfcare.mscore.api.FileStorageConnector; -import it.pagopa.selfcare.mscore.config.CoreConfig; -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import it.pagopa.selfcare.mscore.model.onboarding.ResourceResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; - -import java.io.File; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.time.LocalDateTime; -import java.time.OffsetDateTime; -import java.time.format.DateTimeFormatter; -import java.util.UUID; - -import static it.pagopa.selfcare.mscore.constant.GenericError.UNABLE_TO_DOWNLOAD_FILE; - -@Slf4j -@Service -public class ContractService { - private final FileStorageConnector fileStorageConnector; - private final CoreConfig coreConfig; - private final ObjectMapper mapper; - - public ContractService(FileStorageConnector fileStorageConnector, - CoreConfig coreConfig) { - this.fileStorageConnector = fileStorageConnector; - this.coreConfig = coreConfig; - this.mapper = new ObjectMapper(); - SimpleModule simpleModule = new SimpleModule(); - simpleModule.addSerializer(OffsetDateTime.class, new JsonSerializer<>() { - @Override - public void serialize(OffsetDateTime offsetDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { - jsonGenerator.writeString(DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(offsetDateTime)); - } - }); - mapper.registerModule(simpleModule); - } - - public ResourceResponse getFile(String path) { - return fileStorageConnector.getFile(path); - } - - public File getLogoFile() { - StringBuilder stringBuilder = new StringBuilder(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - stringBuilder.append("_").append(UUID.randomUUID()).append("_logo"); - try { - Path path = Files.createTempFile(stringBuilder.toString(), ".png"); - Files.write(path, fileStorageConnector.getTemplateFile(coreConfig.getLogoPath()).getBytes(StandardCharsets.UTF_8)); - return path.toFile(); - } catch (IOException e) { - throw new InvalidRequestException(String.format(UNABLE_TO_DOWNLOAD_FILE.getMessage(), coreConfig.getLogoPath()), UNABLE_TO_DOWNLOAD_FILE.getCode()); - } - } - - public String uploadContract(String tokenId, MultipartFile contract) { - return fileStorageConnector.uploadContract(tokenId, contract); - - } - - public void deleteContract(String fileName, String tokenId) { - fileStorageConnector.removeContract(fileName, tokenId); - } -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationService.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationService.java deleted file mode 100644 index 304adec..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationService.java +++ /dev/null @@ -1,21 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.constant.DelegationState; -import it.pagopa.selfcare.mscore.constant.Order; -import it.pagopa.selfcare.mscore.model.delegation.Delegation; -import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; -import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; - -import java.util.List; -import java.util.Optional; - -public interface DelegationService { - - Delegation createDelegation(Delegation delegation); - boolean checkIfExistsWithStatus(Delegation delegation, DelegationState status); - List getDelegations(String from, String to, String productId, String search, String taxCode, Optional order, Optional page, Optional size); - Delegation createDelegationFromInstitutionsTaxCode(Delegation delegation); - void deleteDelegationByDelegationId(String delegationId); - DelegationWithPagination getDelegationsV2(GetDelegationParameters delegationParameters); - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java deleted file mode 100644 index 69e9b5c..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java +++ /dev/null @@ -1,162 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.api.DelegationConnector; -import it.pagopa.selfcare.mscore.constant.CustomError; -import it.pagopa.selfcare.mscore.constant.DelegationState; -import it.pagopa.selfcare.mscore.constant.Order; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.exception.ResourceConflictException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.delegation.Delegation; -import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; -import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -import java.time.OffsetDateTime; -import java.util.List; -import java.util.Optional; - -import static it.pagopa.selfcare.mscore.constant.CustomError.INSTITUTION_TAX_CODE_NOT_FOUND; -import static it.pagopa.selfcare.mscore.constant.GenericError.*; -@Slf4j -@Service -public class DelegationServiceImpl implements DelegationService { - - private static final int DEFAULT_DELEGATIONS_PAGE_SIZE = 10000; - private final DelegationConnector delegationConnector; - private final MailNotificationService notificationService; - private final InstitutionService institutionService; - - public DelegationServiceImpl(DelegationConnector delegationConnector, - MailNotificationService notificationService, - InstitutionService institutionService) { - this.delegationConnector = delegationConnector; - this.notificationService = notificationService; - this.institutionService = institutionService; - } - - @Override - public Delegation createDelegation(Delegation delegation) { - - setTaxCodesByInstitutionIds(delegation); - - Delegation savedDelegation = checkIfExistsAndSaveDelegation(delegation); - - try { - notificationService.sendMailForDelegation(delegation.getInstitutionFromName(), delegation.getProductId(), delegation.getTo()); - } catch (Exception e) { - log.error(SEND_MAIL_FOR_DELEGATION_ERROR.getMessage() + ":", e.getMessage(), e); - } - return savedDelegation; - } - - private Delegation checkIfExistsAndSaveDelegation(Delegation delegation) { - if(checkIfExistsWithStatus(delegation, DelegationState.ACTIVE)) { - throw new ResourceConflictException(String.format(CustomError.CREATE_DELEGATION_CONFLICT.getMessage()), - CustomError.CREATE_DELEGATION_CONFLICT.getCode()); - } - - Delegation savedDelegation; - try { - if(checkIfExistsWithStatus(delegation, DelegationState.DELETED)){ - savedDelegation = delegationConnector.findAndActivate(delegation.getFrom(), delegation.getTo(), delegation.getProductId()); - } else { - delegation.setCreatedAt(OffsetDateTime.now()); - delegation.setUpdatedAt(OffsetDateTime.now()); - delegation.setStatus(DelegationState.ACTIVE); - savedDelegation = delegationConnector.save(delegation); - } - institutionService.updateInstitutionDelegation(delegation.getTo(), true); - } catch (Exception e) { - throw new MsCoreException(CREATE_DELEGATION_ERROR.getMessage(), CREATE_DELEGATION_ERROR.getCode()); - } - return savedDelegation; - } - - private void setTaxCodesByInstitutionIds(Delegation delegation){ - /* - Retrieve both delegator's and partner's institutions to set taxCodeFrom and taxCodeTo - */ - Institution institutionTo = institutionService.retrieveInstitutionById(delegation.getTo()); - Institution institutionFrom = institutionService.retrieveInstitutionById(delegation.getFrom()); - - delegation.setToTaxCode(institutionTo.getTaxCode()); - delegation.setBrokerType(institutionTo.getInstitutionType()); - - delegation.setFromTaxCode(institutionFrom.getTaxCode()); - delegation.setInstitutionType(institutionFrom.getInstitutionType()); - } - - @Override - public Delegation createDelegationFromInstitutionsTaxCode(Delegation delegation) { - - List institutionsTo = institutionService.getInstitutions(delegation.getToTaxCode(), delegation.getToSubunitCode()); - // TODO: remove filter when getInstitutions API will be fixed. - /* - If we call getInstitutions by empty subunitCode parameter, we have to filter retrieved list for institution - with blank subunitCode field, otherwise we take first element returned by api. - */ - Institution partner = institutionsTo.stream() - .filter(institution -> StringUtils.hasText(delegation.getToSubunitCode()) || !StringUtils.hasText(institution.getSubunitCode())) - .findFirst() - .orElseThrow(() -> new ResourceNotFoundException(String.format(INSTITUTION_TAX_CODE_NOT_FOUND.getMessage(), delegation.getTo()), - INSTITUTION_TAX_CODE_NOT_FOUND.getCode())); - delegation.setTo(partner.getId()); - delegation.setBrokerType(partner.getInstitutionType()); - - // TODO: remove filter when getInstitutions API will be fixed. - /* - If we call getInstitutions by empty subunitCode parameter, we have to filter retrieved list for institution - with blank subunitCode field, otherwise we take first element returned by api. - */ - List institutionsFrom = institutionService.getInstitutions(delegation.getFromTaxCode(), delegation.getFromSubunitCode()); - Institution from = institutionsFrom.stream() - .filter(institution -> StringUtils.hasText(delegation.getFromSubunitCode()) || !StringUtils.hasText(institution.getSubunitCode())) - .findFirst() - .orElseThrow(() -> new ResourceNotFoundException(String.format(INSTITUTION_TAX_CODE_NOT_FOUND.getMessage(), delegation.getTo()), - INSTITUTION_TAX_CODE_NOT_FOUND.getCode())); - delegation.setFrom(from.getId()); - delegation.setInstitutionType(from.getInstitutionType()); - - return checkIfExistsAndSaveDelegation(delegation); - } - - @Override - public void deleteDelegationByDelegationId(String delegationId) { - String institutionId; - try{ - Delegation delegation = delegationConnector.findByIdAndModifyStatus(delegationId, DelegationState.DELETED); - institutionId = delegation.getTo(); - } catch (Exception e) { - throw new MsCoreException(DELETE_DELEGATION_ERROR.getMessage(), DELETE_DELEGATION_ERROR.getCode()); - } - try{ - if(!delegationConnector.checkIfDelegationsAreActive(institutionId)) { - institutionService.updateInstitutionDelegation(institutionId, false); - } - } catch (Exception e) { - delegationConnector.findByIdAndModifyStatus(delegationId, DelegationState.ACTIVE); - throw new MsCoreException(DELETE_DELEGATION_ERROR.getMessage(), DELETE_DELEGATION_ERROR.getCode()); - } - } - - @Override - public boolean checkIfExistsWithStatus(Delegation delegation, DelegationState status) { - return delegationConnector.checkIfExistsWithStatus(delegation, status); - } - - @Override - public List getDelegations(String from, String to, String productId, String search, String taxCode, - Optional order, Optional page, Optional size) { - int pageSize = size.filter(s -> s > 0).filter(s -> s <= DEFAULT_DELEGATIONS_PAGE_SIZE).orElse(DEFAULT_DELEGATIONS_PAGE_SIZE); - return delegationConnector.find(from, to, productId, search, taxCode, order.orElse(Order.NONE), page.orElse(0), pageSize); - } - - @Override - public DelegationWithPagination getDelegationsV2(GetDelegationParameters delegationParameters) { - return delegationConnector.findAndCount(delegationParameters); - } -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalService.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalService.java deleted file mode 100644 index 1ae1408..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalService.java +++ /dev/null @@ -1,21 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.model.institution.GeographicTaxonomies; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; - -import java.util.List; - -public interface ExternalService { - - Institution getInstitutionByExternalId(String externalId); - - Institution retrieveInstitutionProduct(String externalId, String productId); - - List retrieveInstitutionGeoTaxonomiesByExternalId(String externalId); - - List retrieveInstitutionProductsByExternalId(String externalId, List states); - - List retrieveInstitutionByIds(List ids); -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalServiceImpl.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalServiceImpl.java deleted file mode 100644 index 0e74f49..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalServiceImpl.java +++ /dev/null @@ -1,49 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.model.institution.GeographicTaxonomies; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@Slf4j -public class ExternalServiceImpl implements ExternalService { - - private final InstitutionService institutionService; - - public ExternalServiceImpl(InstitutionService institutionService) { - this.institutionService = institutionService; - } - - @Override - public Institution getInstitutionByExternalId(String externalId) { - return institutionService.retrieveInstitutionByExternalId(externalId); - } - - @Override - public Institution retrieveInstitutionProduct(String externalId, String productId) { - return institutionService.retrieveInstitutionProduct(externalId, productId); - } - - @Override - public List retrieveInstitutionProductsByExternalId(String externalId, List states) { - Institution institution = institutionService.retrieveInstitutionByExternalId(externalId); - return institutionService.retrieveInstitutionProducts(institution, states); - } - - @Override - public List retrieveInstitutionByIds(List ids) { - return institutionService.retrieveInstitutionByIds(ids); - } - - @Override - public List retrieveInstitutionGeoTaxonomiesByExternalId(String externalId) { - log.info("Retrieving geographic taxonomies for institution having externalId {}", externalId); - Institution institution = institutionService.retrieveInstitutionByExternalId(externalId); - return institutionService.retrieveInstitutionGeoTaxonomies(institution); - } -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionService.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionService.java deleted file mode 100644 index 7a1e1fa..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionService.java +++ /dev/null @@ -1,70 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.commons.base.security.SelfCareUser; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.constant.SearchMode; -import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; -import it.pagopa.selfcare.mscore.model.institution.*; - -import java.time.OffsetDateTime; -import java.util.List; -import java.util.Optional; - -public interface InstitutionService { - - List getOnboardingInstitutionByProductId(String institutionId, String productId); - - Institution retrieveInstitutionById(String id); - - Institution retrieveInstitutionByExternalId(String institutionExternalId); - - List getInstitutions(String taxCode, String subunitCode, String origin, String originId); - - List getInstitutions(String taxCode, String subunitCode); - - Institution createInstitutionFromIpa(String taxCode, InstitutionPaSubunitType subunitType, String subunitCode, List geographicTaxonomies, InstitutionType institutionType); - - Institution createInstitutionFromPda(Institution institution, String injectionInstitutionType); - - Institution createInstitutionByExternalId(String externalId); - - Institution createInstitutionFromAnac(Institution institution); - - Institution createInstitutionFromIvass(Institution institution); - - Institution createInstitutionFromInfocamere(Institution institution); - - Institution createPgInstitution(String taxId, String description, boolean existsInRegistry, SelfCareUser selfCareUser); - - Institution createInstitution(Institution institution); - - List retrieveInstitutionProducts(Institution institution, List states); - - Institution retrieveInstitutionProduct(String externalId, String productId); - - void retrieveInstitutionsWithFilter(String externalId, String productId, List validRelationshipStates); - - List retrieveInstitutionGeoTaxonomies(Institution institution); - - Optional retrieveGeoTaxonomies(String code); - - List findInstitutionsByGeoTaxonomies(String geoTaxonomies, SearchMode searchMode); - - List findInstitutionsByProductId(String productId); - - List retrieveInstitutionByIds(List ids); - - Institution updateInstitution(String institutionId, InstitutionUpdate institutionUpdate, String userId); - - void updateInstitutionDelegation(String institutionId, boolean delegation); - - List retrieveInstitutionByExternalIds(List validInstitutionList, String productId); - - void updateCreatedAt(String institutionId, String productId, OffsetDateTime createdAt, OffsetDateTime activatedAt); - - List getInstitutionsByProductId(String productId, Integer page, Integer size); - - List getInstitutionBrokers(String productId, InstitutionType type); - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImpl.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImpl.java deleted file mode 100644 index bb24f19..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImpl.java +++ /dev/null @@ -1,404 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.commons.base.security.SelfCareUser; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.api.DelegationConnector; -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; -import it.pagopa.selfcare.mscore.api.UserApiConnector; -import it.pagopa.selfcare.mscore.config.CoreConfig; -import it.pagopa.selfcare.mscore.constant.*; -import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; -import it.pagopa.selfcare.mscore.core.strategy.CreateInstitutionStrategy; -import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; -import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; -import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.exception.ResourceConflictException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.institution.*; -import lombok.extern.slf4j.Slf4j; -import org.owasp.encoder.Encode; -import org.springframework.stereotype.Service; -import org.springframework.util.Assert; -import org.springframework.util.StringUtils; - -import java.time.OffsetDateTime; -import java.util.*; - -import static it.pagopa.selfcare.mscore.constant.GenericError.*; - -@Slf4j -@Service -public class InstitutionServiceImpl implements InstitutionService { - - private final InstitutionConnector institutionConnector; - private final UserApiConnector userApiConnector; - private final DelegationConnector delegationConnector; - private final PartyRegistryProxyConnector partyRegistryProxyConnector; - private final CoreConfig coreConfig; - private final InstitutionMapper institutionMapper; - private final CreateInstitutionStrategyFactory createInstitutionStrategyFactory; - - public InstitutionServiceImpl(PartyRegistryProxyConnector partyRegistryProxyConnector, - InstitutionConnector institutionConnector, - UserApiConnector userApiConnector, DelegationConnector delegationConnector, - CoreConfig coreConfig, - InstitutionMapper institutionMapper, - CreateInstitutionStrategyFactory createInstitutionStrategyFactory) { - this.partyRegistryProxyConnector = partyRegistryProxyConnector; - this.institutionConnector = institutionConnector; - this.userApiConnector = userApiConnector; - this.delegationConnector = delegationConnector; - this.coreConfig = coreConfig; - this.institutionMapper = institutionMapper; - this.createInstitutionStrategyFactory = createInstitutionStrategyFactory; - } - - @Override - public List getOnboardingInstitutionByProductId(String institutionId, String productId) { - return institutionConnector.findOnboardingByIdAndProductId(institutionId, productId); - } - - @Override - public List getInstitutionsByProductId(String productId, Integer page, Integer size) { - return institutionConnector.findInstitutionsByProductId(productId, page, size); - } - - @Override - public Institution retrieveInstitutionById(String id) { - return institutionConnector.findById(id); - } - - @Override - public Institution retrieveInstitutionByExternalId(String institutionExternalId) { - Optional opt = institutionConnector.findByExternalId(institutionExternalId); - if (opt.isEmpty()) { - throw new ResourceNotFoundException(String.format(CustomError.INSTITUTION_NOT_FOUND.getMessage(), "UNDEFINED", institutionExternalId), CustomError.INSTITUTION_NOT_FOUND.getCode()); - } - log.info("founded institution having externalId: {}", institutionExternalId); - return opt.get(); - } - - @Override - public void retrieveInstitutionsWithFilter(String externalId, String productId, List validRelationshipStates) { - List list = institutionConnector.findWithFilter(externalId, productId, validRelationshipStates); - if (list == null || list.isEmpty()) { - throw new ResourceNotFoundException(String.format(CustomError.INSTITUTION_NOT_ONBOARDED.getMessage(), externalId, productId), - CustomError.INSTITUTION_NOT_ONBOARDED.getCode()); - } - } - - @Override - public List getInstitutions(String taxCode, String subunitCode, String origin, String originId) { - if (StringUtils.hasText(taxCode) && (StringUtils.hasText(origin) || StringUtils.hasText(originId))) { - throw new InvalidRequestException(GenericError.GET_INSTITUTIONS_REQUEST_ERROR.getMessage(), GenericError.GET_INSTITUTIONS_REQUEST_ERROR.getCode()); - } - - if (StringUtils.hasText(taxCode)) { - return institutionConnector.findByTaxCodeAndSubunitCode(taxCode, subunitCode); - } else { - return institutionConnector.findByOriginAndOriginId(origin, originId); - } - - } - - @Override - public Institution createInstitutionFromIpa(String taxCode, InstitutionPaSubunitType subunitType, String subunitCode, List geographicTaxonomies, InstitutionType institutionType) { - CreateInstitutionStrategy institutionStrategy = createInstitutionStrategyFactory.createInstitutionStrategyIpa(); - return institutionStrategy.createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(taxCode) - .subunitCode(subunitCode) - .subunitType(subunitType) - .geographicTaxonomies(geographicTaxonomies) - .institutionType(institutionType) - .build()); - } - - @Override - public List getInstitutions(String taxCode, String subunitCode) { - return institutionConnector.findByTaxCodeAndSubunitCode(taxCode, subunitCode); - } - - @Override - public Institution createInstitutionFromPda(Institution institution, String injectionInstitutionType) { - CreateInstitutionStrategy institutionStrategy = createInstitutionStrategyFactory.createInstitutionStrategyPda(injectionInstitutionType); - return institutionStrategy.createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(institution.getTaxCode()) - .description(institution.getDescription()) - .build()); - } - - @Override - public Institution createInstitution(Institution institution) { - return createInstitutionStrategyFactory.createInstitutionStrategy(institution) - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(institution.getTaxCode()) - .subunitCode(institution.getSubunitCode()) - .subunitType(Optional.ofNullable(institution.getSubunitType()) - .map(InstitutionPaSubunitType::valueOf) - .orElse(null)) - .build()); - } - - @Override - public Institution createInstitutionFromAnac(Institution institution) { - return createInstitutionStrategyFactory.createInstitutionStrategyAnac(institution) - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(institution.getTaxCode()) - .subunitCode(institution.getSubunitCode()) - .subunitType(Optional.ofNullable(institution.getSubunitType()) - .map(InstitutionPaSubunitType::valueOf) - .orElse(null)) - .build()); - } - - @Override - public Institution createInstitutionFromIvass(Institution institution) { - return createInstitutionStrategyFactory.createInstitutionStrategyIvass(institution) - .createInstitution(CreateInstitutionStrategyInput.builder() - .ivassCode(institution.getOriginId()) - .build()); - } - - @Override - public Institution createInstitutionFromInfocamere(Institution institution) { - CreateInstitutionStrategy institutionStrategy = createInstitutionStrategyFactory.createInstitutionStrategyInfocamere(institution); - return institutionStrategy.createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(institution.getTaxCode()) - .description(institution.getDescription()) - .build()); - } - - @Override - public Institution createInstitutionByExternalId(String externalId) { - checkIfAlreadyExists(externalId); - - InstitutionProxyInfo institutionProxyInfo = partyRegistryProxyConnector.getInstitutionById(externalId); - - log.debug("institution from proxy: {}", institutionProxyInfo); - log.info("getInstitution {}", institutionProxyInfo.getId()); - CategoryProxyInfo categoryProxyInfo = partyRegistryProxyConnector.getCategory(institutionProxyInfo.getOrigin(), institutionProxyInfo.getCategory()); - log.info("category from proxy: {}", categoryProxyInfo); - - Institution newInstitution = institutionMapper.fromInstitutionProxyInfo(institutionProxyInfo); - - newInstitution.setExternalId(externalId); - newInstitution.setOrigin(Origin.IPA.getValue()); - newInstitution.setCreatedAt(OffsetDateTime.now()); - - Attributes attributes = new Attributes(); - attributes.setOrigin(categoryProxyInfo.getOrigin()); - attributes.setCode(categoryProxyInfo.getCode()); - attributes.setDescription(categoryProxyInfo.getName()); - newInstitution.setAttributes(List.of(attributes)); - try { - return institutionConnector.save(newInstitution); - } catch (Exception e) { - throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); - } - } - - @Override - public Institution createPgInstitution(String taxId, String description, boolean existsInRegistry, SelfCareUser selfCareUser) { - return institutionConnector.findByExternalId(taxId) - .orElseGet(() -> createNewInstitution(taxId, description, existsInRegistry, selfCareUser)); - - } - - private Institution createNewInstitution(String taxId, String description, boolean existsInRegistry, SelfCareUser selfCareUser) { - Institution newInstitution = new Institution(); - newInstitution.setExternalId(taxId); - newInstitution.setDescription(description); - newInstitution.setInstitutionType(InstitutionType.PG); - newInstitution.setTaxCode(taxId); - newInstitution.setCreatedAt(OffsetDateTime.now()); - newInstitution.setOriginId(taxId); - - if (existsInRegistry) { - if (coreConfig.isInfoCamereEnable()) { - List institutionByLegal = partyRegistryProxyConnector.getInstitutionsByLegal(selfCareUser.getFiscalCode()); - institutionByLegal.stream() - .filter(i -> taxId.equalsIgnoreCase(i.getBusinessTaxId())) - .findFirst() - .ifPresentOrElse(institution -> newInstitution.setDescription(institution.getBusinessName()), - () -> { - throw new InvalidRequestException(String.format(CustomError.INSTITUTION_LEGAL_NOT_FOUND.getMessage(), taxId), CustomError.INSTITUTION_LEGAL_NOT_FOUND.getCode()); - }); - - NationalRegistriesProfessionalAddress professionalAddress = partyRegistryProxyConnector.getLegalAddress(taxId); - if (professionalAddress != null) { - newInstitution.setAddress(professionalAddress.getAddress()); - newInstitution.setZipCode(professionalAddress.getZipCode()); - } - } - newInstitution.setOrigin(Origin.INFOCAMERE.getValue()); - } else { - newInstitution.setOrigin(Origin.ADE.getValue()); - } - return institutionConnector.save(newInstitution); - } - - @Override - public List retrieveInstitutionProducts(Institution institution, List states) { - List onboardingList; - if (institution.getOnboarding() != null) { - if (states != null && !states.isEmpty()) { - onboardingList = institution.getOnboarding().stream() - .filter(onboarding -> states.contains(onboarding.getStatus())) - .toList(); - } else { - onboardingList = institution.getOnboarding(); - } - if (!onboardingList.isEmpty()) { - return onboardingList; - } - } - throw new ResourceNotFoundException(String.format(CustomError.PRODUCTS_NOT_FOUND_ERROR.getMessage(), institution.getId()), CustomError.PRODUCTS_NOT_FOUND_ERROR.getCode()); - } - - @Override - public Institution retrieveInstitutionProduct(String externalId, String productId) { - return institutionConnector.findByExternalIdAndProductId(externalId, productId); - } - - @Override - public List retrieveInstitutionGeoTaxonomies(Institution institution) { - log.info("Retrieving geographic taxonomies for institution {}", institution.getId()); - if (institution.getGeographicTaxonomies() != null) { - List geographicTaxonomies = institution.getGeographicTaxonomies().stream() - .map(institutionGeoTax -> retrieveGeoTaxonomies(institutionGeoTax.getCode()) - .orElseThrow(() -> new MsCoreException(String.format(CustomError.GEO_TAXONOMY_CODE_NOT_FOUND.getMessage(), institutionGeoTax.getCode()), CustomError.GEO_TAXONOMY_CODE_NOT_FOUND.getCode()))) - .toList(); - if (!geographicTaxonomies.isEmpty()) { - return geographicTaxonomies; - } - } - throw new MsCoreException(String.format("GeographicTaonomies for institution %s not found", institution.getId()), "0000"); - } - - @Override - public Optional retrieveGeoTaxonomies(String code) { - try { - return Optional.of(partyRegistryProxyConnector.getExtByCode(code)); - } catch (ResourceNotFoundException e) { - return Optional.empty(); - } - } - - @Override - public Institution updateInstitution(String institutionId, InstitutionUpdate institutionUpdate, String userId) { - Institution outdatedInstitution = institutionConnector.findById(institutionId); - - List geographicTaxonomies = retrieveGeographicTaxonomies(institutionUpdate); - Institution updatedInstitution = institutionConnector.findAndUpdate(institutionId, null, geographicTaxonomies, institutionUpdate); - - if(Objects.nonNull(institutionUpdate.getDescription())) { - try { - delegationConnector.updateDelegation(updatedInstitution); - } catch (Exception e) { - log.error(UPDATE_DELEGATION_ERROR.getMessage() + ":", e.getMessage(), e); - rollbackInstitution(outdatedInstitution); - throw new MsCoreException(PUT_INSTITUTION_ERROR.getMessage(), PUT_INSTITUTION_ERROR.getCode()); - } - try { - userApiConnector.updateUserInstitution(institutionId, institutionUpdate); - } catch (Exception e) { - log.error(String.format(UPDATE_USER_INSTITUTION_ERROR.getMessage(), Encode.forJava(institutionId)) + ":", e.getMessage(), e); - rollbackInstitution(outdatedInstitution); - delegationConnector.updateDelegation(outdatedInstitution); - throw new MsCoreException(PUT_INSTITUTION_ERROR.getMessage(), PUT_INSTITUTION_ERROR.getCode()); - } - } - return updatedInstitution; - } - - private void rollbackInstitution(Institution institution) { - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setDescription(institution.getDescription()); - institutionUpdate.setParentDescription(institution.getParentDescription()); - institutionConnector.findAndUpdate(institution.getId(), null, null, institutionUpdate); - } - - - @Override - public void updateInstitutionDelegation(String institutionId, boolean delegation) { - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setDelegation(delegation); - institutionConnector.findAndUpdate(institutionId, null, null, institutionUpdate); - } - - private List retrieveGeographicTaxonomies(InstitutionUpdate institutionUpdate) { - if (institutionUpdate.getGeographicTaxonomies() != null) { - return institutionUpdate.getGeographicTaxonomies() - .stream() - .map(geoTaxonomy -> retrieveGeoTaxonomies(geoTaxonomy.getCode()) - .orElseThrow(() -> new MsCoreException(String.format(CustomError.GEO_TAXONOMY_CODE_NOT_FOUND.getMessage(), geoTaxonomy.getCode()), geoTaxonomy.getCode()))) - .map(geo -> new InstitutionGeographicTaxonomies(geo.getGeotaxId(), geo.getDescription())) - .toList(); - } - return Collections.emptyList(); - } - - @Override - public List retrieveInstitutionByExternalIds(List validInstitutionList, String productId) { - List institutionsExternalId = institutionConnector.findByExternalIdsAndProductId(validInstitutionList, productId); - validInstitutionList.removeIf(validInstitution -> institutionsExternalId.contains(validInstitution.getId())); - return validInstitutionList; - } - - @Override - public List findInstitutionsByGeoTaxonomies(String geoTaxonomies, SearchMode searchMode) { - List geo = Arrays.stream(geoTaxonomies.split(",")) - .filter(StringUtils::hasText).toList(); - validateGeoTaxonomies(geo, searchMode); - return institutionConnector.findByGeotaxonomies(geo, searchMode); - } - - private void validateGeoTaxonomies(List geoTaxonomies, SearchMode searchMode) { - if (geoTaxonomies.isEmpty() && searchMode != SearchMode.EXACT) { - throw new InvalidRequestException("Empty geographic taxonomies filter is valid only when searchMode is exact", "0000"); - } - } - - @Override - public List findInstitutionsByProductId(String productId) { - List institutions = institutionConnector.findByProductId(productId); - if (institutions.isEmpty()) { - throw new ResourceNotFoundException(String.format("Institutions with productId %s not found", productId), "0000"); - } - return institutions; - } - - @Override - public List retrieveInstitutionByIds(List ids) { - return institutionConnector.findAllByIds(ids); - } - - @Override - public void updateCreatedAt(String institutionId, String productId, OffsetDateTime createdAt, OffsetDateTime activatedAt) { - log.trace("updateCreatedAt start"); - log.debug("updateCreatedAt institutionId = {}, productId = {}, createdAt = {}, activatedAt = {}", institutionId, productId, createdAt, activatedAt); - Assert.hasText(institutionId, "An institution ID is required."); - Assert.hasText(productId, "A product ID is required."); - Assert.notNull(createdAt, "A createdAt date is required."); - - institutionConnector.updateOnboardedProductCreatedAt(institutionId, productId, createdAt); - - log.trace("updateCreatedAt end"); - } - - public void checkIfAlreadyExists(String externalId) { - log.info("START - check institution {} already exists", externalId); - Optional opt = institutionConnector.findByExternalId(externalId); - if (opt.isPresent()) { - throw new ResourceConflictException(String.format(CustomError.CREATE_INSTITUTION_CONFLICT.getMessage(), externalId), CustomError.CREATE_INSTITUTION_CONFLICT.getCode()); - } - } - - @Override - public List getInstitutionBrokers(String productId, InstitutionType type) { - return institutionConnector.findBrokers(productId, type); - } -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationService.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationService.java deleted file mode 100644 index bb5bd08..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationService.java +++ /dev/null @@ -1,7 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -public interface MailNotificationService { - - void sendMailForDelegation(String institutionName, String productId, String partnerId); - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImpl.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImpl.java deleted file mode 100644 index e56534d..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImpl.java +++ /dev/null @@ -1,76 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.api.EmailConnector; -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.api.ProductConnector; -import it.pagopa.selfcare.mscore.api.UserApiConnector; -import it.pagopa.selfcare.mscore.config.CoreConfig; -import it.pagopa.selfcare.mscore.core.util.MailParametersMapper; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.product.entity.Product; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.Map; -import java.util.Objects; - -@Slf4j -@Service -@RequiredArgsConstructor -public class MailNotificationServiceImpl implements MailNotificationService { - - private static final String MAIL_PARAMETER_LOG = "mailParameters: {}"; - private static final String DESTINATION_MAIL_LOG = "destinationMails: {}"; - private final InstitutionConnector institutionConnector; - private final UserApiConnector userApiConnector; - private final ProductConnector productConnector; - private final UserNotificationService userNotificationService; - private final EmailConnector emailConnector; - private final MailParametersMapper mailParametersMapper; - private final CoreConfig coreConfig; - - public void sendMailForDelegation(String institutionName, String productId, String partnerId) { - try { - Map mailParameters; - Product product = productConnector.getProductById(productId); - Institution partnerInstitution = institutionConnector.findById(partnerId); - if(Objects.isNull(product) || Objects.isNull(partnerInstitution)) { - log.error("create-delegation-email-notification :: Impossible to send email. Error: partner institution or product is null"); - return; - } - mailParameters = mailParametersMapper.getDelegationNotificationParameter(institutionName, product.getTitle(), partnerInstitution.getDescription()); - log.debug(MAIL_PARAMETER_LOG, mailParameters); - List userDestinationMail = getUsersEmailByInstitutionAndProductV2(partnerInstitution.getId(), productId); - log.info(DESTINATION_MAIL_LOG, userDestinationMail); - userNotificationService.sendDelegationUserNotification(userDestinationMail, mailParametersMapper.getDelegationUserNotificationPath(), product.getTitle(), mailParameters); - log.info("create-delegation-user-email-notification :: Email successful sent"); - - if (coreConfig.isEnableSendDelegationMail()) { - List institutionDestinationMail = getDestinationMails(partnerInstitution); - log.info(DESTINATION_MAIL_LOG, institutionDestinationMail); - emailConnector.sendMail(mailParametersMapper.getDelegationNotificationPath(), institutionDestinationMail, null, product.getTitle(), mailParameters, null); - log.info("create-delegation-institution-email-notification :: Email successful sent"); - } - } catch (Exception e) { - log.error("create-delegation-email-notification :: Impossible to send email. Error: {}", e.getMessage(), e); - } - } - - private List getDestinationMails(Institution institution) { - if (coreConfig.isSendEmailToInstitution()) { - return List.of(institution.getDigitalAddress()); - } else { - return List.of(coreConfig.getInstitutionAlternativeEmail()); - } - } - - - private List getUsersEmailByInstitutionAndProductV2(String institutionId, String productId){ - if (coreConfig.isSendEmailToInstitution()) { - return userApiConnector.getUserEmails(institutionId, productId); - } - return List.of(coreConfig.getInstitutionAlternativeEmail()); - } -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingDao.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingDao.java deleted file mode 100644 index 21b1705..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingDao.java +++ /dev/null @@ -1,27 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import it.pagopa.selfcare.mscore.model.user.UserToOnboard; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@Slf4j -public class OnboardingDao { - - private final InstitutionConnector institutionConnector; - - public OnboardingDao(InstitutionConnector institutionConnector) { - this.institutionConnector = institutionConnector; - } - - - - public void rollbackPersistOnboarding(String institutionId, Onboarding onboarding) { - institutionConnector.findAndRemoveOnboarding(institutionId, onboarding); - log.debug("rollback persistOnboarding"); - } -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingService.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingService.java deleted file mode 100644 index 5cd32a2..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingService.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; - -public interface OnboardingService { - - void verifyOnboardingInfo(String externalId, String productId); - - void verifyOnboardingInfoSubunit(String taxCode, String subunitCode, String productId); - - void verifyOnboardingInfoByFilters(VerifyOnboardingFilters filters); - - Institution persistOnboarding(String institutionId, String productId, Onboarding onboarding, StringBuilder httpStatus); - - void deleteOnboardedInstitution(String institutionId, String productId); -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java deleted file mode 100644 index 91e636f..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java +++ /dev/null @@ -1,167 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.api.PecNotificationConnector; -import it.pagopa.selfcare.mscore.constant.CustomError; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.core.util.UtilEnumList; -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; -import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; -import lombok.extern.slf4j.Slf4j; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpStatus; -import org.springframework.stereotype.Service; - -import java.time.LocalDate; -import java.time.OffsetDateTime; -import java.time.temporal.ChronoUnit; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; - -import static it.pagopa.selfcare.mscore.constant.GenericError.*; - -@Slf4j -@Service -public class OnboardingServiceImpl implements OnboardingService { - private final OnboardingDao onboardingDao; - private final InstitutionService institutionService; - private final InstitutionConnector institutionConnector; - private final PecNotificationConnector pecNotificationConnector; - private Integer sendingFrequencyPecNotification; - private String epochDatePecNotification; - private LocalDate currentDate = LocalDate.now(); - - public OnboardingServiceImpl(OnboardingDao onboardingDao, - InstitutionService institutionService, - InstitutionConnector institutionConnector, - PecNotificationConnector pecNotificationConnector, - @Value("${mscore.sending-frequency-pec-notification}") Integer sendingFrequencyPecNotification, - @Value("${mscore.epoch-date-pec-notification}") String epochDatePecNotification) { - - this.onboardingDao = onboardingDao; - this.institutionService = institutionService; - this.institutionConnector = institutionConnector; - this.pecNotificationConnector = pecNotificationConnector; - this.sendingFrequencyPecNotification = sendingFrequencyPecNotification; - this.epochDatePecNotification = epochDatePecNotification; - } - - @Override - public void verifyOnboardingInfo(String externalId, String productId) { - institutionService.retrieveInstitutionsWithFilter(externalId, productId, UtilEnumList.VALID_RELATIONSHIP_STATES); - } - - @Override - public void verifyOnboardingInfoSubunit(String taxCode, String subunitCode, String productId) { - Boolean existsOnboardingValid = institutionConnector.existsByTaxCodeAndSubunitCodeAndProductAndStatusList(taxCode, - subunitCode, Optional.ofNullable(productId), UtilEnumList.VALID_RELATIONSHIP_STATES); - if (Boolean.FALSE.equals(existsOnboardingValid)) { - throw new ResourceNotFoundException(String.format(CustomError.INSTITUTION_NOT_ONBOARDED.getMessage(), taxCode, productId), - CustomError.INSTITUTION_NOT_ONBOARDED.getCode()); - } - } - - @Override - public void verifyOnboardingInfoByFilters(VerifyOnboardingFilters filters) { - filters.setValidRelationshipStates(UtilEnumList.VALID_RELATIONSHIP_STATES); - - Boolean existsOnboardingValid = institutionConnector.existsOnboardingByFilters(filters); - if (Boolean.FALSE.equals(existsOnboardingValid)) { - throw new ResourceNotFoundException(CustomError.INSTITUTION_NOT_ONBOARDED_BY_FILTERS.getMessage(), - CustomError.INSTITUTION_NOT_ONBOARDED_BY_FILTERS.getCode()); - } - } - - public void insertPecNotification(String institutionId, String productId, String digitalAddress) { - - PecNotification pecNotification = new PecNotification(); - pecNotification.setId(UUID.randomUUID().toString()); - pecNotification.setCreatedAt(OffsetDateTime.now()); - pecNotification.setProductId(productId); - pecNotification.setInstitutionId(institutionId); - pecNotification.setModuleDayOfTheEpoch(calculateModuleDayOfTheEpoch()); - pecNotification.setDigitalAddress(digitalAddress); - - if (!pecNotificationConnector.insertPecNotification(pecNotification)){ - throw new InvalidRequestException(INVALID_INSERT_PEC_NOTIFICATION_ERROR.getMessage(), INVALID_INSERT_PEC_NOTIFICATION_ERROR.getCode()); - } - - } - - public int calculateModuleDayOfTheEpoch() { - LocalDate epochStart = LocalDate.parse(this.epochDatePecNotification); - long daysDiff = ChronoUnit.DAYS.between(epochStart, this.currentDate); - int moduleDayOfTheEpoch = (int) (daysDiff % this.sendingFrequencyPecNotification); - return moduleDayOfTheEpoch; - } - - @Override - public Institution persistOnboarding(String institutionId, String - productId, Onboarding onboarding, StringBuilder httpStatus) { - - Institution institution = persistAndGetInstitution(institutionId, productId, onboarding, httpStatus); - this.insertPecNotification(institutionId, productId, institution.getDigitalAddress()); - return institution; - } - - private Institution persistAndGetInstitution(String institutionId, String productId, Onboarding onboarding, StringBuilder httpStatus) { - log.trace("persistForUpdate start"); - log.debug("persistForUpdate institutionId = {}, productId = {}", institutionId, productId); - onboarding.setStatus(RelationshipState.ACTIVE); - onboarding.setProductId(productId); - - if (Objects.isNull(onboarding.getCreatedAt())) { - onboarding.setCreatedAt(OffsetDateTime.now()); - } - - //Verify if onboarding exists, in case onboarding must fail - final Institution institution = institutionConnector.findById(institutionId); - - if (Optional.ofNullable(institution.getOnboarding()).flatMap(onboardings -> onboardings.stream() - .filter(item -> item.getProductId().equals(productId) && UtilEnumList.VALID_RELATIONSHIP_STATES.contains(item.getStatus())) - .findAny()).isPresent()) { - - httpStatus.append(HttpStatus.OK.value()); - return institution; - } - - try { - //If not exists, persist a new onboarding for product - final Institution institutionUpdated = institutionConnector.findAndUpdate(institutionId, onboarding, List.of(), null); - - log.trace("persistForUpdate end"); - httpStatus.append(HttpStatus.CREATED.value()); - return institutionUpdated; - } catch (Exception e) { - onboardingDao.rollbackPersistOnboarding(institutionId, onboarding); - log.info("rollbackPersistOnboarding completed for institution {} and product {}", institutionId, productId); - throw new InvalidRequestException(ONBOARDING_OPERATION_ERROR.getMessage() + " " + e.getMessage(), - ONBOARDING_OPERATION_ERROR.getCode()); - } - } - - @Override - public void deleteOnboardedInstitution(String institutionId, String productId) { - - log.trace("persist logic delete Onboarding - start"); - institutionConnector.findAndDeleteOnboarding(institutionId, productId); - log.trace("persist logic delete Onboarding - end"); - - log.trace("persist delete PecNotification - start"); - boolean isDeleted = pecNotificationConnector.findAndDeletePecNotification(institutionId, productId); - if (!isDeleted) { - throw new InvalidRequestException(DELETE_NOTIFICATION_OPERATION_ERROR.getMessage(), - ONBOARDING_OPERATION_ERROR.getCode()); - } - log.trace("persist delete PecNotification - end"); - - } - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationService.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationService.java deleted file mode 100644 index a556224..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationService.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import java.util.List; -import java.util.Map; - -public interface UserNotificationService { - - void sendDelegationUserNotification(List to, String templateName, String productName, Map mailParameters); - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImpl.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImpl.java deleted file mode 100644 index 13c212e..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImpl.java +++ /dev/null @@ -1,70 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import com.fasterxml.jackson.databind.ObjectMapper; -import it.pagopa.selfcare.mscore.api.FileStorageConnector; -import it.pagopa.selfcare.mscore.config.CoreConfig; -import it.pagopa.selfcare.mscore.model.onboarding.MailTemplate; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.text.StringSubstitutor; -import org.springframework.mail.MailPreparationException; -import org.springframework.stereotype.Service; -import software.amazon.awssdk.services.ses.SesClient; -import software.amazon.awssdk.services.ses.model.*; - -import java.util.List; -import java.util.Map; - -@Slf4j -@Service -@RequiredArgsConstructor -public class UserNotificationServiceImpl implements UserNotificationService { - - - private final CoreConfig coreConfig; - private final SesClient sesClient; - private final FileStorageConnector fileStorageConnector; - private final ObjectMapper mapper; - - @Override - public void sendDelegationUserNotification(List to, String templateName, String productName, Map mailParameters) { - try { - String template = fileStorageConnector.getTemplateFile(templateName); - MailTemplate mailTemplate = mapper.readValue(template, MailTemplate.class); - String html = StringSubstitutor.replace(mailTemplate.getBody(), mailParameters); - - Destination destination = Destination.builder() - .toAddresses(to) - .build(); - - Content content = Content.builder() - .data(html) - .build(); - - Content sub = Content.builder() - .data(productName + ": " + mailTemplate.getSubject()) - .build(); - - Body body = Body.builder() - .html(content) - .build(); - - Message msg = Message.builder() - .subject(sub) - .body(body) - .build(); - - SendEmailRequest emailRequest = SendEmailRequest.builder() - .destination(destination) - .message(msg) - .source(coreConfig.getSenderMail()) - .build(); - - sesClient.sendEmail(emailRequest); - } catch (Exception e) { - log.error("Error sending mail to: {} for product: {}", String.join(",", to), productName); - throw new MailPreparationException(e); - } - } - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/CloudTemplateLoader.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/CloudTemplateLoader.java deleted file mode 100644 index 3756d12..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/CloudTemplateLoader.java +++ /dev/null @@ -1,28 +0,0 @@ -package it.pagopa.selfcare.mscore.core.config; - -import freemarker.cache.URLTemplateLoader; -import lombok.extern.slf4j.Slf4j; - -import java.net.MalformedURLException; -import java.net.URISyntaxException; -import java.net.URL; - -@Slf4j -class CloudTemplateLoader extends URLTemplateLoader { - private final URL root; - - public CloudTemplateLoader(URL root) { - super(); - this.root = root; - } - - @Override - protected URL getURL(String template) { - try { - return root.toURI().resolve(template).toURL(); - } catch (MalformedURLException | URISyntaxException e) { - log.error(e.getMessage(), e); - } - return null; - } -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/FreeMarkerConfig.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/FreeMarkerConfig.java deleted file mode 100644 index e57541d..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/FreeMarkerConfig.java +++ /dev/null @@ -1,71 +0,0 @@ -package it.pagopa.selfcare.mscore.core.config; - -import freemarker.template.TemplateException; -import lombok.extern.slf4j.Slf4j; -import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; -import org.springframework.aop.interceptor.SimpleAsyncUncaughtExceptionHandler; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration; -import org.springframework.boot.task.TaskExecutorBuilder; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; -import org.springframework.scheduling.annotation.AsyncConfigurer; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import org.springframework.security.task.DelegatingSecurityContextAsyncTaskExecutor; - -import java.net.URL; -import java.util.Properties; - -@Slf4j -@Configuration -@PropertySource("classpath:config/azure-storage-config.properties") -@EnableAsync -@EnableAutoConfiguration(exclude = FreeMarkerAutoConfiguration.class) -class FreeMarkerConfig implements AsyncConfigurer { - - private final URL rootTemplateUrl; - - - @Autowired - public FreeMarkerConfig(@Value("${blob-storage.checkout-template-container}") URL rootTemplateUrl) { - log.trace("Initializing {}", FreeMarkerConfig.class.getSimpleName()); - this.rootTemplateUrl = rootTemplateUrl; - } - - - @Bean - public freemarker.template.Configuration customFreeMarkerConfiguration() throws TemplateException { - Properties settings = new Properties(); - settings.put("recognize_standard_file_extensions", "true"); - settings.setProperty("localized_lookup", "false"); - freemarker.template.Configuration configuration = new freemarker.template.Configuration(freemarker.template.Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS); - configuration.setTemplateLoader(new CloudTemplateLoader(rootTemplateUrl)); - configuration.setSettings(settings); - return configuration; - } - - - @Bean - public SimpleAsyncUncaughtExceptionHandler simpleAsyncUncaughtExceptionHandler() { - return new SimpleAsyncUncaughtExceptionHandler(); - } - - - @Override - public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { - return simpleAsyncUncaughtExceptionHandler(); - } - - - @Bean - public DelegatingSecurityContextAsyncTaskExecutor taskExecutor(TaskExecutorBuilder taskExecutorBuilder) { - final ThreadPoolTaskExecutor delegate = taskExecutorBuilder.build(); - delegate.initialize(); - return new DelegatingSecurityContextAsyncTaskExecutor(delegate); - } - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MdcTaskDecorator.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MdcTaskDecorator.java deleted file mode 100644 index 26e8320..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MdcTaskDecorator.java +++ /dev/null @@ -1,32 +0,0 @@ -package it.pagopa.selfcare.mscore.core.config; - -import lombok.extern.slf4j.Slf4j; -import org.slf4j.MDC; -import org.springframework.core.task.TaskDecorator; -import org.springframework.stereotype.Component; - -import java.util.Map; - -@Slf4j -@Component -public class MdcTaskDecorator implements TaskDecorator { - - public MdcTaskDecorator() { - log.trace("Initializing {}", MdcTaskDecorator.class.getSimpleName()); - } - - - @Override - public Runnable decorate(Runnable runnable) { - Map contextMap = MDC.getCopyOfContextMap(); - return () -> { - try { - MDC.setContextMap(contextMap); - runnable.run(); - } finally { - MDC.clear(); - } - }; - } - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MsCoreConfig.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MsCoreConfig.java deleted file mode 100644 index 0481a4d..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MsCoreConfig.java +++ /dev/null @@ -1,44 +0,0 @@ -package it.pagopa.selfcare.mscore.core.config; - -import it.pagopa.selfcare.azurestorage.AzureBlobClient; -import it.pagopa.selfcare.azurestorage.AzureBlobClientDefault; -import it.pagopa.selfcare.mscore.config.CoreConfig; -import it.pagopa.selfcare.product.service.ProductService; -import it.pagopa.selfcare.product.service.ProductServiceCacheable; -import lombok.RequiredArgsConstructor; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; -import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; -import software.amazon.awssdk.regions.Region; -import software.amazon.awssdk.services.ses.SesClient; - -@Configuration -@RequiredArgsConstructor -public class MsCoreConfig { - - private final CoreConfig config; - - @Bean - public ProductService productService(){ - AzureBlobClient azureBlobClient = new AzureBlobClientDefault(config.getBlobStorage().getConnectionStringProduct(), config.getBlobStorage().getContainerProduct()); - try{ - return new ProductServiceCacheable(azureBlobClient, config.getBlobStorage().getFilepathProduct()); - } catch(IllegalArgumentException e){ - throw new IllegalArgumentException("Found an issue when trying to serialize product json string!!"); - } - } - - @Bean - public SesClient sesClient() { - - StaticCredentialsProvider staticCredentials = StaticCredentialsProvider - .create(AwsBasicCredentials.create(config.getAwsSesSecretId(), config.getAwsSesSecretKey())); - - return SesClient.builder() - .region(Region.of(config.getAwsSesRegion())) - .credentialsProvider(staticCredentials) - .build(); - } - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/InstitutionMapper.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/InstitutionMapper.java deleted file mode 100644 index 0cae269..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/InstitutionMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package it.pagopa.selfcare.mscore.core.mapper; - -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.InstitutionProxyInfo; -import it.pagopa.selfcare.mscore.model.institution.NationalRegistriesProfessionalAddress; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -@Mapper(componentModel = "spring") -public interface InstitutionMapper { - - @Mapping(target = "id", ignore = true) - @Mapping(target = "origin", ignore = true) - Institution fromInstitutionProxyInfo(InstitutionProxyInfo proxyInfo); - - Institution fromProfessionalAddress(NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress); -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/TokenMapper.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/TokenMapper.java deleted file mode 100644 index 495c7ba..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/TokenMapper.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.pagopa.selfcare.mscore.core.mapper; - -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import it.pagopa.selfcare.mscore.model.onboarding.Token; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -@Mapper(componentModel = "spring") -public interface TokenMapper { - - @Mapping(target = "id" , source = "onboarding.tokenId") - @Mapping(target = "institutionId" , source = "institutionId") - @Mapping(target = "productId" , source = "productId") - @Mapping(target = "createdAt" , source = "onboarding.createdAt") - @Mapping(target = "updatedAt" , source = "onboarding.createdAt") - @Mapping(target = "status" , source = "onboarding.status") - @Mapping(target = "contractSigned" , source = "onboarding.contract") - Token toToken(Onboarding onboarding, String institutionId, String productId); - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategy.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategy.java deleted file mode 100644 index f937ff7..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategy.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.pagopa.selfcare.mscore.core.strategy; - -import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; -import it.pagopa.selfcare.mscore.model.institution.Institution; - -import java.util.Objects; - -public interface CreateInstitutionStrategy { - - String TYPE_MAIL_PEC = "Pec"; - - default String getExternalId(CreateInstitutionStrategyInput strategyInput) { - return Objects.isNull(strategyInput.getSubunitCode()) - ? strategyInput.getTaxCode() - : String.format("%s_%s", strategyInput.getTaxCode(), strategyInput.getSubunitCode()); - } - - Institution createInstitution(CreateInstitutionStrategyInput strategyInput); - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyAnac.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyAnac.java deleted file mode 100644 index 735eaba..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyAnac.java +++ /dev/null @@ -1,59 +0,0 @@ -package it.pagopa.selfcare.mscore.core.strategy; - -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.SaResource; -import lombok.extern.slf4j.Slf4j; - -import java.time.OffsetDateTime; - -import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; - -@Slf4j -public class CreateInstitutionStrategyAnac extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { - private final PartyRegistryProxyConnector partyRegistryProxyConnector; - - private Institution institution; - - public CreateInstitutionStrategyAnac(PartyRegistryProxyConnector partyRegistryProxyConnector, - InstitutionConnector institutionConnector) { - super(institutionConnector); - this.partyRegistryProxyConnector = partyRegistryProxyConnector; - } - - public void setInstitution(Institution institution) { - this.institution = institution; - } - - @Override - public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { - - checkIfAlreadyExistsByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), strategyInput.getSubunitCode()); - - SaResource saResource = partyRegistryProxyConnector.getSAFromAnac(strategyInput.getTaxCode()); - - institution = addFieldsToInstitution(saResource); - try { - return institutionConnector.save(institution); - } catch (Exception e) { - throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); - } - } - - private Institution addFieldsToInstitution(SaResource saResource) { - - institution.setExternalId(institution.getTaxCode()); - institution.setOrigin(Origin.ANAC.getValue()); - institution.setOriginId(saResource.getTaxCode()); - institution.setCreatedAt(OffsetDateTime.now()); - institution.setDigitalAddress(saResource.getDigitalAddress()); - institution.setDescription(saResource.getDescription()); - - return institution; - } - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyCommon.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyCommon.java deleted file mode 100644 index efbf858..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyCommon.java +++ /dev/null @@ -1,38 +0,0 @@ -package it.pagopa.selfcare.mscore.core.strategy; - -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.constant.CustomError; -import it.pagopa.selfcare.mscore.exception.ResourceConflictException; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.List; - -import static it.pagopa.selfcare.mscore.constant.CustomError.CREATE_INSTITUTION_ORIGIN_CONFLICT; - -@Slf4j -@Component -public class CreateInstitutionStrategyCommon { - protected final InstitutionConnector institutionConnector; - - public CreateInstitutionStrategyCommon(InstitutionConnector institutionConnector) { - this.institutionConnector = institutionConnector; - } - - protected void checkIfAlreadyExistsByTaxCodeAndSubunitCode(String taxCode, String subunitCode) { - List institutions = institutionConnector.findByTaxCodeAndSubunitCode(taxCode, subunitCode); - if (!institutions.isEmpty()) - throw new ResourceConflictException(String - .format(CustomError.CREATE_INSTITUTION_IPA_CONFLICT.getMessage(), taxCode, subunitCode), - CustomError.CREATE_INSTITUTION_CONFLICT.getCode()); - } - - protected void checkIfAlreadyExistByOriginAndOriginId(String origin, String originId) { - List institutions = institutionConnector.findByOriginAndOriginId(origin, originId); - if (!institutions.isEmpty()) - throw new ResourceConflictException(String.format( - CREATE_INSTITUTION_ORIGIN_CONFLICT.getMessage(), origin, originId), - CREATE_INSTITUTION_ORIGIN_CONFLICT.getCode()); - } -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyInfocamere.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyInfocamere.java deleted file mode 100644 index 655e9b7..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyInfocamere.java +++ /dev/null @@ -1,95 +0,0 @@ -package it.pagopa.selfcare.mscore.core.strategy; - -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.NationalRegistriesProfessionalAddress; -import it.pagopa.selfcare.mscore.utils.MaskDataUtils; -import lombok.extern.slf4j.Slf4j; -import org.owasp.encoder.Encode; -import org.springframework.http.HttpStatus; -import org.springframework.stereotype.Component; - -import java.time.OffsetDateTime; -import java.util.List; - -import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; -import static it.pagopa.selfcare.mscore.constant.GenericError.INSTITUTION_INFOCAMERE_NOTFOUND; - -@Slf4j -@Component -public class CreateInstitutionStrategyInfocamere extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { - - private final PartyRegistryProxyConnector partyRegistryProxyConnector; - - private Institution institution; - - public CreateInstitutionStrategyInfocamere(PartyRegistryProxyConnector partyRegistryProxyConnector, - InstitutionConnector institutionConnector) { - super(institutionConnector); - this.partyRegistryProxyConnector = partyRegistryProxyConnector; - } - - - @Override - public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { - Institution toSavedOrUpdate; - List institutions = institutionConnector.findByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), null); - if (institutions.isEmpty()) { - //Institution does not exists, it will be created - try { - NationalRegistriesProfessionalAddress professionalAddress = partyRegistryProxyConnector.getLegalAddress(strategyInput.getTaxCode()); - fillInstitutionFromInfocamereData(strategyInput.getTaxCode(), strategyInput.getDescription(), professionalAddress); - } catch (MsCoreException ex) { - if (ex.getCode().equalsIgnoreCase(String.valueOf(HttpStatus.NOT_FOUND.value()))) { - log.warn(String.format(INSTITUTION_INFOCAMERE_NOTFOUND.getMessage(), Encode.forJava(MaskDataUtils.maskString(strategyInput.getTaxCode())))); - fillInstitutionRawData(strategyInput); - } else { - throw ex; - } - } catch (ResourceNotFoundException ex) { - log.warn(String.format(INSTITUTION_INFOCAMERE_NOTFOUND.getMessage(), Encode.forJava(MaskDataUtils.maskString(strategyInput.getTaxCode())))); - fillInstitutionRawData(strategyInput); - } - - toSavedOrUpdate = institution; - } else { - //Institution exists but description could be updated - toSavedOrUpdate = institutions.get(0); - toSavedOrUpdate.setDescription(strategyInput.getDescription()); - toSavedOrUpdate.setUpdatedAt(OffsetDateTime.now()); - } - - try { - return institutionConnector.save(toSavedOrUpdate); - } catch (Exception e) { - throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); - } - } - - private void fillInstitutionRawData(CreateInstitutionStrategyInput strategyInput) { - institution.setExternalId(getExternalId(strategyInput)); - institution.setOrigin(Origin.ADE.getValue()); - institution.setOriginId(strategyInput.getTaxCode()); - institution.setCreatedAt(OffsetDateTime.now()); - } - - private void fillInstitutionFromInfocamereData(String taxCode, String description, NationalRegistriesProfessionalAddress professionalAddress) { - institution.setAddress(professionalAddress.getAddress()); - institution.setZipCode(professionalAddress.getZipCode()); - institution.setTaxCode(taxCode); - institution.setDescription(description); - institution.setExternalId(taxCode); - institution.setOrigin(Origin.INFOCAMERE.getValue()); - institution.setOriginId(taxCode); - institution.setCreatedAt(OffsetDateTime.now()); - } - - public void setInstitution(Institution institution) { - this.institution = institution; - } -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIpa.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIpa.java deleted file mode 100644 index 974f58e..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIpa.java +++ /dev/null @@ -1,200 +0,0 @@ -package it.pagopa.selfcare.mscore.core.strategy; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; -import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; -import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; -import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; -import it.pagopa.selfcare.mscore.model.institution.*; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; - -import java.time.OffsetDateTime; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; - -@Slf4j -@Component -public class CreateInstitutionStrategyIpa extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { - - private final PartyRegistryProxyConnector partyRegistryProxyConnector; - static final String DESCRIPTION_TO_REPLACE_REGEX = " - (COMUNE|PROVINCIA)"; - private final InstitutionMapper institutionMapper; - - public CreateInstitutionStrategyIpa(PartyRegistryProxyConnector partyRegistryProxyConnector, - InstitutionConnector institutionConnector, - InstitutionMapper institutionMapper) { - super(institutionConnector); - this.partyRegistryProxyConnector = partyRegistryProxyConnector; - this.institutionMapper = institutionMapper; - } - - - @Override - public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { - - checkIfAlreadyExistsByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), strategyInput.getSubunitCode()); - - final InstitutionPaSubunitType subunitType = strategyInput.getSubunitType(); - final InstitutionProxyInfo institutionProxyInfo = partyRegistryProxyConnector.getInstitutionById(strategyInput.getTaxCode()); - final CategoryProxyInfo categoryProxyInfo = partyRegistryProxyConnector.getCategory(institutionProxyInfo.getOrigin(), institutionProxyInfo.getCategory()); - - Institution institution; - if (InstitutionPaSubunitType.AOO.equals(subunitType)) { - Institution institutionEC = getOrSaveInstitutionEc(strategyInput, institutionProxyInfo, categoryProxyInfo); - institution = mappingToInstitutionIPAAoo(strategyInput, institutionEC.getId(), institutionProxyInfo, categoryProxyInfo); - } else if (InstitutionPaSubunitType.UO.equals(subunitType)) { - Institution institutionEC = getOrSaveInstitutionEc(strategyInput, institutionProxyInfo, categoryProxyInfo); - institution = mappingToInstitutionIPAUo(strategyInput, institutionEC.getId(), institutionProxyInfo, categoryProxyInfo); - } else { - log.info("createInstitution :: unsupported subunitType {}", subunitType); - institution = getInstitutionEC(strategyInput.getTaxCode(), institutionProxyInfo, categoryProxyInfo, strategyInput.getInstitutionType()); - } - - institution.setGeographicTaxonomies(strategyInput.getGeographicTaxonomies()); - - try { - return institutionConnector.save(institution); - } catch (Exception e) { - throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); - } - } - - private Institution getOrSaveInstitutionEc(CreateInstitutionStrategyInput strategyInput, - InstitutionProxyInfo institutionProxyInfo, - CategoryProxyInfo categoryProxyInfo) { - try { - Optional opt = institutionConnector.findByExternalId(strategyInput.getTaxCode()); - if (opt.isEmpty()) { - Institution institutionEC = getInstitutionEC(strategyInput.getTaxCode(), institutionProxyInfo, categoryProxyInfo, InstitutionType.PA); - return institutionConnector.save(institutionEC); - } else { - return opt.get(); - } - } catch (Exception e) { - throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); - } - } - - private Institution getInstitutionEC(String taxCode, InstitutionProxyInfo institutionProxyInfo, CategoryProxyInfo categoryProxyInfo, InstitutionType institutionType) { - - Institution newInstitution = institutionMapper.fromInstitutionProxyInfo(institutionProxyInfo); - GeographicTaxonomies geotax = partyRegistryProxyConnector.getExtByCode(institutionProxyInfo.getIstatCode()); - - newInstitution.setExternalId(taxCode); - newInstitution.setInstitutionType(Objects.requireNonNullElse(institutionType, InstitutionType.PA)); - newInstitution.setOrigin(Origin.IPA.getValue()); - newInstitution.setCreatedAt(OffsetDateTime.now()); - newInstitution.setCity(Optional.ofNullable(geotax.getDescription()) - .map(s -> s.replaceAll(DESCRIPTION_TO_REPLACE_REGEX, "")) - .orElse(null)); - newInstitution.setCounty(geotax.getProvinceAbbreviation()); - newInstitution.setCountry(geotax.getCountryAbbreviation()); - - Attributes attributes = new Attributes(); - attributes.setOrigin(categoryProxyInfo.getOrigin()); - attributes.setCode(categoryProxyInfo.getCode()); - attributes.setDescription(categoryProxyInfo.getName()); - newInstitution.setAttributes(List.of(attributes)); - - return newInstitution; - } - - - private Institution mappingToInstitutionIPAAoo(CreateInstitutionStrategyInput strategyInput, - String rootParentInstitutionId, - InstitutionProxyInfo institutionProxyInfo, - CategoryProxyInfo categoryProxyInfo) { - - AreaOrganizzativaOmogenea areaOrganizzativaOmogenea = partyRegistryProxyConnector.getAooById(strategyInput.getSubunitCode()); - GeographicTaxonomies geotax = partyRegistryProxyConnector.getExtByCode(areaOrganizzativaOmogenea.getCodiceComuneISTAT()); - Institution newInstitution = new Institution(); - newInstitution.setInstitutionType(InstitutionType.PA); - newInstitution.setOriginId(areaOrganizzativaOmogenea.getId()); - newInstitution.setDescription(areaOrganizzativaOmogenea.getDenominazioneAoo()); - newInstitution.setDigitalAddress(TYPE_MAIL_PEC.equals(areaOrganizzativaOmogenea.getTipoMail1()) - ? areaOrganizzativaOmogenea.getMail1() : institutionProxyInfo.getDigitalAddress()); - newInstitution.setAddress(areaOrganizzativaOmogenea.getIndirizzo()); - newInstitution.setZipCode(areaOrganizzativaOmogenea.getCAP()); - newInstitution.setTaxCode(areaOrganizzativaOmogenea.getCodiceFiscaleEnte()); - newInstitution.setSubunitCode(strategyInput.getSubunitCode()); - newInstitution.setSubunitType(InstitutionPaSubunitType.AOO.name()); - newInstitution.setParentDescription(institutionProxyInfo.getDescription()); - newInstitution.setRootParentId(rootParentInstitutionId); - newInstitution.setExternalId(getExternalId(strategyInput)); - newInstitution.setOrigin(Optional.ofNullable(areaOrganizzativaOmogenea.getOrigin()) - .map(Origin::name) - .orElse(null)); - newInstitution.setCreatedAt(OffsetDateTime.now()); - newInstitution.setCounty(geotax.getProvinceAbbreviation()); - newInstitution.setCountry(geotax.getCountryAbbreviation()); - newInstitution.setCity(Optional.ofNullable(geotax.getDescription()) - .map(s -> s.replaceAll(DESCRIPTION_TO_REPLACE_REGEX, "")) - .orElse(null)); - newInstitution.setIstatCode(areaOrganizzativaOmogenea.getCodiceComuneISTAT()); - Attributes attributes = new Attributes(); - attributes.setOrigin(categoryProxyInfo.getOrigin()); - attributes.setCode(categoryProxyInfo.getCode()); - attributes.setDescription(categoryProxyInfo.getName()); - newInstitution.setAttributes(List.of(attributes)); - - return newInstitution; - } - - private Institution mappingToInstitutionIPAUo(CreateInstitutionStrategyInput strategyInput, - String rootParentInstitutionId, - InstitutionProxyInfo institutionProxyInfo, - CategoryProxyInfo categoryProxyInfo) { - - UnitaOrganizzativa unitaOrganizzativa = partyRegistryProxyConnector.getUoById(strategyInput.getSubunitCode()); - GeographicTaxonomies geotax = partyRegistryProxyConnector.getExtByCode(unitaOrganizzativa.getCodiceComuneISTAT()); - Institution newInstitution = new Institution(); - newInstitution.setInstitutionType(InstitutionType.PA); - newInstitution.setOriginId(unitaOrganizzativa.getId()); - newInstitution.setDescription(unitaOrganizzativa.getDescrizioneUo()); - newInstitution.setDigitalAddress(TYPE_MAIL_PEC.equals(unitaOrganizzativa.getTipoMail1()) - ? unitaOrganizzativa.getMail1() : institutionProxyInfo.getDigitalAddress()); - newInstitution.setAddress(unitaOrganizzativa.getIndirizzo()); - newInstitution.setZipCode(unitaOrganizzativa.getCAP()); - newInstitution.setTaxCode(unitaOrganizzativa.getCodiceFiscaleEnte()); - newInstitution.setSubunitCode(strategyInput.getSubunitCode()); - newInstitution.setSubunitType(InstitutionPaSubunitType.UO.name()); - newInstitution.setParentDescription(institutionProxyInfo.getDescription()); - newInstitution.setRootParentId(rootParentInstitutionId); - newInstitution.setCity(Optional.ofNullable(geotax.getDescription()) - .map(s -> s.replaceAll(DESCRIPTION_TO_REPLACE_REGEX, "")) - .orElse(null)); - newInstitution.setCounty(geotax.getProvinceAbbreviation()); - newInstitution.setCountry(geotax.getCountryAbbreviation()); - newInstitution.setIstatCode(unitaOrganizzativa.getCodiceComuneISTAT()); - if (StringUtils.isNotBlank(unitaOrganizzativa.getCodiceUniAoo())) { - PaAttributes paAttributes = new PaAttributes(); - paAttributes.setAooParentCode(unitaOrganizzativa.getCodiceUniAoo()); - newInstitution.setPaAttributes(paAttributes); - } - - newInstitution.setExternalId(getExternalId(strategyInput)); - newInstitution.setOrigin(Optional.ofNullable(unitaOrganizzativa.getOrigin()) - .map(Origin::name) - .orElse(null)); - newInstitution.setCreatedAt(OffsetDateTime.now()); - - Attributes attributes = new Attributes(); - attributes.setOrigin(categoryProxyInfo.getOrigin()); - attributes.setCode(categoryProxyInfo.getCode()); - attributes.setDescription(categoryProxyInfo.getName()); - newInstitution.setAttributes(List.of(attributes)); - - return newInstitution; - } - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIvass.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIvass.java deleted file mode 100644 index 565d6da..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIvass.java +++ /dev/null @@ -1,58 +0,0 @@ -package it.pagopa.selfcare.mscore.core.strategy; - -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.model.institution.ASResource; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import lombok.extern.slf4j.Slf4j; - -import java.time.OffsetDateTime; - -import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; - -@Slf4j -public class CreateInstitutionStrategyIvass extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { - private final PartyRegistryProxyConnector partyRegistryProxyConnector; - - private Institution institution; - - public CreateInstitutionStrategyIvass(PartyRegistryProxyConnector partyRegistryProxyConnector, - InstitutionConnector institutionConnector) { - super(institutionConnector); - this.partyRegistryProxyConnector = partyRegistryProxyConnector; - } - - public void setInstitution(Institution institution) { - this.institution = institution; - } - - @Override - public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { - checkIfAlreadyExistByOriginAndOriginId(Origin.IVASS.name(), strategyInput.getIvassCode()); - - ASResource asResource = partyRegistryProxyConnector.getASFromIvass(strategyInput.getIvassCode()); - - institution = addFieldsToInstitution(asResource); - try { - return institutionConnector.save(institution); - } catch (Exception e) { - throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); - } - } - - private Institution addFieldsToInstitution(ASResource asResource) { - institution.setTaxCode(asResource.getTaxCode()); - institution.setExternalId(asResource.getOriginId()); - institution.setOrigin(Origin.IVASS.getValue()); - institution.setOriginId(asResource.getOriginId()); - institution.setCreatedAt(OffsetDateTime.now()); - institution.setDigitalAddress(asResource.getDigitalAddress()); - institution.setDescription(asResource.getDescription()); - - return institution; - } - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPda.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPda.java deleted file mode 100644 index ffeb97f..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPda.java +++ /dev/null @@ -1,136 +0,0 @@ -package it.pagopa.selfcare.mscore.core.strategy; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; -import it.pagopa.selfcare.mscore.constant.CustomError; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; -import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.utils.MaskDataUtils; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.stereotype.Component; - -import java.time.OffsetDateTime; -import java.util.List; - -import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; - -@Slf4j -@Component -public class CreateInstitutionStrategyPda extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { - - private final PartyRegistryProxyConnector partyRegistryProxyConnector; - - private final InstitutionMapper institutionMapper; - - private String injectionInstitutionType; - - public CreateInstitutionStrategyPda(PartyRegistryProxyConnector partyRegistryProxyConnector, - InstitutionConnector institutionConnector, - InstitutionMapper institutionMapper) { - super(institutionConnector); - this.partyRegistryProxyConnector = partyRegistryProxyConnector; - this.institutionMapper = institutionMapper; - } - - - @Override - public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { - checkIfAlreadyExistsByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), strategyInput.getSubunitCode()); - - Institution institution; - try { - institution = searchInstitutionOnIpa(strategyInput.getTaxCode()); - } catch (ResourceNotFoundException ex) { - institution = searchInstitutionOnInfocamere(strategyInput); - } - - try { - return institutionConnector.save(institution); - } catch (Exception e) { - throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); - } - } - - private Institution searchInstitutionOnIpa(String taxCode) { - InstitutionProxyInfo institutionProxyInfo; - Institution institution = null; - try { - institutionProxyInfo = partyRegistryProxyConnector.getInstitutionById(taxCode); - if (institutionProxyInfo != null) { - final CategoryProxyInfo categoryProxyInfo = partyRegistryProxyConnector.getCategory(institutionProxyInfo.getOrigin(), institutionProxyInfo.getCategory()); - institution = mapInstitutionFromIpa(taxCode, institutionProxyInfo, categoryProxyInfo); - } - } catch (MsCoreException ex) { - if(ex.getCode().equalsIgnoreCase(String.valueOf(HttpStatus.NOT_FOUND.value()))) { - log.debug("Institution with taxCode: {} not found in IPA", MaskDataUtils.maskString(taxCode)); - throw new ResourceNotFoundException(CustomError.INSTITUTION_NOT_FOUND_IN_REGISTRY.getMessage(), CustomError.INSTITUTION_NOT_FOUND_IN_REGISTRY.getCode()); - } - - throw ex; - } catch (ResourceNotFoundException ex) { - log.debug("Institution with taxCode: {} not found in IPA", MaskDataUtils.maskString(taxCode)); - throw ex; - } - - return institution; - } - - private Institution searchInstitutionOnInfocamere(CreateInstitutionStrategyInput strategyInput){ - try { - NationalRegistriesProfessionalAddress professionalAddress = partyRegistryProxyConnector.getLegalAddress(strategyInput.getTaxCode()); - return getInstitutionFromInfocamere(strategyInput.getTaxCode(), strategyInput.getDescription(), professionalAddress); - } catch (MsCoreException ex) { - if(ex.getCode().equalsIgnoreCase(String.valueOf(HttpStatus.NOT_FOUND.value()))) { - log.warn("Institution with taxCode {} not found in registry INFOCAMERE", MaskDataUtils.maskString(strategyInput.getTaxCode())); - throw new ResourceNotFoundException(String.format(CustomError.INSTITUTION_NOT_FOUND_IN_REGISTRY.getMessage(), strategyInput.getDescription()), CustomError.INSTITUTION_NOT_FOUND_IN_REGISTRY.getCode()); - } - throw ex; - } - } - - private Institution getInstitutionFromInfocamere(String taxCode, String description, NationalRegistriesProfessionalAddress professionalAddress) { - Institution newInstitution = institutionMapper.fromProfessionalAddress(professionalAddress); - newInstitution.setTaxCode(taxCode); - newInstitution.setDescription(description); - newInstitution.setExternalId(taxCode); - newInstitution.setOrigin(Origin.INFOCAMERE.getValue()); - if(injectionInstitutionType.equalsIgnoreCase(InstitutionType.PT.name())) { - newInstitution.setInstitutionType(InstitutionType.PT); - }else{ - newInstitution.setInstitutionType(InstitutionType.PG); - } - newInstitution.setOriginId(taxCode); - newInstitution.setCreatedAt(OffsetDateTime.now()); - newInstitution.setImported(true); - - return newInstitution; - } - - private Institution mapInstitutionFromIpa(String taxCode, InstitutionProxyInfo institutionProxyInfo, CategoryProxyInfo categoryProxyInfo) { - - Institution newInstitution = institutionMapper.fromInstitutionProxyInfo(institutionProxyInfo); - newInstitution.setExternalId(taxCode); - newInstitution.setOrigin(Origin.IPA.getValue()); - newInstitution.setCreatedAt(OffsetDateTime.now()); - newInstitution.setImported(true); - newInstitution.setInstitutionType(InstitutionType.PA); - - Attributes attributes = new Attributes(); - attributes.setOrigin(categoryProxyInfo.getOrigin()); - attributes.setCode(categoryProxyInfo.getCode()); - attributes.setDescription(categoryProxyInfo.getName()); - newInstitution.setAttributes(List.of(attributes)); - - return newInstitution; - } - - public void setInjectionInstitutionType(String injectionInstitutionType) { - this.injectionInstitutionType = injectionInstitutionType; - } -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyRaw.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyRaw.java deleted file mode 100644 index d59ab73..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyRaw.java +++ /dev/null @@ -1,44 +0,0 @@ -package it.pagopa.selfcare.mscore.core.strategy; - -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import org.springframework.stereotype.Component; - -import java.time.OffsetDateTime; - -import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; - -@Component -public class CreateInstitutionStrategyRaw extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { - - private Institution institution; - - public CreateInstitutionStrategyRaw(InstitutionConnector institutionConnector) { - super(institutionConnector); - } - - @Override - public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { - - checkIfAlreadyExistsByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), strategyInput.getSubunitCode()); - - institution.setExternalId(getExternalId(strategyInput)); - institution.setOrigin(Origin.SELC.getValue()); - institution.setOriginId("SELC_" + institution.getExternalId()); - institution.setCreatedAt(OffsetDateTime.now()); - - try { - return institutionConnector.save(institution); - } catch (Exception e) { - throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); - } - - } - - public void setInstitution(Institution institution) { - this.institution = institution; - } -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/factory/CreateInstitutionStrategyFactory.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/factory/CreateInstitutionStrategyFactory.java deleted file mode 100644 index 1481f00..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/factory/CreateInstitutionStrategyFactory.java +++ /dev/null @@ -1,60 +0,0 @@ -package it.pagopa.selfcare.mscore.core.strategy.factory; - -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; -import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; -import it.pagopa.selfcare.mscore.core.strategy.*; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class CreateInstitutionStrategyFactory { - - private final InstitutionConnector institutionConnector; - private final PartyRegistryProxyConnector partyRegistryProxyConnector; - private final InstitutionMapper institutionMapper; - - public CreateInstitutionStrategyFactory(InstitutionConnector institutionConnector, - PartyRegistryProxyConnector partyRegistryProxyConnector, - InstitutionMapper institutionMapper) { - this.institutionConnector = institutionConnector; - this.partyRegistryProxyConnector = partyRegistryProxyConnector; - this.institutionMapper = institutionMapper; - } - - public CreateInstitutionStrategy createInstitutionStrategy(Institution institution) { - CreateInstitutionStrategyRaw strategy = new CreateInstitutionStrategyRaw(institutionConnector); - strategy.setInstitution(institution); - return strategy; - } - - public CreateInstitutionStrategy createInstitutionStrategyIpa() { - return new CreateInstitutionStrategyIpa(partyRegistryProxyConnector, institutionConnector, institutionMapper); - } - - public CreateInstitutionStrategy createInstitutionStrategyAnac(Institution institution) { - CreateInstitutionStrategyAnac strategy = new CreateInstitutionStrategyAnac(partyRegistryProxyConnector, institutionConnector); - strategy.setInstitution(institution); - return strategy; - } - public CreateInstitutionStrategy createInstitutionStrategyIvass(Institution institution) { - CreateInstitutionStrategyIvass strategy = new CreateInstitutionStrategyIvass(partyRegistryProxyConnector, institutionConnector); - strategy.setInstitution(institution); - return strategy; - } - - public CreateInstitutionStrategy createInstitutionStrategyPda(String injectionInstitutionType) { - CreateInstitutionStrategyPda strategy = new CreateInstitutionStrategyPda(partyRegistryProxyConnector, institutionConnector, institutionMapper); - strategy.setInjectionInstitutionType(injectionInstitutionType); - return strategy; - } - - public CreateInstitutionStrategy createInstitutionStrategyInfocamere(Institution institution) { - CreateInstitutionStrategyInfocamere strategy = new CreateInstitutionStrategyInfocamere(partyRegistryProxyConnector, institutionConnector); - strategy.setInstitution(institution); - return strategy; - } - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/input/CreateInstitutionStrategyInput.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/input/CreateInstitutionStrategyInput.java deleted file mode 100644 index 2232202..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/input/CreateInstitutionStrategyInput.java +++ /dev/null @@ -1,22 +0,0 @@ -package it.pagopa.selfcare.mscore.core.strategy.input; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; -import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; -import lombok.Builder; -import lombok.Data; - -import java.util.List; - -@Builder -@Data -public class CreateInstitutionStrategyInput { - - private String taxCode; - private String ivassCode; - private String description; - private InstitutionPaSubunitType subunitType; - private List geographicTaxonomies; - private String subunitCode; - private InstitutionType institutionType; -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/Constants.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/Constants.java deleted file mode 100644 index bd6c2a5..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/Constants.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.core.util; - -public class Constants { - public static final String PRICING_PLAN_PREMIUM_CHECKBOX = "pricingPlanPremiumCheckbox"; - public static final String PRICING_PLAN_PREMIUM = "pricingPlanPremium"; - public static final String PRICING_PLAN_PREMIUM_BASE = "pricingPlanPremiumBase"; - public static final String PRICING_PLAN_PREMIUM_BASE_CHECKBOX = "pricingPlanPremiumBaseCheckbox"; - public static final String PRICING_PLAN_BASE_CHECKBOX = "pricingPlanBaseCheckbox"; - public static final String PRICING_PLAN_FAST_CHECKBOX = "pricingPlanFastCheckbox"; - public static final String PRICING_PLAN = "pricingPlan"; - public static final String INSTITUTION_REA = "institutionREA"; - public static final String INSTITUTION_SHARE_CAPITAL = "institutionShareCapital"; - public static final String INSTITUTION_BUSINESS_REGISTER_PLACE = "institutionBusinessRegisterPlace"; -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/InstitutionPaSubunitType.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/InstitutionPaSubunitType.java deleted file mode 100644 index 1145e7f..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/InstitutionPaSubunitType.java +++ /dev/null @@ -1,5 +0,0 @@ -package it.pagopa.selfcare.mscore.core.util; - -public enum InstitutionPaSubunitType { - AOO, UO -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapper.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapper.java deleted file mode 100644 index 0b84580..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapper.java +++ /dev/null @@ -1,32 +0,0 @@ -package it.pagopa.selfcare.mscore.core.util; - -import it.pagopa.selfcare.mscore.config.MailTemplateConfig; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.HashMap; -import java.util.Map; - -@Component -public class MailParametersMapper { - - @Autowired - MailTemplateConfig mailTemplateConfig; - - public Map getDelegationNotificationParameter(String institutionName, String productName, String partnerName) { - Map map = new HashMap<>(); - map.put(mailTemplateConfig.getNotificationProductName(), productName); - map.put(mailTemplateConfig.getInstitutionDescription(), institutionName); - map.put(mailTemplateConfig.getDelegationPartnerName(), partnerName); - return map; - } - - public String getDelegationNotificationPath() { - return mailTemplateConfig.getDelegationNotificationPath(); - } - - public String getDelegationUserNotificationPath() { - return mailTemplateConfig.getDelegationUserNotificationPath(); - } - -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtils.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtils.java deleted file mode 100644 index bae37c8..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtils.java +++ /dev/null @@ -1,65 +0,0 @@ -package it.pagopa.selfcare.mscore.core.util; - -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.model.user.UserBinding; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -import static it.pagopa.selfcare.mscore.constant.CustomError.ONBOARDING_INFO_INSTITUTION_NOT_FOUND; -import static it.pagopa.selfcare.mscore.core.util.UtilEnumList.ONBOARDING_INFO_DEFAULT_RELATIONSHIP_STATES; - -@Slf4j -@NoArgsConstructor(access = AccessLevel.NONE) -public class OnboardingInfoUtils { - - public static List convertStatesToRelationshipsState(String[] states) { - return Arrays.stream(states) - .map(RelationshipState::valueOf) - .collect(Collectors.toList()); - } - - public static List getUserInstitutionsWithProductStatusIn(List userInstitutionToBeFiltered, List relationshipStateList) { - List result = new ArrayList<>(); - for(UserBinding userBinding: userInstitutionToBeFiltered){ - List products = userBinding.getProducts().stream().filter(product -> relationshipStateList.contains(product.getStatus())).collect(Collectors.toList()); - if(!products.isEmpty()){ - userBinding.setProducts(products); - result.add(userBinding); - } - } - if (result.isEmpty()) { - throw new ResourceNotFoundException(String.format(ONBOARDING_INFO_INSTITUTION_NOT_FOUND.getMessage(), "states : " + StringUtils.join(relationshipStateList, ", ")), ONBOARDING_INFO_INSTITUTION_NOT_FOUND.getCode()); - } - return result; - } - - public static Institution findOnboardingLinkedToProductWithStateIn(UserBinding userBinding, Institution onboardedInstitution, List relationshipStateList) { - List onboardings = new ArrayList<>(); - for(OnboardedProduct product: userBinding.getProducts()){ - onboardings.addAll(onboardedInstitution.getOnboarding().stream().filter(onboarding -> product.getProductId().equalsIgnoreCase(onboarding.getProductId()) - && relationshipStateList.contains(onboarding.getStatus())) - .collect(Collectors.toList())); - } - onboardedInstitution.setOnboarding(onboardings); - return onboardedInstitution; - } - - public static List getRelationShipStateList(String[] states) { - if (states == null || states.length == 0) { - return ONBOARDING_INFO_DEFAULT_RELATIONSHIP_STATES; - } else { - return convertStatesToRelationshipsState(states); - } - } -} diff --git a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/UtilEnumList.java b/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/UtilEnumList.java deleted file mode 100644 index b3a619a..0000000 --- a/apps/institution-ms-new/core/src/main/java/it/pagopa/selfcare/mscore/core/util/UtilEnumList.java +++ /dev/null @@ -1,32 +0,0 @@ -package it.pagopa.selfcare.mscore.core.util; - -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -import java.util.List; - -@NoArgsConstructor(access = AccessLevel.NONE) -public class UtilEnumList { - - public static final List PRODUCT_RELATIONSHIP_STATES = - List.of(RelationshipState.PENDING, - RelationshipState.REJECTED, - RelationshipState.TOBEVALIDATED); - public static final List VALID_RELATIONSHIP_STATES = - List.of(RelationshipState.ACTIVE, - RelationshipState.SUSPENDED); - public static final List ONBOARDING_INFO_DEFAULT_RELATIONSHIP_STATES = - List.of(RelationshipState.ACTIVE, - RelationshipState.PENDING); - - public static final List VERIFY_TOKEN_RELATIONSHIP_STATES = - List.of(RelationshipState.TOBEVALIDATED, - RelationshipState.PENDING); - - public static final List ADMIN_PARTY_ROLE = - List.of(PartyRole.MANAGER, - PartyRole.SUB_DELEGATE, - PartyRole.DELEGATE); -} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactoryTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactoryTest.java deleted file mode 100644 index 3f74040..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactoryTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertThrows; - -@ExtendWith(SpringExtension.class) -class ClassPathStreamFactoryTest { - - @InjectMocks - private ClassPathStreamFactory classPathStreamFactory; - - @Test - void getUrl() { - assertNotNull(classPathStreamFactory.getUrl("url")); - } - - - @Test - void getUrl2() { - assertThrows(InvalidRequestException.class, () -> classPathStreamFactory.getUrl("a b c")); - } - -} - diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamTest.java deleted file mode 100644 index 7434371..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertThrows; - -class ClassPathStreamTest { - - @Test - void testConstructor() { - assertNull((new ClassPathStream("Path")).getStream()); - } - - @Test - void testGetReader() { - assertThrows(NullPointerException.class, () ->(new ClassPathStream("Path")).getReader()); - } - - -} - diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ContractServiceTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ContractServiceTest.java deleted file mode 100644 index e795845..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ContractServiceTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.api.FileStorageConnector; -import it.pagopa.selfcare.mscore.config.CoreConfig; -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import it.pagopa.selfcare.mscore.model.onboarding.ResourceResponse; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.web.multipart.MultipartFile; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -@ExtendWith(MockitoExtension.class) -class ContractServiceTest { - - @InjectMocks - private ContractService contractService; - - @Mock - private FileStorageConnector fileStorageConnector; - - @Mock - private CoreConfig coreConfig; - - @Test - void getLogoFile() { - when(coreConfig.getLogoPath()).thenReturn("42"); - when(fileStorageConnector.getTemplateFile(any())).thenReturn("42"); - assertNotNull(contractService.getLogoFile()); - } - - @Test - void getLogoFile1() { - when(coreConfig.getLogoPath()).thenReturn("42"); - InvalidRequestException ioException = mock(InvalidRequestException.class); - when(fileStorageConnector.getTemplateFile(any())).thenThrow(ioException); - assertThrows(InvalidRequestException.class, () -> contractService.getLogoFile()); - } - - @Test - void getFile() { - when(fileStorageConnector.getFile(any())).thenReturn(new ResourceResponse()); - assertNotNull(contractService.getFile("path")); - } - - @Test - void deleteContract() { - doNothing().when(fileStorageConnector).removeContract(any(), any()); - assertDoesNotThrow(() -> contractService.deleteContract("fileName", "tokenId")); - } - - @Test - void uploadContract() { - when(fileStorageConnector.uploadContract(any(), any())).thenReturn("fileName"); - MultipartFile file = mock(MultipartFile.class); - assertDoesNotThrow(() -> contractService.uploadContract("fileName", file)); - } -} - diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java deleted file mode 100644 index 8ab55f5..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java +++ /dev/null @@ -1,385 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.api.DelegationConnector; -import it.pagopa.selfcare.mscore.constant.DelegationState; -import it.pagopa.selfcare.mscore.constant.Order; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.exception.ResourceConflictException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.delegation.Delegation; -import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; -import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; -import it.pagopa.selfcare.mscore.model.delegation.PageInfo; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.api.function.Executable; -import org.mockito.ArgumentCaptor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -import java.util.List; -import java.util.Optional; - -import static it.pagopa.selfcare.mscore.constant.GenericError.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -@ExtendWith(MockitoExtension.class) -class DelegationServiceImplTest { - @Mock - private DelegationConnector delegationConnector; - - @InjectMocks - private DelegationServiceImpl delegationServiceImpl; - - @Mock - private MailNotificationService mailNotificationService; - - @Mock - private InstitutionService institutionService; - - private static final Delegation dummyDelegationProdIo; - private static final Delegation dummyDelegationProdPagopa; - - private static final Delegation dummyDelegationTaxCode; - - static { - dummyDelegationProdIo = new Delegation(); - dummyDelegationProdIo.setId("id"); - dummyDelegationProdIo.setTo("to"); - dummyDelegationProdIo.setFrom("from"); - dummyDelegationProdIo.setProductId("prod-io"); - - dummyDelegationProdPagopa = new Delegation(); - dummyDelegationProdPagopa.setId("id"); - dummyDelegationProdPagopa.setProductId("prod-pagopa"); - dummyDelegationProdPagopa.setTo("taxCodeTo"); - dummyDelegationProdPagopa.setFrom("from"); - - dummyDelegationTaxCode = new Delegation(); - dummyDelegationTaxCode.setToTaxCode("taxCodeTo"); - dummyDelegationTaxCode.setFromTaxCode("taxCodeFrom"); - dummyDelegationTaxCode.setProductId("prod-pagopa"); - dummyDelegationTaxCode.setId("id"); - } - - /** - * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} - */ - @Test - void testCreateDelegationWithProductProdIo() { - Institution institutionTo = new Institution(); - institutionTo.setId("idTo"); - institutionTo.setTaxCode("taxCodeTo"); - institutionTo.setInstitutionType(InstitutionType.PA); - Institution institutionFrom = new Institution(); - institutionTo.setId("idFrom"); - institutionTo.setTaxCode("taxCodeFrom"); - institutionTo.setInstitutionType(InstitutionType.PT); - when(delegationConnector.save(dummyDelegationProdIo)).thenAnswer(arg ->arg.getArguments()[0]); - when(institutionService.retrieveInstitutionById(dummyDelegationProdIo.getFrom())).thenReturn(institutionFrom); - when(institutionService.retrieveInstitutionById(dummyDelegationProdIo.getTo())).thenReturn(institutionTo); - doNothing().when(mailNotificationService).sendMailForDelegation(any(), any(), any()); - doNothing().when(institutionService).updateInstitutionDelegation(any(),anyBoolean()); - Delegation response = delegationServiceImpl.createDelegation(dummyDelegationProdIo); - verify(delegationConnector).save(dummyDelegationProdIo); - assertNotNull(response); - assertNotNull(response.getId()); - assertEquals(dummyDelegationProdIo.getId(), response.getId()); - assertEquals(institutionTo.getTaxCode(), response.getToTaxCode()); - assertEquals(institutionFrom.getTaxCode(), response.getFromTaxCode()); - assertEquals(institutionTo.getInstitutionType(), response.getBrokerType()); - assertEquals(institutionFrom.getInstitutionType(), response.getInstitutionType()); - } - - /** - * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} - */ - @Test - void testCreateDelegationWithSendMailError() { - Institution institution = new Institution(); - institution.setId("id"); - when(institutionService.retrieveInstitutionById(any())).thenReturn(institution); - doThrow(new MsCoreException(SEND_MAIL_FOR_DELEGATION_ERROR.getMessage(), SEND_MAIL_FOR_DELEGATION_ERROR.getCode())) - .when(mailNotificationService) - .sendMailForDelegation(any(), any(), any()); - assertDoesNotThrow(() -> delegationServiceImpl.createDelegation(dummyDelegationProdPagopa)); - verify(mailNotificationService).sendMailForDelegation(any(), any(), any()); - } - - /** - * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} - */ - @Test - void testCreateDelegationWithError() { - Institution institution = new Institution(); - institution.setId("id"); - when(institutionService.retrieveInstitutionById(any())).thenReturn(institution); - when(delegationConnector.save(any())).thenThrow(new MsCoreException(CREATE_DELEGATION_ERROR.getMessage(), CREATE_DELEGATION_ERROR.getCode())); - assertThrows(MsCoreException.class, () -> delegationServiceImpl.createDelegation(dummyDelegationProdIo)); - verify(delegationConnector).save(any()); - } - - /** - * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} - */ - @Test - void testCreateDelegationWithConflict() { - Institution institution = new Institution(); - institution.setId("id"); - when(institutionService.retrieveInstitutionById(dummyDelegationProdIo.getTo())).thenReturn(institution); - when(institutionService.retrieveInstitutionById(dummyDelegationProdIo.getFrom())).thenReturn(institution); - when(delegationServiceImpl.checkIfExistsWithStatus(dummyDelegationProdIo, DelegationState.ACTIVE)).thenReturn(true); - assertThrows(ResourceConflictException.class, () -> delegationServiceImpl.createDelegation(dummyDelegationProdIo)); - verifyNoMoreInteractions(delegationConnector); - } - - /** - * Method under test: {@link DelegationService#checkIfExistsWithStatus(Delegation, DelegationState)} - */ - @Test - void testCheckIfExists() { - Delegation delegation = new Delegation(); - when(delegationConnector.checkIfExistsWithStatus(any(), any())).thenReturn(true); - boolean check = delegationServiceImpl.checkIfExistsWithStatus(delegation, DelegationState.ACTIVE); - assertTrue(check); - } - - /** - * Method under test: {@link DelegationServiceImpl#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} - */ - @Test - void find_shouldGetData() { - //Given - Delegation delegation = new Delegation(); - delegation.setId("id"); - when(delegationConnector.find(any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(List.of(delegation)); - //When - List response = delegationServiceImpl.getDelegations("from", "to", "productId", null, - null, Optional.empty(), Optional.of(0), Optional.of(100)); - //Then - verify(delegationConnector).find(any(), any(), any(), any(), any(), any(), any(), any()); - - assertNotNull(response); - assertFalse(response.isEmpty()); - assertEquals(delegation.getId(), response.get(0).getId()); - } - - /** - * Method under test: {@link DelegationServiceImpl#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} - */ - @Test - void find_shouldGetData_fullMode() { - //Given - Delegation delegation = new Delegation(); - delegation.setId("id"); - when(delegationConnector.find(any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(List.of(delegation)); - //When - List response = delegationServiceImpl.getDelegations("from", null, "productId", null, - null, Optional.of(Order.DESC), Optional.of(0), Optional.of(0)); - //Then - verify(delegationConnector).find(any(), any(), any(), any(), any(), any(), any(), any()); - - assertNotNull(response); - assertFalse(response.isEmpty()); - assertEquals(delegation.getId(), response.get(0).getId()); - } - - /** - * Method under test: {@link DelegationServiceImpl#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} - */ - @Test - void find_shouldGetData_fullMode_defaultPage() { - //Given - Delegation delegation = new Delegation(); - delegation.setId("id"); - when(delegationConnector.find(any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(List.of(delegation)); - //When - List response = delegationServiceImpl.getDelegations("from", null, "productId", null, - null, Optional.of(Order.DESC), Optional.empty(), Optional.empty()); - //Then - verify(delegationConnector).find(any(), any(), any(), any(), any(), any(), any(), any()); - - assertNotNull(response); - assertFalse(response.isEmpty()); - assertEquals(delegation.getId(), response.get(0).getId()); - } - - /** - * Method under test: {@link DelegationServiceImpl#getDelegationsV2(GetDelegationParameters)} - */ - @Test - void getDelegationsV2_shouldGetData() { - //Given - Delegation delegation = new Delegation(); - delegation.setId("id"); - DelegationWithPagination delegationWithPagination = new DelegationWithPagination(List.of(delegation), new PageInfo(10, 0, 10, 1)); - when(delegationConnector.findAndCount(any())).thenReturn(delegationWithPagination); - GetDelegationParameters delegationParameters = createDelegationParameters("from", "to", "productId", null, - null, null, 0, 100); - - //When - DelegationWithPagination response = delegationServiceImpl.getDelegationsV2(delegationParameters); - //Then - ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(GetDelegationParameters.class); - verify(delegationConnector).findAndCount(argumentCaptor.capture()); - assertNotNull(argumentCaptor); - assertEquals(argumentCaptor.getValue(), delegationParameters); - - assertNotNull(response); - assertNotNull(response.getDelegations()); - assertNotNull(response.getPageInfo()); - assertFalse(response.getDelegations().isEmpty()); - assertEquals(delegation.getId(), response.getDelegations().get(0).getId()); - } - - @Test - void testCreateDelegationFromTaxCode() { - Institution institutionTo = new Institution(); - institutionTo.setId("id"); - institutionTo.setTaxCode("taxCodeTo"); - when(delegationConnector.save(any())).thenReturn(dummyDelegationTaxCode); - Institution institutionFrom = new Institution(); - institutionFrom.setId("id"); - institutionFrom.setTaxCode("taxCodeFrom"); - when(institutionService.getInstitutions(dummyDelegationTaxCode.getToTaxCode(), dummyDelegationTaxCode.getToSubunitCode())).thenReturn(List.of(institutionTo)); - when(institutionService.getInstitutions(dummyDelegationTaxCode.getFromTaxCode(), dummyDelegationTaxCode.getFromSubunitCode())).thenReturn(List.of(institutionFrom)); - doNothing().when(institutionService).updateInstitutionDelegation(any(),anyBoolean()); - Delegation response = delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationTaxCode); - verify(delegationConnector).save(any()); - assertNotNull(response); - assertNotNull(response.getId()); - assertEquals(dummyDelegationTaxCode.getId(), response.getId()); - assertEquals(institutionTo.getTaxCode(), response.getToTaxCode()); - assertEquals(institutionFrom.getTaxCode(), response.getFromTaxCode()); - assertEquals(institutionTo.getInstitutionType(), response.getInstitutionType()); - assertEquals(institutionFrom.getInstitutionType(), response.getBrokerType()); - } - - @Test - void testCreateDelegationFromTaxCodeWithSubunitCode() { - Institution institutionTo = new Institution(); - institutionTo.setId("id"); - institutionTo.setTaxCode("taxCodeTo"); - Institution institutionFrom = new Institution(); - institutionFrom.setId("id"); - institutionFrom.setTaxCode("taxCodeFrom"); - when(delegationConnector.findAndActivate(anyString(), anyString(), anyString())).thenReturn(dummyDelegationTaxCode); - when(institutionService.getInstitutions(dummyDelegationTaxCode.getToTaxCode(), dummyDelegationTaxCode.getToSubunitCode())).thenReturn(List.of(institutionTo)); - when(institutionService.getInstitutions(dummyDelegationTaxCode.getFromTaxCode(), dummyDelegationTaxCode.getFromSubunitCode())).thenReturn(List.of(institutionFrom)); - doNothing().when(institutionService).updateInstitutionDelegation(any(),anyBoolean()); - when(delegationConnector.checkIfExistsWithStatus(dummyDelegationTaxCode, DelegationState.ACTIVE)).thenReturn(false); - when(delegationConnector.checkIfExistsWithStatus(dummyDelegationTaxCode, DelegationState.DELETED)).thenReturn(true); - Delegation response = delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationTaxCode); - verify(delegationConnector).findAndActivate(anyString(), anyString(), anyString()); - assertNotNull(response); - assertNotNull(response.getId()); - assertEquals(dummyDelegationTaxCode.getId(), response.getId()); - assertEquals(dummyDelegationTaxCode.getFromTaxCode(), response.getFromTaxCode()); - assertEquals(dummyDelegationTaxCode.getToTaxCode(), response.getToTaxCode()); - } - - /** - * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} - */ - @Test - void testCreateDelegationFromTaxCodeWithError() { - Institution institution = new Institution(); - institution.setId("id"); - when(institutionService.getInstitutions(dummyDelegationTaxCode.getToTaxCode(), null)).thenReturn(List.of(institution)); - when(institutionService.getInstitutions(dummyDelegationTaxCode.getFromTaxCode(), null)).thenReturn(List.of(institution)); - when(delegationConnector.save(any())).thenThrow(new MsCoreException(CREATE_DELEGATION_ERROR.getMessage(), CREATE_DELEGATION_ERROR.getCode())); - assertThrows(MsCoreException.class, () -> delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationTaxCode)); - verify(delegationConnector).save(any()); - } - - /** - * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} - */ - @Test - void testCreateDelegationFromTaxCodeWithResourceNotFoundException() { - when(institutionService.getInstitutions(any(), any())).thenReturn(List.of()); - assertThrows(ResourceNotFoundException.class, () -> delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationProdPagopa)); - } - - /** - * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} - */ - @Test - void testCreateDelegationFromTaxCodeConflict() { - Institution institution = new Institution(); - institution.setId("id"); - when(institutionService.getInstitutions(dummyDelegationTaxCode.getToTaxCode(), dummyDelegationProdPagopa.getToSubunitCode())).thenReturn(List.of(institution)); - when(institutionService.getInstitutions(dummyDelegationTaxCode.getFromTaxCode(), dummyDelegationProdPagopa.getFromSubunitCode())).thenReturn(List.of(institution)); - when(delegationConnector.checkIfExistsWithStatus(dummyDelegationTaxCode, DelegationState.ACTIVE)).thenReturn(true); - assertThrows(ResourceConflictException.class, () -> delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationTaxCode)); - } - - @Test - void testDeleteDelegationByDelegationId_whenDelegationisNotActive() { - Delegation delegation = new Delegation(); - delegation.setTo("id"); - delegation.setStatus(DelegationState.DELETED); - when(delegationConnector.findByIdAndModifyStatus("id", DelegationState.DELETED)).thenReturn(delegation); - when(delegationConnector.checkIfDelegationsAreActive("id")).thenReturn(false); - Executable executable = () -> delegationServiceImpl.deleteDelegationByDelegationId("id"); - assertDoesNotThrow(executable); - verify(institutionService).updateInstitutionDelegation("id", false); - } - - @Test - void testDeleteDelegationByDelegationId_whenDelegationisActive() { - Delegation delegation = new Delegation(); - delegation.setTo("id"); - delegation.setStatus(DelegationState.DELETED); - when(delegationConnector.findByIdAndModifyStatus("id", DelegationState.DELETED)).thenReturn(delegation); - when(delegationConnector.checkIfDelegationsAreActive("id")).thenReturn(true); - Executable executable = () -> delegationServiceImpl.deleteDelegationByDelegationId("id"); - assertDoesNotThrow(executable); - verify(institutionService, times(0)).updateInstitutionDelegation("id", false); - } - - @Test - void testDeleteDelegationByDelegationId_whenFindAndModifyStatusThrowsException() { - Delegation delegation = new Delegation(); - delegation.setTo("id"); - delegation.setStatus(DelegationState.DELETED); - when(delegationConnector.findByIdAndModifyStatus("id", DelegationState.DELETED)) - .thenThrow(new MsCoreException(DELETE_DELEGATION_ERROR.getMessage(), DELETE_DELEGATION_ERROR.getCode())); - assertThrows(MsCoreException.class, () -> delegationServiceImpl.deleteDelegationByDelegationId("id")); - verify(delegationConnector, times(0)).checkIfDelegationsAreActive(any()); - } - - @Test - void testDeleteDelegationByDelegationId_whenUpdateInstitutionDelegationThrowsException() { - Delegation delegation = new Delegation(); - delegation.setTo("id"); - delegation.setStatus(DelegationState.DELETED); - when(delegationConnector.findByIdAndModifyStatus("id", DelegationState.DELETED)).thenReturn(delegation); - when(delegationConnector.checkIfDelegationsAreActive("id")).thenReturn(false); - doThrow(new MsCoreException(DELETE_DELEGATION_ERROR.getMessage(), DELETE_DELEGATION_ERROR.getCode())) - .when(institutionService).updateInstitutionDelegation("id", false); - assertThrows(MsCoreException.class, () -> delegationServiceImpl.deleteDelegationByDelegationId("id")); - verify(delegationConnector, times(1)).findByIdAndModifyStatus("id", DelegationState.ACTIVE); - } - - - private GetDelegationParameters createDelegationParameters(String from, String to, String productId, - String search, String taxCode, Order order, - Integer page, Integer size) { - return GetDelegationParameters.builder() - .from(from) - .to(to) - .productId(productId) - .search(search) - .taxCode(taxCode) - .order(order) - .page(page) - .size(size) - .build(); - } - -} \ No newline at end of file diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ExternalServiceImplTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ExternalServiceImplTest.java deleted file mode 100644 index fe5732c..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/ExternalServiceImplTest.java +++ /dev/null @@ -1,170 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import it.pagopa.selfcare.mscore.model.institution.GeographicTaxonomies; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -import java.util.ArrayList; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -@ExtendWith(MockitoExtension.class) -class ExternalServiceImplTest { - - @InjectMocks - private ExternalServiceImpl externalServiceImpl; - - @Mock - private InstitutionService institutionService; - - - /** - * Method under test: {@link ExternalServiceImpl#getInstitutionByExternalId(String)} - */ - @Test - void testGetInstitutionByExternalId() { - Institution institution = new Institution(); - when(institutionService.retrieveInstitutionByExternalId(any())).thenReturn(institution); - assertSame(institution, externalServiceImpl.getInstitutionByExternalId("42")); - verify(institutionService).retrieveInstitutionByExternalId(any()); - } - - /** - * Method under test: {@link ExternalServiceImpl#getInstitutionByExternalId(String)} - */ - @Test - void testGetInstitutionByExternalId2() { - Institution institution = new Institution(); - when(institutionService.retrieveInstitutionByExternalId(any())).thenReturn(institution); - assertSame(institution, externalServiceImpl.getInstitutionByExternalId("42")); - verify(institutionService).retrieveInstitutionByExternalId(any()); - } - - /** - * Method under test: {@link ExternalServiceImpl#getInstitutionByExternalId(String)} - */ - @Test - void testGetInstitutionByExternalId3() { - when(institutionService.retrieveInstitutionByExternalId(any())) - .thenThrow(new InvalidRequestException("An error occurred", "Code")); - assertThrows(InvalidRequestException.class, () -> externalServiceImpl.getInstitutionByExternalId("42")); - verify(institutionService).retrieveInstitutionByExternalId(any()); - } - - - /** - * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProduct(String, String)} - */ - @Test - void testRetrieveInstitutionProduct() { - Institution institution = new Institution(); - when(institutionService.retrieveInstitutionProduct(any(), any())).thenReturn(institution); - assertSame(institution, externalServiceImpl.retrieveInstitutionProduct("42", "42")); - verify(institutionService).retrieveInstitutionProduct(any(), any()); - } - - /** - * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProduct(String, String)} - */ - @Test - void testRetrieveInstitutionProduct2() { - Institution institution = new Institution(); - when(institutionService.retrieveInstitutionProduct(any(), any())).thenReturn(institution); - assertSame(institution, externalServiceImpl.retrieveInstitutionProduct("42", "42")); - verify(institutionService).retrieveInstitutionProduct(any(), any()); - } - - /** - * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProduct(String, String)} - */ - @Test - void testRetrieveInstitutionProduct3() { - when(institutionService.retrieveInstitutionProduct(any(), any())) - .thenThrow(new InvalidRequestException("An error occurred", "Code")); - assertThrows(InvalidRequestException.class, () -> externalServiceImpl.retrieveInstitutionProduct("42", "42")); - verify(institutionService).retrieveInstitutionProduct(any(), any()); - } - - /** - * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProductsByExternalId(String, List)} - */ - @Test - void testRetrieveInstitutionProductsByExternalId() { - when(institutionService.retrieveInstitutionByExternalId(any())).thenReturn(new Institution()); - ArrayList onboardingList = new ArrayList<>(); - when(institutionService.retrieveInstitutionProducts(any(), any())) - .thenReturn(onboardingList); - List actualRetrieveInstitutionProductsByExternalIdResult = externalServiceImpl - .retrieveInstitutionProductsByExternalId("42", new ArrayList<>()); - assertSame(onboardingList, actualRetrieveInstitutionProductsByExternalIdResult); - assertTrue(actualRetrieveInstitutionProductsByExternalIdResult.isEmpty()); - verify(institutionService).retrieveInstitutionByExternalId(any()); - verify(institutionService).retrieveInstitutionProducts(any(), any()); - } - - /** - * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProductsByExternalId(String, List)} - */ - @Test - void testRetrieveInstitutionProductsByExternalId2() { - when(institutionService.retrieveInstitutionByExternalId(any())) - .thenThrow(new InvalidRequestException("An error occurred", "Code")); - List list = new ArrayList<>(); - assertThrows(InvalidRequestException.class, - () -> externalServiceImpl.retrieveInstitutionProductsByExternalId("42", list)); - verify(institutionService).retrieveInstitutionByExternalId(any()); - } - - /** - * Method under test: {@link ExternalServiceImpl#retrieveInstitutionByIds(List)} - */ - @Test - void testRetrieveInstitutionByIds() { - ArrayList institutionList = new ArrayList<>(); - when(institutionService.retrieveInstitutionByIds(any())).thenReturn(institutionList); - List actualRetrieveInstitutionByIdsResult = externalServiceImpl - .retrieveInstitutionByIds(new ArrayList<>()); - assertSame(institutionList, actualRetrieveInstitutionByIdsResult); - assertTrue(actualRetrieveInstitutionByIdsResult.isEmpty()); - verify(institutionService).retrieveInstitutionByIds(any()); - } - - /** - * Method under test: {@link ExternalServiceImpl#retrieveInstitutionByIds(List)} - */ - @Test - void testRetrieveInstitutionByIds2() { - when(institutionService.retrieveInstitutionByIds(any())) - .thenThrow(new InvalidRequestException("An error occurred", "Code")); - List ids = new ArrayList<>(); - assertThrows(InvalidRequestException.class, - () -> externalServiceImpl.retrieveInstitutionByIds(ids)); - verify(institutionService).retrieveInstitutionByIds(any()); - } - - /** - * Method under test: {@link ExternalServiceImpl#retrieveInstitutionGeoTaxonomiesByExternalId(String)} - */ - @Test - void testRetrieveInstitutionGeoTaxonomiesByExternalId() { - when(institutionService.retrieveInstitutionByExternalId(any())).thenReturn(new Institution()); - ArrayList geographicTaxonomiesList = new ArrayList<>(); - when(institutionService.retrieveInstitutionGeoTaxonomies(any())) - .thenReturn(geographicTaxonomiesList); - List actualRetrieveInstitutionGeoTaxonomiesByExternalIdResult = externalServiceImpl - .retrieveInstitutionGeoTaxonomiesByExternalId("42"); - assertSame(geographicTaxonomiesList, actualRetrieveInstitutionGeoTaxonomiesByExternalIdResult); - assertTrue(actualRetrieveInstitutionGeoTaxonomiesByExternalIdResult.isEmpty()); - verify(institutionService).retrieveInstitutionByExternalId(any()); - verify(institutionService).retrieveInstitutionGeoTaxonomies(any()); - } -} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplPdaTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplPdaTest.java deleted file mode 100644 index f0ede7e..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplPdaTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.core.strategy.CreateInstitutionStrategy; -import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -public class InstitutionServiceImplPdaTest { - @InjectMocks - private InstitutionServiceImpl institutionServiceImpl; - @Mock - private CreateInstitutionStrategyFactory createInstitutionStrategyFactory; - - @Mock - private CreateInstitutionStrategy createInstitutionStrategy; - - @Test - void testCreateInstitutionFromPda() { - when(createInstitutionStrategyFactory.createInstitutionStrategyPda(any())).thenReturn(createInstitutionStrategy); - when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); - Institution institution = institutionServiceImpl.createInstitutionFromPda(new Institution(), "EC"); - assertNotNull(institution); - } -} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplTest.java deleted file mode 100644 index 0fc09af..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplTest.java +++ /dev/null @@ -1,1102 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.commons.base.security.SelfCareUser; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.api.DelegationConnector; -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; -import it.pagopa.selfcare.mscore.api.UserApiConnector; -import it.pagopa.selfcare.mscore.config.CoreConfig; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.constant.SearchMode; -import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; -import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapperImpl; -import it.pagopa.selfcare.mscore.core.mapper.TokenMapper; -import it.pagopa.selfcare.mscore.core.mapper.TokenMapperImpl; -import it.pagopa.selfcare.mscore.core.strategy.CreateInstitutionStrategy; -import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; -import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.exception.ResourceConflictException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.model.onboarding.TokenUser; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.api.function.Executable; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.Spy; -import org.mockito.junit.jupiter.MockitoExtension; - -import java.time.OffsetDateTime; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -@ExtendWith(MockitoExtension.class) -class InstitutionServiceImplTest { - @Mock - private InstitutionConnector institutionConnector; - - @Mock - private DelegationConnector delegationConnector; - - @Mock - private UserApiConnector userApiConnector; - - @InjectMocks - private InstitutionServiceImpl institutionServiceImpl; - - @Mock - private PartyRegistryProxyConnector partyRegistryProxyConnector; - - @Mock - private CoreConfig coreConfig; - - @Mock - private CreateInstitutionStrategyFactory createInstitutionStrategyFactory; - - @Mock - private CreateInstitutionStrategy createInstitutionStrategy; - - @Spy - private InstitutionMapper institutionMapper = new InstitutionMapperImpl(); - - @Spy - private TokenMapper tokenMapper = new TokenMapperImpl(); - - - private static final InstitutionProxyInfo dummyInstitutionProxyInfo; - private static final CategoryProxyInfo dummyCategoryProxyInfo; - - static { - dummyInstitutionProxyInfo = new InstitutionProxyInfo(); - dummyInstitutionProxyInfo.setAddress("42 Main St"); - dummyInstitutionProxyInfo.setAoo("Aoo"); - dummyInstitutionProxyInfo.setCategory("Category"); - dummyInstitutionProxyInfo.setDescription("The characteristics of someone or something"); - dummyInstitutionProxyInfo.setDigitalAddress("42 Main St"); - dummyInstitutionProxyInfo.setId("42"); - dummyInstitutionProxyInfo.setO("foo"); - dummyInstitutionProxyInfo.setOrigin("Origin"); - dummyInstitutionProxyInfo.setOriginId("42"); - dummyInstitutionProxyInfo.setOu("Ou"); - dummyInstitutionProxyInfo.setTaxCode("Tax Code"); - dummyInstitutionProxyInfo.setZipCode("21654"); - - dummyCategoryProxyInfo = new CategoryProxyInfo(); - dummyCategoryProxyInfo.setCode("Code"); - dummyCategoryProxyInfo.setKind("Kind"); - dummyCategoryProxyInfo.setName("Name"); - dummyCategoryProxyInfo.setOrigin("Origin"); - } - - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionById(String)} - */ - @Test - void testRetrieveInstitutionById() { - Institution institution = new Institution(); - when(institutionConnector.findById(any())).thenReturn(institution); - assertSame(institution, institutionServiceImpl.retrieveInstitutionById("42")); - verify(institutionConnector).findById(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionById(String)} - */ - @Test - void testRetrieveInstitutionById2() { - when(institutionConnector.findById(any())) - .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); - assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.retrieveInstitutionById("42")); - verify(institutionConnector).findById(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalId(String)} - */ - @Test - void testRetrieveInstitutionByExternalId() { - Institution institution = new Institution(); - when(institutionConnector.findByExternalId(any())).thenReturn(Optional.of(institution)); - assertSame(institution, institutionServiceImpl.retrieveInstitutionByExternalId("42")); - verify(institutionConnector).findByExternalId(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalId(String)} - */ - @Test - void testRetrieveInstitutionByExternalId2() { - when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); - assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.retrieveInstitutionByExternalId("42")); - verify(institutionConnector).findByExternalId(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalId(String)} - */ - @Test - void testRetrieveInstitutionByExternalId3() { - when(institutionConnector.findByExternalId(any())) - .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); - assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.retrieveInstitutionByExternalId("42")); - verify(institutionConnector).findByExternalId(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} - */ - @Test - void shouldThrowExceptionOnCreateInstitutionByExternalIdWhenInstitutionFounded() { - when(institutionConnector.findByExternalId(any())).thenReturn(Optional.of(new Institution())); - assertThrows(ResourceConflictException.class, () -> institutionServiceImpl.createInstitutionByExternalId("42")); - verify(institutionConnector).findByExternalId(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} - */ - @Test - void testCreateInstitutionByExternalId2() { - Institution institution = new Institution(); - when(institutionConnector.save(any())).thenReturn(institution); - when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); - - when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); - when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); - assertSame(institution, institutionServiceImpl.createInstitutionByExternalId("42")); - verify(institutionConnector).save(any()); - verify(institutionConnector).findByExternalId(any()); - verify(partyRegistryProxyConnector).getCategory(any(), any()); - verify(partyRegistryProxyConnector).getInstitutionById(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} - */ - @Test - void shouldThrowExceptionOnCreationInstitutionByExternalIdWhenSaveAlreadyExists() { - when(institutionConnector.save(any())) - .thenThrow(new ResourceConflictException("An error occurred", "START - check institution {} already exists")); - when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); - - when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); - when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); - assertThrows(MsCoreException.class, () -> institutionServiceImpl.createInstitutionByExternalId("42")); - verify(institutionConnector).save(any()); - verify(institutionConnector).findByExternalId(any()); - verify(partyRegistryProxyConnector).getCategory(any(), any()); - verify(partyRegistryProxyConnector).getInstitutionById(any()); - } - - - /** - * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} - */ - @Test - void shouldThrowExceptionOnCreationInstitutionByExternalIdIfAlreadyExists() { - when(institutionConnector.findByExternalId(any())) - .thenThrow(new InvalidRequestException("An error occurred", "START - check institution {} already exists")); - assertThrows(InvalidRequestException.class, () -> institutionServiceImpl.createInstitutionByExternalId("42")); - verify(institutionConnector).findByExternalId(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} - */ - @Test - void testCreateInstitutionByExternalId6() { - - when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); - when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); - Institution institution = new Institution(); - when(institutionConnector.save(any())).thenReturn(institution); - when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); - assertSame(institution, institutionServiceImpl.createInstitutionByExternalId("42")); - verify(partyRegistryProxyConnector).getCategory(any(), any()); - verify(partyRegistryProxyConnector).getInstitutionById(any()); - verify(institutionConnector).save(any()); - verify(institutionConnector).findByExternalId(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} - */ - @Test - void testCreatePgInstitutionNotFoundInstitution() { - String taxId = "taxId"; - Institution institution = new Institution(); - institution.setTaxCode(taxId); - when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); - InstitutionByLegal institutionByLegal = new InstitutionByLegal(); - institutionByLegal.setBusinessName("test name"); - institutionByLegal.setBusinessTaxId(taxId); - when(partyRegistryProxyConnector.getInstitutionsByLegal(any())).thenReturn(List.of(institutionByLegal)); - NationalRegistriesProfessionalAddress professionalAddress = new NationalRegistriesProfessionalAddress(); - professionalAddress.setAddress("via di prova"); - professionalAddress.setZipCode("00100"); - when(partyRegistryProxyConnector.getLegalAddress(taxId)).thenReturn(professionalAddress); - when(institutionConnector.save(any())).thenReturn(institution); - when(coreConfig.isInfoCamereEnable()).thenReturn(true); - Institution response = institutionServiceImpl.createPgInstitution(taxId, "42", true, mock(SelfCareUser.class)); - assertEquals(response.getTaxCode(), taxId); - verify(institutionConnector).findByExternalId(any()); - verify(institutionConnector).save(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} - */ - @Test - void testCreatePgInstitutionFoundedInstitution() { - String taxId = "taxId"; - Institution institution = new Institution(); - institution.setId("institutionId"); - institution.setTaxCode(taxId); - institution.setExternalId(taxId); - when(institutionConnector.findByExternalId(taxId)).thenReturn(Optional.of(institution)); - Institution response = institutionServiceImpl.createPgInstitution(taxId, "42", true, mock(SelfCareUser.class)); - assertEquals(response.getId(), institution.getId()); - assertEquals(response.getTaxCode(), taxId); - assertEquals(response.getExternalId(), taxId); - verify(institutionConnector).findByExternalId(any()); - verify(institutionConnector, never()).save(any()); - } - - @Test - void testGetOnboardingInstitutionByProductId() { - List onboardings = new ArrayList<>(); - when(institutionConnector.findOnboardingByIdAndProductId(any(), any())).thenReturn(onboardings); - List onboardingList = institutionServiceImpl.getOnboardingInstitutionByProductId("id", "id"); - assertTrue(onboardingList.isEmpty()); - } - - @Test - void testGetInstitutionsWithTaxCodeSubunitCode() { - List institutionList = new ArrayList<>(); - when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())).thenReturn(institutionList); - List institutions = institutionServiceImpl.getInstitutions("id", "id", null, null); - assertTrue(institutions.isEmpty()); - Mockito.verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); - } - - @Test - void testGetInstitutionsWithOriginOriginId() { - List institutionList = new ArrayList<>(); - when(institutionConnector.findByOriginAndOriginId(any(), any())).thenReturn(institutionList); - List institutions = institutionServiceImpl.getInstitutions(null, null, "id", "id"); - assertTrue(institutions.isEmpty()); - Mockito.verify(institutionConnector).findByOriginAndOriginId(any(), any()); - } - - @Test - void testGetInstitutionsFails() { - assertThrows(InvalidRequestException.class, () -> institutionServiceImpl.getInstitutions("id", "id", "id", "id")); - } - - /** - * Method under test: {@link InstitutionServiceImpl#createInstitutionFromIpa(String, InstitutionPaSubunitType, String, List, InstitutionType)} - */ - @Test - void testCreateInstitutionFromIpa() { - when(createInstitutionStrategyFactory.createInstitutionStrategyIpa()).thenReturn(createInstitutionStrategy); - when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); - Institution institution = institutionServiceImpl.createInstitutionFromIpa("id", InstitutionPaSubunitType.AOO,"id", List.of(), InstitutionType.PA); - assertNotNull(institution); - } - - @Test - void testCreateInstitution() { - when(createInstitutionStrategyFactory.createInstitutionStrategy(any())).thenReturn(createInstitutionStrategy); - when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); - Institution institution = institutionServiceImpl.createInstitution(new Institution()); - assertNotNull(institution); - } - - @Test - void testCreateInstitutionFromAnac() { - when(createInstitutionStrategyFactory.createInstitutionStrategyAnac(any())).thenReturn(createInstitutionStrategy); - when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); - Institution institution = institutionServiceImpl.createInstitutionFromAnac(new Institution()); - assertNotNull(institution); - } - - @Test - void testCreateInstitutionFromIvass() { - when(createInstitutionStrategyFactory.createInstitutionStrategyIvass(any())).thenReturn(createInstitutionStrategy); - when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); - Institution institution = institutionServiceImpl.createInstitutionFromIvass(new Institution()); - assertNotNull(institution); - } - - - @Test - void testCreateInstitutionFromInfocamere() { - when(createInstitutionStrategyFactory.createInstitutionStrategyInfocamere(any())).thenReturn(createInstitutionStrategy); - when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); - Institution institution = institutionServiceImpl.createInstitutionFromInfocamere(new Institution()); - assertNotNull(institution); - } - - /** - * Method under test: {@link InstitutionServiceImpl#getInstitutionsByProductId(String, Integer, Integer)} - */ - @Test - void testInstitutionsInstitutionsByProductId() { - List institutions = new ArrayList<>(); - when(institutionConnector.findInstitutionsByProductId(any(), any(), any())).thenReturn(institutions); - List institutionsResult = institutionServiceImpl.getInstitutionsByProductId("id", 0, 1); - assertTrue(institutionsResult.isEmpty()); - } - /** - * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} - */ - @Test - void testCreatePgInstitution4() { - Institution institution = new Institution(); - when(institutionConnector.save(any())).thenReturn(institution); - when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); - - InstitutionByLegal institutionByLegal = new InstitutionByLegal(); - institutionByLegal.setBusinessName("START - check institution {} already exists"); - institutionByLegal.setBusinessTaxId("42"); - - SelfCareUser selfCareUser = mock(SelfCareUser.class); - Institution institutionResult = institutionServiceImpl.createPgInstitution("42", "42", false, selfCareUser); - assertSame(institution, institutionResult); - } - - /** - * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} - */ - @Test - void testCreatePgInstitution2() { - Institution institution = new Institution(); - when(coreConfig.isInfoCamereEnable()).thenReturn(true); - List list = new ArrayList<>(); - InstitutionByLegal institutionByLegal = new InstitutionByLegal(); - institutionByLegal.setBusinessName("START - check institution {} already exists"); - institutionByLegal.setBusinessTaxId("42"); - list.add(institutionByLegal); - when(partyRegistryProxyConnector.getInstitutionsByLegal(any())).thenReturn(list); - when(institutionConnector.save(any())).thenReturn(institution); - when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); - - SelfCareUser selfCareUser = mock(SelfCareUser.class); - assertSame(institution, institutionServiceImpl.createPgInstitution("42", "42", true, selfCareUser)); - } - - /** - * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} - */ - @Test - void testCreatePgInstitution5() { - when(institutionConnector.findByExternalId(any())) - .thenThrow(new ResourceNotFoundException("An error occurred", "START - check institution {} already exists")); - assertThrows(ResourceNotFoundException.class, - () -> institutionServiceImpl.createPgInstitution("42", "42", true, mock(SelfCareUser.class))); - verify(institutionConnector).findByExternalId(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} - */ - @Test - void testCreatePgInstitution6() { - Institution institution = new Institution(); - when(institutionConnector.save(any())).thenReturn(institution); - when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); - - InstitutionByLegal institutionByLegal = new InstitutionByLegal(); - institutionByLegal.setBusinessName("START - check institution {} already exists"); - institutionByLegal.setBusinessTaxId("42"); - - SelfCareUser selfCareUser = mock(SelfCareUser.class); - assertSame(institution, institutionServiceImpl.createPgInstitution("42", "42", false, selfCareUser)); - verify(institutionConnector).save(any()); - verify(institutionConnector).findByExternalId(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} - */ - @Test - void testCreatePgInstitution7() { - when(institutionConnector.save(any())) - .thenThrow(new ResourceConflictException("An error occurred", "START - check institution {} already exists")); - when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); - - InstitutionByLegal institutionByLegal = new InstitutionByLegal(); - institutionByLegal.setBusinessName("START - check institution {} already exists"); - institutionByLegal.setBusinessTaxId("42"); - - SelfCareUser selfCareUser = mock(SelfCareUser.class); - assertThrows(ResourceConflictException.class, - () -> institutionServiceImpl.createPgInstitution("42", "42", true, selfCareUser)); - } - - /** - * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} - */ - @Test - void testCreatePgInstitution9() { - InstitutionByLegal institutionByLegal = new InstitutionByLegal(); - institutionByLegal.setBusinessName("START - check institution {} already exists"); - institutionByLegal.setBusinessTaxId("42"); - - NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); - nationalRegistriesProfessionalAddress.setAddress("42 Main St"); - nationalRegistriesProfessionalAddress.setZipCode("21654"); - Institution institution = new Institution(); - when(institutionConnector.save(any())).thenReturn(institution); - when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); - SelfCareUser selfCareUser = mock(SelfCareUser.class); - assertSame(institution, institutionServiceImpl.createPgInstitution("42", "42", true, selfCareUser)); - } - - /** - * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} - */ - @Test - void testCreatePgInstitution14() { - InstitutionByLegal institutionByLegal = new InstitutionByLegal(); - institutionByLegal.setBusinessName("START - check institution {} already exists"); - institutionByLegal.setBusinessTaxId("42"); - - NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); - nationalRegistriesProfessionalAddress.setAddress("42 Main St"); - nationalRegistriesProfessionalAddress.setZipCode("21654"); - Institution institution = new Institution(); - when(institutionConnector.save(any())).thenReturn(institution); - when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); - SelfCareUser selfCareUser = mock(SelfCareUser.class); - assertSame(institution, institutionServiceImpl.createPgInstitution("42", "42", false, selfCareUser)); - verify(institutionConnector).save(any()); - verify(institutionConnector).findByExternalId(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionProducts(Institution, List)} - */ - @Test - void testRetrieveInstitutionProducts() { - Institution institution = new Institution(); - Onboarding onboarding = new Onboarding(); - onboarding.setStatus(RelationshipState.PENDING); - List list = new ArrayList<>(); - list.add(RelationshipState.PENDING); - institution.setOnboarding(List.of(onboarding)); - assertEquals(1, institutionServiceImpl.retrieveInstitutionProducts(institution, list).size()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionProducts(Institution, List)} - */ - @Test - void testRetrieveInstitutionProducts3() { - Institution institution = new Institution(); - Onboarding onboarding = new Onboarding(); - onboarding.setStatus(RelationshipState.PENDING); - institution.setOnboarding(List.of(onboarding)); - List list = new ArrayList<>(); - assertEquals(1, institutionServiceImpl.retrieveInstitutionProducts(institution, list).size()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionProduct(String, String)} - */ - @Test - void testRetrieveInstitutionProduct2() { - - Institution institution = new Institution(); - when(institutionConnector.findByExternalIdAndProductId(any(), any())).thenReturn(institution); - - - assertSame(institution, institutionServiceImpl.retrieveInstitutionProduct("42", "42")); - verify(institutionConnector).findByExternalIdAndProductId(any(), any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionGeoTaxonomies(Institution)} - */ - @Test - void testRetrieveInstitutionGeoTaxonomies2() { - - Institution institution = new Institution(); - institution.setGeographicTaxonomies(new ArrayList<>()); - Assertions.assertThrows(MsCoreException.class, () -> institutionServiceImpl.retrieveInstitutionGeoTaxonomies(institution)); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionGeoTaxonomies(Institution)} - */ - @Test - void testRetrieveInstitutionGeoTaxonomies4() { - GeographicTaxonomies geographicTaxonomies = new GeographicTaxonomies(); - geographicTaxonomies.setGeotaxId("Code"); - geographicTaxonomies.setCountry("GB"); - geographicTaxonomies.setCountryAbbreviation("GB"); - geographicTaxonomies.setDescription("The characteristics of someone or something"); - geographicTaxonomies.setEnable(true); - geographicTaxonomies.setIstatCode(""); - geographicTaxonomies.setProvinceId("Province"); - geographicTaxonomies.setProvinceAbbreviation("Province Abbreviation"); - geographicTaxonomies.setRegionId("us-east-2"); - - when(partyRegistryProxyConnector.getExtByCode(any())).thenReturn(geographicTaxonomies); - - ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); - institutionGeographicTaxonomiesList.add(new InstitutionGeographicTaxonomies( - "Retrieving geographic taxonomies for institution {}", "The characteristics of someone or something")); - - Institution institution = new Institution(); - institution.setGeographicTaxonomies(institutionGeographicTaxonomiesList); - assertEquals(1, institutionServiceImpl.retrieveInstitutionGeoTaxonomies(institution).size()); - verify(partyRegistryProxyConnector).getExtByCode(any()); - } - - /** - * Method under test: {@link InstitutionService#updateInstitution(String, InstitutionUpdate, String)} - */ - @Test - void updateInstitution_shouldThrowExceptionIfGeotaxNotFound() { - - when(partyRegistryProxyConnector.getExtByCode(any())) - .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); - - ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); - institutionGeographicTaxonomiesList - .add(new InstitutionGeographicTaxonomies("Code", "The characteristics of someone or something")); - - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setAddress("42 Main St"); - institutionUpdate.setBusinessRegisterPlace("Business Register Place"); - institutionUpdate - .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); - institutionUpdate.setDescription("The characteristics of someone or something"); - institutionUpdate.setDigitalAddress("42 Main St"); - institutionUpdate.setGeographicTaxonomies(institutionGeographicTaxonomiesList); - institutionUpdate.setImported(true); - institutionUpdate.setInstitutionType(InstitutionType.PA); - institutionUpdate - .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); - institutionUpdate.setRea("Rea"); - institutionUpdate.setShareCapital("Share Capital"); - institutionUpdate.setSupportEmail("jane.doe@example.org"); - institutionUpdate.setSupportPhone("6625550144"); - institutionUpdate.setTaxCode("Tax Code"); - institutionUpdate.setZipCode("21654"); - assertThrows(MsCoreException.class, - () -> institutionServiceImpl.updateInstitution("42", institutionUpdate, "42")); - verify(partyRegistryProxyConnector).getExtByCode(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#updateInstitutionDelegation(String, boolean)} (String, InstitutionUpdate, String)} - */ - @Test - void testUpdateInstitutionDelegation() { - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setDelegation(true); - assertDoesNotThrow( - () -> institutionServiceImpl.updateInstitutionDelegation("42", true)); - verify(institutionConnector).findAndUpdate("42", null, null, institutionUpdate); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalIds(List, String)} - */ - @Test - void testRetrieveInstitutionByExternalIds2() { - - when(institutionConnector.findByExternalIdsAndProductId(any(), any())).thenReturn(List.of()); - - ArrayList validInstitutionList = new ArrayList<>(); - List actualRetrieveInstitutionByExternalIdsResult = institutionServiceImpl - .retrieveInstitutionByExternalIds(validInstitutionList, "42"); - - assertSame(validInstitutionList, actualRetrieveInstitutionByExternalIdsResult); - assertTrue(actualRetrieveInstitutionByExternalIdsResult.isEmpty()); - verify(institutionConnector).findByExternalIdsAndProductId(any(), any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalIds(List, String)} - */ - @Test - void testRetrieveInstitutionByExternalIds3() { - - when(institutionConnector.findByExternalIdsAndProductId(any(), any())).thenReturn(List.of()); - - ArrayList validInstitutionList = new ArrayList<>(); - validInstitutionList.add(new ValidInstitution("42", "The characteristics of someone or something")); - List actualRetrieveInstitutionByExternalIdsResult = institutionServiceImpl - .retrieveInstitutionByExternalIds(validInstitutionList, "42"); - assertSame(validInstitutionList, actualRetrieveInstitutionByExternalIdsResult); - assertEquals(1, actualRetrieveInstitutionByExternalIdsResult.size()); - verify(institutionConnector).findByExternalIdsAndProductId(any(), any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalIds(List, String)} - */ - @Test - void testRetrieveInstitutionByExternalIds4() { - - - when(institutionConnector.findByExternalIdsAndProductId(any(), any())).thenReturn(new ArrayList<>()); - - ArrayList validInstitutionList = new ArrayList<>(); - validInstitutionList.add(new ValidInstitution("42", "The characteristics of someone or something")); - validInstitutionList.add(new ValidInstitution("42", "The characteristics of someone or something")); - List actualRetrieveInstitutionByExternalIdsResult = institutionServiceImpl - .retrieveInstitutionByExternalIds(validInstitutionList, "42"); - assertSame(validInstitutionList, actualRetrieveInstitutionByExternalIdsResult); - assertEquals(2, actualRetrieveInstitutionByExternalIdsResult.size()); - verify(institutionConnector).findByExternalIdsAndProductId(any(), any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalIds(List, String)} - */ - @Test - void testRetrieveInstitutionByExternalIds5() { - - ArrayList stringList = new ArrayList<>(); - stringList.add("42"); - - when(institutionConnector.findByExternalIdsAndProductId(any(), any())).thenReturn(stringList); - - ArrayList validInstitutionList = new ArrayList<>(); - validInstitutionList.add(new ValidInstitution("42", "The characteristics of someone or something")); - List actualRetrieveInstitutionByExternalIdsResult = institutionServiceImpl - .retrieveInstitutionByExternalIds(validInstitutionList, "42"); - assertSame(validInstitutionList, actualRetrieveInstitutionByExternalIdsResult); - assertTrue(actualRetrieveInstitutionByExternalIdsResult.isEmpty()); - verify(institutionConnector).findByExternalIdsAndProductId(any(), any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#findInstitutionsByGeoTaxonomies(String, SearchMode)} - */ - @Test - void testFindInstitutionsByGeoTaxonomies3() { - - ArrayList institutionList = new ArrayList<>(); - when(institutionConnector.findByGeotaxonomies(any(), any())) - .thenReturn(institutionList); - List actualFindInstitutionsByGeoTaxonomiesResult = institutionServiceImpl - .findInstitutionsByGeoTaxonomies("Geo Taxonomies", SearchMode.ALL); - assertSame(institutionList, actualFindInstitutionsByGeoTaxonomiesResult); - assertTrue(actualFindInstitutionsByGeoTaxonomiesResult.isEmpty()); - verify(institutionConnector).findByGeotaxonomies(any(), any()); - } - - @Test - void testFindInstitutionsByGeoTaxonomies1() { - assertThrows(InvalidRequestException.class, () -> institutionServiceImpl.findInstitutionsByGeoTaxonomies("", SearchMode.ALL)); - } - - /** - * Method under test: {@link InstitutionServiceImpl#findInstitutionsByProductId(String)} - */ - @Test - void testFindInstitutionsByProductId2() { - when(institutionConnector.findByProductId(any())).thenReturn(new ArrayList<>()); - assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.findInstitutionsByProductId("42")); - } - - - /** - * Method under test: {@link InstitutionServiceImpl#findInstitutionsByProductId(String)} - */ - @Test - void testFindInstitutionsByProductId3() { - when(institutionConnector.findByProductId(any())).thenReturn(List.of(new Institution())); - assertDoesNotThrow(() -> institutionServiceImpl.findInstitutionsByProductId("42")); - } - - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByIds(List)} - */ - @Test - void testRetrieveInstitutionByIds2() { - - ArrayList institutionList = new ArrayList<>(); - when(institutionConnector.findAllByIds(any())).thenReturn(institutionList); - - List actualRetrieveInstitutionByIdsResult = institutionServiceImpl - .retrieveInstitutionByIds(new ArrayList<>()); - assertSame(institutionList, actualRetrieveInstitutionByIdsResult); - assertTrue(actualRetrieveInstitutionByIdsResult.isEmpty()); - verify(institutionConnector).findAllByIds(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionProduct(String, String)} - */ - @Test - void testGetInstitutionProduct2() { - when(institutionConnector.findByExternalIdAndProductId(any(), any())) - .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); - assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.retrieveInstitutionProduct("42", "42")); - verify(institutionConnector).findByExternalIdAndProductId(any(), any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveGeoTaxonomies(String)} - */ - @Test - void testGetGeoTaxonomies() { - GeographicTaxonomies geographicTaxonomies = new GeographicTaxonomies(); - geographicTaxonomies.setGeotaxId("Code"); - geographicTaxonomies.setCountry("GB"); - geographicTaxonomies.setCountryAbbreviation("GB"); - geographicTaxonomies.setDescription("The characteristics of someone or something"); - geographicTaxonomies.setEnable(true); - geographicTaxonomies.setIstatCode(""); - geographicTaxonomies.setProvinceId("Province"); - geographicTaxonomies.setProvinceAbbreviation("Province Abbreviation"); - geographicTaxonomies.setRegionId("us-east-2"); - when(partyRegistryProxyConnector.getExtByCode(any())).thenReturn(geographicTaxonomies); - Optional optionalGeographicTaxonomies = institutionServiceImpl.retrieveGeoTaxonomies("Code"); - assertTrue(optionalGeographicTaxonomies.isPresent()); - assertSame(geographicTaxonomies,optionalGeographicTaxonomies.get()); - verify(partyRegistryProxyConnector).getExtByCode(any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveGeoTaxonomies(String)} - */ - @Test - void getGeoTaxonomies_whenGeoTaxIsEmpty() { - when(partyRegistryProxyConnector.getExtByCode(any())) - .thenThrow(new ResourceNotFoundException("","")); - assertTrue(institutionServiceImpl.retrieveGeoTaxonomies("Code").isEmpty()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionsWithFilter(String, String, List)} - */ - @Test - void testRetrieveInstitutionsWithFilter() { - when(institutionConnector.findWithFilter(any(), any(), any())) - .thenReturn(new ArrayList<>()); - List list = List.of(RelationshipState.ACTIVE); - assertThrows(ResourceNotFoundException.class, - () -> institutionServiceImpl.retrieveInstitutionsWithFilter("42", "42", list)); - verify(institutionConnector).findWithFilter(any(), any(), any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionsWithFilter(String, String, List)} - */ - @Test - void testRetrieveInstitutionsWithFilter2() { - ArrayList institutionList = new ArrayList<>(); - institutionList.add(new Institution()); - when(institutionConnector.findWithFilter(any(), any(), any())) - .thenReturn(institutionList); - institutionServiceImpl.retrieveInstitutionsWithFilter("42", "42", new ArrayList<>()); - verify(institutionConnector).findWithFilter(any(), any(), any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionsWithFilter(String, String, List)} - */ - @Test - void testRetrieveInstitutionsWithFilter3() { - when(institutionConnector.findWithFilter(any(), any(), any())) - .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); - List list = List.of(RelationshipState.ACTIVE); - assertThrows(ResourceNotFoundException.class, - () -> institutionServiceImpl.retrieveInstitutionsWithFilter("42", "42", list)); - verify(institutionConnector).findWithFilter(any(), any(), any()); - } - - /** - * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionsWithFilter(String, String, List)} - */ - @Test - void testRetrieveInstitutionsWithFilter6() { - - when(institutionConnector.findWithFilter(any(), any(), any())) - .thenReturn(List.of(new Institution())); - - institutionServiceImpl.retrieveInstitutionsWithFilter("42", "42", new ArrayList<>()); - verify(institutionConnector).findWithFilter(any(), any(), any()); - } - - @Test - void testUpdateInstitutionDescription() { - //given - final String institutionId = "id"; - - Institution updatedInstitution = new Institution(); - updatedInstitution.setId(institutionId); - updatedInstitution.setDescription("newDesc"); - updatedInstitution.setParentDescription("newRootName"); - - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setDescription("newDesc"); - institutionUpdate.setParentDescription("newRootName"); - - //when - when(institutionConnector.findById(institutionId)).thenReturn(new Institution()); - when(institutionConnector.findAndUpdate(institutionId, null, Collections.emptyList(), institutionUpdate)).thenReturn(updatedInstitution); - - //then - Institution result = institutionServiceImpl.updateInstitution(institutionId, institutionUpdate, "userId"); - verify(delegationConnector).updateDelegation(updatedInstitution); - verify(userApiConnector).updateUserInstitution(institutionId, institutionUpdate); - assertEquals(result, updatedInstitution); - } - - @Test - void testUpdateInstitutionDescription_updateDelegationsFails() { - //given - final String institutionId = "id"; - - Institution outdatedInstitution = new Institution(); - outdatedInstitution.setId(institutionId); - outdatedInstitution.setDescription("oldDesc"); - outdatedInstitution.setParentDescription("oldRootName"); - - Institution updatedInstitution = new Institution(); - updatedInstitution.setId(institutionId); - updatedInstitution.setDescription("newDesc"); - updatedInstitution.setParentDescription("newRootName"); - - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setDescription("newDesc"); - institutionUpdate.setParentDescription("newRootName"); - - InstitutionUpdate institutionRollback = new InstitutionUpdate(); - institutionRollback.setDescription("oldDesc"); - institutionRollback.setParentDescription("oldRootName"); - - //when - when(institutionConnector.findById(institutionId)).thenReturn(outdatedInstitution); - when(institutionConnector.findAndUpdate(institutionId, null, Collections.emptyList(), institutionUpdate)).thenReturn(updatedInstitution); - doThrow(new RuntimeException()).when(delegationConnector).updateDelegation(updatedInstitution); - - Executable executable = () -> institutionServiceImpl.updateInstitution(institutionId, institutionUpdate, "userId"); - // Then - assertThrows(MsCoreException.class, executable); - verify(institutionConnector).findAndUpdate(institutionId,null, null, institutionRollback); - verifyNoInteractions(userApiConnector); - } - - @Test - void testUpdateInstitutionDescription_updateUserInstitutionFails() { - //given - final String institutionId = "id"; - - Institution outdatedInstitution = new Institution(); - outdatedInstitution.setId(institutionId); - outdatedInstitution.setDescription("oldDesc"); - outdatedInstitution.setParentDescription("oldRootName"); - - Institution updatedInstitution = new Institution(); - updatedInstitution.setId(institutionId); - updatedInstitution.setDescription("newDesc"); - updatedInstitution.setParentDescription("newRootName"); - - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setDescription("newDesc"); - institutionUpdate.setParentDescription("newRootName"); - - InstitutionUpdate institutionRollback = new InstitutionUpdate(); - institutionRollback.setDescription("oldDesc"); - institutionRollback.setParentDescription("oldRootName"); - - //when - when(institutionConnector.findById(institutionId)).thenReturn(outdatedInstitution); - when(institutionConnector.findAndUpdate(institutionId, null, Collections.emptyList(), institutionUpdate)).thenReturn(updatedInstitution); - doThrow(new RuntimeException()).when(userApiConnector).updateUserInstitution(institutionId, institutionUpdate); - - Executable executable = () -> institutionServiceImpl.updateInstitution(institutionId, institutionUpdate, "userId"); - - //then - assertThrows(MsCoreException.class, executable); - verify(institutionConnector).findAndUpdate(institutionId,null, null, institutionRollback); - verify(delegationConnector).updateDelegation(outdatedInstitution); - } - - @Test - void updateInstitution_noDescription(){ - //when - when(institutionConnector.findById(any())).thenReturn(new Institution()); - when(institutionConnector.findAndUpdate(any(), any(), any(), any())).thenReturn(new Institution()); - - institutionServiceImpl.updateInstitution("id", new InstitutionUpdate(), "userId"); - - // Then - verifyNoInteractions(delegationConnector); - verifyNoInteractions(userApiConnector); - } - - @Test - void updateCreatedAt() { - // Given - String institutionIdMock = "institutionIdMock"; - String productIdMock = "productId"; - OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); - OffsetDateTime activatedAtMock = OffsetDateTime.parse("2020-11-02T02:15:30+01:00"); - - Onboarding onboardingMock1 = mockInstance(new Onboarding()); - onboardingMock1.setStatus(RelationshipState.ACTIVE); - onboardingMock1.setClosedAt(null); - onboardingMock1.setCreatedAt(OffsetDateTime.parse("2023-11-01T02:15:30+01:00")); - Onboarding onboardingMock2 = mockInstance(new Onboarding()); - onboardingMock2.setProductId(productIdMock); - onboardingMock2.setTokenId("222e4444-e99b-11d3-a446-422114890100"); - onboardingMock2.setStatus(RelationshipState.ACTIVE); - onboardingMock2.setClosedAt(null); - onboardingMock1.setCreatedAt(OffsetDateTime.parse("2020-11-01T02:15:30+01:00")); - Onboarding onboardingMock3 = mockInstance(new Onboarding()); - onboardingMock3.setStatus(RelationshipState.ACTIVE); - onboardingMock3.setClosedAt(null); - onboardingMock1.setCreatedAt(OffsetDateTime.parse("2022-12-11T02:15:30+01:00")); - - Institution updatedInstitutionMock = mockInstance(new Institution()); - updatedInstitutionMock.setId("123e4567-e89b-12d3-a456-426614174000"); - updatedInstitutionMock.setExternalId("00099991238"); - updatedInstitutionMock.setDigitalAddress("DigitalAddress@example.com"); - updatedInstitutionMock.setInstitutionType(InstitutionType.PA); - updatedInstitutionMock.setTaxCode(updatedInstitutionMock.getExternalId()); - updatedInstitutionMock.setOnboarding(List.of(onboardingMock1, onboardingMock2, onboardingMock3)); - updatedInstitutionMock.setGeographicTaxonomies(Collections.emptyList()); - updatedInstitutionMock.setPaymentServiceProvider(null); - updatedInstitutionMock.setDataProtectionOfficer(null); - updatedInstitutionMock.setImported(false); - updatedInstitutionMock.setCreatedAt(OffsetDateTime.parse("2019-11-01T02:15:30+01:00")); - updatedInstitutionMock.setUpdatedAt(OffsetDateTime.now()); - - TokenUser tokenUserMock1 = mockInstance(new TokenUser()); - tokenUserMock1.setUserId("999e9999-e89b-12d3-a456-426614174000"); - TokenUser tokenUserMock2 = mockInstance(new TokenUser()); - tokenUserMock2.setUserId("321e9876-e89b-12d3-a456-426614174000"); - tokenUserMock2.setRole(PartyRole.DELEGATE); - - when(institutionConnector.updateOnboardedProductCreatedAt(institutionIdMock, productIdMock, createdAtMock)) - .thenReturn(updatedInstitutionMock); - - // When - institutionServiceImpl.updateCreatedAt(institutionIdMock, productIdMock, createdAtMock, activatedAtMock); - // Then - verify(institutionConnector, times(1)) - .updateOnboardedProductCreatedAt(institutionIdMock, productIdMock, createdAtMock); - verifyNoMoreInteractions(institutionConnector); - } - - @Test - void updateCreatedAt_nullInstitutionId() { - // Given - String productIdMock = "productId"; - OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); - // When - Executable executable = () -> institutionServiceImpl.updateCreatedAt(null, productIdMock, createdAtMock, null); - // Then - IllegalArgumentException illegalArgumentException = assertThrows(IllegalArgumentException.class, executable); - assertEquals("An institution ID is required.", illegalArgumentException.getMessage()); - verifyNoInteractions(institutionConnector); - } - - @Test - void updateCreatedAt_nullProductId() { - // Given - String institutionIdMock = "institutionId"; - OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); - // When - Executable executable = () -> institutionServiceImpl.updateCreatedAt(institutionIdMock, null, createdAtMock, null); - // Then - IllegalArgumentException illegalArgumentException = assertThrows(IllegalArgumentException.class, executable); - assertEquals("A product ID is required.", illegalArgumentException.getMessage()); - verifyNoInteractions(institutionConnector); - } - - @Test - void updateCreatedAt_nullCreatedAt() { - // Given - String institutionIdMock = "institutionId"; - String productIdMock = "producttId"; - // When - Executable executable = () -> institutionServiceImpl.updateCreatedAt(institutionIdMock, productIdMock, null, null); - // Then - IllegalArgumentException illegalArgumentException = assertThrows(IllegalArgumentException.class, executable); - assertEquals("A createdAt date is required.", illegalArgumentException.getMessage()); - verifyNoInteractions(institutionConnector); - - } - - @Test - void updateCreatedAt_onboardingNotFound() { - // Given - String institutionIdMock = "institutionId"; - String productIdMock = "producttId"; - OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); - OffsetDateTime activatedAtMock = OffsetDateTime.parse("2020-11-02T02:15:30+01:00"); - - Institution institutionMock = mockInstance(new Institution()); - institutionMock.setOnboarding(Collections.emptyList()); - when(institutionConnector.updateOnboardedProductCreatedAt(institutionIdMock, productIdMock, createdAtMock)) - .thenThrow(ResourceNotFoundException.class); - // When - Executable executable = () -> institutionServiceImpl.updateCreatedAt(institutionIdMock, productIdMock, createdAtMock, activatedAtMock); - // Then - assertThrows(ResourceNotFoundException.class, executable); - } - - /** - * Method under test: {@link InstitutionServiceImpl#getInstitutionBrokers(String, InstitutionType)} - */ - @Test - void getInstitutionBrokers() { - - Institution institution = new Institution(); - institution.setId("id"); - when(institutionConnector.findBrokers(any(), any())).thenReturn(List.of(institution)); - List institutions = institutionServiceImpl.getInstitutionBrokers("42", InstitutionType.PT); - assertNotNull(institutions); - assertFalse(institutions.isEmpty()); - assertNotNull(institutions.get(0)); - assertEquals(institutions.get(0).getId(), institution.getId()); - verify(institutionConnector).findBrokers(any(), any()); - - } - - /** - * Method under test: {@link InstitutionServiceImpl#getInstitutions(String, String)} - */ - @Test - void getInstitutionsByTaxCode() { - - Institution institution = new Institution(); - institution.setId("id"); - when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())).thenReturn(List.of(institution)); - List institutions = institutionServiceImpl.getInstitutions("1111111", null); - assertNotNull(institutions); - assertFalse(institutions.isEmpty()); - assertNotNull(institutions.get(0)); - assertEquals(institutions.get(0).getId(), institution.getId()); - verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); - - } - -} - diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImplTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImplTest.java deleted file mode 100644 index f5e82e3..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImplTest.java +++ /dev/null @@ -1,105 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.api.EmailConnector; -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.api.ProductConnector; -import it.pagopa.selfcare.mscore.api.UserApiConnector; -import it.pagopa.selfcare.mscore.config.CoreConfig; -import it.pagopa.selfcare.mscore.config.MailTemplateConfig; -import it.pagopa.selfcare.mscore.core.util.MailParametersMapper; -import it.pagopa.selfcare.mscore.model.CertifiedField; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.WorkContact; -import it.pagopa.selfcare.mscore.model.user.User; -import it.pagopa.selfcare.product.entity.Product; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.mockito.Mockito.anyString; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -class MailNotificationServiceImplTest { - - @InjectMocks - private MailNotificationServiceImpl notificationService; - - @Mock - private InstitutionConnector institutionConnector; - - @Mock - private ProductConnector productConnector; - - @Mock - private MailTemplateConfig mailTemplateConfig; - - @Mock - private EmailConnector emailConnector; - - @Mock - private MailParametersMapper mailParametersMapper; - - @Mock - private CoreConfig coreConfig; - - - @Mock - private UserApiConnector userApiConnector; - @Mock - private UserNotificationService userNotificationService; - - private static final User user; - - static { - user = new User(); - user.setId("1"); - user.setFiscalCode("ABC123XYZ"); - user.setName(new CertifiedField<>()); - user.setFamilyName(new CertifiedField<>()); - user.setEmail(new CertifiedField<>()); - - Map workContacts1 = new HashMap<>(); - WorkContact workContact = new WorkContact(); - CertifiedField email = new CertifiedField<>(); - email.setValue("email"); - workContact.setEmail(email); - workContacts1.put("id",workContact); - - user.setWorkContacts(workContacts1); - } - - @Test - void sendNotificationDelegationMail() { - Product product = new Product(); - product.setId("productId"); - product.setTitle("test"); - Institution institution = new Institution(); - institution.setId("institutionID"); - institution.setDigitalAddress("test@test.com"); - List userEmails = List.of("userEmail"); - - when(productConnector.getProductById(anyString())).thenReturn(product); - when(institutionConnector.findById(anyString())).thenReturn(institution); - when(userApiConnector.getUserEmails(institution.getId(), product.getId())).thenReturn(userEmails); - when(coreConfig.isSendEmailToInstitution()).thenReturn(true); - when(coreConfig.isEnableSendDelegationMail()).thenReturn(true); - Assertions.assertDoesNotThrow(() -> notificationService.sendMailForDelegation("institutionName", "productId", "partnerId")); - } - - @Test - void sendNotificationDelegationMailWithEmptyProduct() { - Institution institution = new Institution(); - institution.setDigitalAddress("test@test.com"); - when(productConnector.getProductById(anyString())).thenReturn(null); - when(institutionConnector.findById(anyString())).thenReturn(institution); - Assertions.assertDoesNotThrow(() -> notificationService.sendMailForDelegation("institutionName", "productId", "partnerId")); - } -} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingDaoTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingDaoTest.java deleted file mode 100644 index b6283d2..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingDaoTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -@ExtendWith(SpringExtension.class) -class OnboardingDaoTest { - - @Mock - private InstitutionConnector institutionConnector; - - @InjectMocks - private OnboardingDao onboardingDao; - - - @Test - void rollbackPersistOnboarding() { - - final String institutionId = "institutionId"; - final Onboarding onboarding = new Onboarding(); - onboarding.setProductId("productId"); - - onboardingDao.rollbackPersistOnboarding(institutionId, onboarding); - - verify(institutionConnector, times(1)) - .findAndRemoveOnboarding(institutionId, onboarding); - } - -} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java deleted file mode 100644 index 6fda8ba..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java +++ /dev/null @@ -1,325 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.api.PecNotificationConnector; -import it.pagopa.selfcare.mscore.api.ProductConnector; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.core.mapper.TokenMapper; -import it.pagopa.selfcare.mscore.core.mapper.TokenMapperImpl; -import it.pagopa.selfcare.mscore.core.util.UtilEnumList; -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.institution.Billing; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import it.pagopa.selfcare.mscore.model.onboarding.*; -import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.*; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.http.HttpStatus; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.util.ReflectionTestUtils; - - -import java.time.LocalDate; -import java.time.temporal.ChronoUnit; -import java.util.List; -import java.util.UUID; - -import static it.pagopa.selfcare.mscore.constant.GenericError.DELETE_NOTIFICATION_OPERATION_ERROR; -import static it.pagopa.selfcare.mscore.constant.GenericError.ONBOARDING_OPERATION_ERROR; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -@ContextConfiguration(classes = {OnboardingServiceImpl.class}) -@ExtendWith(MockitoExtension.class) -class OnboardingServiceImplTest { - - @Mock - private OnboardingDao onboardingDao; - - @InjectMocks - private OnboardingServiceImpl onboardingServiceImpl; - - @Mock - private InstitutionService institutionService; - - @Mock - private InstitutionConnector institutionConnector; - - @Mock - private ProductConnector productConnector; - - @Mock - private UserNotificationService userNotificationService; - - @Mock - private PecNotificationConnector pecNotificationConnector; - - @Spy - private TokenMapper tokenMapper = new TokenMapperImpl(); - - /** - * Method under test: {@link OnboardingServiceImpl#verifyOnboardingInfo(String, String)} - */ - @Test - void testVerifyOnboardingInfo() { - doNothing().when(institutionService) - .retrieveInstitutionsWithFilter(any(), any(), any()); - onboardingServiceImpl.verifyOnboardingInfo("42", "42"); - verify(institutionService).retrieveInstitutionsWithFilter(any(), any(), - any()); - } - - /** - * Method under test: {@link OnboardingServiceImpl#verifyOnboardingInfoSubunit(String, String, String)} - */ - @Test - void shouldNothingWhenVerifyOnboardingInfoSubunit() { - when(institutionConnector.existsByTaxCodeAndSubunitCodeAndProductAndStatusList(any(), any(), any(), any())) - .thenReturn(true); - onboardingServiceImpl.verifyOnboardingInfoSubunit("42", "42", "example"); - verify(institutionConnector).existsByTaxCodeAndSubunitCodeAndProductAndStatusList(any(), any(), any(), any()); - } - - @Test - void VerifyOnboardingInfoSubunitResourceNotFound() { - when(institutionConnector.existsByTaxCodeAndSubunitCodeAndProductAndStatusList(any(), any(), any(), any())) - .thenReturn(false); - assertThrows(ResourceNotFoundException.class, () -> onboardingServiceImpl.verifyOnboardingInfoSubunit("42", "42", "example")); - - } - - @Test - void testVerifyOnboardingInfoByFilter() { - // Arrange - when(institutionConnector.existsOnboardingByFilters(Mockito.any())).thenReturn(true); - - VerifyOnboardingFilters verifyOnboardingFilters = new VerifyOnboardingFilters("Product", "", "", "Origin", "OriginId", ""); - // Act - onboardingServiceImpl.verifyOnboardingInfoByFilters(verifyOnboardingFilters); - - // Assert that nothing has changed - verify(institutionConnector).existsOnboardingByFilters(Mockito.any()); - } - - @Test - void testVerifyOnboardingInfoByFilterNotFound() { - // Arrange - when(institutionConnector.existsOnboardingByFilters(Mockito.any())).thenReturn(false); - - VerifyOnboardingFilters verifyOnboardingFilters = new VerifyOnboardingFilters("Product", "", "", "Origin", "OriginId", ""); - // Act - Assertions.assertThrows(ResourceNotFoundException.class, () -> onboardingServiceImpl.verifyOnboardingInfoByFilters(verifyOnboardingFilters)); - - // Assert that nothing has changed - verify(institutionConnector).existsOnboardingByFilters(Mockito.any()); - } - - /** - * Method under test: {@link OnboardingServiceImpl#verifyOnboardingInfo(String, String)} - */ - @Test - void testVerifyOnboardingInfo5() { - doThrow(new InvalidRequestException("An error occurred", "Code")).when(institutionService) - .retrieveInstitutionsWithFilter(any(), any(), any()); - assertThrows(InvalidRequestException.class, () -> onboardingServiceImpl.verifyOnboardingInfo("42", "42")); - verify(institutionService).retrieveInstitutionsWithFilter(any(), any(), - any()); - } - - @Test - void persistOnboarding_whenUserExistsOnRegistry() { - - ReflectionTestUtils.setField(onboardingServiceImpl, "sendingFrequencyPecNotification", 30); - ReflectionTestUtils.setField(onboardingServiceImpl, "epochDatePecNotification", "2024-01-01"); - - Onboarding onboarding = dummyOnboarding(); - onboarding.setStatus(UtilEnumList.VALID_RELATIONSHIP_STATES.get(0)); - Institution institution = new Institution(); - institution.setId("institutionId"); - institution.setOnboarding(List.of(onboarding, dummyOnboarding())); - - when(pecNotificationConnector.insertPecNotification(any(PecNotification.class))).thenReturn(true); - when(institutionConnector.findById(institution.getId())).thenReturn(institution); - - String institutionId = institution.getId(); - - String productId = onboarding.getProductId(); - Onboarding onb = new Onboarding(); - - StringBuilder statusCode = new StringBuilder(); - - onboardingServiceImpl.persistOnboarding(institutionId, - productId, onb, statusCode); - - assertEquals(HttpStatus.OK.value(), Integer.parseInt(statusCode.toString())); - } - - - - /** - * Method under test: {@link OnboardingServiceImpl#persistOnboarding(String, String, Onboarding)} - */ - @Test - void persistOnboarding_shouldRollback() { - - String pricingPlan = "pricingPlan"; - String productId = "productId"; - Onboarding onboarding = dummyOnboarding(); - onboarding.setStatus(UtilEnumList.VALID_RELATIONSHIP_STATES.get(0)); - - Onboarding onboardingToPersist = new Onboarding(); - onboardingToPersist.setPricingPlan(pricingPlan); - onboardingToPersist.setProductId(productId); - onboardingToPersist.setBilling(new Billing()); - - Institution institution = new Institution(); - institution.setId("institutionId"); - institution.setOnboarding(List.of(onboarding)); - - - when(institutionConnector.findById(institution.getId())).thenReturn(institution); - when(institutionConnector.findAndUpdate(any(), any(), any(), any())).thenThrow(new RuntimeException()); - String institutionId = institution.getId(); - - Assertions.assertThrows(InvalidRequestException.class, () -> onboardingServiceImpl.persistOnboarding( - institutionId, productId, onboardingToPersist, new StringBuilder())); - - verify(onboardingDao, times(1)) - .rollbackPersistOnboarding(any(), any()); - } - - /** - * Method under test: {@link OnboardingServiceImpl#persistOnboarding(String, String, Onboarding)} - */ - @Test - void persistOnboarding_whenUserNotExistsOnRegistry() { - - ReflectionTestUtils.setField(onboardingServiceImpl, "sendingFrequencyPecNotification", 30); - ReflectionTestUtils.setField(onboardingServiceImpl, "epochDatePecNotification", "2024-01-01"); - - String pricingPlan = "pricingPlan"; - String productId = "productId"; - Billing billing = new Billing(); - billing.setVatNumber("vatNumber"); - billing.setPublicServices(false); - billing.setRecipientCode("recipientCode"); - billing.setTaxCodeInvoicing("taxCodeInvoicing"); - Onboarding onboarding = dummyOnboarding(); - onboarding.setStatus(UtilEnumList.VALID_RELATIONSHIP_STATES.get(0)); - - Onboarding onboardingToPersist = new Onboarding(); - onboardingToPersist.setPricingPlan(pricingPlan); - onboardingToPersist.setProductId(productId); - onboardingToPersist.setBilling(billing); - onboardingToPersist.setIsAggregator(true); - - Institution institution = new Institution(); - institution.setId("institutionId"); - institution.setOnboarding(List.of(onboarding)); - institution.setDigitalAddress("test@junit.pagopa"); - - Token token = new Token(); - token.setId(onboarding.getTokenId()); - token.setInstitutionId("institutionId"); - token.setProductId(productId); - token.setCreatedAt(onboarding.getCreatedAt()); - token.setUpdatedAt(onboarding.getUpdatedAt()); - token.setStatus(onboarding.getStatus()); - token.setContractSigned(onboarding.getContract()); - - when(pecNotificationConnector.insertPecNotification(any(PecNotification.class))).thenReturn(true); - when(institutionConnector.findById(institution.getId())).thenReturn(institution); - when(institutionConnector.findAndUpdate(any(), any(), any(), any())).thenReturn(institution); - - StringBuilder statusCode = new StringBuilder(); - - onboardingServiceImpl.persistOnboarding(institution.getId(), productId, onboardingToPersist, statusCode); - - ArgumentCaptor captor = ArgumentCaptor.forClass(Onboarding.class); - verify(institutionConnector, times(1)) - .findAndUpdate(any(), captor.capture(), any(), any()); - Onboarding actual = captor.getValue(); - assertEquals(billing, actual.getBilling()); - assertEquals(actual.getCreatedAt().getDayOfYear(), LocalDate.now().getDayOfYear()); - assertEquals(HttpStatus.CREATED.value(), Integer.parseInt(statusCode.toString())); - - ArgumentCaptor< PecNotification > argCaptor = ArgumentCaptor.forClass(PecNotification.class); - verify(pecNotificationConnector, times(1)). insertPecNotification(argCaptor.capture()); - assertEquals(productId, argCaptor.getValue().getProductId()); - assertEquals("institutionId", argCaptor.getValue().getInstitutionId()); - assertEquals("test@junit.pagopa", argCaptor.getValue().getDigitalAddress()); - } - - private Onboarding dummyOnboarding() { - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(new Billing()); - onboarding.setTokenId("42"); - onboarding.setPricingPlan("C3"); - onboarding.setProductId("42"); - return onboarding; - } - - @Test - void deleteOnboardedInstitution_success() { - - String institutionId = UUID.randomUUID().toString(); - String productId = UUID.randomUUID().toString(); - - Onboarding onboarding = new Onboarding(); - onboarding.setProductId(productId); - onboarding.setStatus(RelationshipState.DELETED); - - when(pecNotificationConnector.findAndDeletePecNotification(institutionId, productId)).thenReturn(true); - - onboardingServiceImpl.deleteOnboardedInstitution(institutionId, productId); - - verify(institutionConnector, times(1)).findAndDeleteOnboarding(institutionId, productId); - verify(pecNotificationConnector, times(1)).findAndDeletePecNotification(institutionId, productId); - } - - @Test - void deleteOnboardedInstitution_deletePecNotificationFails() { - - String institutionId = UUID.randomUUID().toString(); - String productId = "prod-io"; - - Onboarding onboarding = new Onboarding(); - onboarding.setProductId(productId); - onboarding.setStatus(RelationshipState.DELETED); - - when(pecNotificationConnector.findAndDeletePecNotification(institutionId, productId)).thenReturn(false); - - InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> { - onboardingServiceImpl.deleteOnboardedInstitution(institutionId, productId); - }); - - assertEquals(DELETE_NOTIFICATION_OPERATION_ERROR.getMessage(), exception.getMessage()); - assertEquals(ONBOARDING_OPERATION_ERROR.getCode(), exception.getCode()); - - verify(institutionConnector, times(1)).findAndDeleteOnboarding(institutionId, productId); - verify(pecNotificationConnector, times(1)).findAndDeletePecNotification(institutionId, productId); - } - - @Test - public void testCalculateModuleDayOfTheEpoch() { - LocalDate mockCurrentDate = LocalDate.of(2024, 2, 1); // 31 days after epoch - - ReflectionTestUtils.setField(onboardingServiceImpl, "sendingFrequencyPecNotification", 30); - ReflectionTestUtils.setField(onboardingServiceImpl, "epochDatePecNotification", "2024-01-01"); - ReflectionTestUtils.setField(onboardingServiceImpl, "currentDate", mockCurrentDate); - - int result = onboardingServiceImpl.calculateModuleDayOfTheEpoch(); - - LocalDate epochStart = LocalDate.parse("2024-01-01"); - long daysDiff = ChronoUnit.DAYS.between(epochStart, mockCurrentDate); - int expected = (int) (daysDiff % 30); - - assertEquals(expected, result); - } -} - diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/TestUtils.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/TestUtils.java deleted file mode 100644 index 1a58b10..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/TestUtils.java +++ /dev/null @@ -1,331 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.Env; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.constant.TokenType; -import it.pagopa.selfcare.mscore.model.CertifiedField; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.model.onboarding.*; -import it.pagopa.selfcare.mscore.model.user.User; -import it.pagopa.selfcare.mscore.model.user.UserBinding; -import it.pagopa.selfcare.mscore.model.user.UserToOnboard; - -import java.util.ArrayList; -import java.util.List; - -public class TestUtils { - - public static ContractImported dummyContractImported() { - - ContractImported contractImported = new ContractImported(); - contractImported.setContractType("Contract Type"); - contractImported.setFileName("foo.txt"); - contractImported.setFilePath("/directory/foo.txt"); - return contractImported; - } - - public static Token dummyToken() { - Token token = new Token(); - token.setChecksum("Checksum"); - token.setDeletedAt(null); - token.setContractSigned("Contract Signed"); - token.setContractTemplate("Contract Template"); - token.setCreatedAt(null); - token.setExpiringDate(null); - token.setId("42"); - token.setInstitutionId("42"); - token.setInstitutionUpdate(new InstitutionUpdate()); - token.setProductId("42"); - token.setStatus(RelationshipState.PENDING); - token.setType(TokenType.INSTITUTION); - token.setUpdatedAt(null); - TokenUser user = new TokenUser(); - user.setUserId("id"); - user.setRole(PartyRole.MANAGER); - token.setUsers(List.of(user)); - return token; - } - - public static OnboardingRequest dummyOnboardingRequest() { - OnboardingRequest onboardingRequest = new OnboardingRequest(); - onboardingRequest.setInstitutionExternalId("42"); - onboardingRequest.setPricingPlan("Pricing Plan"); - onboardingRequest.setProductId("prod-io"); - onboardingRequest.setProductName("Product Name"); - onboardingRequest.setSignContract(true); - onboardingRequest.setTokenType(TokenType.INSTITUTION); - onboardingRequest.setBillingRequest(new Billing()); - onboardingRequest.setUsers(new ArrayList<>()); - return onboardingRequest; - } - - public static InstitutionUpdate createSimpleInstitutionUpdate() { - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setAddress("42 Main St"); - institutionUpdate.setBusinessRegisterPlace("Business Register Place"); - institutionUpdate - .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); - institutionUpdate.setDescription("The characteristics of someone or something"); - institutionUpdate.setDigitalAddress("42 Main St"); - institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); - institutionUpdate.setImported(true); - institutionUpdate.setInstitutionType(InstitutionType.PA); - institutionUpdate - .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); - institutionUpdate.setRea("Rea"); - institutionUpdate.setShareCapital("Share Capital"); - institutionUpdate.setSupportEmail("jane.doe@example.org"); - institutionUpdate.setSupportPhone("6625550144"); - institutionUpdate.setTaxCode("Tax Code"); - institutionUpdate.setZipCode("21654"); - return institutionUpdate; - } - - public static InstitutionUpdate createSimpleInstitutionUpdatePT() { - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setAddress("42 Main St"); - institutionUpdate.setBusinessRegisterPlace("Business Register Place"); - institutionUpdate - .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); - institutionUpdate.setDescription("The characteristics of someone or something"); - institutionUpdate.setDigitalAddress("42 Main St"); - institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); - institutionUpdate.setImported(true); - institutionUpdate.setInstitutionType(InstitutionType.PT); - institutionUpdate - .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); - institutionUpdate.setRea("Rea"); - institutionUpdate.setShareCapital("Share Capital"); - institutionUpdate.setSupportEmail("jane.doe@example.org"); - institutionUpdate.setSupportPhone("6625550144"); - institutionUpdate.setTaxCode("Tax Code"); - institutionUpdate.setZipCode("21654"); - return institutionUpdate; - } - public static InstitutionUpdate createSimpleInstitutionUpdateSA() { - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setAddress("42 Main St"); - institutionUpdate.setBusinessRegisterPlace("Business Register Place"); - institutionUpdate - .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); - institutionUpdate.setDescription("The characteristics of someone or something"); - institutionUpdate.setDigitalAddress("42 Main St"); - institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); - institutionUpdate.setImported(true); - institutionUpdate.setInstitutionType(InstitutionType.SA); - institutionUpdate - .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); - institutionUpdate.setRea("Rea"); - institutionUpdate.setShareCapital("Share Capital"); - institutionUpdate.setSupportEmail("jane.doe@example.org"); - institutionUpdate.setSupportPhone("6625550144"); - institutionUpdate.setTaxCode("Tax Code"); - institutionUpdate.setZipCode("21654"); - return institutionUpdate; - } - - public static AdditionalInformations createSimpleAdditionalInformations(String type) { - AdditionalInformations additionalInformations = new AdditionalInformations(); - switch (type) { - case "ipa": - additionalInformations.setIpa(true); - additionalInformations.setBelongRegulatedMarket(false); - additionalInformations.setEstablishedByRegulatoryProvision(false); - additionalInformations.setAgentOfPublicService(false); - break; - case "regulatedMarket": - additionalInformations.setIpa(false); - additionalInformations.setBelongRegulatedMarket(true); - additionalInformations.setEstablishedByRegulatoryProvision(false); - additionalInformations.setAgentOfPublicService(false); - break; - case "establishedByRegulatoryProvision": - additionalInformations.setIpa(false); - additionalInformations.setBelongRegulatedMarket(false); - additionalInformations.setEstablishedByRegulatoryProvision(true); - additionalInformations.setAgentOfPublicService(false); - break; - case "agentOfPublicService": - additionalInformations.setIpa(false); - additionalInformations.setBelongRegulatedMarket(false); - additionalInformations.setEstablishedByRegulatoryProvision(false); - additionalInformations.setAgentOfPublicService(true); - break; - default: - additionalInformations.setIpa(false); - additionalInformations.setBelongRegulatedMarket(false); - additionalInformations.setEstablishedByRegulatoryProvision(false); - additionalInformations.setAgentOfPublicService(false); - } - - return additionalInformations; - } - - public static DataProtectionOfficer createSimpleDataProtectionOfficer() { - - DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); - dataProtectionOfficer.setAddress("42 Main St"); - dataProtectionOfficer.setEmail("jane.doe@example.org"); - dataProtectionOfficer.setPec("Pec"); - return dataProtectionOfficer; - } - - public static PaymentServiceProvider createSimplePaymentServiceProvider() { - - PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); - paymentServiceProvider.setAbiCode("Abi Code"); - paymentServiceProvider.setBusinessRegisterNumber("42"); - paymentServiceProvider.setLegalRegisterName("Legal Register Name"); - paymentServiceProvider.setLegalRegisterNumber("42"); - paymentServiceProvider.setVatNumberGroup(true); - return paymentServiceProvider; - } - - public static Billing createSimpleBilling() { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - return billing; - } - - public static Contract createSimpleContract() { - - Contract contract = new Contract(); - contract.setPath("Path"); - contract.setVersion("1.0.2"); - return contract; - } - - public static Institution dummyInstitution() { - Institution institution = new Institution(); - institution.setId("institutionId"); - institution.setDescription("description"); - institution.setParentDescription("parentDescription"); - institution.setAddress("42 Main St"); - institution.setBusinessRegisterPlace("Business Register Place"); - institution - .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); - institution.setDescription("The characteristics of someone or something"); - institution.setDigitalAddress("42 Main St"); - institution.setGeographicTaxonomies(new ArrayList<>()); - institution.setImported(true); - institution.setInstitutionType(InstitutionType.PA); - institution - .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); - institution.setRea("Rea"); - institution.setShareCapital("Share Capital"); - institution.setSupportEmail("jane.doe@example.org"); - institution.setSupportPhone("6625550144"); - institution.setTaxCode("Tax Code"); - institution.setZipCode("21654"); - return institution; - } - - public static User createSimpleUser() { - User user = new User(); - user.setId("1"); - user.setFiscalCode("ABC123XYZ"); - CertifiedField nome = new CertifiedField<>(); - nome.setValue("nome"); - user.setName(nome); - user.setFamilyName(nome); - user.setEmail(nome); - return user; - } - - public static InstitutionUpdate createDummyInstitutionUpdate(){ - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setAddress("42 Main St"); - institutionUpdate.setBusinessRegisterPlace("Business Register Place"); - institutionUpdate.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); - institutionUpdate.setDescription("The characteristics of someone or something"); - institutionUpdate.setDigitalAddress("42 Main St"); - institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); - institutionUpdate.setImported(true); - institutionUpdate.setInstitutionType(InstitutionType.PA); - institutionUpdate.setPaymentServiceProvider(createSimplePaymentServiceProvider()); - institutionUpdate.setRea("Rea"); - institutionUpdate.setShareCapital("Share Capital"); - institutionUpdate.setSupportEmail("jane.doe@example.org"); - institutionUpdate.setSupportPhone("4105551212"); - institutionUpdate.setTaxCode("Tax Code"); - institutionUpdate.setZipCode("21654"); - return institutionUpdate; - }public static InstitutionUpdate createDummyInstitutionUpdateGSP(){ - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setAddress("42 Main St"); - institutionUpdate.setBusinessRegisterPlace("Business Register Place"); - institutionUpdate.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); - institutionUpdate.setDescription("The characteristics of someone or something"); - institutionUpdate.setDigitalAddress("42 Main St"); - institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); - institutionUpdate.setImported(true); - institutionUpdate.setInstitutionType(InstitutionType.GSP); - institutionUpdate.setPaymentServiceProvider(createSimplePaymentServiceProvider()); - institutionUpdate.setRea("Rea"); - institutionUpdate.setShareCapital("Share Capital"); - institutionUpdate.setSupportEmail("jane.doe@example.org"); - institutionUpdate.setSupportPhone("4105551212"); - institutionUpdate.setTaxCode("Tax Code"); - institutionUpdate.setZipCode("21654"); - return institutionUpdate; - } - - public static OnboardingRequest createDummyOnboardingRequest(){ - OnboardingRequest onboardingRequest = new OnboardingRequest(); - onboardingRequest.setBillingRequest(createSimpleBilling()); - onboardingRequest.setContract(createSimpleContract()); - onboardingRequest.setInstitutionExternalId("42"); - onboardingRequest.setInstitutionUpdate(createDummyInstitutionUpdate()); - onboardingRequest.setPricingPlan("Pricing Plan"); - onboardingRequest.setProductId("42"); - onboardingRequest.setProductName("Product Name"); - onboardingRequest.setSignContract(true); - onboardingRequest.setContractFilePath("/example"); - - return onboardingRequest; - } - public static OnboardedUser dummyOnboardedUser(){ - OnboardedUser onboardedUser = new OnboardedUser(); - onboardedUser.setId("42"); - onboardedUser.setBindings(new ArrayList<>()); - return onboardedUser; - } - - public static UserBinding dummyUserBinding (){ - UserBinding userBinding = new UserBinding(); - userBinding.setInstitutionId("42"); - userBinding.setInstitutionName("Name"); - userBinding.setInstitutionRootName("RootName"); - userBinding.setProducts(new ArrayList<>()); - return userBinding; - } - - public static OnboardedProduct dummyOnboardedProduct(){ - OnboardedProduct onboardedProduct = new OnboardedProduct(); - onboardedProduct.setProductId("prod-interop"); - onboardedProduct.setProductRole("productRole"); - onboardedProduct.setRole(PartyRole.DELEGATE); - onboardedProduct.setStatus(RelationshipState.ACTIVE); - onboardedProduct.setEnv(Env.ROOT); - onboardedProduct.setRelationshipId("RelId"); - onboardedProduct.setTokenId("tokenId"); - return onboardedProduct; - } - - public static UserToOnboard dummyUserToOnboard(){ - UserToOnboard userToOnboard = new UserToOnboard(); - userToOnboard.setEmail("prof.einstein@example.org"); - userToOnboard.setEnv(Env.COLL); - userToOnboard.setId("it.pagopa.selfcare.mscore.model.user.UserToOnboard"); - userToOnboard.setName("42"); - userToOnboard.setProductRole("42"); - userToOnboard.setRole(PartyRole.SUB_DELEGATE); - userToOnboard.setSurname("it.pagopa.selfcare.mscore.model.user.UserToOnboard"); - userToOnboard.setTaxCode("42"); - return userToOnboard; - } -} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImplTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImplTest.java deleted file mode 100644 index f3619c3..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImplTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package it.pagopa.selfcare.mscore.core; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import it.pagopa.selfcare.mscore.api.FileStorageConnector; -import it.pagopa.selfcare.mscore.config.CoreConfig; -import it.pagopa.selfcare.mscore.model.onboarding.MailTemplate; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import software.amazon.awssdk.services.ses.SesClient; -import software.amazon.awssdk.services.ses.model.SendEmailRequest; - -import java.nio.charset.StandardCharsets; -import java.util.Base64; -import java.util.HashMap; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.*; - -@ExtendWith(MockitoExtension.class) -class UserNotificationServiceImplTest { - - @InjectMocks - private UserNotificationServiceImpl userNotificationService; - - @Mock - private FileStorageConnector fileStorageConnector; - - @Mock - private ObjectMapper objectMapper; - - @Mock - private CoreConfig coreConfig; - - @Mock - private SesClient sesClient; - - - @Test - void sendDelegationUserNotification() throws JsonProcessingException { - final String to = "id"; - when(fileStorageConnector.getTemplateFile(any())).thenReturn("template"); - MailTemplate mailTemplate = new MailTemplate(); - mailTemplate.setBody(Base64.getEncoder().encodeToString("test".getBytes(StandardCharsets.UTF_8))); - mailTemplate.setSubject(Base64.getEncoder().encodeToString("test".getBytes(StandardCharsets.UTF_8))); - when(objectMapper.readValue(anyString(),any(Class.class))).thenReturn(mailTemplate); - assertDoesNotThrow(() -> userNotificationService.sendDelegationUserNotification(List.of(to),"institution","product", new HashMap<>())); - - ArgumentCaptor actual = ArgumentCaptor.forClass(SendEmailRequest.class); - verify(sesClient, times(1)).sendEmail(actual.capture()); - assertEquals(to, actual.getValue().destination().toAddresses().get(0)); - } -} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPdaTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPdaTest.java deleted file mode 100644 index 6db228d..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPdaTest.java +++ /dev/null @@ -1,236 +0,0 @@ -package it.pagopa.selfcare.mscore.core.strategy; - -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; -import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapperImpl; -import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; -import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.exception.ResourceConflictException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; -import it.pagopa.selfcare.mscore.model.institution.CategoryProxyInfo; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.InstitutionProxyInfo; -import it.pagopa.selfcare.mscore.model.institution.NationalRegistriesProfessionalAddress; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.mockito.junit.jupiter.MockitoExtension; - -import java.util.List; - -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -public class CreateInstitutionStrategyPdaTest { - @InjectMocks - CreateInstitutionStrategyFactory strategyFactory; - @Mock - InstitutionConnector institutionConnector; - @Mock - PartyRegistryProxyConnector partyRegistryProxyConnector; - @Spy - InstitutionMapper institutionMapper = new InstitutionMapperImpl(); - - private static final InstitutionProxyInfo dummyInstitutionProxyInfo; - private static final CategoryProxyInfo dummyCategoryProxyInfo; - private static final AreaOrganizzativaOmogenea dummyAreaOrganizzativaOmogenea; - - static { - dummyInstitutionProxyInfo = new InstitutionProxyInfo(); - dummyInstitutionProxyInfo.setAddress("42 Main St"); - dummyInstitutionProxyInfo.setAoo("Aoo"); - dummyInstitutionProxyInfo.setCategory("Category"); - dummyInstitutionProxyInfo.setDescription("The characteristics of someone or something"); - dummyInstitutionProxyInfo.setDigitalAddress("42 Main St"); - dummyInstitutionProxyInfo.setId("42"); - dummyInstitutionProxyInfo.setO("foo"); - dummyInstitutionProxyInfo.setOrigin("Origin"); - dummyInstitutionProxyInfo.setOriginId("42"); - dummyInstitutionProxyInfo.setOu("Ou"); - dummyInstitutionProxyInfo.setTaxCode("Tax Code"); - dummyInstitutionProxyInfo.setZipCode("21654"); - - dummyCategoryProxyInfo = new CategoryProxyInfo(); - dummyCategoryProxyInfo.setCode("Code"); - dummyCategoryProxyInfo.setKind("Kind"); - dummyCategoryProxyInfo.setName("Name"); - dummyCategoryProxyInfo.setOrigin("Origin"); - - dummyAreaOrganizzativaOmogenea = new AreaOrganizzativaOmogenea(); - dummyAreaOrganizzativaOmogenea.setOrigin(Origin.IPA); - dummyAreaOrganizzativaOmogenea.setDenominazioneAoo("Aoo"); - dummyAreaOrganizzativaOmogenea.setIndirizzo("Address"); - dummyAreaOrganizzativaOmogenea.setCAP("12345"); - dummyAreaOrganizzativaOmogenea.setCodiceFiscaleEnte(dummyInstitutionProxyInfo.getTaxCode()); - dummyAreaOrganizzativaOmogenea.setCodAoo("AOO"); - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldThrowConflictCreateInstitutionForECFromIpaWithPda() { - - Institution institutionToReturn = new Institution(); - institutionToReturn.setId("id"); - institutionToReturn.setDescription("test"); - - //Given - when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) - .thenReturn(List.of(new Institution())); - - - //When - assertThrows(ResourceConflictException.class, () -> strategyFactory.createInstitutionStrategyPda("EC") - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode("test") - .build())); - - verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldCreateInstitutionForECFromIpaWithPda() { - - Institution institutionToReturn = new Institution(); - institutionToReturn.setId("id"); - institutionToReturn.setDescription("test"); - - //Given - when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) - .thenReturn(List.of()); - - when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); - when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); - when(institutionConnector.save(any())).thenReturn(institutionToReturn); - - //When - Institution actual = strategyFactory.createInstitutionStrategyPda("EC") - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode("test") - .build()); - - assertThat(actual.getId()).isEqualTo(institutionToReturn.getId()); - assertThat(actual.getDescription()).isEqualTo(institutionToReturn.getDescription()); - - verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); - verify(partyRegistryProxyConnector).getCategory(any(), any()); - verify(partyRegistryProxyConnector).getInstitutionById(any()); - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldCreateInstitutionForECFromInfocamereWithPda() { - - Institution institutionToReturn = new Institution(); - institutionToReturn.setId("id"); - institutionToReturn.setDescription("test"); - - NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); - nationalRegistriesProfessionalAddress.setZipCode("test"); - nationalRegistriesProfessionalAddress.setAddress("test"); - - //Given - when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) - .thenReturn(List.of()); - - when(partyRegistryProxyConnector.getInstitutionById(any())).thenThrow(new MsCoreException("NOT_FOUND", "404")); - when(partyRegistryProxyConnector.getLegalAddress(any())).thenReturn(nationalRegistriesProfessionalAddress); - when(institutionConnector.save(any())).thenReturn(institutionToReturn); - - //When - Institution actual = strategyFactory.createInstitutionStrategyPda("EC") - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode("test") - .build()); - - assertThat(actual.getId()).isEqualTo(institutionToReturn.getId()); - assertThat(actual.getDescription()).isEqualTo(institutionToReturn.getDescription()); - - verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); - verify(partyRegistryProxyConnector).getInstitutionById(any()); - verify(partyRegistryProxyConnector).getLegalAddress(any()); - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldCreateInstitutionForECFromInfocamereWithPda2() { - - Institution institutionToReturn = new Institution(); - institutionToReturn.setId("id"); - institutionToReturn.setDescription("test"); - - NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); - nationalRegistriesProfessionalAddress.setZipCode("test"); - nationalRegistriesProfessionalAddress.setAddress("test"); - - //Given - when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) - .thenReturn(List.of()); - - when(partyRegistryProxyConnector.getInstitutionById(any())).thenThrow(new ResourceNotFoundException("NOT_FOUND", "404")); - when(partyRegistryProxyConnector.getLegalAddress(any())).thenReturn(nationalRegistriesProfessionalAddress); - when(institutionConnector.save(any())).thenReturn(institutionToReturn); - - //When - Institution actual = strategyFactory.createInstitutionStrategyPda("EC") - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode("test") - .build()); - - assertThat(actual.getId()).isEqualTo(institutionToReturn.getId()); - assertThat(actual.getDescription()).isEqualTo(institutionToReturn.getDescription()); - - verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); - verify(partyRegistryProxyConnector).getInstitutionById(any()); - verify(partyRegistryProxyConnector).getLegalAddress(any()); - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldThrowErrorWhenInstitutionDoesNotExistsOnIpaAndInfocamere() { - - Institution institutionToReturn = new Institution(); - institutionToReturn.setId("id"); - institutionToReturn.setDescription("test"); - - NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); - nationalRegistriesProfessionalAddress.setZipCode("test"); - nationalRegistriesProfessionalAddress.setAddress("test"); - - //Given - when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) - .thenReturn(List.of()); - - when(partyRegistryProxyConnector.getInstitutionById(any())).thenThrow(new MsCoreException("NOT_FOUND", "404")); - when(partyRegistryProxyConnector.getLegalAddress(any())).thenThrow(new MsCoreException("NOT_FOUND", "404")); - - //When - assertThrows(ResourceNotFoundException.class, () -> strategyFactory.createInstitutionStrategyPda("EC") - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode("test") - .build())); - verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); - verify(partyRegistryProxyConnector).getInstitutionById(any()); - verify(partyRegistryProxyConnector).getLegalAddress(any()); - } -} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyTest.java deleted file mode 100644 index 366f238..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyTest.java +++ /dev/null @@ -1,643 +0,0 @@ -package it.pagopa.selfcare.mscore.core.strategy; - - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.api.InstitutionConnector; -import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; -import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapperImpl; -import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; -import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; -import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; -import it.pagopa.selfcare.mscore.core.util.TestUtils; -import it.pagopa.selfcare.mscore.exception.ResourceConflictException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; -import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; -import it.pagopa.selfcare.mscore.model.institution.*; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.mockito.junit.jupiter.MockitoExtension; - -import java.util.List; -import java.util.Optional; - -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.*; - -@ExtendWith(MockitoExtension.class) -class CreateInstitutionStrategyTest { - - @InjectMocks - CreateInstitutionStrategyFactory strategyFactory; - - @Mock - InstitutionConnector institutionConnector; - @Mock - PartyRegistryProxyConnector partyRegistryProxyConnector; - @Spy - InstitutionMapper institutionMapper = new InstitutionMapperImpl(); - - @InjectMocks - CreateInstitutionStrategyIvass createInstitutionStrategyIvass; - - - private static final InstitutionProxyInfo dummyInstitutionProxyInfo; - private static final CategoryProxyInfo dummyCategoryProxyInfo; - - private static final AreaOrganizzativaOmogenea dummyAreaOrganizzativaOmogenea; - private static final GeographicTaxonomies dummyGeotaxonomies; - private static final InstitutionGeographicTaxonomies dummyInstitutionGeotaxonomies; - - static { - dummyInstitutionProxyInfo = new InstitutionProxyInfo(); - dummyInstitutionProxyInfo.setAddress("42 Main St"); - dummyInstitutionProxyInfo.setAoo("Aoo"); - dummyInstitutionProxyInfo.setCategory("Category"); - dummyInstitutionProxyInfo.setDescription("The characteristics of someone or something"); - dummyInstitutionProxyInfo.setDigitalAddress("42 Main St"); - dummyInstitutionProxyInfo.setId("42"); - dummyInstitutionProxyInfo.setO("foo"); - dummyInstitutionProxyInfo.setOrigin("Origin"); - dummyInstitutionProxyInfo.setOriginId("42"); - dummyInstitutionProxyInfo.setOu("Ou"); - dummyInstitutionProxyInfo.setTaxCode("Tax Code"); - dummyInstitutionProxyInfo.setZipCode("21654"); - dummyInstitutionProxyInfo.setIstatCode("ecIstatCode"); - - dummyCategoryProxyInfo = new CategoryProxyInfo(); - dummyCategoryProxyInfo.setCode("Code"); - dummyCategoryProxyInfo.setKind("Kind"); - dummyCategoryProxyInfo.setName("Name"); - dummyCategoryProxyInfo.setOrigin("Origin"); - - dummyAreaOrganizzativaOmogenea = new AreaOrganizzativaOmogenea(); - dummyAreaOrganizzativaOmogenea.setOrigin(Origin.IPA); - dummyAreaOrganizzativaOmogenea.setDenominazioneAoo("Aoo"); - dummyAreaOrganizzativaOmogenea.setIndirizzo("Address"); - dummyAreaOrganizzativaOmogenea.setCAP("12345"); - dummyAreaOrganizzativaOmogenea.setCodiceFiscaleEnte(dummyInstitutionProxyInfo.getTaxCode()); - dummyAreaOrganizzativaOmogenea.setCodAoo("AOO"); - dummyAreaOrganizzativaOmogenea.setCodiceComuneISTAT("codIstatAOO"); - - dummyGeotaxonomies = new GeographicTaxonomies(); - dummyGeotaxonomies.setDescription("nomeCittΓ  - COMUNE"); - dummyGeotaxonomies.setProvinceAbbreviation("proAbbrv"); - dummyGeotaxonomies.setCountryAbbreviation("countryAbbrv"); - - dummyInstitutionGeotaxonomies = new InstitutionGeographicTaxonomies(); - dummyInstitutionGeotaxonomies.setCode("code"); - dummyInstitutionGeotaxonomies.setDesc("desc"); - } - - private UnitaOrganizzativa dummyUnitaOrganizzativa() { - - UnitaOrganizzativa dummyUnitaOrganizzativa = new UnitaOrganizzativa(); - dummyUnitaOrganizzativa.setOrigin(Origin.IPA); - dummyUnitaOrganizzativa.setDescrizioneUo("Uo"); - dummyUnitaOrganizzativa.setIndirizzo("Address"); - dummyUnitaOrganizzativa.setCAP("12345"); - dummyUnitaOrganizzativa.setCodiceFiscaleEnte(dummyInstitutionProxyInfo.getTaxCode()); - dummyUnitaOrganizzativa.setCodiceUniUo("UO"); - dummyUnitaOrganizzativa.setCodiceUniAoo("AOO"); - dummyUnitaOrganizzativa.setCodiceComuneISTAT("codIstatUO"); - return dummyUnitaOrganizzativa; - } - - @Test - void shouldThrowExceptionOnCreateInstitutionFromIpaIfAlreadyExists() { - - when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) - .thenReturn(List.of(new Institution())); - assertThrows(ResourceConflictException.class, () -> strategyFactory.createInstitutionStrategyIpa() - .createInstitution(CreateInstitutionStrategyInput.builder().subunitType(InstitutionPaSubunitType.AOO) - .build())); - - } - - @Test - void shouldThrowMsCoreExceptionWhenInstitutionAlreadyExists() { - String origin = "IVASS"; - String originId = "12345"; - - when(institutionConnector.findByOriginAndOriginId(origin, originId)).thenReturn(List.of(new Institution())); - - assertThrows(ResourceConflictException.class, () -> strategyFactory.createInstitutionStrategyIvass(new Institution()) - .createInstitution(CreateInstitutionStrategyInput.builder() - .ivassCode(originId) - .build())); - } - - @Test - void shouldThrowExceptionOnCreateInstitutionIfAlreadyExists() { - - when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) - .thenReturn(List.of(new Institution())); - assertThrows(ResourceConflictException.class, () -> strategyFactory.createInstitutionStrategy(new Institution()) - .createInstitution(CreateInstitutionStrategyInput.builder() - .build())); - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldCreateInstitutionFromAnac() { - - Institution institution = TestUtils.dummyInstitutionSa(); - SaResource saResource = new SaResource(); - saResource.setOriginId("originId"); - saResource.setTaxCode("taxCode"); - saResource.setDescription("desc"); - saResource.setDigitalAddress("test@test.it"); - when(partyRegistryProxyConnector.getSAFromAnac(any())).thenReturn(saResource); - when(institutionConnector.save(any())).thenReturn(institution); - //When - Institution actual = strategyFactory.createInstitutionStrategyAnac(institution) - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(institution.getTaxCode()) - .build()); - - //Then - assertThat(actual.getDescription()).isEqualTo(institution.getDescription()); - assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); - assertThat(actual.getAddress()).isEqualTo(institution.getAddress()); - assertThat(actual.getZipCode()).isEqualTo(institution.getZipCode()); - assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); - assertThat(actual.getSubunitCode()).isNull(); - assertThat(actual.getSubunitType()).isNull(); - assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.SA); - assertThat(actual.getSubunitType()).isNull(); - - verify(institutionConnector).save(any()); - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldCreateInstitutionFromIvass() { - - Institution institution = TestUtils.dummyInstitutionAs(); - ASResource asResource = new ASResource(); - asResource.setOriginId("originId"); - asResource.setTaxCode("taxCode"); - asResource.setDescription("desc"); - asResource.setDigitalAddress("test@test.it"); - when(partyRegistryProxyConnector.getASFromIvass(any())).thenReturn(asResource); - when(institutionConnector.save(any())).thenReturn(institution); - //When - Institution actual = strategyFactory.createInstitutionStrategyIvass(institution) - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(institution.getTaxCode()) - .build()); - - //Then - assertThat(actual.getDescription()).isEqualTo(institution.getDescription()); - assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); - assertThat(actual.getAddress()).isEqualTo(institution.getAddress()); - assertThat(actual.getZipCode()).isEqualTo(institution.getZipCode()); - assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); - assertThat(actual.getSubunitCode()).isNull(); - assertThat(actual.getSubunitType()).isNull(); - assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.AS); - assertThat(actual.getSubunitType()).isNull(); - - verify(institutionConnector).save(any()); - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldCreateInstitution() { - //Given - when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); - when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), any())) - .thenReturn(List.of()); - - Institution institution = TestUtils.dummyInstitutionGsp(); - - //When - Institution actual = strategyFactory.createInstitutionStrategy(institution) - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(institution.getTaxCode()) - .build()); - - //Then - assertThat(actual.getDescription()).isEqualTo(institution.getDescription()); - assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); - assertThat(actual.getAddress()).isEqualTo(institution.getAddress()); - assertThat(actual.getZipCode()).isEqualTo(institution.getZipCode()); - assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); - assertThat(actual.getSubunitCode()).isNull(); - assertThat(actual.getSubunitType()).isNull(); - assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.GSP); - assertThat(actual.getSubunitType()).isNull(); - - verify(institutionConnector).save(any()); - verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), any()); - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldCreateInstitutionFromIpaAoo() { - //Given - when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); - when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) - .thenReturn(List.of()); - - when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); - when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); - when(partyRegistryProxyConnector.getAooById(any())).thenReturn(dummyAreaOrganizzativaOmogenea); - when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies).thenReturn(dummyGeotaxonomies); - //When - Institution actual = strategyFactory.createInstitutionStrategyIpa() - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(dummyAreaOrganizzativaOmogenea.getCodiceFiscaleEnte()) - .subunitType(InstitutionPaSubunitType.AOO) - .subunitCode(dummyAreaOrganizzativaOmogenea.getCodAoo()) - .geographicTaxonomies(List.of(dummyInstitutionGeotaxonomies)) - .build()); - - //Then - assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PA); - assertThat(actual.getOriginId()).isEqualTo(dummyAreaOrganizzativaOmogenea.getId()); - assertThat(actual.getDescription()).isEqualTo(dummyAreaOrganizzativaOmogenea.getDenominazioneAoo()); - assertThat(actual.getDigitalAddress()).isEqualTo(dummyInstitutionProxyInfo.getDigitalAddress()); - assertThat(actual.getAddress()).isEqualTo(dummyAreaOrganizzativaOmogenea.getIndirizzo()); - assertThat(actual.getZipCode()).isEqualTo(dummyAreaOrganizzativaOmogenea.getCAP()); - assertThat(actual.getTaxCode()).isEqualTo(dummyAreaOrganizzativaOmogenea.getCodiceFiscaleEnte()); - assertThat(actual.getSubunitCode()).isEqualTo(dummyAreaOrganizzativaOmogenea.getCodAoo()); - assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.AOO.name()); - assertThat(actual.getParentDescription()).isEqualTo(dummyInstitutionProxyInfo.getDescription()); - assertThat(actual.getCity()).isEqualTo(dummyGeotaxonomies.getDescription().replace(" - COMUNE", "")); - assertThat(actual.getGeographicTaxonomies().size()).isEqualTo(1); - assertThat(actual.getGeographicTaxonomies().get(0).getCode()).isEqualTo(dummyInstitutionGeotaxonomies.getCode()); - - verify(institutionConnector, times(2)).save(any()); - verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); - verify(partyRegistryProxyConnector).getCategory(any(), any()); - verify(partyRegistryProxyConnector).getInstitutionById(any()); - verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyInstitutionProxyInfo.getIstatCode()); - verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyAreaOrganizzativaOmogenea.getCodiceComuneISTAT()); - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldCreateInstitutionFromIpaUo() { - - UnitaOrganizzativa dummyUnitaOrganizzativa = dummyUnitaOrganizzativa(); - - when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); - when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) - .thenReturn(List.of()); - - when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); - when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); - when(partyRegistryProxyConnector.getUoById(any())).thenReturn(dummyUnitaOrganizzativa); - when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies).thenReturn(dummyGeotaxonomies); - - Institution actual = strategyFactory.createInstitutionStrategyIpa() - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()) - .subunitType(InstitutionPaSubunitType.UO) - .subunitCode(dummyUnitaOrganizzativa.getCodiceUniUo()) - .build()); - - //Then - assertThat(actual.getOriginId()).isEqualTo(dummyUnitaOrganizzativa.getId()); - assertThat(actual.getDescription()).isEqualTo(dummyUnitaOrganizzativa.getDescrizioneUo()); - - assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PA); - assertThat(actual.getDigitalAddress()).isEqualTo(dummyInstitutionProxyInfo.getDigitalAddress()); - assertThat(actual.getAddress()).isEqualTo(dummyUnitaOrganizzativa.getIndirizzo()); - assertThat(actual.getZipCode()).isEqualTo(dummyUnitaOrganizzativa.getCAP()); - assertThat(actual.getTaxCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()); - assertThat(actual.getSubunitCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniUo()); - assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.UO.name()); - assertThat(actual.getParentDescription()).isEqualTo(dummyInstitutionProxyInfo.getDescription()); - assertThat(actual.getPaAttributes().getAooParentCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniAoo()); - assertThat(actual.getCity()).isEqualTo(dummyGeotaxonomies.getDescription().replace(" - COMUNE", "")); - - verify(institutionConnector, times(2)).save(any()); - verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); - verify(partyRegistryProxyConnector).getCategory(any(), any()); - verify(partyRegistryProxyConnector).getInstitutionById(any()); - verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyInstitutionProxyInfo.getIstatCode()); - verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyUnitaOrganizzativa.getCodiceComuneISTAT()); - - } - - @Test - void createAooFromIpa_nullGeotax() { - //Given - when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); - when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) - .thenReturn(List.of()); - - when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); - when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); - when(partyRegistryProxyConnector.getAooById(any())).thenReturn(dummyAreaOrganizzativaOmogenea); - when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies).thenReturn(new GeographicTaxonomies()); - //When - Institution actual = strategyFactory.createInstitutionStrategyIpa() - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(dummyAreaOrganizzativaOmogenea.getCodiceFiscaleEnte()) - .subunitType(InstitutionPaSubunitType.AOO) - .subunitCode(dummyAreaOrganizzativaOmogenea.getCodAoo()) - .build()); - - //Then - assertThat(actual.getCity()).isEqualTo(null); - verify(institutionConnector, times(2)).save(any()); - verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); - verify(partyRegistryProxyConnector).getCategory(any(), any()); - verify(partyRegistryProxyConnector).getInstitutionById(any()); - verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyInstitutionProxyInfo.getIstatCode()); - verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyAreaOrganizzativaOmogenea.getCodiceComuneISTAT()); - - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldCreateInstitutionFromIpaUoRetrievingExistingEc() { - - UnitaOrganizzativa dummyUnitaOrganizzativa = dummyUnitaOrganizzativa(); - - when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); - when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) - .thenReturn(List.of()); - - when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); - when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); - when(partyRegistryProxyConnector.getUoById(any())).thenReturn(dummyUnitaOrganizzativa); - when(institutionConnector.findByExternalId(any())).thenReturn(Optional.of(new Institution())); - when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies); - Institution actual = strategyFactory.createInstitutionStrategyIpa() - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()) - .subunitType(InstitutionPaSubunitType.UO) - .subunitCode(dummyUnitaOrganizzativa.getCodiceUniUo()) - .build()); - - //Then - assertThat(actual.getOriginId()).isEqualTo(dummyUnitaOrganizzativa.getId()); - assertThat(actual.getDescription()).isEqualTo(dummyUnitaOrganizzativa.getDescrizioneUo()); - - assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PA); - assertThat(actual.getDigitalAddress()).isEqualTo(dummyInstitutionProxyInfo.getDigitalAddress()); - assertThat(actual.getAddress()).isEqualTo(dummyUnitaOrganizzativa.getIndirizzo()); - assertThat(actual.getZipCode()).isEqualTo(dummyUnitaOrganizzativa.getCAP()); - assertThat(actual.getTaxCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()); - assertThat(actual.getSubunitCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniUo()); - assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.UO.name()); - assertThat(actual.getParentDescription()).isEqualTo(dummyInstitutionProxyInfo.getDescription()); - assertThat(actual.getPaAttributes().getAooParentCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniAoo()); - assertThat(actual.getCity()).isEqualTo(dummyGeotaxonomies.getDescription().replace(" - COMUNE", "")); - - verify(institutionConnector, times(1)).save(any()); - verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); - verify(partyRegistryProxyConnector).getCategory(any(), any()); - verify(partyRegistryProxyConnector).getInstitutionById(any()); - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldCreateInstitutionFromIpaUoWithoutTaxCodeSfe() { - - UnitaOrganizzativa dummyUnitaOrganizzativa = dummyUnitaOrganizzativa(); - - when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); - when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) - .thenReturn(List.of()); - - when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); - when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); - when(partyRegistryProxyConnector.getUoById(any())).thenReturn(dummyUnitaOrganizzativa); - when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies).thenReturn(dummyGeotaxonomies); - - Institution actual = strategyFactory.createInstitutionStrategyIpa() - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()) - .subunitType(InstitutionPaSubunitType.UO) - .subunitCode(dummyUnitaOrganizzativa.getCodiceUniUo()) - .build()); - - //Then - assertThat(actual.getOriginId()).isEqualTo(dummyUnitaOrganizzativa.getId()); - assertThat(actual.getDescription()).isEqualTo(dummyUnitaOrganizzativa.getDescrizioneUo()); - - assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PA); - assertThat(actual.getDigitalAddress()).isEqualTo(dummyInstitutionProxyInfo.getDigitalAddress()); - assertThat(actual.getAddress()).isEqualTo(dummyUnitaOrganizzativa.getIndirizzo()); - assertThat(actual.getZipCode()).isEqualTo(dummyUnitaOrganizzativa.getCAP()); - assertThat(actual.getTaxCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()); - assertThat(actual.getSubunitCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniUo()); - assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.UO.name()); - assertThat(actual.getParentDescription()).isEqualTo(dummyInstitutionProxyInfo.getDescription()); - assertThat(actual.getPaAttributes().getAooParentCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniAoo()); - - verify(institutionConnector, times(2)).save(any()); - verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); - verify(partyRegistryProxyConnector).getCategory(any(), any()); - verify(partyRegistryProxyConnector).getInstitutionById(any()); - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldGetExistingEC() { - - Institution institutionToReturn = new Institution(); - institutionToReturn.setId("id"); - institutionToReturn.setDescription("test"); - - //Given - when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) - .thenReturn(List.of()); - - when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); - when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); - when(institutionConnector.save(any())).thenReturn(institutionToReturn); - when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies); - - //When - Institution actual = strategyFactory.createInstitutionStrategyIpa() - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(dummyAreaOrganizzativaOmogenea.getCodiceFiscaleEnte()) - .subunitCode(dummyAreaOrganizzativaOmogenea.getCodAoo()) - .build()); - - assertThat(actual.getId()).isEqualTo(institutionToReturn.getId()); - assertThat(actual.getDescription()).isEqualTo(institutionToReturn.getDescription()); - - verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); - verify(partyRegistryProxyConnector).getCategory(any(), any()); - verify(partyRegistryProxyConnector).getInstitutionById(any()); - verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyInstitutionProxyInfo.getIstatCode()); - } - - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldCreateInstitutionFromIpaUoWhenCodAooEmptyAndTipoMail() { - - UnitaOrganizzativa dummyUnitaOrganizzativa = dummyUnitaOrganizzativa(); - dummyUnitaOrganizzativa.setCodiceUniAoo(null); - dummyUnitaOrganizzativa.setTipoMail1("Pec"); - dummyUnitaOrganizzativa.setMail1("example@pec.it"); - - when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); - when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) - .thenReturn(List.of()); - - when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); - when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); - when(partyRegistryProxyConnector.getUoById(any())).thenReturn(dummyUnitaOrganizzativa); - when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies); - Institution actual = strategyFactory.createInstitutionStrategyIpa() - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()) - .subunitType(InstitutionPaSubunitType.UO) - .subunitCode(dummyUnitaOrganizzativa.getCodiceUniUo()) - .build()); - - //Then - assertThat(actual.getOriginId()).isEqualTo(dummyUnitaOrganizzativa.getId()); - assertThat(actual.getDescription()).isEqualTo(dummyUnitaOrganizzativa.getDescrizioneUo()); - - assertThat(actual.getDigitalAddress()).isEqualTo(dummyUnitaOrganizzativa.getMail1()); - assertThat(actual.getAddress()).isEqualTo(dummyUnitaOrganizzativa.getIndirizzo()); - assertThat(actual.getZipCode()).isEqualTo(dummyUnitaOrganizzativa.getCAP()); - assertThat(actual.getTaxCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()); - assertThat(actual.getSubunitCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniUo()); - assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.UO.name()); - assertThat(actual.getPaAttributes()).isNull(); - - verify(institutionConnector, times(2)).save(any()); - verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); - verify(partyRegistryProxyConnector).getCategory(any(), any()); - verify(partyRegistryProxyConnector).getInstitutionById(any()); - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldCreateInstitutionWithOriginInfocamereWhenLegalAddressIsFound() { - - Institution institution = TestUtils.dummyInstitutionPg(); - - NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); - nationalRegistriesProfessionalAddress.setAddress("test address"); - nationalRegistriesProfessionalAddress.setZipCode("00000"); - when(partyRegistryProxyConnector.getLegalAddress(any())).thenReturn(nationalRegistriesProfessionalAddress); - - when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); - //When - Institution actual = strategyFactory.createInstitutionStrategyInfocamere(institution) - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(institution.getTaxCode()) - .description(institution.getDescription()) - .build()); - - //Then - assertThat(actual.getDescription()).isEqualTo(institution.getDescription()); - assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); - assertThat(actual.getAddress()).isEqualTo(nationalRegistriesProfessionalAddress.getAddress()); - assertThat(actual.getZipCode()).isEqualTo(nationalRegistriesProfessionalAddress.getZipCode()); - assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); - assertThat(actual.getSubunitCode()).isNull(); - assertThat(actual.getSubunitType()).isNull(); - assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PG); - assertThat(actual.getSubunitType()).isNull(); - assertThat(actual.getOrigin()).isEqualTo(Origin.INFOCAMERE.getValue()); - - verify(institutionConnector).save(any()); - } - - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void createInstitutionWithOriginInfocamere_WhenInstitutionExists() { - - Institution institution = TestUtils.dummyInstitutionPg(); - final String description = "UPDATE DESCRIPTION"; - - when(institutionConnector.findByTaxCodeAndSubunitCode(institution.getTaxCode(), null)) - .thenReturn(List.of(institution)); - - when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); - //When - Institution actual = strategyFactory.createInstitutionStrategyInfocamere(institution) - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(institution.getTaxCode()) - .description(description) - .build()); - - //Then - assertThat(actual.getDescription()).isEqualTo(description); - assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); - assertThat(actual.getAddress()).isEqualTo(institution.getAddress()); - assertThat(actual.getZipCode()).isEqualTo(institution.getZipCode()); - assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); - assertThat(actual.getSubunitCode()).isNull(); - assertThat(actual.getSubunitType()).isNull(); - assertThat(actual.getInstitutionType()).isEqualTo(institution.getInstitutionType()); - assertThat(actual.getSubunitType()).isNull(); - assertThat(actual.getOrigin()).isEqualTo(institution.getOrigin()); - - verify(institutionConnector).save(any()); - } - - /** - * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} - */ - @Test - void shouldCreateInstitutionWithOriginSelcWhenLegalAddressIsNotFound() { - - Institution institution = TestUtils.dummyInstitutionPg(); - - when(partyRegistryProxyConnector.getLegalAddress(any())).thenThrow(ResourceNotFoundException.class); - - when(institutionConnector.save(any())).thenReturn(institution); - //When - Institution actual = strategyFactory.createInstitutionStrategyInfocamere(institution) - .createInstitution(CreateInstitutionStrategyInput.builder() - .taxCode(institution.getTaxCode()) - .description(institution.getDescription()) - .build()); - - //Then - assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); - assertThat(actual.getSubunitCode()).isNull(); - assertThat(actual.getSubunitType()).isNull(); - assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PG); - assertThat(actual.getSubunitType()).isNull(); - assertThat(actual.getOriginId()).isEqualTo(institution.getTaxCode()); - - verify(institutionConnector).save(any()); - } - -} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapperTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapperTest.java deleted file mode 100644 index e31ef9c..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapperTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package it.pagopa.selfcare.mscore.core.util; - -import it.pagopa.selfcare.mscore.config.MailTemplateConfig; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import static org.mockito.Mockito.when; - -@ExtendWith(SpringExtension.class) -class MailParametersMapperTest { - - @InjectMocks - private MailParametersMapper mailParametersMapper; - - @Mock - private MailTemplateConfig mailTemplateConfig; - - @Test - void getNotificationDelegationPath(){ - when(mailTemplateConfig.getDelegationNotificationPath()).thenReturn("path"); - Assertions.assertNotNull(mailParametersMapper.getDelegationNotificationPath()); - } - - @Test - void getNotificationDelegationParameters(){ - Assertions.assertNotNull(mailParametersMapper.getDelegationNotificationParameter("productName","productId", "partnerName")); - } - -} - diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtilsTest.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtilsTest.java deleted file mode 100644 index 62805a1..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtilsTest.java +++ /dev/null @@ -1,471 +0,0 @@ -package it.pagopa.selfcare.mscore.core.util; - -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.mscore.constant.Env; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.institution.Billing; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import it.pagopa.selfcare.mscore.model.institution.Premium; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.model.user.UserBinding; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; - -class OnboardingInfoUtilsTest { - - /** - * Method under test: {@link OnboardingInfoUtils#convertStatesToRelationshipsState(String[])} - */ - @Test - void testConvertStatesToRelationshipsState2() { - assertTrue(OnboardingInfoUtils.convertStatesToRelationshipsState(new String[]{}).isEmpty()); - } - - /** - * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} - */ - @Test - void testGetUserInstitutionsWithProductStatusIn() { - ArrayList userInstitutionToBeFiltered = new ArrayList<>(); - assertThrows(ResourceNotFoundException.class, () -> OnboardingInfoUtils - .getUserInstitutionsWithProductStatusIn(userInstitutionToBeFiltered, new ArrayList<>())); - } - - /** - * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} - */ - @Test - void testGetUserInstitutionsWithProductStatusIn2() { - UserBinding userBinding = new UserBinding(); - - userBinding.setInstitutionId("42"); - userBinding.setProducts(new ArrayList<>()); - - ArrayList userBindingList = new ArrayList<>(); - userBindingList.add(userBinding); - assertThrows(ResourceNotFoundException.class, - () -> OnboardingInfoUtils.getUserInstitutionsWithProductStatusIn(userBindingList, new ArrayList<>())); - } - - /** - * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} - */ - @Test - void testGetUserInstitutionsWithProductStatusIn3() { - ArrayList userInstitutionToBeFiltered = new ArrayList<>(); - - ArrayList relationshipStateList = new ArrayList<>(); - relationshipStateList.add(RelationshipState.PENDING); - assertThrows(ResourceNotFoundException.class, () -> OnboardingInfoUtils - .getUserInstitutionsWithProductStatusIn(userInstitutionToBeFiltered, relationshipStateList)); - } - - /** - * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} - */ - @Test - void testGetUserInstitutionsWithProductStatusIn4() { - ArrayList userInstitutionToBeFiltered = new ArrayList<>(); - - ArrayList relationshipStateList = new ArrayList<>(); - relationshipStateList.add(RelationshipState.PENDING); - relationshipStateList.add(RelationshipState.PENDING); - assertThrows(ResourceNotFoundException.class, () -> OnboardingInfoUtils - .getUserInstitutionsWithProductStatusIn(userInstitutionToBeFiltered, relationshipStateList)); - } - - /** - * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} - */ - @Test - void testGetUserInstitutionsWithProductStatusIn5() { - OnboardedProduct onboardedProduct = new OnboardedProduct(); - onboardedProduct.setContract(", "); - onboardedProduct.setCreatedAt(null); - onboardedProduct.setEnv(Env.ROOT); - onboardedProduct.setProductId("42"); - onboardedProduct.setProductRole(""); - onboardedProduct.setRole(PartyRole.MANAGER); - onboardedProduct.setStatus(RelationshipState.PENDING); - onboardedProduct.setUpdatedAt(null); - - ArrayList onboardedProductList = new ArrayList<>(); - onboardedProductList.add(onboardedProduct); - - UserBinding userBinding = new UserBinding(); - - userBinding.setInstitutionId("42"); - userBinding.setProducts(onboardedProductList); - - ArrayList userBindingList = new ArrayList<>(); - userBindingList.add(userBinding); - assertThrows(ResourceNotFoundException.class, - () -> OnboardingInfoUtils.getUserInstitutionsWithProductStatusIn(userBindingList, new ArrayList<>())); - } - - /** - * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} - */ - @Test - void testGetUserInstitutionsWithProductStatusIn6() { - OnboardedProduct onboardedProduct = new OnboardedProduct(); - onboardedProduct.setContract(", "); - onboardedProduct.setCreatedAt(null); - onboardedProduct.setEnv(Env.ROOT); - onboardedProduct.setProductId("42"); - onboardedProduct.setProductRole(""); - onboardedProduct.setRole(PartyRole.MANAGER); - onboardedProduct.setStatus(RelationshipState.PENDING); - onboardedProduct.setUpdatedAt(null); - - OnboardedProduct onboardedProduct1 = new OnboardedProduct(); - onboardedProduct1.setContract(", "); - onboardedProduct1.setCreatedAt(null); - onboardedProduct1.setEnv(Env.ROOT); - onboardedProduct1.setProductId("42"); - onboardedProduct1.setProductRole(""); - onboardedProduct1.setRole(PartyRole.MANAGER); - onboardedProduct1.setStatus(RelationshipState.PENDING); - onboardedProduct1.setUpdatedAt(null); - - ArrayList onboardedProductList = new ArrayList<>(); - onboardedProductList.add(onboardedProduct1); - onboardedProductList.add(onboardedProduct); - - UserBinding userBinding = new UserBinding(); - - userBinding.setInstitutionId("42"); - userBinding.setProducts(onboardedProductList); - - ArrayList userBindingList = new ArrayList<>(); - userBindingList.add(userBinding); - assertThrows(ResourceNotFoundException.class, - () -> OnboardingInfoUtils.getUserInstitutionsWithProductStatusIn(userBindingList, new ArrayList<>())); - } - - /** - * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} - */ - @Test - void testGetUserInstitutionsWithProductStatusIn7() { - OnboardedProduct onboardedProduct = new OnboardedProduct(); - onboardedProduct.setContract(", "); - onboardedProduct.setCreatedAt(null); - onboardedProduct.setEnv(Env.ROOT); - onboardedProduct.setProductId("42"); - onboardedProduct.setProductRole(""); - onboardedProduct.setRole(PartyRole.MANAGER); - onboardedProduct.setStatus(RelationshipState.PENDING); - onboardedProduct.setUpdatedAt(null); - - ArrayList onboardedProductList = new ArrayList<>(); - onboardedProductList.add(onboardedProduct); - - UserBinding userBinding = new UserBinding(); - - userBinding.setInstitutionId("42"); - userBinding.setProducts(onboardedProductList); - - ArrayList userBindingList = new ArrayList<>(); - userBindingList.add(userBinding); - - ArrayList relationshipStateList = new ArrayList<>(); - relationshipStateList.add(RelationshipState.PENDING); - List actualUserInstitutionsWithProductStatusIn = OnboardingInfoUtils - .getUserInstitutionsWithProductStatusIn(userBindingList, relationshipStateList); - assertEquals(1, actualUserInstitutionsWithProductStatusIn.size()); - assertEquals(onboardedProductList, actualUserInstitutionsWithProductStatusIn.get(0).getProducts()); - } - - /** - * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} - */ - @Test - void testFindOnboardingLinkedToProductWithStateIn() { - UserBinding userBinding = new UserBinding(); - - userBinding.setInstitutionId("42"); - ArrayList onboardedProductList = new ArrayList<>(); - userBinding.setProducts(onboardedProductList); - Institution onboardedInstitution = new Institution(); - assertNotNull( - OnboardingInfoUtils - .findOnboardingLinkedToProductWithStateIn(userBinding, onboardedInstitution, new ArrayList<>()) - .getOnboarding()); - } - - /** - * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} - */ - @Test - void testFindOnboardingLinkedToProductWithStateIn6() { - OnboardedProduct onboardedProduct = new OnboardedProduct(); - onboardedProduct.setContract("Contract"); - onboardedProduct.setCreatedAt(null); - onboardedProduct.setEnv(Env.ROOT); - onboardedProduct.setProductId("42"); - onboardedProduct.setProductRole(""); - onboardedProduct.setRole(PartyRole.MANAGER); - onboardedProduct.setStatus(RelationshipState.PENDING); - onboardedProduct.setUpdatedAt(null); - - ArrayList onboardedProductList = new ArrayList<>(); - onboardedProductList.add(onboardedProduct); - - UserBinding userBinding = new UserBinding(); - - userBinding.setInstitutionId("42"); - userBinding.setProducts(onboardedProductList); - - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Premium premium = new Premium(); - premium.setContract("Contract"); - premium.setStatus(RelationshipState.PENDING); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - - Institution institution = new Institution(); - institution.setOnboarding(onboardingList); - ArrayList relationshipStateList = new ArrayList<>(); - List onboarding1 = OnboardingInfoUtils - .findOnboardingLinkedToProductWithStateIn(userBinding, institution, relationshipStateList) - .getOnboarding(); - assertNotNull(onboarding1); - assertTrue(onboarding1.isEmpty()); - } - - /** - * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} - */ - @Test - void testFindOnboardingLinkedToProductWithStateIn7() { - OnboardedProduct onboardedProduct = new OnboardedProduct(); - onboardedProduct.setContract("Contract"); - onboardedProduct.setCreatedAt(null); - onboardedProduct.setEnv(Env.ROOT); - onboardedProduct.setProductId("42"); - onboardedProduct.setProductRole(""); - onboardedProduct.setRole(PartyRole.MANAGER); - onboardedProduct.setStatus(RelationshipState.PENDING); - onboardedProduct.setUpdatedAt(null); - - ArrayList onboardedProductList = new ArrayList<>(); - onboardedProductList.add(onboardedProduct); - - UserBinding userBinding = new UserBinding(); - - userBinding.setInstitutionId("42"); - userBinding.setProducts(onboardedProductList); - - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Premium premium = new Premium(); - premium.setContract("Contract"); - premium.setStatus(RelationshipState.PENDING); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setUpdatedAt(null); - - Billing billing1 = new Billing(); - billing1.setPublicServices(true); - billing1.setRecipientCode("Recipient Code"); - billing1.setVatNumber("42"); - - Premium premium1 = new Premium(); - premium1.setContract("Contract"); - premium1.setStatus(RelationshipState.PENDING); - - Onboarding onboarding1 = new Onboarding(); - onboarding1.setBilling(billing1); - onboarding1.setContract("Contract"); - onboarding1.setCreatedAt(null); - onboarding1.setPricingPlan("Pricing Plan"); - onboarding1.setProductId("42"); - onboarding1.setStatus(RelationshipState.PENDING); - onboarding1.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding1); - onboardingList.add(onboarding); - - Institution institution = new Institution(); - institution.setOnboarding(onboardingList); - ArrayList relationshipStateList = new ArrayList<>(); - List onboarding2 = OnboardingInfoUtils - .findOnboardingLinkedToProductWithStateIn(userBinding, institution, relationshipStateList) - .getOnboarding(); - assertTrue(onboarding2.isEmpty()); - } - - /** - * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} - */ - @Test - void testFindOnboardingLinkedToProductWithStateIn8() { - OnboardedProduct onboardedProduct = new OnboardedProduct(); - onboardedProduct.setContract("Contract"); - onboardedProduct.setCreatedAt(null); - onboardedProduct.setEnv(Env.ROOT); - onboardedProduct.setProductId("42"); - onboardedProduct.setProductRole(""); - onboardedProduct.setRole(PartyRole.MANAGER); - onboardedProduct.setStatus(RelationshipState.PENDING); - onboardedProduct.setUpdatedAt(null); - - ArrayList onboardedProductList = new ArrayList<>(); - onboardedProductList.add(onboardedProduct); - - UserBinding userBinding = new UserBinding(); - - userBinding.setInstitutionId("42"); - userBinding.setProducts(onboardedProductList); - - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Premium premium = new Premium(); - premium.setContract("Contract"); - premium.setStatus(RelationshipState.PENDING); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("Product Id"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - - Institution institution = new Institution(); - institution.setOnboarding(onboardingList); - ArrayList relationshipStateList = new ArrayList<>(); - List onboarding1 = OnboardingInfoUtils - .findOnboardingLinkedToProductWithStateIn(userBinding, institution, relationshipStateList) - .getOnboarding(); - assertTrue(onboarding1.isEmpty()); - } - - /** - * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} - */ - @Test - void testFindOnboardingLinkedToProductWithStateIn9() { - OnboardedProduct onboardedProduct = new OnboardedProduct(); - onboardedProduct.setContract("Contract"); - onboardedProduct.setCreatedAt(null); - onboardedProduct.setEnv(Env.ROOT); - onboardedProduct.setProductId("42"); - onboardedProduct.setProductRole(""); - onboardedProduct.setRole(PartyRole.MANAGER); - onboardedProduct.setStatus(RelationshipState.PENDING); - onboardedProduct.setUpdatedAt(null); - - ArrayList onboardedProductList = new ArrayList<>(); - onboardedProductList.add(onboardedProduct); - - UserBinding userBinding = new UserBinding(); - - userBinding.setInstitutionId("42"); - userBinding.setProducts(onboardedProductList); - - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Premium premium = new Premium(); - premium.setContract("Contract"); - premium.setStatus(RelationshipState.PENDING); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - - Institution institution = new Institution(); - institution.setOnboarding(onboardingList); - - ArrayList relationshipStateList = new ArrayList<>(); - relationshipStateList.add(RelationshipState.PENDING); - List onboarding1 = OnboardingInfoUtils - .findOnboardingLinkedToProductWithStateIn(userBinding, institution, relationshipStateList) - .getOnboarding(); - assertEquals(onboardingList, onboarding1); - assertEquals(1, onboarding1.size()); - } - - /** - * Method under test: {@link OnboardingInfoUtils#getRelationShipStateList(String[])} - */ - @Test - void testGetRelationShipStateList() { - String[] states = {"ACTIVE"}; - List actualRelationShipStateList = OnboardingInfoUtils.getRelationShipStateList(states); - assertEquals(1, actualRelationShipStateList.size()); - } - - /** - * Method under test: {@link OnboardingInfoUtils#getRelationShipStateList(String[])} - */ - @Test - void testGetRelationShipStateList2() { - List actualRelationShipStateList = OnboardingInfoUtils.getRelationShipStateList(null); - assertEquals(2, actualRelationShipStateList.size()); - assertEquals(RelationshipState.ACTIVE, actualRelationShipStateList.get(0)); - assertEquals(RelationshipState.PENDING, actualRelationShipStateList.get(1)); - } - - /** - * Method under test: {@link OnboardingInfoUtils#getRelationShipStateList(String[])} - */ - @Test - void testGetRelationShipStateList3() { - List actualRelationShipStateList = OnboardingInfoUtils - .getRelationShipStateList(new String[]{}); - assertEquals(2, actualRelationShipStateList.size()); - assertEquals(RelationshipState.ACTIVE, actualRelationShipStateList.get(0)); - assertEquals(RelationshipState.PENDING, actualRelationShipStateList.get(1)); - } -} - diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/TestUtils.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/TestUtils.java deleted file mode 100644 index b99a593..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/TestUtils.java +++ /dev/null @@ -1,65 +0,0 @@ -package it.pagopa.selfcare.mscore.core.util; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.model.onboarding.Contract; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardingRequest; - -import java.time.OffsetDateTime; -import java.util.ArrayList; - -public class TestUtils { - - - public static Institution dummyInstitutionPa() { - return dummyInstitution(InstitutionType.PA); - } - public static Institution dummyInstitutionGsp() { - return dummyInstitution(InstitutionType.GSP); - } - - public static Institution dummyInstitutionSa() { - return dummyInstitution(InstitutionType.SA); - } - - public static Institution dummyInstitutionAs() { - return dummyInstitution(InstitutionType.AS); - } - public static Institution dummyInstitutionPt() { - return dummyInstitution(InstitutionType.PT); - } - - public static Institution dummyInstitutionPg() { - return dummyInstitution(InstitutionType.PG); - } - - private static Institution dummyInstitution(InstitutionType institutionType) { - - Billing billing = new Billing(); - ArrayList onboarding = new ArrayList<>(); - ArrayList geographicTaxonomies = new ArrayList<>(); - ArrayList attributes = new ArrayList<>(); - PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); - - return new Institution("42", "42", Origin.SELC.name(), "START - setupCommonData", - "The characteristics of someone or something", institutionType, "42 Main St", "42 Main St", "21654", - "TaxCode","ivass", "city", "county", "country", "istatCode", billing, onboarding, geographicTaxonomies, attributes, paymentServiceProvider, - new DataProtectionOfficer(), null, null, "START - setupCommonData", "START - setupCommonData", - "START - setupCommonData", true, OffsetDateTime.now(), OffsetDateTime.now(), null, null, null, null, new PaAttributes(),false); - } - - public static OnboardingRequest dummyOnboardingRequest(Billing billing, Contract contract, InstitutionUpdate institutionUpdate){ - OnboardingRequest onboardingRequest = new OnboardingRequest(); - onboardingRequest.setBillingRequest(billing); - onboardingRequest.setContract(contract); - onboardingRequest.setInstitutionExternalId("42"); - onboardingRequest.setInstitutionUpdate(institutionUpdate); - onboardingRequest.setPricingPlan("Pricing Plan"); - onboardingRequest.setProductId("42"); - onboardingRequest.setProductName("Product Name"); - onboardingRequest.setSignContract(true); - onboardingRequest.setUsers(new ArrayList<>()); - return onboardingRequest; - } -} diff --git a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/model/DummyUser.java b/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/model/DummyUser.java deleted file mode 100644 index 14bec6b..0000000 --- a/apps/institution-ms-new/core/src/test/java/it/pagopa/selfcare/mscore/core/util/model/DummyUser.java +++ /dev/null @@ -1,38 +0,0 @@ -package it.pagopa.selfcare.mscore.core.util.model; - -import it.pagopa.selfcare.mscore.model.CertifiedField; -import it.pagopa.selfcare.mscore.model.institution.WorkContact; -import it.pagopa.selfcare.mscore.model.user.User; - -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -public class DummyUser extends User { - - public DummyUser(String institutionId){ - this.setId(UUID.randomUUID().toString()); - this.setFiscalCode("fiscalCode"); - this.setName(setValue("name")); - this.setFamilyName(setValue("familyName")); - this.setWorkContacts(setContact(institutionId, setWorkContact("email"))); - } - - private CertifiedField setValue(String value){ - CertifiedField certifiedField = new CertifiedField<>(); - certifiedField.setValue(value); - return certifiedField; - } - - private Map setContact(String institutionId, WorkContact workContact){ - Map contactMap = new HashMap<>(); - contactMap.put(institutionId, workContact); - return contactMap; - } - - private WorkContact setWorkContact(String value){ - WorkContact contact = new WorkContact(); - contact.setEmail(setValue(value)); - return contact; - } -} diff --git a/apps/institution-ms-new/lombok.config b/apps/institution-ms-new/lombok.config deleted file mode 100644 index 8f7e8aa..0000000 --- a/apps/institution-ms-new/lombok.config +++ /dev/null @@ -1 +0,0 @@ -lombok.addLombokGeneratedAnnotation = true \ No newline at end of file diff --git a/apps/institution-ms-new/mvnw b/apps/institution-ms-new/mvnw deleted file mode 100644 index a16b543..0000000 --- a/apps/institution-ms-new/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/apps/institution-ms-new/mvnw.cmd b/apps/institution-ms-new/mvnw.cmd deleted file mode 100644 index c8d4337..0000000 --- a/apps/institution-ms-new/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/apps/institution-ms-new/pom.xml b/apps/institution-ms-new/pom.xml deleted file mode 100644 index 8c0314a..0000000 --- a/apps/institution-ms-new/pom.xml +++ /dev/null @@ -1,220 +0,0 @@ - - - 4.0.0 - - it.pagopa.selfcare - selc-starter-parent - 0.0.3-SNAPSHOT - - - selc-ms-core - 1.0-SNAPSHOT - pom - selc-ms-core - Selface ms-core - - - connector-api - connector - core - web - app - - - - 2.5.1 - 5.2.1 - 5.2.1 - https://sonarcloud.io/ - - - - - - it.pagopa.selfcare - selc-commons-base - ${selc-commons.version} - - - it.pagopa.selfcare - selc-commons-base - ${selc-commons.version} - test-jar - - - it.pagopa.selfcare - selc-commons-web - ${selc-commons.version} - - - it.pagopa.selfcare - selc-commons-web - ${selc-commons.version} - test-jar - - - it.pagopa.selfcare.utils - selc-commons-crypto - ${selc-commons.version} - compile - - - it.pagopa.selfcare - selc-common-utils - ${selc-commons.version} - - - it.pagopa.selfcare - selc-commons-connector-rest - ${selc-commons.version} - - - it.pagopa.selfcare - selc-commons-connector-rest - ${selc-commons.version} - test-jar - test - - - it.pagopa.selfcare - selc-ms-core-connector-api - 1.0-SNAPSHOT - - - it.pagopa.selfcare - selc-ms-core-core - 1.0-SNAPSHOT - - - it.pagopa.selfcare - selc-ms-core-web - 1.0-SNAPSHOT - - - it.pagopa.selfcare - selc-ms-core-connector-rest - 1.0-SNAPSHOT - - - it.pagopa.selfcare - selc-ms-core-connector-dao - 1.0-SNAPSHOT - - - it.pagopa.selfcare - selc-ms-core-connector-email - 1.0-SNAPSHOT - - - it.pagopa.selfcare - selc-ms-core-connector-azure-storage - 1.0-SNAPSHOT - - - - - - - - jakarta.xml.soap - jakarta.xml.soap-api - 3.0.0 - - - jakarta.xml.ws - jakarta.xml.ws-api - 4.0.0 - - - com.sun.xml.ws - jaxws-rt - 4.0.0 - - - jakarta.activation - jakarta.activation-api - 2.1.0 - - - jakarta.xml.bind - jakarta.xml.bind-api - 4.0.0 - - - com.sun.xml.bind - jaxb-impl - 4.0.1 - - - com.sun.xml.messaging.saaj - saaj-impl - 3.0.0 - - - it.pagopa.selfcare.soap - selc-commons-connector-soap-aruba-sign - ${selc-commons.version} - - - - javax.xml.bind - jaxb-api - 2.3.1 - - - javax.annotation - javax.annotation-api - 1.3.2 - - - org.bouncycastle - bcpkix-jdk15on - 1.70 - - - org.bouncycastle - bcprov-ext-jdk15on - 1.70 - - - org.bouncycastle - bcprov-jdk15on - 1.70 - - - - org.owasp.encoder - encoder - 1.2.3 - - - - - - it.pagopa.selfcare - selc-commons-base - - - it.pagopa.selfcare - selc-commons-base - test-jar - test - - - - - selfcare-platform - - https://pkgs.dev.azure.com/pagopaspa/selfcare-platform-app-projects/_packaging/selfcare-platform/maven/v1 - - - - - selfcare-onboarding - Selfcare Onboarding SDK - https://maven.pkg.github.com/pagopa/selfcare-onboarding - - - - \ No newline at end of file diff --git a/apps/institution-ms-new/web/pom.xml b/apps/institution-ms-new/web/pom.xml deleted file mode 100644 index 46f4c57..0000000 --- a/apps/institution-ms-new/web/pom.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - 4.0.0 - - selc-ms-core - it.pagopa.selfcare - 1.0-SNAPSHOT - - - selc-ms-core-web - - - - it.pagopa.selfcare - selc-commons-web - - - it.pagopa.selfcare - selc-commons-base - - - it.pagopa.selfcare - selc-commons-web - test-jar - test - - - it.pagopa.selfcare - selc-ms-core-core - - - io.springfox - springfox-boot-starter - - - - diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/CoreSecurityConfig.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/CoreSecurityConfig.java deleted file mode 100644 index 859d3b5..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/CoreSecurityConfig.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.web.config; - -import it.pagopa.selfcare.commons.web.config.SecurityConfig; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; - -@Slf4j -@Configuration -@EnableWebSecurity -@Import(SecurityConfig.class) -class CoreSecurityConfig { -} \ No newline at end of file diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfig.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfig.java deleted file mode 100644 index f727991..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfig.java +++ /dev/null @@ -1,156 +0,0 @@ -package it.pagopa.selfcare.mscore.web.config; - -import com.fasterxml.classmate.TypeResolver; - -import it.pagopa.selfcare.commons.web.swagger.EmailAnnotationSwaggerPluginConfig; -import it.pagopa.selfcare.commons.web.swagger.ServerSwaggerConfig; -import it.pagopa.selfcare.mscore.model.error.Problem; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.*; -import org.springframework.core.env.Environment; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.security.core.Authentication; -import springfox.documentation.builders.ApiInfoBuilder; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.builders.ResponseBuilder; -import springfox.documentation.service.*; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spi.service.contexts.SecurityContext; -import springfox.documentation.spring.web.plugins.Docket; - -import java.time.LocalTime; -import java.util.Collections; -import java.util.List; - -/** - * The Class SwaggerConfig. - */ -@Configuration -public class SwaggerConfig { - - private static final String AUTH_SCHEMA_NAME = "bearerAuth"; - - private static final Response BAD_REQUEST_RESPONSE = new ResponseBuilder() - .code(String.valueOf(HttpStatus.BAD_REQUEST.value())) - .description(HttpStatus.BAD_REQUEST.getReasonPhrase()) - .representation(MediaType.APPLICATION_PROBLEM_JSON).apply(repBuilder -> - repBuilder.model(modelSpecBuilder -> - modelSpecBuilder.referenceModel(refModelSpecBuilder -> - refModelSpecBuilder.key(modelKeyBuilder -> - modelKeyBuilder.qualifiedModelName(qualifiedModelNameBuilder -> - qualifiedModelNameBuilder.namespace(Problem.class.getPackageName()) - .name(Problem.class.getSimpleName())))))) - .build(); - private static final Response NOT_FOUND_RESPONSE = new ResponseBuilder() - .code(String.valueOf(HttpStatus.NOT_FOUND.value())) - .description(HttpStatus.NOT_FOUND.getReasonPhrase()) - .representation(MediaType.APPLICATION_PROBLEM_JSON).apply(repBuilder -> - repBuilder.model(modelSpecBuilder -> - modelSpecBuilder.referenceModel(refModelSpecBuilder -> - refModelSpecBuilder.key(modelKeyBuilder -> - modelKeyBuilder.qualifiedModelName(qualifiedModelNameBuilder -> - qualifiedModelNameBuilder.namespace(Problem.class.getPackageName()) - .name(Problem.class.getSimpleName())))))) - .build(); - - private static final Response CONFLICT_RESPONSE = new ResponseBuilder() - .code(String.valueOf(HttpStatus.CONFLICT.value())) - .description(HttpStatus.CONFLICT.getReasonPhrase()) - .representation(MediaType.APPLICATION_PROBLEM_JSON).apply(repBuilder -> - repBuilder.model(modelSpecBuilder -> - modelSpecBuilder.referenceModel(refModelSpecBuilder -> - refModelSpecBuilder.key(modelKeyBuilder -> - modelKeyBuilder.qualifiedModelName(qualifiedModelNameBuilder -> - qualifiedModelNameBuilder.namespace(Problem.class.getPackageName()) - .name(Problem.class.getSimpleName())))))) - .build(); - - private static final Response FORBIDDEN_RESPONSE = new ResponseBuilder() - .code(String.valueOf(HttpStatus.FORBIDDEN.value())) - .description(HttpStatus.FORBIDDEN.getReasonPhrase()) - .representation(MediaType.APPLICATION_PROBLEM_JSON).apply(repBuilder -> - repBuilder.model(modelSpecBuilder -> - modelSpecBuilder.referenceModel(refModelSpecBuilder -> - refModelSpecBuilder.key(modelKeyBuilder -> - modelKeyBuilder.qualifiedModelName(qualifiedModelNameBuilder -> - qualifiedModelNameBuilder.namespace(Problem.class.getPackageName()) - .name(Problem.class.getSimpleName())))))) - .build(); - - @Configuration - @Profile("swaggerIT") - @PropertySource("classpath:/swagger/swagger_it.properties") - public static class itConfig { - } - - @Configuration - @Profile("swaggerEN") - @PropertySource("classpath:/swagger/swagger_en.properties") - public static class enConfig { - } - - private final Environment environment; - - - @Autowired - SwaggerConfig(Environment environment) { - this.environment = environment; - } - - - @Bean - public Docket swaggerSpringPlugin(@Autowired TypeResolver typeResolver) { - return (new Docket(DocumentationType.OAS_30)) - .apiInfo(new ApiInfoBuilder() - .title(environment.getProperty("swagger.title", environment.getProperty("spring.application.name"))) - .description(environment.getProperty("swagger.description", "Api and Models")) - .version(environment.getProperty("swagger.version", environment.getProperty("spring.application.version"))) - .build()) - .select().apis(RequestHandlerSelectors.basePackage("it.pagopa.selfcare.mscore.web.controller")).build() - .tags(new Tag("External", environment.getProperty("swagger.name.api.external.description"))) - .tags(new Tag("Institution", environment.getProperty("swagger.name.api.institution.description"))) - .tags(new Tag("Onboarding", environment.getProperty("swagger.name.api.onboarding.description"))) - .tags(new Tag("Management", environment.getProperty("swagger.name.api.management.description"))) - .tags(new Tag("Delegation", environment.getProperty("swagger.name.api.delegation.description"))) - .directModelSubstitute(LocalTime.class, String.class) - .ignoredParameterTypes(Authentication.class) - .forCodeGeneration(true) - .useDefaultResponseMessages(false) - .globalResponses(HttpMethod.GET, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE)) - .globalResponses(HttpMethod.DELETE, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE, CONFLICT_RESPONSE)) - .globalResponses(HttpMethod.POST, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE, CONFLICT_RESPONSE)) - .globalResponses(HttpMethod.PUT, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE, FORBIDDEN_RESPONSE)) - .globalResponses(HttpMethod.HEAD, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE)) - .additionalModels(typeResolver.resolve(Problem.class)) - .securityContexts(Collections.singletonList(SecurityContext.builder() - .securityReferences(defaultAuth()) - .build())) - .securitySchemes(Collections.singletonList(HttpAuthenticationScheme.JWT_BEARER_BUILDER - .name(AUTH_SCHEMA_NAME) - .description(environment.getProperty("swagger.security.schema.bearer.description")) - .build())); - } - - - private List defaultAuth() { - AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); - AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; - authorizationScopes[0] = authorizationScope; - return Collections.singletonList(new SecurityReference(AUTH_SCHEMA_NAME, authorizationScopes)); - } - - - @Bean - public EmailAnnotationSwaggerPluginConfig emailAnnotationPlugin() { - return new EmailAnnotationSwaggerPluginConfig(); - } - - - @Bean - public ServerSwaggerConfig serverSwaggerConfiguration() { - return new ServerSwaggerConfig(); - } - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/WebConfig.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/WebConfig.java deleted file mode 100644 index 4eed5a4..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/config/WebConfig.java +++ /dev/null @@ -1,24 +0,0 @@ -package it.pagopa.selfcare.mscore.web.config; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import it.pagopa.selfcare.commons.web.config.BaseWebConfig; -import lombok.NonNull; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; - -@Configuration -@Import(BaseWebConfig.class) -public class WebConfig implements BeanPostProcessor { - - @Override - public Object postProcessAfterInitialization(@NonNull Object bean, @NonNull String beanName) throws BeansException { - if (bean instanceof ObjectMapper) { - ((ObjectMapper) bean).configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true); - } - return bean; - } - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationController.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationController.java deleted file mode 100644 index 6afa7b4..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationController.java +++ /dev/null @@ -1,136 +0,0 @@ - package it.pagopa.selfcare.mscore.web.controller; - - import io.swagger.annotations.Api; - import io.swagger.annotations.ApiOperation; - import io.swagger.annotations.ApiParam; - import io.swagger.v3.oas.annotations.tags.Tag; - import io.swagger.v3.oas.annotations.tags.Tags; - import it.pagopa.selfcare.mscore.constant.GenericError; - import it.pagopa.selfcare.mscore.constant.Order; - import it.pagopa.selfcare.mscore.core.DelegationService; - import it.pagopa.selfcare.mscore.exception.InvalidRequestException; - import it.pagopa.selfcare.mscore.model.delegation.Delegation; - import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequest; - import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequestFromTaxcode; - import it.pagopa.selfcare.mscore.web.model.delegation.DelegationResponse; - import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapper; - import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; - import lombok.extern.slf4j.Slf4j; - import org.springframework.http.HttpStatus; - import org.springframework.http.MediaType; - import org.springframework.http.ResponseEntity; - import org.springframework.web.bind.annotation.*; - - import javax.validation.Valid; - import java.util.List; - import java.util.Objects; - import java.util.Optional; - -@RestController -@RequestMapping(value = "/delegations", produces = MediaType.APPLICATION_JSON_VALUE) -@Api(tags = "Delegation") -@Slf4j -public class DelegationController { - - private final DelegationService delegationService; - private final DelegationMapper delegationMapper; - - public DelegationController(DelegationService delegationService, - DelegationMapper delegationMapper) { - this.delegationService = delegationService; - this.delegationMapper = delegationMapper; - } - - /** - * The function persist delegation - * - * @param delegation DelegationRequest - * @return InstitutionResponse - * * Code: 201, Message: successful operation, DataType: DelegationResponse - * * Code: 400, Message: Bad Request, DataType: Problem - * * Code: 409, Message: Conflict, DataType: Problem - */ - @ResponseStatus(HttpStatus.CREATED) - @ApiOperation(value = "${swagger.mscore.delegation.create}", notes = "${swagger.mscore.delegation.create}") - @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity createDelegation(@RequestBody @Valid DelegationRequest delegation) { - CustomExceptionMessage.setCustomMessage(GenericError.CREATE_DELEGATION_ERROR); - Delegation saved = delegationService.createDelegation(delegationMapper.toDelegation(delegation)); - return ResponseEntity.status(HttpStatus.CREATED).body(delegationMapper.toDelegationResponse(saved)); - } - - - /** - * The function persist delegation - * - * @param delegation DelegationRequest - * @return InstitutionResponse - * * Code: 201, Message: successful operation, DataType: DelegationResponse - * * Code: 400, Message: Bad Request, DataType: Problem - * * Code: 409, Message: Conflict, DataType: Problem - */ - @ResponseStatus(HttpStatus.CREATED) - @ApiOperation(value = "${swagger.mscore.delegation.createFromTaxCode}", notes = "${swagger.mscore.delegation.createFromTaxCode}") - @PostMapping(value = "/from-taxcode", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity createDelegationFromInstitutionsTaxCode(@RequestBody @Valid DelegationRequestFromTaxcode delegation) { - CustomExceptionMessage.setCustomMessage(GenericError.CREATE_DELEGATION_ERROR); - Delegation saved = delegationService.createDelegationFromInstitutionsTaxCode(delegationMapper.toDelegation(delegation)); - return ResponseEntity.status(HttpStatus.CREATED).body(delegationMapper.toDelegationResponse(saved)); - } - - - - /** - * The function get delegations - * - * @param institutionId String - * @return InstitutionResponse - * * Code: 200, Message: successful operation, DataType: List - * * Code: 404, Message: Institution data not found, DataType: Problem - * * Code: 400, Message: Bad Request, DataType: Problem - */ - @Tags({@Tag(name = "external-v2"), @Tag(name = "support"), @Tag(name = "Delegation")}) - @ApiOperation(value = "${swagger.mscore.institutions.delegations}", notes = "${swagger.mscore.institutions.delegations}") - @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity> getDelegations(@ApiParam("${swagger.mscore.institutions.model.institutionId}") - @RequestParam(name = "institutionId", required = false) String institutionId, - @ApiParam("${swagger.mscore.institutions.model.institutionId}") - @RequestParam(name = "brokerId", required = false) String brokerId, - @ApiParam("${swagger.mscore.product.model.id}") - @RequestParam(name = "productId", required = false) String productId, - @ApiParam("${swagger.mscore.institutions.model.description}") - @RequestParam(name = "search", required = false) String search, - @ApiParam("${swagger.mscore.institutions.model.taxCode}") - @RequestParam(name = "taxCode", required = false) String taxCode, - @ApiParam("${swagger.mscore.institutions.delegations.order}") - @RequestParam(name = "order", required = false) Optional order, - @RequestParam(name = "page", required = false) Optional page, - @RequestParam(name = "size", required = false) Optional size) { - - if(Objects.isNull(institutionId) && Objects.isNull(brokerId)) - throw new InvalidRequestException("institutionId or brokerId must not be null!!", GenericError.GENERIC_ERROR.getCode()); - - return ResponseEntity.status(HttpStatus.OK).body(delegationService.getDelegations(institutionId, brokerId, productId, search, taxCode, order, page, size).stream() - .map(delegationMapper::toDelegationResponseGet) - .toList()); - } - - /** - * The function delete a delegation setting its status to DELETED and setting delegation to false on institution if it has no more delegations - * - * @param delegationId DelegationId - * @return InstitutionResponse - * * Code: 204, Message: successful operation, DataType: NoContent - * * Code: 400, Message: Bad Request, DataType: Problem - * * Code: 409, Message: Conflict, DataType: Problem - */ - @ResponseStatus(HttpStatus.NO_CONTENT) - @ApiOperation(value = "${swagger.mscore.delegation.delete}", notes = "${swagger.mscore.delegation.delete}") - @DeleteMapping(value = "/{delegationId}", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity deleteDelegation(@ApiParam("${swagger.mscore.delegation.model.delegationId}") - @PathVariable("delegationId") String delegationId) { - CustomExceptionMessage.setCustomMessage(GenericError.CREATE_DELEGATION_ERROR); - delegationService.deleteDelegationByDelegationId(delegationId); - return ResponseEntity.noContent().build(); - } -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2Controller.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2Controller.java deleted file mode 100644 index c5d72ee..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2Controller.java +++ /dev/null @@ -1,90 +0,0 @@ - package it.pagopa.selfcare.mscore.web.controller; - - import io.swagger.annotations.Api; - import io.swagger.annotations.ApiOperation; - import io.swagger.annotations.ApiParam; - import it.pagopa.selfcare.mscore.constant.GenericError; - import it.pagopa.selfcare.mscore.constant.Order; - import it.pagopa.selfcare.mscore.core.DelegationService; - import it.pagopa.selfcare.mscore.exception.InvalidRequestException; - import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; - import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; - import it.pagopa.selfcare.mscore.web.model.delegation.DelegationWithPaginationResponse; - import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapper; - import lombok.extern.slf4j.Slf4j; - import org.springframework.http.HttpStatus; - import org.springframework.http.MediaType; - import org.springframework.http.ResponseEntity; - import org.springframework.web.bind.annotation.GetMapping; - import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RequestParam; - import org.springframework.web.bind.annotation.RestController; - - import javax.validation.constraints.Min; - import java.util.Objects; - - @RestController - @RequestMapping(value = "/v2/delegations", produces = MediaType.APPLICATION_JSON_VALUE) - @Api(tags = "Delegation") - @Slf4j - public class DelegationV2Controller { - - private final DelegationService delegationService; - private final DelegationMapper delegationMapper; - - public DelegationV2Controller(DelegationService delegationService, - DelegationMapper delegationMapper) { - this.delegationService = delegationService; - this.delegationMapper = delegationMapper; - } - - /** - * The function get delegations - * - * @param institutionId String - * @return InstitutionResponse - * * Code: 200, Message: successful operation, DataType: List - * * Code: 404, Message: Institution data not found, DataType: Problem - * * Code: 400, Message: Bad Request, DataType: Problem - */ - @ApiOperation(value = "${swagger.mscore.institutions.delegationsV2}", notes = "${swagger.mscore.institutions.delegationsv2}") - @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getDelegations(@ApiParam("${swagger.mscore.institutions.model.institutionId}") - @RequestParam(name = "institutionId", required = false) String institutionId, - @ApiParam("${swagger.mscore.institutions.model.institutionId}") - @RequestParam(name = "brokerId", required = false) String brokerId, - @ApiParam("${swagger.mscore.product.model.id}") - @RequestParam(name = "productId", required = false) String productId, - @ApiParam("${swagger.mscore.institutions.model.description}") - @RequestParam(name = "search", required = false) String search, - @ApiParam("${swagger.mscore.institutions.model.taxCode}") - @RequestParam(name = "taxCode", required = false) String taxCode, - @ApiParam("${swagger.mscore.institutions.delegations.order}") - @RequestParam(name = "order", required = false, defaultValue = "NONE") Order order, - @RequestParam (name = "page", required = false, defaultValue = "0") @Min(0) Integer page, - @RequestParam(name = "size", required = false, defaultValue = "10000") @Min(1) Integer size) { - - if(Objects.isNull(institutionId) && Objects.isNull(brokerId)) - throw new InvalidRequestException("institutionId or brokerId must not be null!!", GenericError.GENERIC_ERROR.getCode()); - - GetDelegationParameters delegationParameters = GetDelegationParameters.builder() - .from(institutionId) - .to(brokerId) - .productId(productId) - .search(search) - .taxCode(taxCode) - .order(order) - .page(page) - .size(size) - .build(); - - DelegationWithPagination delegationWithPagination = delegationService.getDelegationsV2(delegationParameters); - - DelegationWithPaginationResponse response = new DelegationWithPaginationResponse( - delegationWithPagination.getDelegations().stream().map( - delegationMapper::toDelegationResponseGet) - .toList(), delegationWithPagination.getPageInfo()); - - return ResponseEntity.status(HttpStatus.OK).body(response); - } - } diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ExternalController.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ExternalController.java deleted file mode 100644 index 0dfc5ce..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ExternalController.java +++ /dev/null @@ -1,148 +0,0 @@ -package it.pagopa.selfcare.mscore.web.controller; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.core.ExternalService; -import it.pagopa.selfcare.mscore.model.institution.GeographicTaxonomies; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import it.pagopa.selfcare.mscore.web.model.institution.InstitutionBillingResponse; -import it.pagopa.selfcare.mscore.web.model.institution.InstitutionResponse; -import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionMapperCustom; -import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapper; -import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardedProducts; -import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.stream.Collectors; - -import static it.pagopa.selfcare.mscore.constant.GenericError.*; - -@Slf4j -@RestController -@RequestMapping(value = "/external/institutions", produces = MediaType.APPLICATION_JSON_VALUE) -@Api(tags = "External") -public class ExternalController { - - private final ExternalService externalService; - private final InstitutionResourceMapper institutionResourceMapper; - - public ExternalController(ExternalService externalService, InstitutionResourceMapper institutionResourceMapper) { - this.externalService = externalService; - this.institutionResourceMapper = institutionResourceMapper; - } - - /** - * The function returns institution Data from its externalId - * - * @param externalId externalId - * - * @return InstitutionResponse - * * Code: 200, Message: successful operation, DataType: InstitutionResponse - * * Code: 400, Message: Invalid ID supplied, DataType: Problem - * * Code: 404, Message: Institution not found, DataType: Problem - */ - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value ="${swagger.mscore.external.institution}", notes = "${swagger.mscore.external.institution}") - @GetMapping(value = "/{externalId}", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") - @PathVariable("externalId") String externalId) { - CustomExceptionMessage.setCustomMessage(GET_INSTITUTION_BY_EXTERNAL_ID_ERROR); - Institution institution = externalService.getInstitutionByExternalId(externalId); - return ResponseEntity.ok().body(institutionResourceMapper.toInstitutionResponse(institution)); - } - - - /** - * The function returns billing institution Data from its externalId - * - * @param externalId String - * @param productId String - * - * @return InstitutionBillingResponse - * * Code: 200, Message: successful operation, DataType: InstitutionBillingResponse - * * Code: 400, Message: Invalid ID supplied, DataType: Problem - * * Code: 404, Message: Institution Billing not found, DataType: Problem - */ - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.external.institution.billing}", notes = "${swagger.mscore.external.institution.billing}") - @GetMapping(value = "/{externalId}/products/{productId}/billing", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getBillingInstitutionByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") - @PathVariable("externalId") String externalId, - @ApiParam("${swagger.mscore.institutions.model.productId}") - @PathVariable("productId") String productId) { - CustomExceptionMessage.setCustomMessage(INSTITUTION_BILLING_ERROR); - Institution institution = externalService.retrieveInstitutionProduct(externalId, productId); - return ResponseEntity.ok().body(InstitutionMapperCustom.toInstitutionBillingResponse(institution, productId)); - } - - - /** - * The function returns institution related products given externalId - * - * @param externalId String - * @param states List - * - * @return OnboardedProducts - * * Code: 200, Message: successful operation, DataType: OnboardedProducts - * * Code: 400, Message: Invalid ID supplied, DataType: Problem - * * Code: 404, Message: Institution Billing not found, DataType: Problem - */ - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.external.institution.products}", notes = "${swagger.mscore.external.institution.products}") - @GetMapping(value = "/{externalId}/products", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity retrieveInstitutionProductsByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") - @PathVariable("externalId") String externalId, - @RequestParam(value = "states", required = false) List states) { - CustomExceptionMessage.setCustomMessage(GET_PRODUCTS_ERROR); - List page = externalService.retrieveInstitutionProductsByExternalId(externalId, states); - return ResponseEntity.ok(InstitutionMapperCustom.toOnboardedProducts(page)); - } - - /** - * The function returns geographic taxonomies related to institution - * - * @param externalId String - * - * @return List - * * Code: 200, Message: successful operation, DataType: List - * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem - */ - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.external.geotaxonomies}", notes = "${swagger.mscore.external.geotaxonomies}") - @GetMapping(value = "/{externalId}/geotaxonomies", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity> retrieveInstitutionGeoTaxonomiesByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") - @PathVariable("externalId") String externalId) { - CustomExceptionMessage.setCustomMessage(RETRIEVE_GEO_TAXONOMIES_ERROR); - List list = externalService.retrieveInstitutionGeoTaxonomiesByExternalId(externalId); - return ResponseEntity.ok(list); - } - - /** - * The function return an institution given institution internal id - * - * @param ids List - * @return List - * - * * Code: 200, Message: successful operation, DataType: List - * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem - */ - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.institution}", notes = "${swagger.mscore.institution}") - @GetMapping(value = "", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity> retrieveInstitutionByIds(@ApiParam("${swagger.mscore.institutions.model.internalIds}") - @RequestParam("ids") List ids) { - CustomExceptionMessage.setCustomMessage(GET_INSTITUTION_BY_ID_ERROR); - List institutions = externalService.retrieveInstitutionByIds(ids); - return ResponseEntity.ok().body(institutions.stream() - .map(institutionResourceMapper::toInstitutionResponse) - .collect(Collectors.toList())); - } -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java deleted file mode 100644 index efe28e0..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java +++ /dev/null @@ -1,540 +0,0 @@ -package it.pagopa.selfcare.mscore.web.controller; - -import io.swagger.annotations.*; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.tags.Tags; -import it.pagopa.selfcare.commons.base.security.SelfCareUser; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.GenericError; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.core.InstitutionService; -import it.pagopa.selfcare.mscore.core.OnboardingService; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.web.model.institution.*; -import it.pagopa.selfcare.mscore.web.model.mapper.BrokerMapper; -import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionMapperCustom; -import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapper; -import it.pagopa.selfcare.mscore.web.model.mapper.OnboardingResourceMapper; -import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardedProducts; -import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.security.core.Authentication; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import javax.validation.ValidationException; -import java.time.OffsetDateTime; -import java.util.Collection; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -@RestController -@RequestMapping(value = "/institutions", produces = MediaType.APPLICATION_JSON_VALUE) -@Api(tags = "Institution") -@Slf4j -public class InstitutionController { - - private final InstitutionService institutionService; - private final OnboardingService onboardingService; - private final OnboardingResourceMapper onboardingResourceMapper; - private final InstitutionResourceMapper institutionResourceMapper; - private final BrokerMapper brokerMapper; - - public InstitutionController(InstitutionService institutionService, - OnboardingService onboardingService, OnboardingResourceMapper onboardingResourceMapper, - InstitutionResourceMapper institutionResourceMapper, - BrokerMapper brokerMapper) { - this.institutionService = institutionService; - this.onboardingService = onboardingService; - this.onboardingResourceMapper = onboardingResourceMapper; - this.institutionResourceMapper = institutionResourceMapper; - this.brokerMapper = brokerMapper; - } - - /** - * Gets institutions filtering by taxCode and/or subunitCode and/or origin and/or originId - * - * @param taxCode String - * @param subunitCode String - * @param origin String - * @param originId originId - * @return InstitutionResponse - * * Code: 200, Message: successful operation, DataType: OnboardedProducts - * * Code: 400, Message: Bad Request, DataType: Problem - * * Code: 404, Message: Products not found, DataType: Problem - */ - @Tag(name = "support") - @Tag(name = "support-pnpg") - @Tag(name = "external-v2") - @Tag(name = "Institution") - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.institutions}", notes = "${swagger.mscore.institutions}") - @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getInstitutions(@ApiParam("${swagger.mscore.institutions.model.taxCode}") - @RequestParam(value = "taxCode", required = false) String taxCode, - @ApiParam("${swagger.mscore.institutions.model.subunitCode}") - @RequestParam(value = "subunitCode", required = false) String subunitCode, - @RequestParam(value = "origin", required = false) String origin, - @RequestParam(value = "originId", required = false) String originId) { - - - if (!StringUtils.hasText(taxCode) && !StringUtils.hasText(originId) && !StringUtils.hasText(origin)) { - throw new ValidationException("At least one of taxCode, origin or originId must be present"); - } else if (StringUtils.hasText(subunitCode) && !StringUtils.hasText(taxCode)) { - throw new ValidationException("TaxCode is required if subunitCode is present"); - } - - CustomExceptionMessage.setCustomMessage(GenericError.GET_INSTITUTION_BY_ID_ERROR); - - List institutions = institutionService.getInstitutions(taxCode, subunitCode, origin, originId); - InstitutionsResponse institutionsResponse = new InstitutionsResponse(); - institutionsResponse.setInstitutions(institutions.stream() - .map(institutionResourceMapper::toInstitutionResponse) - .toList()); - return ResponseEntity.ok(institutionsResponse); - } - - /** - * The function create an institution retriving values from IPA - * - * @param institutionFromIpaPost InstitutionPost - * @return InstitutionResponse - * * Code: 201, Message: successful operation, DataType: InstitutionResponse - * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem - * * Code: 400, Message: Bad Request, DataType: Problem - * * Code: 409, Message: Institution conflict, DataType: Problem - */ - @ResponseStatus(HttpStatus.CREATED) - @ApiOperation(value = "${swagger.mscore.institution.create.from-ipa}", notes = "${swagger.mscore.institution.create.from-ipa}") - @PostMapping(value = "/from-ipa", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity createInstitutionFromIpa(@RequestBody @Valid InstitutionFromIpaPost institutionFromIpaPost) { - CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); - - if (Objects.isNull(institutionFromIpaPost.getSubunitType()) && Objects.nonNull(institutionFromIpaPost.getSubunitCode())) { - throw new ValidationException("subunitCode and subunitType must both be evaluated."); - } - - List geographicTaxonomies = Optional.ofNullable(institutionFromIpaPost.getGeographicTaxonomies()) - .map(geoTaxonomies -> geoTaxonomies.stream().map(institutionResourceMapper::toInstitutionGeographicTaxonomies).toList()) - .orElse(List.of()); - - Institution saved = institutionService.createInstitutionFromIpa(institutionFromIpaPost.getTaxCode(), - institutionFromIpaPost.getSubunitType(), institutionFromIpaPost.getSubunitCode(), geographicTaxonomies, institutionFromIpaPost.getInstitutionType()); - return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); - } - - /** - * The function create an institution retriving values from ANAC - * - * @param institution InstitutionRequest - * @return InstitutionResponse - * * Code: 201, Message: successful operation, DataType: InstitutionResponse - * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem - * * Code: 400, Message: Bad Request, DataType: Problem - * * Code: 409, Message: Institution conflict, DataType: Problem - */ - @ResponseStatus(HttpStatus.CREATED) - @ApiOperation(value = "${swagger.mscore.institution.create.from-anac}", notes = "${swagger.mscore.institution.create.from-anac}") - @PostMapping(value = "/from-anac", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity createInstitutionFromAnac(@RequestBody @Valid InstitutionRequest institution) { - CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); - Institution saved = institutionService.createInstitutionFromAnac(InstitutionMapperCustom.toInstitution(institution, null)); - return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); - } - - /** - * The function create an institution retriving values from IVASS - * - * @param institution InstitutionRequest - * @return InstitutionResponse - * * Code: 201, Message: successful operation, DataType: InstitutionResponse - * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem - * * Code: 400, Message: Bad Request, DataType: Problem - * * Code: 409, Message: Institution conflict, DataType: Problem - */ - @ResponseStatus(HttpStatus.CREATED) - @ApiOperation(value = "${swagger.mscore.institution.create.from-ivass}", notes = "${swagger.mscore.institution.create.from-ivass}") - @PostMapping(value = "/from-ivass", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity createInstitutionFromIvass(@RequestBody @Valid InstitutionRequest institution) { - CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); - Institution saved = institutionService.createInstitutionFromIvass(InstitutionMapperCustom.toInstitution(institution, null)); - return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); - } - - /** - * The function create an institution retriving values from IPA - * - * @param institutionRequest InstitutionRequest - * @return InstitutionResponse - * * Code: 201, Message: successful operation, DataType: InstitutionResponse - * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem - * * Code: 400, Message: Bad Request, DataType: Problem - * * Code: 409, Message: Institution conflict, DataType: Problem - */ - @ResponseStatus(HttpStatus.CREATED) - @ApiOperation(value = "${swagger.mscore.institution.create.from-pda}", notes = "${swagger.mscore.institution.create.from-ipa}") - @PostMapping(value = "/from-pda", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity createInstitutionFromPda(@RequestBody @Valid PdaInstitutionRequest institutionRequest) { - CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); - - Institution saved = institutionService.createInstitutionFromPda(InstitutionMapperCustom.toInstitution(institutionRequest, null), institutionRequest.getInjectionInstitutionType()); - return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); - } - - /** - * The function create an institution retriving values from INFOCAMERE - * - * @param institutionRequest InstitutionRequest - * @return InstitutionResponse - * * Code: 201, Message: successful operation, DataType: InstitutionResponse - * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem - * * Code: 400, Message: Bad Request, DataType: Problem - * * Code: 409, Message: Institution conflict, DataType: Problem - */ - @ResponseStatus(HttpStatus.CREATED) - @ApiOperation(value = "${swagger.mscore.institution.create.from-infocamere}", notes = "${swagger.mscore.institution.create.from-infocamere}") - @PostMapping(value = "/from-infocamere", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity createInstitutionFromInfocamere(@RequestBody @Valid InstitutionRequest institutionRequest) { - CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); - - Institution saved = institutionService.createInstitutionFromInfocamere(InstitutionMapperCustom.toInstitution(institutionRequest, null)); - return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); - } - - /** - * The function persist PA institution - * - * @param externalId String - * @return InstitutionResponse - * * Code: 201, Message: successful operation, DataType: InstitutionResponse - * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem - * * Code: 400, Message: Bad Request, DataType: Problem - * * Code: 409, Message: Institution conflict, DataType: Problem - */ - @Deprecated - @ResponseStatus(HttpStatus.CREATED) - @ApiOperation(value = "${swagger.mscore.institution.PA.create}", notes = "${swagger.mscore.institution.PA.create}") - @PostMapping(value = "/{externalId}", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity createInstitutionByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") - @PathVariable("externalId") String externalId) { - - CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); - Institution saved = institutionService.createInstitutionByExternalId(externalId); - return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); - } - - /** - * The function persist institution - * - * @param institution InstitutionRequest - * @return InstitutionResponse - * * Code: 200, Message: successful operation, DataType: InstitutionResponse - * * Code: 400, Message: Bad Request, DataType: Problem - * * Code: 409, Message: Institution conflict, DataType: Problem - */ - @ResponseStatus(HttpStatus.CREATED) - @ApiOperation(value = "${swagger.mscore.institution.create}", notes = "${swagger.mscore.institution.create}") - @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity createInstitution(@RequestBody @Valid InstitutionRequest institution) { - CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); - Institution saved = institutionService.createInstitution(InstitutionMapperCustom.toInstitution(institution, null)); - return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); - } - - /** - * The function persist institution manually - * - * @param externalId String - * @param institution InstitutionRequest - * @return InstitutionResponse - * * Code: 200, Message: successful operation, DataType: InstitutionResponse - * * Code: 400, Message: Bad Request, DataType: Problem - * * Code: 409, Message: Institution conflict, DataType: Problem - */ - @Deprecated - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.institution.create}", notes = "${swagger.mscore.institution.create}") - @PostMapping(value = "/insert/{externalId}", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity createInstitutionRaw(@ApiParam("${swagger.mscore.institutions.model.externalId}") - @PathVariable("externalId") String externalId, - @RequestBody @Valid InstitutionRequest institution) { - CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); - Institution saved = institutionService.createInstitution(InstitutionMapperCustom.toInstitution(institution, null)); - return ResponseEntity.ok(institutionResourceMapper.toInstitutionResponse(saved)); - } - - /** - * The function persist PG institution - * - * @param request CreatePgInstitutionRequest - * @return InstitutionResponse - * * Code: 201, Message: successful operation, DataType: InstitutionResponse - * * Code: 400, Message: Bad Request, DataType: Problem - * * Code: 404, Message: Institution data not found on InfoCamere, DataType: Problem - * * Code: 409, Message: Institution conflict, DataType: Problem - */ - @ResponseStatus(HttpStatus.CREATED) - @ApiOperation(value = "${swagger.mscore.institution.PG.create}", notes = "${swagger.mscore.institution.PG.create}") - @PostMapping(value = "/pg", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity createPgInstitution(@RequestBody @Valid CreatePgInstitutionRequest request, - Authentication authentication) { - CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); - Institution saved = institutionService.createPgInstitution(request.getTaxId(), request.getDescription(), request.isExistsInRegistry(), (SelfCareUser) authentication.getPrincipal()); - return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); - } - - /** - * The function return products related to institution - * - * @param institutionId String - * @param states List - * @return OnboardedProducts - * * Code: 200, Message: successful operation, DataType: OnboardedProducts - * * Code: 400, Message: Bad Request, DataType: Problem - * * Code: 404, Message: Products not found, DataType: Problem - */ - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.institution.products}", notes = "${swagger.mscore.institution.products}") - @GetMapping(value = "/{id}/products", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity retrieveInstitutionProducts(@ApiParam("${swagger.mscore.institutions.model.institutionId}") - @PathVariable("id") String institutionId, - @ApiParam("${swagger.mscore.institutions.model.relationshipState}") - @RequestParam(value = "states", required = false) List states) { - - CustomExceptionMessage.setCustomMessage(GenericError.GET_PRODUCTS_ERROR); - Institution institution = institutionService.retrieveInstitutionById(institutionId); - List page = institutionService.retrieveInstitutionProducts(institution, states); - return ResponseEntity.ok(InstitutionMapperCustom.toOnboardedProducts(page)); - } - - /** - * The function Update the corresponding institution given internal institution id - * - * @param institutionId String - * @param institutionPut InstitutionPut - * @return InstitutionResponse - * * Code: 200, Message: successful operation, DataType: InstitutionResponse - * * Code: 400, Message: bad request, DataType: Problem - */ - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.institution.update}", notes = "${swagger.mscore.institution.update}") - @PutMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity updateInstitution(@ApiParam("${swagger.mscore.institutions.model.institutionId}") - @PathVariable("id") String institutionId, - @RequestBody InstitutionPut institutionPut, - Authentication authentication - ) { - - CustomExceptionMessage.setCustomMessage(GenericError.PUT_INSTITUTION_ERROR); - SelfCareUser selfCareUser = (SelfCareUser) authentication.getPrincipal(); - Institution saved = institutionService.updateInstitution(institutionId, InstitutionMapperCustom.toInstitutionUpdate(institutionPut), selfCareUser.getId()); - return ResponseEntity.ok().body(institutionResourceMapper.toInstitutionResponse(saved)); - } - - /** - * The function persist user on registry if not exists and add relation with institution-product - * - * @param request OnboardingInstitutionUsersRequest - * @return no content - * * Code: 200, Message: Ok - * * Code: 201, Message: Created - * * Code: 404, Message: Not found, DataType: Problem - * * Code: 400, Message: Invalid request, DataType: Problem - */ - @ApiResponses(value = { - @ApiResponse(code = 200, message = "User already exists an onboarding in status ACTIVE or SUSPENDED with that productId"), - @ApiResponse(code = 201, message = "Created"), - @ApiResponse(code = 400, message = "Bad Request"), - @ApiResponse(code = 404, message = "Not Found") - }) - @ResponseStatus(HttpStatus.CREATED) - @ApiOperation(value = "${swagger.mscore.onboarding.users}", notes = "${swagger.mscore.onboarding.users}") - @PostMapping(value = "/{id}/onboarding", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity onboardingInstitution(@RequestBody @Valid InstitutionOnboardingRequest request, - @PathVariable("id") String id) { - CustomExceptionMessage.setCustomMessage(GenericError.ONBOARDING_OPERATION_ERROR); - - StringBuilder httpStatus = new StringBuilder(); - - Institution institution = onboardingService.persistOnboarding(id, request.getProductId(), onboardingResourceMapper.toOnboarding(request), httpStatus); - - return ResponseEntity - .status(HttpStatus.valueOf(Integer.parseInt(httpStatus.toString()))) - .body(institutionResourceMapper.toInstitutionResponse(institution)); - } - - @ResponseStatus(HttpStatus.NO_CONTENT) - @ApiOperation(value = "${swagger.mscore.onboarding.users.delete}", notes = "${swagger.mscore.onboarding.users.delete}") - @DeleteMapping(value = "/{id}/products/{productId}", produces = MediaType.APPLICATION_JSON_VALUE) - public void deleteOnboardedInstitution(@PathVariable("productId") String productId, - @PathVariable("id") String institutionId) { - - CustomExceptionMessage.setCustomMessage(GenericError.DELETE_ONBOARDED_OPERATION_ERROR); - onboardingService.deleteOnboardedInstitution(institutionId, productId); - - } - - - /** - * The function return geographic taxonomies related to institution - * - * @param id String - * @return List - * * Code: 200, Message: successful operation, DataType: List - * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem - */ - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.institution.geotaxonomies}", notes = "${swagger.mscore.institution.geotaxonomies}") - @GetMapping(value = "/{id}/geotaxonomies", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity> retrieveInstitutionGeoTaxonomies(@ApiParam("${swagger.mscore.institutions.model.institutionId}") - @PathVariable("id") String id) { - - CustomExceptionMessage.setCustomMessage(GenericError.RETRIEVE_GEO_TAXONOMIES_ERROR); - Institution institution = institutionService.retrieveInstitutionById(id); - List geo = institutionService.retrieveInstitutionGeoTaxonomies(institution); - return ResponseEntity.ok(geo); - } - - /** - * The function return an institution given institution internal id - * - * @param id String - * @return InstitutionResponse - * * Code: 200, Message: successful operation, DataType: InstitutionResponse - * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem - */ - @Tags({@Tag(name = "external-v2"), @Tag(name = "Institution")}) - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.institution}", notes = "${swagger.mscore.institution}") - @GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity retrieveInstitutionById(@ApiParam("${swagger.mscore.institutions.model.institutionId}") - @PathVariable("id") String id) { - CustomExceptionMessage.setCustomMessage(GenericError.GET_INSTITUTION_BY_ID_ERROR); - Institution institution = institutionService.retrieveInstitutionById(id); - return ResponseEntity.ok().body(institutionResourceMapper.toInstitutionResponse(institution)); - } - - - /** - * Get list of onboarding for a certain productId - * - * @param institutionId String - * @param productId String - * @return List - * * Code: 200, Message: successful operation, DataType: List - * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem - */ - @Tags({@Tag(name = "external-v2"), @Tag(name = "Institution")}) - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.institution.info}", notes = "${swagger.mscore.institution.info}") - @GetMapping(value = "/{institutionId}/onboardings", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getOnboardingsInstitution(@ApiParam("${swagger.mscore.institutions.model.institutionId}") - @PathVariable("institutionId") String institutionId, - @RequestParam(value = "productId", required = false) String productId) { - CustomExceptionMessage.setCustomMessage(GenericError.GETTING_ONBOARDING_INFO_ERROR); - List onboardings = institutionService.getOnboardingInstitutionByProductId(institutionId, productId); - OnboardingsResponse onboardingsResponse = new OnboardingsResponse(); - onboardingsResponse.setOnboardings(onboardings.stream() - .map(onboardingResourceMapper::toResponse) - .toList()); - return ResponseEntity.ok().body(onboardingsResponse); - } - - /** - * The function return a List of Institution that user can onboard - * - * @param institutions List - * @return List - * * Code: 200, Message: successful operation, DataType: List - * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem - */ - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.institutions.valid}", notes = "${swagger.mscore.institutions.valid}") - @PostMapping(value = "/onboarded/{productId}", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity> getValidInstitutionToOnboard(@RequestBody List institutions, - @PathVariable(value = "productId") String productId) { - List validInstitutions = institutionService.retrieveInstitutionByExternalIds(InstitutionMapperCustom.toValidInstitutions(institutions), productId); - return ResponseEntity.ok().body(InstitutionMapperCustom.toInstitutionToOnboardList(validInstitutions)); - } - - /** - * The function updates the field createdAt of the OnboardedProduct, the related Token and UserBindings for the given institution-product pair - * - * @param institutionId String - * @param createdAtRequest CreatedAtRequest - * @return no content - * * Code: 200, Message: successful operation - * * Code: 404, Message: Institution or Token or UserBinding not found, DataType: Problem - */ - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.institutions.updateCreatedAt}", notes = "${swagger.mscore.institutions.updateCreatedAt}") - @PutMapping(value = "/{institutionId}/createdAt", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity updateCreatedAt(@ApiParam("${swagger.mscore.institutions.model.institutionId}") - @PathVariable("institutionId") String institutionId, - @Valid @RequestBody CreatedAtRequest createdAtRequest) { - log.trace("updateCreatedAt start"); - log.debug("updateCreatedAt institutionId = {}, productId = {}, createdAt = {}", institutionId, createdAtRequest.getProductId(), createdAtRequest.getCreatedAt()); - if (createdAtRequest.getCreatedAt().isAfter(OffsetDateTime.now())) { - throw new ValidationException("Invalid createdAt date: the createdAt date must be prior to the current date."); - } - institutionService.updateCreatedAt(institutionId, createdAtRequest.getProductId(), createdAtRequest.getCreatedAt(), createdAtRequest.getActivatedAt()); - log.trace("updateCreatedAt end"); - return ResponseEntity.status(HttpStatus.OK).build(); - } - - /** - * Retrieve institutions with productId onboarded - * - * @param productId String - * @param page Integer - * @param size Integer - * @return List - * * Code: 200, Message: successful operation - * * Code: 404, Message: product not found - */ - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.institutions.findFromProduct}", notes = "${swagger.mscore.institutions.findFromProduct}") - @GetMapping(value = "/products/{productId}", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity findFromProduct(@ApiParam("${swagger.mscore.institutions.model.productId}") - @PathVariable(value = "productId") String productId, - @ApiParam("${swagger.mscore.page.number}") - @RequestParam(name = "page", defaultValue = "0") Integer page, - @ApiParam("${swagger.mscore.page.size}") - @RequestParam(name = "size", defaultValue = "100") Integer size) { - log.trace("findFromProduct start"); - log.debug("findFromProduct productId = {}", productId); - List institutions = institutionService.getInstitutionsByProductId(productId, page, size); - - InstitutionOnboardingListResponse institutionListResponse = new InstitutionOnboardingListResponse( - institutions.stream() - .map(InstitutionMapperCustom::toInstitutionOnboardingResponse) - .toList()); - - log.trace("findFromProduct end"); - return ResponseEntity.ok().body(institutionListResponse); - } - - @GetMapping(value = "/{productId}/brokers/{institutionType}", produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.institutions.brokers}", notes = "${swagger.mscore.institutions.getInstitutionBrokers}") - public Collection getInstitutionBrokers(@ApiParam("${swagger.mscore.institutions.model.productId}") - @PathVariable("productId") - String productId, - @ApiParam("${swagger.mscore.institutions.model.type}") - @PathVariable("institutionType") - InstitutionType institutionType) { - log.trace("getInstitutionBrokers start"); - log.debug("productId = {}, institutionType = {}", productId, institutionType); - List institutions = institutionService.getInstitutionBrokers(productId, institutionType); - List result = brokerMapper.toBrokers(institutions); - log.debug("getInstitutionBrokers result = {}", result); - log.trace("getInstitutionBrokers end"); - return result; - } - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ManagementController.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ManagementController.java deleted file mode 100644 index 7f8706b..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ManagementController.java +++ /dev/null @@ -1,48 +0,0 @@ -package it.pagopa.selfcare.mscore.web.controller; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import it.pagopa.selfcare.mscore.core.InstitutionService; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.web.model.institution.BulkInstitutions; -import it.pagopa.selfcare.mscore.web.model.institution.BulkPartiesSeed; -import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionMapperCustom; -import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestController; - -import javax.validation.Valid; -import java.util.ArrayList; -import java.util.List; - -import static it.pagopa.selfcare.mscore.constant.GenericError.GET_INSTITUTION_BY_ID_ERROR; - -@Slf4j -@RestController -@Api(tags = "Management") -public class ManagementController { - - private final InstitutionService institutionService; - - public ManagementController(InstitutionService institutionService) { - this.institutionService = institutionService; - } - - @ResponseStatus(HttpStatus.OK) - @ApiOperation(value = "${swagger.mscore.institution}", notes = "${swagger.mscore.institution}") - @PostMapping(value = "/bulk/institutions", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity retrieveInstitutionByIds(@ApiParam("${swagger.mscore.institutions.model.internalIds}") - @RequestBody @Valid BulkPartiesSeed bulkPartiesSeed) { - CustomExceptionMessage.setCustomMessage(GET_INSTITUTION_BY_ID_ERROR); - List ids = new ArrayList<>(bulkPartiesSeed.getPartyIdentifiers()); - List institution = institutionService.retrieveInstitutionByIds(ids); - return ResponseEntity.ok().body(InstitutionMapperCustom.toBulkInstitutions(institution, ids)); - } -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/OnboardingController.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/OnboardingController.java deleted file mode 100644 index f1ff8e2..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/OnboardingController.java +++ /dev/null @@ -1,95 +0,0 @@ -package it.pagopa.selfcare.mscore.web.controller; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import it.pagopa.selfcare.mscore.constant.GenericError; -import it.pagopa.selfcare.mscore.core.OnboardingService; -import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; -import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -@Slf4j -@RestController -@RequestMapping(value = "/onboarding") -@Api(tags = "Onboarding") -public class OnboardingController { - - private final OnboardingService onboardingService; - - public OnboardingController(OnboardingService onboardingService) { - this.onboardingService = onboardingService; - } - - /** - * The function verify onboarding status of given product and institution - * - * @param externalId String - * @param productId String - * @return no content - * * Code: 204, Message: successful operation, DataType: TokenId - * * Code: 400, Message: Invalid ID supplied, DataType: Problem - * * Code: 404, Message: Not found, DataType: Problem - */ - @ResponseStatus(HttpStatus.NO_CONTENT) - @ApiOperation(value = "${swagger.mscore.onboarding.verify}", notes = "${swagger.mscore.onboarding.verify}") - @RequestMapping(method = {RequestMethod.HEAD}, value = "/institution/{externalId}/products/{productId}") - public ResponseEntity verifyOnboardingInfo(@ApiParam("${swagger.mscore.institutions.model.externalId}") - @PathVariable(value = "externalId") String externalId, - @ApiParam("${swagger.mscore.institutions.model.productId}") - @PathVariable(value = "productId") String productId) { - CustomExceptionMessage.setCustomMessage(GenericError.ONBOARDING_VERIFICATION_ERROR); - onboardingService.verifyOnboardingInfo(externalId, productId); - return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); - } - - - /** - * The function verify onboarding status of given product and subunit of institution - * - * @param taxCode String - * @param subunitCode String - * @param productId String - * @return no content - * * Code: 204, Message: successful operation, DataType: TokenId - * * Code: 400, Message: Invalid ID supplied, DataType: Problem - * * Code: 404, Message: Not found, DataType: Problem - */ - @ResponseStatus(HttpStatus.NO_CONTENT) - @ApiOperation(value = "${swagger.mscore.onboarding.verify}", notes = "${swagger.mscore.onboarding.verify}") - @RequestMapping(method = {RequestMethod.HEAD}, value = "") - public ResponseEntity verifyOnboardingInfo(@ApiParam("${swagger.mscore.institutions.model.taxCode}") - @RequestParam(value = "taxCode") String taxCode, - @ApiParam("${swagger.mscore.institutions.model.subunitCode}") - @RequestParam(value = "subunitCode", required = false) String subunitCode, - @ApiParam("${swagger.mscore.institutions.model.productId}") - @RequestParam(value = "productId") String productId) { - CustomExceptionMessage.setCustomMessage(GenericError.ONBOARDING_VERIFICATION_ERROR); - onboardingService.verifyOnboardingInfoSubunit(taxCode, subunitCode, productId); - return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); - } - - @ResponseStatus(HttpStatus.NO_CONTENT) - @ApiOperation(value = "${swagger.mscore.onboarding.verify}", notes = "${swagger.mscore.onboarding.verify}") - @RequestMapping(method = {RequestMethod.HEAD}, value = "/verify") - public ResponseEntity verifyOnboardingInfoByFilters(@ApiParam("${swagger.mscore.institutions.model.productId}") - @RequestParam(value = "productId") String productId, - @ApiParam("${swagger.mscore.institutions.model.externalId}") - @RequestParam(value = "externalId", required = false) String externalId, - @ApiParam("${swagger.mscore.institutions.model.taxCode}") - @RequestParam(value = "taxCode", required = false) String taxCode, - @ApiParam("${swagger.mscore.institutions.model.origin}") - @RequestParam(value = "origin", required = false) String origin, - @ApiParam("${swagger.mscore.institutions.model.originId}") - @RequestParam(value = "originId", required = false) String originId, - @ApiParam("${swagger.mscore.institutions.model.subunitCode}") - @RequestParam(value = "subunitCode", required = false) String subunitCode) { - CustomExceptionMessage.setCustomMessage(GenericError.ONBOARDING_VERIFICATION_ERROR); - onboardingService.verifyOnboardingInfoByFilters(new VerifyOnboardingFilters(productId, externalId, taxCode, origin, originId, subunitCode)); - return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); - } - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandler.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandler.java deleted file mode 100644 index b6a2545..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandler.java +++ /dev/null @@ -1,115 +0,0 @@ -package it.pagopa.selfcare.mscore.web.exception; - -import it.pagopa.selfcare.mscore.constant.GenericError; -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.exception.ResourceConflictException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.error.Problem; -import it.pagopa.selfcare.mscore.model.error.ProblemError; -import lombok.NonNull; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.MethodArgumentNotValidException; -import org.springframework.web.bind.MissingServletRequestParameterException; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -import javax.servlet.http.HttpServletRequest; -import java.util.ArrayList; -import java.util.List; - -import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; - -@ControllerAdvice -@Slf4j -public class CustomExceptionHandler extends ResponseEntityExceptionHandler { - - @Override - protected ResponseEntity handleMissingServletRequestParameter(@NonNull MissingServletRequestParameterException ex, @NonNull HttpHeaders headers, @NonNull HttpStatus status, @NonNull WebRequest request) { - log.error("InvalidRequestException Occured --> MESSAGE:{}, STATUS: {}",ex.getMessage(), HttpStatus.BAD_REQUEST, ex); - headers.setContentType(MediaType.APPLICATION_JSON); - Problem problem = createProblem("MISSING PARAMETER", HttpStatus.BAD_REQUEST.value(), "0000"); - return new ResponseEntity<>(problem, headers, HttpStatus.BAD_REQUEST); - } - - @Override - protected ResponseEntity handleMethodArgumentNotValid(@NonNull MethodArgumentNotValidException ex, HttpHeaders headers, @NonNull HttpStatus status, @NonNull WebRequest request) { - log.error("InvalidRequestException Occured --> MESSAGE:{}, STATUS: {}",ex.getMessage(), HttpStatus.BAD_REQUEST, ex); - headers.setContentType(MediaType.APPLICATION_JSON); - Problem problem = createProblem("INVALID ARGUMENT", HttpStatus.BAD_REQUEST.value(), "0000"); - return new ResponseEntity<>(problem, headers, HttpStatus.BAD_REQUEST); - } - - @ExceptionHandler(ResourceNotFoundException.class) - public ResponseEntity handleResourceNotFoundException(HttpServletRequest request, ResourceNotFoundException ex) { - log.error("ResourceNotFoundException Occured --> URL:{}, MESSAGE:{}, STATUS: {}",request.getRequestURL(), ex.getMessage(), HttpStatus.NOT_FOUND, ex); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - Problem problem = createProblem(ex.getMessage(), HttpStatus.NOT_FOUND.value(), ex.getCode()); - return new ResponseEntity<>(problem, headers, HttpStatus.NOT_FOUND); - } - - @ExceptionHandler(ResourceConflictException.class) - public ResponseEntity handleResourceConflictException(HttpServletRequest request, ResourceConflictException ex) { - log.error("ResourceConflictException Occured --> URL:{}, MESSAGE:{}, STATUS: {}",request.getRequestURL(), ex.getMessage(), HttpStatus.CONFLICT, ex); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - Problem problem = createProblem(ex.getMessage(), HttpStatus.CONFLICT.value(), ex.getCode()); - return new ResponseEntity<>(problem, headers, HttpStatus.CONFLICT); - } - - @ExceptionHandler(InvalidRequestException.class) - public ResponseEntity handleInvalidRequestException(HttpServletRequest request, InvalidRequestException ex) { - log.error("InvalidRequestException Occured --> URL:{}, MESSAGE:{}, STATUS:{}",request.getRequestURL(), ex.getMessage(), HttpStatus.BAD_REQUEST, ex); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - Problem problem = createProblem(ex.getMessage(), HttpStatus.BAD_REQUEST.value(), ex.getCode()); - return new ResponseEntity<>(problem, headers, HttpStatus.BAD_REQUEST); - } - - @ExceptionHandler(MsCoreException.class) - public ResponseEntity handleMsCoreException(HttpServletRequest request, MsCoreException ex) { - log.error("Exception Occured --> URL:{}, MESSAGE:{}, STATUS:{}",request.getRequestURL(), ex.getMessage(), INTERNAL_SERVER_ERROR, ex); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - Problem problem = createProblem(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value(), ex.getCode()); - return new ResponseEntity<>(problem, headers, INTERNAL_SERVER_ERROR); - } - - @ExceptionHandler(Exception.class) - public ResponseEntity handleException(HttpServletRequest request, Exception ex) { - log.error("{} Occured --> URL:{}, MESSAGE:{}, STATUS:{}",ex.getCause(), request.getRequestURL(), ex.getMessage(), HttpStatus.BAD_REQUEST, ex); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(createProblem(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value(), "")); - } - - private Problem createProblem(String errorMessage, Integer status, String code) { - Problem problem = new Problem(); - problem.setStatus(status); - problem.setErrors(createProblemError(errorMessage,code)); - return problem; - } - - private List createProblemError(String message, String code) { - List list = new ArrayList<>(); - list.add(ProblemError.builder() - .code(code) - .detail(message) - .build()); - return list; - } - - private GenericError retrieveGenericError(HttpServletRequest request){ - GenericError genericError = (GenericError) request.getAttribute("errorEnum"); - if(genericError == null){ - genericError = GenericError.GENERIC_ERROR; - } - return genericError; - } -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/filter/LogFilter.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/filter/LogFilter.java deleted file mode 100644 index 40be142..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/filter/LogFilter.java +++ /dev/null @@ -1,70 +0,0 @@ -package it.pagopa.selfcare.mscore.web.filter; - -import it.pagopa.selfcare.mscore.utils.MaskDataUtils; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; -import org.springframework.web.util.ContentCachingRequestWrapper; -import org.springframework.web.util.ContentCachingResponseWrapper; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.UnsupportedEncodingException; - -@Slf4j -@Component -public class LogFilter implements Filter { - - private static final int MAX_LENGTH_CONTENT = 500; - - @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - HttpServletRequest httpServletRequest = (HttpServletRequest) request; - HttpServletResponse httpServletResponse = (HttpServletResponse) response; - - final String httpUri = httpServletRequest.getRequestURI(); - - if (httpUri.startsWith("/actuator/health")) { - log.trace("request to health-check actuator"); - chain.doFilter(httpServletRequest, httpServletResponse); - return; - } - - final String httpMethod = httpServletRequest.getMethod(); - long startTime = System.currentTimeMillis(); - - ContentCachingRequestWrapper requestCacheWrapperObject = new ContentCachingRequestWrapper(httpServletRequest); - ContentCachingResponseWrapper responseCacheWrapperObject = new ContentCachingResponseWrapper(httpServletResponse); - - chain.doFilter(requestCacheWrapperObject, responseCacheWrapperObject); - String requestBody = getContentAsString(requestCacheWrapperObject.getContentAsByteArray(), request.getCharacterEncoding(), false); - log.info("Request from URI : {} - method: {} - Request body: {}", httpUri, httpMethod, requestBody); - - Long endTime = System.currentTimeMillis() - startTime; - String responseBody = getContentAsString(responseCacheWrapperObject.getContentAsByteArray(), response.getCharacterEncoding(), true); - log.info("Response from URI : {} - method: {} - status: {} - timelapse: {}ms - Response body: {}", httpUri, httpMethod, httpServletResponse.getStatus(), endTime, responseBody); - responseCacheWrapperObject.copyBodyToResponse(); - } - - private String getContentAsString(byte[] buf, String charsetName, boolean isResponse) { - if (buf == null || buf.length == 0) { - return "empty"; - } - try { - String content = new String(buf, charsetName); - String maskedContent = MaskDataUtils.maskInformation(content); - if(isResponse) { - return maskedContent.substring(0, Math.min(MAX_LENGTH_CONTENT, maskedContent.length())); - } - return maskedContent; - } catch (UnsupportedEncodingException ex) { - return "Unsupported Encoding"; - } - } - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequest.java deleted file mode 100644 index a27965b..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequest.java +++ /dev/null @@ -1,25 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.delegation; - -import it.pagopa.selfcare.mscore.constant.DelegationType; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -@Data -public class DelegationRequest { - - @NotBlank - private String from; - @NotBlank - private String to; - @NotBlank - private String institutionFromName; - @NotBlank - private String institutionToName; - @NotBlank - private String productId; - @NotNull - private DelegationType type; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequestFromTaxcode.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequestFromTaxcode.java deleted file mode 100644 index e033dfe..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequestFromTaxcode.java +++ /dev/null @@ -1,27 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.delegation; - -import it.pagopa.selfcare.mscore.constant.DelegationType; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -@Data -public class DelegationRequestFromTaxcode { - - @NotBlank - private String fromTaxCode; - @NotBlank - private String toTaxCode; - @NotBlank - private String institutionFromName; - @NotBlank - private String institutionToName; - @NotBlank - private String productId; - @NotNull - private DelegationType type; - private String fromSubunitCode; - private String toSubunitCode; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationResponse.java deleted file mode 100644 index acf7a78..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationResponse.java +++ /dev/null @@ -1,38 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.delegation; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.DelegationState; -import it.pagopa.selfcare.mscore.constant.DelegationType; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import java.time.OffsetDateTime; - -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -public class DelegationResponse { - - @NotBlank - private String id; - @NotBlank - private String institutionId; - @NotBlank - private String institutionName; - private String institutionRootName; - @NotBlank - private DelegationType type; - @NotBlank - private String productId; - private String taxCode; - private InstitutionType institutionType; - @NotBlank - private String brokerId; - private String brokerTaxCode; - private String brokerType; - private String brokerName; - private DelegationState status; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationWithPaginationResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationWithPaginationResponse.java deleted file mode 100644 index fead1ee..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationWithPaginationResponse.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.delegation; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.mscore.model.delegation.PageInfo; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) -public class DelegationWithPaginationResponse { - - private List delegations; - private PageInfo pageInfo; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AdditionalInformationsRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AdditionalInformationsRequest.java deleted file mode 100644 index c5e626f..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AdditionalInformationsRequest.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -@Data -public class AdditionalInformationsRequest { - private boolean belongRegulatedMarket; - private String regulatedMarketNote; - private boolean ipa; - private String ipaCode; - private boolean establishedByRegulatoryProvision; - private String establishedByRegulatoryProvisionNote; - private boolean agentOfPublicService; - private String agentOfPublicServiceNote; - private String otherNote; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesRequest.java deleted file mode 100644 index facf4bc..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesRequest.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -@Data -public class AttributesRequest { - private String origin; - private String code; - private String description; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesResponse.java deleted file mode 100644 index 03b7471..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesResponse.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -@Data -public class AttributesResponse { - private String origin; - private String code; - private String description; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingRequest.java deleted file mode 100644 index 37e70b3..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingRequest.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -@Data -public class BillingRequest { - private String vatNumber; - private String taxCodeInvoicing; - private String recipientCode; - private boolean publicServices; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingResponse.java deleted file mode 100644 index 757e21b..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingResponse.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -@Data -public class BillingResponse { - private String vatNumber; - private String taxCodeInvoicing; - private String recipientCode; - private boolean publicServices; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BrokerResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BrokerResponse.java deleted file mode 100644 index 95009fd..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BrokerResponse.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -@Data -public class BrokerResponse { - - private String id; - private String taxCode; - private String description; - private int numberOfDelegations; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitution.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitution.java deleted file mode 100644 index 49a1881..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitution.java +++ /dev/null @@ -1,48 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.util.List; -import java.util.Map; - -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -public class BulkInstitution { - - @NotNull - private String id; - - @NotNull - private String externalId; - - @NotNull - private String origin; - - @NotNull - private String originId; - - @NotNull - private String description; - - private InstitutionType institutionType; - - @NotNull - private String digitalAddress; - - @NotNull - private String address; - - @NotNull - private String zipCode; - - @NotNull - private String taxCode; - - private List attributes; - - @NotNull - private Map products; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitutions.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitutions.java deleted file mode 100644 index dbedf39..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitutions.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -import java.util.List; - -@Data -public class BulkInstitutions { - private List found; - private List notFound; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkPartiesSeed.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkPartiesSeed.java deleted file mode 100644 index 3e53442..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkPartiesSeed.java +++ /dev/null @@ -1,15 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import java.util.List; - -@Data -@Valid -public class BulkPartiesSeed { - - @NotNull - private List partyIdentifiers; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkProduct.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkProduct.java deleted file mode 100644 index 4330086..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkProduct.java +++ /dev/null @@ -1,19 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -public class BulkProduct { - - @NotNull - private String product; - @NotNull - private BillingResponse billing; - private String pricingPlan; - private RelationshipState status; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatePgInstitutionRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatePgInstitutionRequest.java deleted file mode 100644 index ba5d4e3..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatePgInstitutionRequest.java +++ /dev/null @@ -1,19 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -@Data -public class CreatePgInstitutionRequest { - - @NotEmpty(message = "taxId is required") - private String taxId; - - private String description; - - @NotNull - private boolean existsInRegistry; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatedAtRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatedAtRequest.java deleted file mode 100644 index e22952e..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatedAtRequest.java +++ /dev/null @@ -1,19 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; -import org.springframework.format.annotation.DateTimeFormat; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import java.time.OffsetDateTime; - -@Data -public class CreatedAtRequest { - @NotBlank(message = "productId is mandatory") - private String productId; - @NotNull(message = "createdAt is mandatory") - @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) - private OffsetDateTime createdAt; - @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) - private OffsetDateTime activatedAt; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerRequest.java deleted file mode 100644 index fcdf462..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerRequest.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -@Data -public class DataProtectionOfficerRequest { - private String address; - private String email; - private String pec; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerResponse.java deleted file mode 100644 index a7a9304..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerResponse.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -@Data -public class DataProtectionOfficerResponse { - private String address; - private String email; - private String pec; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/GeoTaxonomies.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/GeoTaxonomies.java deleted file mode 100644 index 35a9421..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/GeoTaxonomies.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -@Data -public class GeoTaxonomies { - private String code; - private String desc; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionBillingResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionBillingResponse.java deleted file mode 100644 index e0e75fe..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionBillingResponse.java +++ /dev/null @@ -1,25 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.Origin; -import lombok.Data; - -@Data -public class InstitutionBillingResponse { - private String institutionId; - private String externalId; - private Origin origin; - private String originId; - private String description; - private InstitutionType institutionType; - private String digitalAddress; - private String address; - private String zipCode; - private String taxCode; - private String pricingPlan; - private BillingResponse billing; - - private String subunitCode; - private String subunitType; - private String aooParentCode; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionFromIpaPost.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionFromIpaPost.java deleted file mode 100644 index fc5e073..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionFromIpaPost.java +++ /dev/null @@ -1,19 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.util.List; - -@Data -public class InstitutionFromIpaPost { - - @NotNull - private String taxCode; - private String subunitCode; - private InstitutionPaSubunitType subunitType; - private List geographicTaxonomies; - private InstitutionType institutionType; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionListResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionListResponse.java deleted file mode 100644 index 5bf4f5c..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionListResponse.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class InstitutionListResponse { - - List items; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagementResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagementResponse.java deleted file mode 100644 index f0eafa7..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagementResponse.java +++ /dev/null @@ -1,40 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import lombok.Data; - -import java.time.OffsetDateTime; -import java.util.List; -import java.util.Map; - -@Data -public class InstitutionManagementResponse { - - private String id; - private String externalId; - private String origin; - private String originId; - private String description; - private InstitutionType institutionType; - private String digitalAddress; - private String address; - private String zipCode; - private String taxCode; - private Map products; - private List geographicTaxonomies; - private List attributes; - private PaymentServiceProviderResponse paymentServiceProvider; - private DataProtectionOfficerResponse dataProtectionOfficer; - private String rea; - private String shareCapital; - private String businessRegisterPlace; - private String supportEmail; - private String supportPhone; - private boolean imported; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - - private String subunitCode; - private String subunitType; - private String aooParentCode; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagerResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagerResponse.java deleted file mode 100644 index 145d5be..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagerResponse.java +++ /dev/null @@ -1,22 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; -import lombok.Data; - -import java.time.OffsetDateTime; - -@Data -public class InstitutionManagerResponse { - private String id; - private String from; - private String to; - private String role; - private ProductInfo product; - private RelationshipState state; - private String pricingPlan; - private InstitutionUpdateResponse institutionUpdate; - private BillingResponse billing; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardedRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardedRequest.java deleted file mode 100644 index cfe406b..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardedRequest.java +++ /dev/null @@ -1,12 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -import javax.validation.constraints.NotEmpty; - -@Data -public class InstitutionOnboardedRequest { - - @NotEmpty(message = "productId is required") - private String productId; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingListResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingListResponse.java deleted file mode 100644 index ad35063..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingListResponse.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class InstitutionOnboardingListResponse { - - List items; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingRequest.java deleted file mode 100644 index 1249774..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingRequest.java +++ /dev/null @@ -1,21 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import java.time.OffsetDateTime; - -@Data -public class InstitutionOnboardingRequest { - - @NotEmpty(message = "productId is required") - private String productId; - - private String tokenId; - private String contractPath; - private String pricingPlan; - private BillingRequest billing; - private OffsetDateTime activatedAt; - private Boolean isAggregator; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingResponse.java deleted file mode 100644 index fcf62bb..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingResponse.java +++ /dev/null @@ -1,39 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import lombok.Data; - -import java.time.OffsetDateTime; -import java.util.List; -import java.util.Map; - -@Data -public class InstitutionOnboardingResponse { - - private String id; - private String externalId; - private String origin; - private String originId; - private String description; - private InstitutionType institutionType; - private String digitalAddress; - private String address; - private String zipCode; - private String taxCode; - private Map onboardings; - private List geographicTaxonomies; - private List attributes; - private PaymentServiceProviderResponse paymentServiceProvider; - private DataProtectionOfficerResponse dataProtectionOfficer; - private String rea; - private String shareCapital; - private String businessRegisterPlace; - private String supportEmail; - private String supportPhone; - private boolean imported; - private String subunitCode; - private String subunitType; - private String aooParentCode; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionProduct.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionProduct.java deleted file mode 100644 index 1e60e88..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionProduct.java +++ /dev/null @@ -1,10 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import lombok.Data; - -@Data -public class InstitutionProduct { - private String id; - private RelationshipState state; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionPut.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionPut.java deleted file mode 100644 index 31d9c1e..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionPut.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; -import lombok.ToString; - -import java.util.List; - -@Data -@ToString -public class InstitutionPut { - - List geographicTaxonomyCodes; - private String digitalAddress; - private String description; - private String parentDescription; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionRequest.java deleted file mode 100644 index 3e66e47..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionRequest.java +++ /dev/null @@ -1,42 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardingRequest; -import lombok.Data; - -import java.time.OffsetDateTime; -import java.util.List; - -@Data -public class InstitutionRequest { - - private String id; - private String externalId; - private String origin; - private String originId; - private String description; - private InstitutionType institutionType; - private String digitalAddress; - private String address; - private String zipCode; - private String city; - private String county; - private String country; - private String taxCode; - private BillingRequest billing; - private List onboarding; - private List geographicTaxonomies; - private List attributes; - private PaymentServiceProviderRequest paymentServiceProvider; - private DataProtectionOfficerRequest dataProtectionOfficer; - private String rea; - private String shareCapital; - private String businessRegisterPlace; - private String supportEmail; - private String supportPhone; - private boolean imported; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - private boolean delegation; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionResponse.java deleted file mode 100644 index a6d0906..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionResponse.java +++ /dev/null @@ -1,52 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardedProductResponse; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import java.time.OffsetDateTime; -import java.util.List; - -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -public class InstitutionResponse { - - @NotBlank - private String id; - private String externalId; - @NotBlank - private String origin; - @NotBlank - private String originId; - private String description; - private InstitutionType institutionType; - private String digitalAddress; - private String address; - private String zipCode; - private String taxCode; - private String city; - private String county; - private String country; - private String istatCode; - private List geographicTaxonomies; - private List attributes; - private List onboarding; - private PaymentServiceProviderResponse paymentServiceProvider; - private DataProtectionOfficerResponse dataProtectionOfficer; - private RootParentResponse rootParent; - private String rea; - private String shareCapital; - private String businessRegisterPlace; - private String supportEmail; - private String supportPhone; - private boolean imported; - private String subunitCode; - private String subunitType; - private String aooParentCode; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - private boolean delegation; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionToOnboard.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionToOnboard.java deleted file mode 100644 index ab6233d..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionToOnboard.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -@Data -public class InstitutionToOnboard { - - @JsonProperty("cfImpresa") - private String id; - - @JsonProperty("denominazione") - private String description; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateRequest.java deleted file mode 100644 index a02d878..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateRequest.java +++ /dev/null @@ -1,38 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import java.util.List; - -@Data -public class InstitutionUpdateRequest { - - @NotNull(message = "institutionType is required") - private InstitutionType institutionType; - - private String description; - private String digitalAddress; - private String address; - private String city; - private String county; - private String country; - @NotEmpty(message = "taxCode is required") - private String taxCode; - - private String zipCode; - private PaymentServiceProviderRequest paymentServiceProvider; - private DataProtectionOfficerRequest dataProtectionOfficer; - private List geographicTaxonomyCodes; - - private String rea; - private String shareCapital; - private String businessRegisterPlace; - private String supportEmail; - private String supportPhone; - private String ivassCode; - private boolean imported; - private AdditionalInformationsRequest additionalInformations; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateResponse.java deleted file mode 100644 index f34b02c..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateResponse.java +++ /dev/null @@ -1,34 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import lombok.Data; - -import java.util.List; - -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -public class InstitutionUpdateResponse { - private InstitutionType institutionType; - private String description; - private String digitalAddress; - private String address; - private String taxCode; - private String zipCode; - private PaymentServiceProviderResponse paymentServiceProvider; - private DataProtectionOfficerResponse dataProtectionOfficer; - private List geographicTaxonomyCodes; - private String rea; - private String shareCapital; - private String businessRegisterPlace; - private String supportEmail; - private String supportPhone; - private boolean imported; - private String city; - private String county; - private String country; - private String subunitCode; - private String subunitType; - private String aooParentCode; -} - diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionsResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionsResponse.java deleted file mode 100644 index f22ae7e..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionsResponse.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -import java.util.List; - -@Data -public class InstitutionsResponse { - - private List institutions; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingResponse.java deleted file mode 100644 index 301c2df..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingResponse.java +++ /dev/null @@ -1,21 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import lombok.Data; - -import java.time.OffsetDateTime; - -@Data -public class OnboardingResponse { - - private String productId; - private String tokenId; - private RelationshipState status; - private String contract; - private String pricingPlan; - private BillingResponse billing; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - private OffsetDateTime closedAt; - private Boolean isAggregator; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingsResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingsResponse.java deleted file mode 100644 index 48c3b9b..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingsResponse.java +++ /dev/null @@ -1,12 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -import java.time.OffsetDateTime; -import java.util.List; - -@Data -public class OnboardingsResponse { - - private List onboardings; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderRequest.java deleted file mode 100644 index 14a8053..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderRequest.java +++ /dev/null @@ -1,12 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -@Data -public class PaymentServiceProviderRequest { - private String abiCode; - private String businessRegisterNumber; - private String legalRegisterNumber; - private String legalRegisterName; - private boolean vatNumberGroup; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderResponse.java deleted file mode 100644 index 7d40dd9..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderResponse.java +++ /dev/null @@ -1,12 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -@Data -public class PaymentServiceProviderResponse { - private String abiCode; - private String businessRegisterNumber; - private String legalRegisterNumber; - private String legalRegisterName; - private boolean vatNumberGroup; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PdaInstitutionRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PdaInstitutionRequest.java deleted file mode 100644 index 6463f6c..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PdaInstitutionRequest.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.Data; - -import javax.validation.constraints.NotEmpty; - -@Data -public class PdaInstitutionRequest { - - @NotEmpty(message = "InjectionInstitutionType is required") - private String injectionInstitutionType; - - @NotEmpty(message = "TaxCode is required") - private String taxCode; - - private String description; - private BillingRequest billing; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/ProductsManagement.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/ProductsManagement.java deleted file mode 100644 index d12a43e..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/ProductsManagement.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class ProductsManagement { - private String product; - private String pricingPlan; - private BillingResponse billing; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResponse.java deleted file mode 100644 index 52fe24f..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResponse.java +++ /dev/null @@ -1,22 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import lombok.Data; - -import java.time.OffsetDateTime; -import java.util.List; - -@Data -public class RelationshipResponse { - private String id; - private List from; - private String to; - private String role; - private String product; - private RelationshipState state; - private String pricingPlan; - private InstitutionUpdateResponse institutionUpdate; - private BillingResponse billingResponse; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResult.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResult.java deleted file mode 100644 index 35af6db..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResult.java +++ /dev/null @@ -1,28 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; -import lombok.Data; - -import java.time.OffsetDateTime; - -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -public class RelationshipResult { - - private String id; - private String to; - private String from; - private PartyRole role; - private String tokenId; - private ProductInfo product; - private RelationshipState state; - private String pricingPlan; - private InstitutionUpdateResponse institutionUpdate; - private BillingResponse billing; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipsManagement.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipsManagement.java deleted file mode 100644 index 17fd472..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipsManagement.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class RelationshipsManagement { - private List items; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RootParentResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RootParentResponse.java deleted file mode 100644 index a7c57cc..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RootParentResponse.java +++ /dev/null @@ -1,12 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Data; - -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -public class RootParentResponse { - private String description; - private String id; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/UserInfoResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/UserInfoResponse.java deleted file mode 100644 index 9ccf53a..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/UserInfoResponse.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.institution; - -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import lombok.Data; - -import java.util.List; - -@Data -public class UserInfoResponse { - - private String id; - private String taxCode; - private String name; - private String surname; - private String email; - private List products; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/BrokerMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/BrokerMapper.java deleted file mode 100644 index 99992e2..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/BrokerMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.mapper; - -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.web.model.institution.BrokerResponse; -import org.mapstruct.Mapper; - -import java.util.List; - -@Mapper(componentModel = "spring") -public interface BrokerMapper { - - BrokerResponse toBroker(Institution institution); - List toBrokers(List institutions); -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/DelegationMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/DelegationMapper.java deleted file mode 100644 index 2754ba2..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/DelegationMapper.java +++ /dev/null @@ -1,33 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.mapper; - -import it.pagopa.selfcare.mscore.model.delegation.Delegation; -import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequest; -import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequestFromTaxcode; -import it.pagopa.selfcare.mscore.web.model.delegation.DelegationResponse; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -@Mapper(componentModel = "spring") -public interface DelegationMapper { - - Delegation toDelegation(DelegationRequest delegation); - - Delegation toDelegation(DelegationRequestFromTaxcode delegation); - - @Mapping(source = "from", target = "institutionId") - @Mapping(source = "to", target = "brokerId") - @Mapping(source = "institutionFromName", target = "institutionName") - @Mapping(source = "institutionToName", target = "brokerName") - @Mapping(source = "institutionFromRootName", target = "institutionRootName") - DelegationResponse toDelegationResponse(Delegation delegation); - - @Mapping(source = "from", target = "institutionId") - @Mapping(source = "to", target = "brokerId") - @Mapping(source = "toTaxCode", target = "brokerTaxCode") - @Mapping(source = "fromTaxCode", target = "taxCode") - @Mapping(source = "institutionFromName", target = "institutionName") - @Mapping(source = "institutionToName", target = "brokerName") - @Mapping(source = "institutionFromRootName", target = "institutionRootName") - DelegationResponse toDelegationResponseGet(Delegation delegation); - -} \ No newline at end of file diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustom.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustom.java deleted file mode 100644 index 6bec85f..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustom.java +++ /dev/null @@ -1,562 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.mapper; - -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import it.pagopa.selfcare.mscore.model.user.ProductManagerInfo; -import it.pagopa.selfcare.mscore.web.model.institution.*; -import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardedProducts; -import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -import java.util.*; -import java.util.function.BinaryOperator; -import java.util.function.Function; -import java.util.stream.Collectors; - -@NoArgsConstructor(access = AccessLevel.NONE) -public class InstitutionMapperCustom { - - protected static final BinaryOperator MERGE_FUNCTION = (inst1, inst2) -> inst1.getStatus().compareTo(inst2.getStatus()) < 0 ? inst1 : inst2; - - public static InstitutionManagerResponse toInstitutionManagerResponse(ProductManagerInfo manager, String productId) { - InstitutionManagerResponse institutionManagerResponse = new InstitutionManagerResponse(); - institutionManagerResponse.setFrom(manager.getUserId()); - institutionManagerResponse.setTo(manager.getInstitution().getId()); - - addBillingData(institutionManagerResponse, manager, productId); - addUserManagerData(institutionManagerResponse, manager, productId); - addInstitutionUpdate(institutionManagerResponse, manager.getInstitution()); - - return institutionManagerResponse; - } - - public static InstitutionBillingResponse toInstitutionBillingResponse(Institution institution, String productId) { - if (institution == null) { - return null; - } - InstitutionBillingResponse response = new InstitutionBillingResponse(); - - response.setInstitutionId(institution.getId()); - response.setExternalId(institution.getExternalId()); - response.setDescription(institution.getDescription()); - response.setInstitutionType(institution.getInstitutionType()); - response.setDigitalAddress(institution.getDigitalAddress()); - response.setAddress(institution.getAddress()); - response.setZipCode(institution.getZipCode()); - response.setTaxCode(institution.getTaxCode()); - - response.setSubunitCode(institution.getSubunitCode()); - response.setSubunitType(institution.getSubunitType()); - response.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); - - for (Onboarding onboarding : institution.getOnboarding()) { - if (productId.equalsIgnoreCase(onboarding.getProductId())) { - response.setBilling(toBillingResponse(onboarding.getBilling(), institution)); - response.setPricingPlan(onboarding.getPricingPlan()); - } - } - - return response; - } - - public static InstitutionUpdateResponse toInstitutionUpdateResponse(Institution institution) { - InstitutionUpdateResponse institutionUpdate = new InstitutionUpdateResponse(); - institutionUpdate.setAddress(institution.getAddress()); - institutionUpdate.setInstitutionType(institution.getInstitutionType()); - institutionUpdate.setDescription(institution.getDescription()); - institutionUpdate.setDigitalAddress(institution.getDigitalAddress()); - institutionUpdate.setTaxCode(institution.getTaxCode()); - institutionUpdate.setZipCode(institution.getZipCode()); - institutionUpdate.setPaymentServiceProvider(toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); - institutionUpdate.setDataProtectionOfficer(toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); - if (institution.getGeographicTaxonomies() != null) { - var geoCodes = institution.getGeographicTaxonomies().stream() - .map(InstitutionGeographicTaxonomies::getCode) - .toList(); - institutionUpdate.setGeographicTaxonomyCodes(geoCodes); - } - institutionUpdate.setRea(institution.getRea()); - institutionUpdate.setShareCapital(institution.getShareCapital()); - institutionUpdate.setBusinessRegisterPlace(institution.getBusinessRegisterPlace()); - institutionUpdate.setSupportEmail(institution.getSupportEmail()); - institutionUpdate.setSupportPhone(institution.getSupportPhone()); - institutionUpdate.setImported(institution.isImported()); - - institutionUpdate.setSubunitCode(institution.getSubunitCode()); - institutionUpdate.setSubunitType(institution.getSubunitType()); - institutionUpdate.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); - - return institutionUpdate; - } - - private static void addUserManagerData(InstitutionManagerResponse institutionManagerResponse, ProductManagerInfo manager, String productId) { - for (OnboardedProduct product : manager.getProducts()) { - if (productId.equalsIgnoreCase(product.getProductId())) { - ProductInfo productInfo = new ProductInfo(); - productInfo.setId(productId); - productInfo.setCreatedAt(product.getCreatedAt()); - productInfo.setRole(product.getProductRole()); - if (product.getRole() != null) { - institutionManagerResponse.setRole(product.getRole().name()); - } - institutionManagerResponse.setProduct(productInfo); - institutionManagerResponse.setState(product.getStatus()); - institutionManagerResponse.setCreatedAt(product.getCreatedAt()); - institutionManagerResponse.setUpdatedAt(product.getUpdatedAt()); - institutionManagerResponse.setId(product.getRelationshipId()); - } - } - } - - private static void addInstitutionUpdate(InstitutionManagerResponse institutionManagerResponse, Institution institution) { - InstitutionUpdateResponse institutionUpdate = new InstitutionUpdateResponse(); - institutionUpdate.setInstitutionType(institution.getInstitutionType()); - institutionUpdate.setDescription(institution.getDescription()); - institutionUpdate.setDigitalAddress(institution.getDigitalAddress()); - institutionUpdate.setAddress(institution.getAddress()); - institutionUpdate.setZipCode(institution.getZipCode()); - institutionUpdate.setTaxCode(institution.getTaxCode()); - institutionUpdate.setPaymentServiceProvider(toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); - institutionUpdate.setDataProtectionOfficer(toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); - institutionUpdate.setRea(institution.getRea()); - institutionUpdate.setShareCapital(institution.getShareCapital()); - institutionUpdate.setBusinessRegisterPlace(institution.getBusinessRegisterPlace()); - institutionUpdate.setSupportEmail(institution.getSupportEmail()); - institutionUpdate.setSupportPhone(institution.getSupportPhone()); - institutionUpdate.setImported(institution.isImported()); - institutionUpdate.setSubunitCode(institution.getSubunitCode()); - institutionUpdate.setSubunitType(institution.getSubunitType()); - institutionUpdate.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); - if (institution.getGeographicTaxonomies() != null) { - institutionUpdate.setGeographicTaxonomyCodes(convertToGeoString(institution.getGeographicTaxonomies())); - } - institutionManagerResponse.setInstitutionUpdate(institutionUpdate); - } - - public static InstitutionUpdate toInstitutionUpdate(InstitutionPut institutionPut) { - InstitutionUpdate institutionUpdate = new InstitutionUpdate(); - institutionUpdate.setDescription(institutionPut.getDescription()); - institutionUpdate.setDigitalAddress(institutionPut.getDigitalAddress()); - institutionUpdate.setParentDescription(institutionPut.getParentDescription()); - institutionUpdate.setGeographicTaxonomies(Optional.ofNullable(institutionPut.getGeographicTaxonomyCodes()) - .map(geoTaxonomiesCodes -> geoTaxonomiesCodes.stream() - .map(code -> new InstitutionGeographicTaxonomies(code, null)) - .toList()) - .orElse(null) - ); - - return institutionUpdate; - } - - public static Institution toInstitution(InstitutionRequest request, String externalId) { - Institution institution = new Institution(); - institution.setExternalId(externalId); - institution.setOrigin(request.getOrigin()); - institution.setOriginId(request.getOriginId()); - institution.setInstitutionType(request.getInstitutionType()); - institution.setDescription(request.getDescription()); - institution.setAddress(request.getAddress()); - institution.setDigitalAddress(request.getDigitalAddress()); - institution.setCity(request.getCity()); - institution.setCounty(request.getCounty()); - institution.setCountry(request.getCountry()); - institution.setTaxCode(request.getTaxCode()); - institution.setZipCode(request.getZipCode()); - institution.setGeographicTaxonomies(toGeographicTaxonomies(request.getGeographicTaxonomies())); - institution.setAttributes(toAttributes(request.getAttributes())); - institution.setRea(request.getRea()); - institution.setShareCapital(request.getShareCapital()); - institution.setBusinessRegisterPlace(request.getBusinessRegisterPlace()); - institution.setSupportEmail(request.getSupportEmail()); - institution.setSupportPhone(request.getSupportPhone()); - if (request.getPaymentServiceProvider() != null) - institution.setPaymentServiceProvider(toPaymentServiceProvider(request.getPaymentServiceProvider())); - if (request.getDataProtectionOfficer() != null) - institution.setDataProtectionOfficer(toDataProtectionOfficer(request.getDataProtectionOfficer())); - return institution; - } - - public static Institution toInstitution(PdaInstitutionRequest request, String externalId) { - Institution institution = new Institution(); - institution.setExternalId(externalId); - institution.setDescription(request.getDescription()); - institution.setTaxCode(request.getTaxCode()); - return institution; - } - - private static BillingResponse toBillingResponse(Billing billing, Institution institution) { - BillingResponse billingResponse = new BillingResponse(); - if (billing != null) { - billingResponse.setVatNumber(billing.getVatNumber()); - billingResponse.setTaxCodeInvoicing(billing.getTaxCodeInvoicing()); - billingResponse.setRecipientCode(billing.getRecipientCode()); - billingResponse.setPublicServices(billing.isPublicServices()); - } else if (institution.getBilling() != null) { - billingResponse.setVatNumber(institution.getBilling().getVatNumber()); - billingResponse.setTaxCodeInvoicing(institution.getBilling().getTaxCodeInvoicing()); - billingResponse.setRecipientCode(institution.getBilling().getRecipientCode()); - billingResponse.setPublicServices(institution.getBilling().isPublicServices()); - } - return billingResponse; - } - - public static BillingResponse toBillingResponse(Onboarding onboarding, Institution institution) { - BillingResponse billingResponse = new BillingResponse(); - if (onboarding.getBilling() != null) { - billingResponse.setVatNumber(onboarding.getBilling().getVatNumber()); - billingResponse.setTaxCodeInvoicing(onboarding.getBilling().getTaxCodeInvoicing()); - billingResponse.setRecipientCode(onboarding.getBilling().getRecipientCode()); - billingResponse.setPublicServices(onboarding.getBilling().isPublicServices()); - } else if (institution.getBilling() != null) { - billingResponse.setVatNumber(institution.getBilling().getVatNumber()); - billingResponse.setTaxCodeInvoicing(institution.getBilling().getTaxCodeInvoicing()); - billingResponse.setRecipientCode(institution.getBilling().getRecipientCode()); - billingResponse.setPublicServices(institution.getBilling().isPublicServices()); - } - return billingResponse; - } - - public static Billing getBillingFromOnboarding(Onboarding onboarding, Institution institution) { - return onboarding.getBilling() != null ? onboarding.getBilling() : institution.getBilling(); - } - - public static Billing toBilling(BillingRequest billingRequest) { - Billing billing = new Billing(); - billing.setRecipientCode(billingRequest.getRecipientCode()); - billing.setTaxCodeInvoicing(billingRequest.getTaxCodeInvoicing()); - billing.setVatNumber(billingRequest.getVatNumber()); - billing.setPublicServices(billing.isPublicServices()); - return billing; - } - - private static void addBillingData(InstitutionManagerResponse institutionManagerResponse, ProductManagerInfo manager, String productId) { - for (Onboarding onboarding : manager.getInstitution().getOnboarding()) { - if (productId.equalsIgnoreCase(onboarding.getProductId())) { - institutionManagerResponse.setPricingPlan(onboarding.getPricingPlan()); - if (onboarding.getBilling() != null) - institutionManagerResponse.setBilling(toBillingResponse(onboarding.getBilling(), manager.getInstitution())); - } - } - } - - public static DataProtectionOfficer toDataProtectionOfficer(DataProtectionOfficerRequest request) { - DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); - if (request != null) { - dataProtectionOfficer.setAddress(request.getAddress()); - dataProtectionOfficer.setEmail(request.getEmail()); - dataProtectionOfficer.setPec(request.getPec()); - } - return dataProtectionOfficer; - } - - public static DataProtectionOfficerResponse toDataProtectionOfficerResponse(DataProtectionOfficer dataProtectionOfficer) { - DataProtectionOfficerResponse response = null; - if (dataProtectionOfficer != null) { - response = new DataProtectionOfficerResponse(); - response.setPec(dataProtectionOfficer.getPec()); - response.setEmail(dataProtectionOfficer.getEmail()); - response.setAddress(dataProtectionOfficer.getAddress()); - } - return response; - } - - public static PaymentServiceProvider toPaymentServiceProvider(PaymentServiceProviderRequest request) { - PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); - if (request != null) { - paymentServiceProvider.setAbiCode(request.getAbiCode()); - paymentServiceProvider.setVatNumberGroup(request.isVatNumberGroup()); - paymentServiceProvider.setBusinessRegisterNumber(request.getBusinessRegisterNumber()); - paymentServiceProvider.setLegalRegisterNumber(request.getLegalRegisterNumber()); - paymentServiceProvider.setLegalRegisterName(request.getLegalRegisterName()); - } - return paymentServiceProvider; - } - - public static PaymentServiceProviderResponse toPaymentServiceProviderResponse(PaymentServiceProvider paymentServiceProvider) { - PaymentServiceProviderResponse response = null; - if (paymentServiceProvider != null) { - response = new PaymentServiceProviderResponse(); - response.setAbiCode(paymentServiceProvider.getAbiCode()); - response.setLegalRegisterName(paymentServiceProvider.getLegalRegisterName()); - response.setBusinessRegisterNumber(paymentServiceProvider.getBusinessRegisterNumber()); - response.setVatNumberGroup(paymentServiceProvider.isVatNumberGroup()); - response.setLegalRegisterNumber(paymentServiceProvider.getLegalRegisterNumber()); - } - return response; - } - - public static List toAttributes(List attributes) { - List response = new ArrayList<>(); - if (attributes != null) { - for (AttributesRequest a : attributes) { - Attributes attribute = new Attributes(); - attribute.setCode(a.getCode()); - attribute.setDescription(a.getDescription()); - attribute.setOrigin(a.getOrigin()); - response.add(attribute); - } - } - return response; - } - - public static List toAttributeResponse(List attributes) { - List list = new ArrayList<>(); - if (attributes != null && !attributes.isEmpty()) { - for (Attributes a : attributes) { - AttributesResponse response = new AttributesResponse(); - response.setCode(a.getCode()); - response.setOrigin(a.getOrigin()); - response.setDescription(a.getDescription()); - list.add(response); - } - } - return list; - } - - - private static List toGeographicTaxonomies(List request) { - List response = new ArrayList<>(); - if (request != null && !request.isEmpty()) { - for (GeoTaxonomies g : request) { - InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(g.getCode(), g.getDesc()); - response.add(geographicTaxonomies); - } - } - return response; - } - - public static List toGeoTaxonomies(List geographicTaxonomies) { - List list = new ArrayList<>(); - if (geographicTaxonomies != null) { - for (InstitutionGeographicTaxonomies g : geographicTaxonomies) { - GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); - geoTaxonomies.setCode(g.getCode()); - geoTaxonomies.setDesc(g.getDesc()); - list.add(geoTaxonomies); - } - } - return list; - } - - private static List convertToGeoString(List geographicTaxonomies) { - List list = new ArrayList<>(); - geographicTaxonomies.forEach(g -> list.add(g.getCode())); - return list; - } - - public static OnboardedProducts toOnboardedProducts(List page) { - OnboardedProducts onboardedProducts = new OnboardedProducts(); - onboardedProducts.setProducts(toInstitutionProduct(page)); - return onboardedProducts; - } - - public static List toInstitutionProduct(List onboardings) { - if (onboardings == null) { - return Collections.emptyList(); - } - return onboardings.stream().map(onboarding -> { - InstitutionProduct product = new InstitutionProduct(); - product.setId(onboarding.getProductId()); - product.setState(onboarding.getStatus()); - return product; - }).toList(); - } - - public static InstitutionManagementResponse toInstitutionManagementResponse(Institution institution) { - InstitutionManagementResponse response = new InstitutionManagementResponse(); - response.setId(institution.getId()); - response.setExternalId(institution.getExternalId()); - response.setOrigin(institution.getOrigin()); - response.setOriginId(institution.getOriginId()); - response.setDescription(institution.getDescription()); - response.setInstitutionType(institution.getInstitutionType()); - response.setDigitalAddress(institution.getDigitalAddress()); - response.setAddress(institution.getAddress()); - response.setZipCode(institution.getZipCode()); - response.setTaxCode(institution.getTaxCode()); - if (institution.getOnboarding() != null) { - response.setProducts(toProductsMap(institution.getOnboarding(), institution)); - } - if (institution.getGeographicTaxonomies() != null) { - response.setGeographicTaxonomies(toGeoTaxonomies(institution.getGeographicTaxonomies())); - } - if (institution.getAttributes() != null) { - response.setAttributes(toAttributeResponse(institution.getAttributes())); - } - if (institution.getPaymentServiceProvider() != null) { - response.setPaymentServiceProvider(toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); - } - if (institution.getDataProtectionOfficer() != null) { - response.setDataProtectionOfficer(toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); - } - response.setRea(institution.getRea()); - response.setShareCapital(institution.getShareCapital()); - response.setBusinessRegisterPlace(institution.getBusinessRegisterPlace()); - response.setSupportEmail(institution.getSupportEmail()); - response.setSupportPhone(institution.getSupportPhone()); - response.setImported(institution.isImported()); - response.setCreatedAt(institution.getCreatedAt()); - response.setUpdatedAt(institution.getUpdatedAt()); - return response; - } - - public static InstitutionOnboardingResponse toInstitutionOnboardingResponse(Institution institution) { - InstitutionOnboardingResponse response = new InstitutionOnboardingResponse(); - response.setId(institution.getId()); - response.setExternalId(institution.getExternalId()); - response.setOrigin(institution.getOrigin()); - response.setOriginId(institution.getOriginId()); - response.setDescription(institution.getDescription()); - response.setInstitutionType(institution.getInstitutionType()); - response.setDigitalAddress(institution.getDigitalAddress()); - response.setAddress(institution.getAddress()); - response.setZipCode(institution.getZipCode()); - response.setTaxCode(institution.getTaxCode()); - if (institution.getOnboarding() != null) { - response.setOnboardings(toOnboardingMap(institution.getOnboarding(), institution)); - } - if (institution.getGeographicTaxonomies() != null) { - response.setGeographicTaxonomies(toGeoTaxonomies(institution.getGeographicTaxonomies())); - } - if (institution.getAttributes() != null) { - response.setAttributes(toAttributeResponse(institution.getAttributes())); - } - if (institution.getPaymentServiceProvider() != null) { - response.setPaymentServiceProvider(toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); - } - if (institution.getDataProtectionOfficer() != null) { - response.setDataProtectionOfficer(toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); - } - response.setRea(institution.getRea()); - response.setShareCapital(institution.getShareCapital()); - response.setBusinessRegisterPlace(institution.getBusinessRegisterPlace()); - response.setSupportEmail(institution.getSupportEmail()); - response.setSupportPhone(institution.getSupportPhone()); - response.setImported(institution.isImported()); - response.setCreatedAt(institution.getCreatedAt()); - response.setUpdatedAt(institution.getUpdatedAt()); - response.setSubunitCode(institution.getSubunitCode()); - response.setSubunitType(institution.getSubunitType()); - response.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); - return response; - } - - public static List toInstitutionListResponse(List institutions) { - List list = new ArrayList<>(); - for (Institution institution : institutions) { - InstitutionManagementResponse response = toInstitutionManagementResponse(institution); - list.add(response); - } - return list; - } - - private static Map toProductsMap(List onboarding, Institution institution) { - Map map = new HashMap<>(); - if (onboarding != null) { - for (Onboarding o : onboarding) { - ProductsManagement productsManagement = new ProductsManagement(); - productsManagement.setProduct(o.getProductId()); - productsManagement.setPricingPlan(o.getPricingPlan()); - productsManagement.setBilling(toBillingResponse(o.getBilling(), institution)); - map.put(o.getProductId(), productsManagement); - } - } - return map; - } - - private static Map toOnboardingMap(List onboarding, Institution institution) { - Map map = new HashMap<>(); - if (onboarding != null) { - for (Onboarding o : onboarding) { - OnboardingResponse onboardingResponse = new OnboardingResponse(); - onboardingResponse.setProductId(o.getProductId()); - onboardingResponse.setTokenId(o.getTokenId()); - onboardingResponse.setStatus(o.getStatus()); - onboardingResponse.setContract(o.getContract()); - onboardingResponse.setPricingPlan(o.getPricingPlan()); - onboardingResponse.setBilling(toBillingResponse(o.getBilling(), institution)); - onboardingResponse.setCreatedAt(o.getCreatedAt()); - onboardingResponse.setUpdatedAt(o.getUpdatedAt()); - onboardingResponse.setClosedAt(o.getClosedAt()); - onboardingResponse.setIsAggregator(o.getIsAggregator()); - if (!map.containsKey(o.getProductId()) || - map.containsKey(o.getProductId()) && map.get(o.getProductId()).getStatus() != RelationshipState.ACTIVE) { - map.put(o.getProductId(), onboardingResponse); - } - } - } - return map; - } - - public static List toInstitutionAttributeResponse(List attributes, String institutionId) { - List list = toAttributeResponse(attributes); - if (list.isEmpty()) { - throw new ResourceNotFoundException(String.format("Attributes for institution %s not found", institutionId), "0000"); - } - return list; - } - - public static List toInstitutionToOnboardList(List validInstitutions) { - return validInstitutions.stream() - .map(InstitutionMapperCustom::toInstitutionToOnboard) - .toList(); - } - - public static InstitutionToOnboard toInstitutionToOnboard(ValidInstitution validInstitutions) { - InstitutionToOnboard institution = new InstitutionToOnboard(); - institution.setDescription(validInstitutions.getDescription()); - institution.setId(validInstitutions.getId()); - return institution; - } - - public static List toValidInstitutions(List institutions) { - return institutions.stream() - .map(institutionToOnboard -> new ValidInstitution(institutionToOnboard.getId(), institutionToOnboard.getDescription())) - .toList(); - } - - public static BulkInstitutions toBulkInstitutions(List institution, List idsRequest) { - BulkInstitutions bulkInstitutions = new BulkInstitutions(); - bulkInstitutions.setFound(institution.stream() - .map(InstitutionMapperCustom::toBulkInstitution) - .toList()); - bulkInstitutions.setNotFound(idsRequest.stream() - .filter(s -> institution.stream().noneMatch(inst -> inst.getId().equalsIgnoreCase(s))) - .toList()); - return bulkInstitutions; - } - - private static BulkInstitution toBulkInstitution(Institution inst) { - BulkInstitution bulkInstitution = new BulkInstitution(); - bulkInstitution.setId(inst.getId()); - bulkInstitution.setExternalId(inst.getExternalId()); - bulkInstitution.setOrigin(inst.getOrigin()); - bulkInstitution.setOriginId(inst.getOriginId()); - bulkInstitution.setDescription(inst.getDescription()); - bulkInstitution.setInstitutionType(inst.getInstitutionType()); - bulkInstitution.setDigitalAddress(inst.getDigitalAddress()); - bulkInstitution.setAddress(inst.getAddress()); - bulkInstitution.setZipCode(inst.getZipCode()); - bulkInstitution.setTaxCode(inst.getTaxCode()); - bulkInstitution.setAttributes(toAttributeResponse(inst.getAttributes())); - bulkInstitution.setProducts(toBulkProductMap(inst.getOnboarding(), inst)); - return bulkInstitution; - } - - private static Map toBulkProductMap(List onboarding, Institution institution) { - if(onboarding != null && !onboarding.isEmpty()) { - return onboarding.stream().map(onb -> { - BulkProduct bulkProduct = new BulkProduct(); - bulkProduct.setProduct(onb.getProductId()); - bulkProduct.setPricingPlan(onb.getPricingPlan()); - bulkProduct.setBilling(toBillingResponse(onb.getBilling(), institution)); - bulkProduct.setStatus(onb.getStatus()); - return bulkProduct; - }).collect(Collectors.toMap(BulkProduct::getProduct, Function.identity(), MERGE_FUNCTION)); - } - return Collections.emptyMap(); - } -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionResourceMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionResourceMapper.java deleted file mode 100644 index 7a75b61..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionResourceMapper.java +++ /dev/null @@ -1,40 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.mapper; - - -import it.pagopa.selfcare.mscore.model.institution.Billing; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; -import it.pagopa.selfcare.mscore.web.model.institution.BillingRequest; -import it.pagopa.selfcare.mscore.web.model.institution.GeoTaxonomies; -import it.pagopa.selfcare.mscore.web.model.institution.InstitutionResponse; -import it.pagopa.selfcare.mscore.web.model.institution.RootParentResponse; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Named; -import org.springframework.util.StringUtils; - -@Mapper(componentModel = "spring") -public interface InstitutionResourceMapper { - - @Mapping(target = "aooParentCode", source = "paAttributes.aooParentCode") - @Mapping(target = "rootParent", source = ".", qualifiedByName = "setRootParent") - InstitutionResponse toInstitutionResponse(Institution institution); - - @Named("setRootParent") - static RootParentResponse setRootParent(Institution institution) { - if(StringUtils.hasText(institution.getRootParentId())){ - RootParentResponse rootParentResponse = new RootParentResponse(); - rootParentResponse.setId(institution.getRootParentId()); - rootParentResponse.setDescription(institution.getParentDescription()); - return rootParentResponse; - } - return null; - } - - - Billing billingRequestToBilling(BillingRequest billingRequest); - - InstitutionGeographicTaxonomies toInstitutionGeographicTaxonomies(GeoTaxonomies geoTaxonomies); - - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionUpdateMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionUpdateMapper.java deleted file mode 100644 index bbd1b00..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionUpdateMapper.java +++ /dev/null @@ -1,29 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.mapper; - - -import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; -import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; -import it.pagopa.selfcare.mscore.web.model.institution.InstitutionUpdateRequest; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Named; - -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -@Mapper(componentModel = "spring") -public interface InstitutionUpdateMapper { - - @Mapping(target = "geographicTaxonomies", source = "geographicTaxonomyCodes", qualifiedByName = "toGeographicTaxonomies") - InstitutionUpdate toInstitutionUpdate(InstitutionUpdateRequest request); - - @Named("toGeographicTaxonomies") - default List toGeographicTaxonomies(List geographicTaxonomyCodes) { - return Optional.ofNullable(geographicTaxonomyCodes) - .map(item -> geographicTaxonomyCodes.stream() - .map(code -> new InstitutionGeographicTaxonomies(code,null)) - .collect(Collectors.toList())) - .orElse(null); - } -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapper.java deleted file mode 100644 index df93cc3..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapper.java +++ /dev/null @@ -1,145 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.mapper; - -import it.pagopa.selfcare.mscore.constant.TokenType; -import it.pagopa.selfcare.mscore.model.institution.Billing; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import it.pagopa.selfcare.mscore.model.institution.PaAttributes; -import it.pagopa.selfcare.mscore.model.onboarding.*; -import it.pagopa.selfcare.mscore.web.model.onboarding.*; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - -@NoArgsConstructor(access = AccessLevel.NONE) -public class OnboardingMapper { - - private static UserMapper userMapper = new UserMapperImpl(); - - private static Contract toContract(ContractRequest request) { - Contract contract = new Contract(); - if (request != null) { - contract.setPath(request.getPath()); - contract.setVersion(request.getVersion()); - } - return contract; - } - - public static OnboardingInfoResponse toUserInfoResponse(String userId, List onboardingInfos) { - OnboardingInfoResponse response = new OnboardingInfoResponse(); - response.setUserId(userId); - List institutionResponseList = new ArrayList<>(); - if(Objects.nonNull(onboardingInfos)) { - onboardingInfos.forEach(onboardingInfo -> { - institutionResponseList.add(constructOnboardedInstitutionResponse(onboardingInfo.getInstitution(), - onboardingInfo.getBinding().getProducts())); - }); - } - response.setInstitutions(institutionResponseList); - return response; - } - - public static OnboardingInfoResponse toOnboardingInfoResponse(String userId, List onboardingInfos) { - OnboardingInfoResponse response = new OnboardingInfoResponse(); - response.setUserId(userId); - List institutionResponseList = new ArrayList<>(); - if(Objects.nonNull(onboardingInfos)) { - onboardingInfos.stream() - .filter(item -> Objects.nonNull(item.getInstitution()) && Objects.nonNull(item.getInstitution().getOnboarding()) - && Objects.nonNull(item.getBinding())) - .forEach(onboardingInfo -> onboardingInfo.getInstitution().getOnboarding().stream() - .filter(onboarding -> onboarding.getProductId().equalsIgnoreCase(onboardingInfo.getBinding().getProducts().getProductId()) - && onboarding.getStatus().equals(onboardingInfo.getBinding().getProducts().getStatus())) - .findFirst() - .ifPresent(onboarding -> institutionResponseList.add(constructOnboardedInstitutionResponse(onboardingInfo.getInstitution(), - onboardingInfo.getBinding().getProducts(), - onboarding))) - ); - } - response.setInstitutions(institutionResponseList); - return response; - } - - private static OnboardedInstitutionResponse constructOnboardedInstitutionResponse(Institution institution, OnboardedProduct product, Onboarding onboarding) { - OnboardedInstitutionResponse institutionResponse = constructOnboardedInstitutionResponse(institution, product); - institutionResponse.setPricingPlan(onboarding.getPricingPlan()); - Billing billing = InstitutionMapperCustom.getBillingFromOnboarding(onboarding, institution); - institutionResponse.setBilling(billing); - return institutionResponse; - } - - private static OnboardedInstitutionResponse constructOnboardedInstitutionResponse(Institution institution, OnboardedProduct product) { - OnboardedInstitutionResponse institutionResponse = new OnboardedInstitutionResponse(); - institutionResponse.setId(institution.getId()); - institutionResponse.setExternalId(institution.getExternalId()); - institutionResponse.setOrigin(institution.getOrigin()); - institutionResponse.setOriginId(institution.getOriginId()); - institutionResponse.setDescription(institution.getDescription()); - institutionResponse.setInstitutionType(institution.getInstitutionType()); - institutionResponse.setDigitalAddress(institution.getDigitalAddress()); - institutionResponse.setAddress(institution.getAddress()); - institutionResponse.setZipCode(institution.getZipCode()); - institutionResponse.setTaxCode(institution.getTaxCode()); - if (institution.getGeographicTaxonomies() != null) { - institutionResponse.setGeographicTaxonomies(InstitutionMapperCustom.toGeoTaxonomies(institution.getGeographicTaxonomies())); - } - if (institution.getAttributes() != null) { - institutionResponse.setAttributes(InstitutionMapperCustom.toAttributeResponse(institution.getAttributes())); - } - ProductInfo productInfo = new ProductInfo(); - productInfo.setRole(product.getProductRole()); - productInfo.setId(product.getProductId()); - productInfo.setCreatedAt(product.getCreatedAt()); - if(Objects.nonNull(product.getStatus())){ - productInfo.setStatus(product.getStatus().name()); - } - institutionResponse.setState(product.getStatus().name()); - institutionResponse.setRole(product.getRole()); - institutionResponse.setProductInfo(productInfo); - institutionResponse.setBusinessData(new BusinessData(institution.getRea(), institution.getShareCapital(), institution.getBusinessRegisterPlace())); - institutionResponse.setSupportContact(new SupportContact(institution.getSupportEmail(), institution.getSupportPhone())); - institutionResponse.setPaymentServiceProvider(InstitutionMapperCustom.toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); - institutionResponse.setDataProtectionOfficer(InstitutionMapperCustom.toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); - institutionResponse.setParentDescription(institution.getParentDescription()); - institutionResponse.setRootParentId(institution.getRootParentId()); - institutionResponse.setSubunitCode(institution.getSubunitCode()); - institutionResponse.setSubunitType(institution.getSubunitType()); - institutionResponse.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); - - return institutionResponse; - } - - public static OnboardingOperatorsRequest toOnboardingOperatorRequest(OnboardingInstitutionOperatorsRequest onboardingInstitutionOperatorsRequest) { - OnboardingOperatorsRequest request = new OnboardingOperatorsRequest(); - request.setInstitutionId(onboardingInstitutionOperatorsRequest.getInstitutionId()); - request.setProductId(onboardingInstitutionOperatorsRequest.getProductId()); - request.setProductTitle(onboardingInstitutionOperatorsRequest.getProductTitle()); - request.setUsers(Optional.ofNullable(onboardingInstitutionOperatorsRequest.getUsers()) - .map(list -> list.stream().map(userMapper::toUserToOnboard).collect(Collectors.toList())) - .orElse(List.of()) - ); - return request; - } - - public static OnboardingLegalsRequest toOnboardingLegalsRequest(OnboardingInstitutionLegalsRequest onboardingInstitutionLegalsRequest) { - OnboardingLegalsRequest request = new OnboardingLegalsRequest(); - request.setTokenType(TokenType.LEGALS); - request.setProductId(onboardingInstitutionLegalsRequest.getProductId()); - request.setProductName(onboardingInstitutionLegalsRequest.getProductName()); - request.setUsers(Optional.ofNullable(onboardingInstitutionLegalsRequest.getUsers()) - .map(list -> list.stream().map(userMapper::toUserToOnboard).collect(Collectors.toList())) - .orElse(List.of()) - ); - request.setInstitutionExternalId(onboardingInstitutionLegalsRequest.getInstitutionExternalId()); - request.setInstitutionId(onboardingInstitutionLegalsRequest.getInstitutionId()); - request.setContract(toContract(onboardingInstitutionLegalsRequest.getContract())); - request.setSignContract(onboardingInstitutionLegalsRequest.isSignContract()); - return request; - } - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingResourceMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingResourceMapper.java deleted file mode 100644 index c6eb299..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingResourceMapper.java +++ /dev/null @@ -1,49 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.mapper; - - -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardingRequest; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardingUsersRequest; -import it.pagopa.selfcare.mscore.web.model.institution.InstitutionOnboardingRequest; -import it.pagopa.selfcare.mscore.web.model.institution.OnboardingResponse; -import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardingInstitutionRequest; -import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardingInstitutionUsersRequest; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Named; - -import java.time.LocalDateTime; -import java.time.OffsetDateTime; -import java.time.ZoneOffset; -import java.util.Optional; - -@Mapper(componentModel = "spring", uses = {InstitutionUpdateMapper.class}) -public interface OnboardingResourceMapper { - - OnboardingResponse toResponse(Onboarding onboarding); - - @Mapping(target = "contractFilePath", source = "contractImported.filePath") - @Mapping(target = "contractCreatedAt", source = "contractImported.createdAt") - @Mapping(target = "billingRequest", source = "billing") - @Mapping(target = "signContract", source = "signContract", qualifiedByName = "mapSignContract") - @Mapping(target = "contractActivatedAt", source = "contractImported.activatedAt") - OnboardingRequest toOnboardingRequest(OnboardingInstitutionRequest onboardingInstitutionRequest); - - OnboardingUsersRequest toOnboardingUsersRequest(OnboardingInstitutionUsersRequest request); - - @Named("mapSignContract") - default Boolean mapSignContract(Boolean signContract) { - return Optional.ofNullable(signContract).orElse(true); - } - - @Mapping(target = "contract", source = "contractPath") - @Mapping(target = "createdAt", source = "activatedAt") - Onboarding toOnboarding(InstitutionOnboardingRequest onboardingRequest); - - @Named("toOffsetDateTime") - default OffsetDateTime toOffsetDateTime(LocalDateTime date) { - return Optional.ofNullable(date) - .map(ld -> ld.atZone(ZoneOffset.systemDefault()).toOffsetDateTime()) - .orElse(null); - } -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapper.java deleted file mode 100644 index 2e2d48c..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapper.java +++ /dev/null @@ -1,60 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.mapper; - -import it.pagopa.selfcare.mscore.model.user.RelationshipInfo; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.web.model.institution.RelationshipResult; -import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -import java.util.ArrayList; -import java.util.List; - -@NoArgsConstructor(access = AccessLevel.NONE) -public class RelationshipMapper { - - public static RelationshipResult toRelationshipResult(RelationshipInfo info) { - - RelationshipResult relationshipResult = new RelationshipResult(); - if (info.getOnboardedProduct() != null) { - relationshipResult.setId(info.getOnboardedProduct().getRelationshipId()); - relationshipResult.setState(info.getOnboardedProduct().getStatus()); - relationshipResult.setRole(info.getOnboardedProduct().getRole()); - - ProductInfo productInfo = new ProductInfo(); - productInfo.setId(info.getOnboardedProduct().getProductId()); - productInfo.setCreatedAt(info.getOnboardedProduct().getCreatedAt()); - productInfo.setRole(info.getOnboardedProduct().getProductRole()); - - relationshipResult.setProduct(productInfo); - } - relationshipResult.setFrom(info.getUserId()); - relationshipResult.setTo(info.getInstitution().getId()); - - if (info.getInstitution() != null) { - relationshipResult.setInstitutionUpdate(InstitutionMapperCustom.toInstitutionUpdateResponse(info.getInstitution())); - } - - addInstitutionOnboardingData(info, relationshipResult); - return relationshipResult; - } - - private static void addInstitutionOnboardingData(RelationshipInfo info, RelationshipResult relationshipResult) { - if (info.getInstitution().getOnboarding() != null) { - for (Onboarding onboarding : info.getInstitution().getOnboarding()) { - if (onboarding.getProductId().equalsIgnoreCase(info.getOnboardedProduct().getProductId())) { - relationshipResult.setPricingPlan(onboarding.getPricingPlan()); - relationshipResult.setBilling(InstitutionMapperCustom.toBillingResponse(onboarding, info.getInstitution())); - } - } - } - } - - public static List toRelationshipResultList(List relationshipInfoList) { - List relationshipResults = new ArrayList<>(); - for (RelationshipInfo info : relationshipInfoList) { - relationshipResults.add(toRelationshipResult(info)); - } - return relationshipResults; - } -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/UserMapper.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/UserMapper.java deleted file mode 100644 index d5eddec..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/UserMapper.java +++ /dev/null @@ -1,12 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.mapper; - - -import it.pagopa.selfcare.mscore.model.user.UserToOnboard; -import it.pagopa.selfcare.mscore.web.model.user.Person; -import org.mapstruct.Mapper; - -@Mapper(componentModel = "spring") -public interface UserMapper { - - UserToOnboard toUserToOnboard(Person p); -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/BusinessData.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/BusinessData.java deleted file mode 100644 index 2666613..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/BusinessData.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class BusinessData { - private String rea; - private String shareCapital; - private String businessRegisterPlace; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ContractRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ContractRequest.java deleted file mode 100644 index 92b9425..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ContractRequest.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import lombok.Data; - -import javax.validation.constraints.NotEmpty; - -@Data -public class ContractRequest { - private String version; - - @NotEmpty(message = "contract path is required") - private String path; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/LegalsResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/LegalsResponse.java deleted file mode 100644 index 46d21bf..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/LegalsResponse.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.mscore.constant.Env; -import lombok.Data; - -@Data -public class LegalsResponse { - private String partyId; - private String relationshipId; - private PartyRole role; - private Env env; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedInstitutionResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedInstitutionResponse.java deleted file mode 100644 index 5350b61..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedInstitutionResponse.java +++ /dev/null @@ -1,46 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.model.institution.Billing; -import it.pagopa.selfcare.mscore.web.model.institution.AttributesResponse; -import it.pagopa.selfcare.mscore.web.model.institution.DataProtectionOfficerResponse; -import it.pagopa.selfcare.mscore.web.model.institution.GeoTaxonomies; -import it.pagopa.selfcare.mscore.web.model.institution.PaymentServiceProviderResponse; -import lombok.Data; - -import java.util.List; - -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -public class OnboardedInstitutionResponse { - - private String id; - private String externalId; - private String originId; - private String description; - private String origin; - private InstitutionType institutionType; - private String digitalAddress; - private String address; - private String zipCode; - private String taxCode; - private String pricingPlan; - private Billing billing; - private List geographicTaxonomies; - private List attributes; - private String state; - private PartyRole role; - private ProductInfo productInfo; - private BusinessData businessData; - private SupportContact supportContact; - private PaymentServiceProviderResponse paymentServiceProvider; - private DataProtectionOfficerResponse dataProtectionOfficer; - private String parentDescription; - private String rootParentId; - private String subunitCode; - private String subunitType; - private String aooParentCode; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProductResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProductResponse.java deleted file mode 100644 index f1e0828..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProductResponse.java +++ /dev/null @@ -1,21 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.web.model.institution.BillingResponse; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.time.OffsetDateTime; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class OnboardedProductResponse { - private String productId; - private RelationshipState status; - private BillingResponse billing; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - private Boolean isAggregator; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProducts.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProducts.java deleted file mode 100644 index e484e37..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProducts.java +++ /dev/null @@ -1,11 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import it.pagopa.selfcare.mscore.web.model.institution.InstitutionProduct; -import lombok.Data; - -import java.util.List; - -@Data -public class OnboardedProducts { - private List products; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingImportContract.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingImportContract.java deleted file mode 100644 index 7f4099f..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingImportContract.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.OffsetDateTime; - -@Data -public class OnboardingImportContract { - - private String fileName; - private String filePath; - private String contractType; - private OffsetDateTime createdAt; - private OffsetDateTime activatedAt; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInfoResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInfoResponse.java deleted file mode 100644 index a56b704..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInfoResponse.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Data; - -import java.util.List; - -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -public class OnboardingInfoResponse { - private String userId; - private List institutions; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionLegalsRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionLegalsRequest.java deleted file mode 100644 index d106a10..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionLegalsRequest.java +++ /dev/null @@ -1,33 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import it.pagopa.selfcare.mscore.web.model.user.Person; -import lombok.Data; - -import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import java.util.List; - -@Data -public class OnboardingInstitutionLegalsRequest { - - @NotEmpty(message = "productId is required") - private String productId; - - private String productName; - - @NotEmpty(message = "at least one user is required") - private List users; - - private String institutionExternalId; - - @NotEmpty(message = "institutionId is required") - private String institutionId; - - @Valid - @NotNull(message = "contract is required") - private ContractRequest contract; - - private boolean signContract; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionOperatorsRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionOperatorsRequest.java deleted file mode 100644 index 5d5f1e5..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionOperatorsRequest.java +++ /dev/null @@ -1,24 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import it.pagopa.selfcare.mscore.web.model.user.Person; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import java.util.List; - -@Data -public class OnboardingInstitutionOperatorsRequest { - - @NotEmpty(message = "productId is required") - private String productId; - - @NotEmpty(message = "productTitle is required") - private String productTitle; - - @NotEmpty(message = "at least one user is required") - private List users; - - @NotEmpty(message = "InstitutionId is required") - private String institutionId; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionRequest.java deleted file mode 100644 index 59352b7..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionRequest.java +++ /dev/null @@ -1,40 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import io.swagger.annotations.ApiModelProperty; -import it.pagopa.selfcare.mscore.web.model.institution.BillingRequest; -import it.pagopa.selfcare.mscore.web.model.institution.InstitutionUpdateRequest; -import it.pagopa.selfcare.mscore.web.model.user.Person; -import lombok.Data; - -import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import java.util.List; - -@Data -public class OnboardingInstitutionRequest { - - @NotEmpty(message = "productId is required") - private String productId; - - private String productName; - - @NotEmpty(message = "at least one user is required") - private List users; - - @NotEmpty(message = "Institution externalId is required") - private String institutionExternalId; - - @NotNull(message = "institutionData is required") - @Valid - private InstitutionUpdateRequest institutionUpdate; - - private String pricingPlan; - private BillingRequest billing; - private ContractRequest contract; - private OnboardingImportContract contractImported; - private Boolean signContract; - @ApiModelProperty(value = "${swagger.mscore.onboarding.complete.model.sendCompleteOnboardingEmail}") - private Boolean sendCompleteOnboardingEmail; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionUsersRequest.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionUsersRequest.java deleted file mode 100644 index 9904b7d..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionUsersRequest.java +++ /dev/null @@ -1,24 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import it.pagopa.selfcare.mscore.web.model.user.Person; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import java.util.List; - -@Data -public class OnboardingInstitutionUsersRequest { - - @NotEmpty(message = "productId is required") - private String productId; - - @NotEmpty(message = "at least one user is required") - private List users; - - @NotEmpty(message = "InstitutionId is required") - private String institutionTaxCode; - - private String institutionSubunitCode; - private Boolean sendCreateUserNotificationEmail = Boolean.TRUE; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ProductInfo.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ProductInfo.java deleted file mode 100644 index 1ce4325..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ProductInfo.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Data; - -import java.time.OffsetDateTime; -import java.util.List; - -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -public class ProductInfo { - private String id; - private String role; - private OffsetDateTime createdAt; - private String status; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/SupportContact.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/SupportContact.java deleted file mode 100644 index 27a6497..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/SupportContact.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class SupportContact { - private String supportEmail; - private String supportPhone; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenListResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenListResponse.java deleted file mode 100644 index c9a2df4..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenListResponse.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; -import it.pagopa.selfcare.mscore.model.onboarding.TokenUser; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.time.OffsetDateTime; -import java.util.List; - -@Data -@AllArgsConstructor -@NoArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) -public class TokenListResponse { - List items; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenResponse.java deleted file mode 100644 index f705d60..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenResponse.java +++ /dev/null @@ -1,40 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.onboarding; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; -import it.pagopa.selfcare.mscore.model.onboarding.TokenUser; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.time.OffsetDateTime; -import java.util.ArrayList; -import java.util.List; - -@Data -@AllArgsConstructor -@NoArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) -public class TokenResponse { - private String id; - private String checksum; - private List legals = new ArrayList<>(); - private RelationshipState status; - private String institutionId; - private String productId; - private OffsetDateTime expiringDate; - private String contractVersion; - private String contractTemplate; - private String contractSigned; - private String contentType; - private List users; - private InstitutionUpdate institutionUpdate; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; - private OffsetDateTime closedAt; - - public TokenResponse(String id) { - this.id = id; - } -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/InstitutionToNotifyResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/InstitutionToNotifyResponse.java deleted file mode 100644 index add171f..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/InstitutionToNotifyResponse.java +++ /dev/null @@ -1,33 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.token; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.model.RootParent; -import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class InstitutionToNotifyResponse { - - private InstitutionType institutionType; - private String description; - private String digitalAddress; - private String address; - private String taxCode; - private String origin; - private String originId; - private String zipCode; - private PaymentServiceProvider paymentServiceProvider; - private String istatCode; - private String city; - private String country; - private String county; - private String subUnitCode; - private String category; - private String subUnitType; - private RootParent rootParent; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/ScContractResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/ScContractResponse.java deleted file mode 100644 index f2001ae..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/ScContractResponse.java +++ /dev/null @@ -1,30 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.token; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.mscore.model.QueueEvent; -import it.pagopa.selfcare.mscore.web.model.institution.BillingResponse; -import lombok.Data; - -import java.time.OffsetDateTime; - -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -public class ScContractResponse { - - private String id; - private String internalIstitutionID; - private String product; - private String state; - private String filePath; - private String fileName; - private String contentType; - private String onboardingTokenId; - private String pricingPlan; - private InstitutionToNotifyResponse institution; - private BillingResponse billing; - private OffsetDateTime createdAt; - private OffsetDateTime closedAt; - private OffsetDateTime updatedAt; - private QueueEvent notificationType; - -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/InstitutionProducts.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/InstitutionProducts.java deleted file mode 100644 index 173ae8d..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/InstitutionProducts.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.user; - -import lombok.Data; - -import java.util.List; - -@Data -public class InstitutionProducts { - - private String institutionId; - private String institutionName; - private String institutionRootName; - private List products; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/OnboardedUsersResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/OnboardedUsersResponse.java deleted file mode 100644 index b98f48c..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/OnboardedUsersResponse.java +++ /dev/null @@ -1,12 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.user; - -import lombok.Builder; -import lombok.Data; - -import java.util.List; - -@Data -@Builder -public class OnboardedUsersResponse { - private List users; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Person.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Person.java deleted file mode 100644 index f8c3410..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Person.java +++ /dev/null @@ -1,34 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.user; - -import com.fasterxml.jackson.annotation.JsonInclude; -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.mscore.constant.Env; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; - -@Data -@Valid -@JsonInclude(JsonInclude.Include.NON_NULL) -@AllArgsConstructor -@NoArgsConstructor -public class Person { - - @NotEmpty(message = "User internal id is required") - private String id; - private String taxCode; - private String name; - private String surname; - private String email; - private PartyRole role; - private String productRole; - private Env env = Env.ROOT; - private String roleLabel; - - public Person(String id) { - this.id = id; - } -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/PersonId.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/PersonId.java deleted file mode 100644 index af2a684..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/PersonId.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.user; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class PersonId { - - private String id; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Product.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Product.java deleted file mode 100644 index 46e3589..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Product.java +++ /dev/null @@ -1,24 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.user; - -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.mscore.constant.Env; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import lombok.Data; - -import java.time.OffsetDateTime; - -import static it.pagopa.selfcare.mscore.constant.Env.ROOT; - -@Data -public class Product { - - private String productId; - private String tokenId; - private RelationshipState status; - private String contract; - private String productRole; - private PartyRole role; - private Env env = ROOT; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCount.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCount.java deleted file mode 100644 index feac00a..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCount.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.user; - -import lombok.Data; - -@Data -public class ProductCount { - private String productId; - private Integer count; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCountResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCountResponse.java deleted file mode 100644 index 274dd99..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCountResponse.java +++ /dev/null @@ -1,16 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.user; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@AllArgsConstructor -@NoArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) -public class ProductCountResponse { - List products; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserProductsResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserProductsResponse.java deleted file mode 100644 index 33706d8..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserProductsResponse.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.user; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class UserProductsResponse { - - private String id; - private List bindings; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserResponse.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserResponse.java deleted file mode 100644 index 3a4a178..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserResponse.java +++ /dev/null @@ -1,27 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.user; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.Valid; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; - -@Data -@Valid -@JsonInclude(JsonInclude.Include.NON_NULL) -@AllArgsConstructor -@NoArgsConstructor -public class UserResponse { - - @NotEmpty(message = "User internal id is required") - private String id; - private String taxCode; - @NotBlank - private String name; - @NotBlank - private String surname; - private String email; -} diff --git a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/util/CustomExceptionMessage.java b/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/util/CustomExceptionMessage.java deleted file mode 100644 index 19563c9..0000000 --- a/apps/institution-ms-new/web/src/main/java/it/pagopa/selfcare/mscore/web/util/CustomExceptionMessage.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.pagopa.selfcare.mscore.web.util; - -import it.pagopa.selfcare.mscore.constant.GenericError; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; - -import javax.servlet.http.HttpServletRequest; - -@NoArgsConstructor(access = AccessLevel.NONE) -public class CustomExceptionMessage { - - - public static void setCustomMessage(GenericError genericError){ - HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()) - .getRequest(); - request.setAttribute("errorEnum", genericError); - } -} diff --git a/apps/institution-ms-new/web/src/main/resources/swagger/swagger_en.properties b/apps/institution-ms-new/web/src/main/resources/swagger/swagger_en.properties deleted file mode 100644 index 5cc48b0..0000000 --- a/apps/institution-ms-new/web/src/main/resources/swagger/swagger_en.properties +++ /dev/null @@ -1,115 +0,0 @@ -swagger.description= -swagger.security.schema.bearer.description=A bearer token in the format of a JWS and conformed to the specifications included in [RFC8725](https://tools.ietf.org/html/RFC8725) -swagger.mscore.external.institution=Gets institution using external institution id -swagger.mscore.external.institution.manager=retrieves the manager related to the institution even if the current user is not related to the institution/product -swagger.mscore.external.institution.billing=retrieves the billing data related to the institution even if the current user is not related to the institution/product -swagger.mscore.external.institution.products=retrieves the products related to Institution -swagger.mscore.external.geotaxonomies=retrieves the geographic taxonomies related to Institution. -swagger.mscore.external.institution.relationships=returns the relationships related to the institution -swagger.mscore.institutions=Gets institutions filtering by taxCode and/or subunitCode -swagger.mscore.institution.create.from-ipa=create an institution from ipa registry -swagger.mscore.institution.create.from-ivass=create an institution from ivass CSV -swagger.mscore.institution.create.from-infocamere=create an institution from infocamere registry -swagger.mscore.institutions.findFromProduct=Gets institutions filtering onboardings by product id -swagger.mscore.institution=Gets the corresponding institution using internal institution id -swagger.mscore.institution.PA.create=create an institution (PA) using external institution id fetching data from party-registry -swagger.mscore.institution.create=create an institution using external institution id without fetching data from party-registry or info-camere -swagger.mscore.institution.PG.create=create an institution (PG) using external institution id fetching data from info-camere -swagger.mscore.institution.products=retrieves the insistitution's related products. -swagger.mscore.institution.relationships=returns the relationships related to the institution -swagger.mscore.onboarding.operator=performs operators onboarding on an already existing institution -swagger.mscore.onboarding.subdelegates=performs subdelegates onboarding on an already existing institution -swagger.mscore.onboarding.users=The service adds users to the registry if they are not present and associates them with the institution and product contained in the body -swagger.mscore.onboarding.users.delete=The service set DELETE status on onboarding association with the product and institutionId -swagger.mscore.onboarding.legals=performs legals onboarding on an already existing institution -swagger.mscore.relationships=Gets the corresponding relationship -swagger.mscore.relationship.delete=Given a relationship identifier, it deletes the corresponding relationship -swagger.mscore.relationship.activate=Activate the relationship -swagger.mscore.relationship.suspend=Suspend the relationship -swagger.mscore.institutions.updateCreatedAt=The service updates the createdAt field for the institution-product pair -swagger.mscore.token.tokenId=contract's unique identifier -swagger.mscore.institutions.model.externalId=Institution's unique external identifier -swagger.mscore.institutions.model.description=Description ente -swagger.mscore.institutions.model.productId=Product's unique identifier -swagger.mscore.institutions.model.personId=User's unique identifier (uuid) -swagger.mscore.institutions.model.id=Institution's unique identifier -swagger.mscore.institutions.model.institutionId=The internal identifier of the institution -swagger.mscore.institutions.existsInRegistry=boolean for PG persistence (institution exists in Info Camere or AdE registry -swagger.mscore.institutions.model.relationshipState=List of Relationship state for filter products -swagger.mscore.institutions.valid=Retrieve list of institution which logged user can onboard -swagger.mscore.institutions.model.internalIds=List of Institution to onboard -swagger.mscore.institutions.model.createdAt=The createdAt date -swagger.mscore.institutions.model.type=Institution's type -swagger.mscore.institutions.model.taxCode=Institution's tax code -swagger.mscore.institutions.model.subunitCode=Institution's subunit code -swagger.mscore.institutions.model.origin=Institution's origin -swagger.mscore.institutions.model.originId=Institution's id in the relative origin open data -swagger.mscore.onboarding.institution.complete = update institution and users data without adding a new token -swagger.mscore.onboarding.institution.persist = Responsible for saving the association between an institution and a product. It also creates occurrences in the Users collection as part of this process. -swagger.mscore.onboarding.institution=create a new Token (contract), and update institution and users data -swagger.mscore.onboarding.complete=complete an onboarding request -swagger.mscore.onboarding.complete.model.sendCompleteOnboardingEmail = Parameter that allows you to specify whether following completion of onboarding you want to receive an email -swagger.mscore.onboarding.reject=invalidate an onboarding request by an operator review -swagger.mscore.onboarding.invalidate=invalidate an onboarding request -swagger.mscore.onboarding.approve=approve an onboarding reuqest by an operator review -swagger.mscore.token.verify=Verify if the token is already consumed -swagger.mscore.token.api.getToken=Retrieve token given the institution's and product ids -swagger.mscore.token=retrieve a token relationship -swagger.mscore.tokens.getAll=Retrieve all token relationships -swagger.mscore.tokens.findFromProduct=Retrieve all token from a product -swagger.mscore.token.model.states=Token relationship's status -swagger.mscore.onboarding.verify=verify if onboardedProduct is already onboarded for institution -swagger.mscore.onboarding.info=returns onboarding info -swagger.mscore.person.info=returns the identified person, if any. -swagger.mscore.person.create=create a new person -swagger.mscore.relationship.relationshipId=UserBinding's unique identifier -swagger.mscore.onboarding.relationship.document=retrieve the contractDocument related to a relationship -swagger.mscore.institution.update=update institution data of given institution -swagger.mscore.institution.geotaxonomies=retrieves the geographic taxonomies this institution is related to -swagger.mscore.person.get=Retrieves Person by ID -swagger.mscore.person.verify=verify if a Person exists for a given ID -swagger.mscore.institution.verify=verify if Institution exists for a given ID -swagger.mscore.institution.model.id=Institution's unique internal identifier -swagger.mscore.institution.attributes=returns the attributes of the identified institution, if any. -swagger.mscore.institution.bygeotaxonomies=Retrieves a collection of institutions having one or more geographic taxonomies -swagger.mscore.institution.byproductid=Retrieves Institutions by product ID -swagger.mscore.relationships.get=Return a list of relationships -swagger.mscore.institutions.geotaxonomy.searchMode=The search mode to perform, as default 'any' -swagger.mscore.institutions.geotaxonomy=Comma separated list of the geographic taxonomies to search -swagger.mscore.product.model.id=Product's unique identifier -swagger.mscore.token.consume=Consume token onboarding request without digest verification -swagger.mscore.delegation.create=Create an association between institution id and technical partner -swagger.mscore.delegation.createFromTaxCode=Create an association between institution and technical partner using taxCode for both instead of internal id. It is useful when we don't know institution's internal id. -swagger.mscore.institution.create.from-anac=Create an association between institution id and technical partner from anac -swagger.mscore.institution.create.from-pda=Create an association between institution id and technical partner from pda -swagger.mscore.institution.info=Retrieve institution information -swagger.mscore.delegation.delete=Delete an association between institution id and technical partner setting its status to DELETED and setting delegation to false on institution if it has no more delegations -swagger.mscore.delegation.model.delegationId=Delegation's unique internal identifier -swagger.mscore.users.products=Retrieves products info and role which the user is enabled -swagger.mscore.users=Retrieves user given userId and optional ProductId -swagger.mscore.users.delete.products=Delete logically the association institution and product -swagger.mscore.api.users.updateUserStatus=Update user status with optional filter for institution, product, role and productRole -swagger.mscore.api.users.getOnboardedUsers=Retrieve onboarded users according to identifiers in input -swagger.mscore.institutions.delegations=Retrieve institution's delegations -swagger.mscore.institutions.delegationsV2=Retrieve institution's delegations with pagination -swagger.mscore.institutions.delegations.order=Order to show response NONE, ASC, DESC -swagger.mscore.institutions.brokers=Retrieve institution brokers -swagger.mscore.institutions.getInstitutionBrokers=Retrieve institution brokers -swagger.mscore.users.userId=User's unique identifier -swagger.mscore.users.userIds=Users unique identifiers -swagger.mscore.api.users.updateUser=Service to send notification when user data get's updated -swagger.mscore.institutions.api.getInstitutionUsers=Retrieve institution's users -swagger.mscore.api.users.findAll=Retrieve all users according to optional params in input -swagger.mscore.migration.save.institution=Create an institution -swagger.mscore.migration.findbyid.institution=Find an institution by institution internal unique identifier -swagger.mscore.migration.find.institution=Find an institution -swagger.mscore.migration.delete.institution=Delete an institution -swagger.mscore.migration.save.token=Create a token -swagger.mscore.migration.findbyid.token=Find a token by its unique internal identifier -swagger.mscore.migration.delete.token=Delete a token -swagger.mscore.migration.save.user=Create a user -swagger.mscore.migration.findbyid.user=Find a user by its unique internal identifier -swagger.mscore.migration.delete.user=Delete a user -swagger.mscore.migration.find.token=Find a token -swagger.mscore.page.number=Page number -swagger.mscore.page.size=Page size diff --git a/apps/institution-ms-new/web/src/main/resources/swagger/swagger_it.properties b/apps/institution-ms-new/web/src/main/resources/swagger/swagger_it.properties deleted file mode 100644 index e0419c3..0000000 --- a/apps/institution-ms-new/web/src/main/resources/swagger/swagger_it.properties +++ /dev/null @@ -1,90 +0,0 @@ -swagger.description= -swagger.security.schema.bearer.description=A bearer token in the format of a JWS and conformed to the specifications included in [RFC8725](https://tools.ietf.org/html/RFC8725) -swagger.mscore.external.institution=Il servizio restituisce i dati dell'institution dato l'externalId -swagger.mscore.internal.institution=Il servizio restituisce i dati dell'institution dato l'InstitutionInternalId -swagger.mscore.external.institution.manager=Il servizio restituisce il manager relativo all'institution anche se l'utente corrente non Γ―ΒΏΒ½ collegato all'institution o al prodotto -swagger.mscore.external.institution.billing=Il servizio restituisce i dati di billing relativi all'institution anche se l'utente corrente non Γ―ΒΏΒ½ collegato all'institution o al prodotto -swagger.mscore.institution.PA.create=Il servizio persiste i dati dell'institution (PA) prelevandoli dal party-registry -swagger.mscore.institution.create=Il servizio persiste i dati dell'institution inseriti manualmente -swagger.mscore.institution.PG.create=Il servizio persiste i dati dell'institution (PG) prelevandoli da info-camere -swagger.mscore.institution.products=Il servizio resituisce la lista dei prodotti relativi all'institution -swagger.mscore.external.institution.products=Il servizio restituisce i prodotti per cui l'insitution ha effettuato l'onboarding -swagger.mscore.external.geotaxonomies=Il servizio restituisce le tassonomie geografiche relative all'institution -swagger.mscore.external.institution.relationships=Il servizio restituisce le relationship relative all'institution -swagger.mscore.institution.relationships=Il servizio restituisce le relationship relative all'institution -swagger.mscore.onboarding.operator=Il servizio persiste nuovi operatori per un prodotto e un institution che hanno giΓ―ΒΏΒ½ effettuato l'onboarding -swagger.mscore.onboarding.subdelegates=Il servizio persiste nuovi subdelegati per un prodotto e un institution che hanno giΓ―ΒΏΒ½ effettuato l'onboarding -swagger.mscore.onboarding.users=Il servizio aggiunge gli utenti nel registry se questi non sono presenti e li associa all'institution e prodotto contenuti nel body -swagger.mscore.onboarding.legals=Il servizio persiste nuovi amministratori per un prodotto e un institution che hanno giΓ―ΒΏΒ½ effettuato l'onboarding -swagger.mscore.token.relationshipId=Il servizio restituisce una relationship dato il relationshipId -swagger.mscore.relationship.delete=Il servizio elimina una relationship dato il relationshipId -swagger.mscore.relationship.activate=Il servizio attiva una relationship in stato sospeso dato il relationshipId -swagger.mscore.relationship.suspend=Il servizio sospende una relationship in stato attivo dato il relationshipId -swagger.mscore.token.tokenId=identificativo univoco del contratto -swagger.mscore.institutions.model.externalId=Identificativo esterno univoco dell'institution -swagger.mscore.institutions.model.description=Descrizione ente -swagger.mscore.institutions.model.productId=Identificativo univoco del prodotto -swagger.mscore.institutions.model.personId=Identificativo univoco dell'utente (UUID) -swagger.mscore.institutions.model.institutionId=Identificativo interno dell'institution -swagger.mscore.institutions.model.origin=Identificativo del registro su cui effettuare la ricerca -swagger.mscore.institutions.model.originId=Identificativo dell'ente all'interno degli open data -swagger.mscore.institutions.existsInRegistry=boolean per la persistenza delle PG destinatarie (esiste in info camere o AdE) -swagger.mscore.institutions.model.relationshipState=Lista di stati per filtrare i prodotti -swagger.mscore.institutions.valid=Restituisce la lista di institution per le quali l'utente puΓ―ΒΏΒ½ ancora effettuare l'onboarding -swagger.mscore.institutions.model.internalIds=Lista di institution per cui si vuole effettuare l'onboarding -swagger.mscore.onboarding.institution.complete=Il servizio persiste i dati di onboarding senza l'aggiunta del contratto -swagger.mscore.onboarding.institution=Il servizio persiste i dati di onboarding -swagger.mscore.onboarding.complete=Il servizio permette il completametno della procedura di onboarding -swagger.mscore.onboarding.complete.model.sendCompleteOnboardingEmail=Parametro che permette di specificare se in seguito al completamento dell'onboarding si vuole ricevere una mail -swagger.mscore.onboarding.reject=Il servizio consente l'annullamento manuale della procedura di onboarding -swagger.mscore.onboarding.invalidate=Il servizio invalida una richiesta di onboarding -swagger.mscore.onboarding.approve=Il servizio consente l'approvazione manuale della procedura di onboarding -swagger.mscore.token.verify=Il servizio verifica lo stato di un token -swagger.mscore.token=Il servizio restituisce le relationship relative al token dato il tokenId -swagger.mscore.onboarding.verify=Il servizio verifica dati productId e institutionId se Γ―ΒΏΒ½ giΓ―ΒΏΒ½ stato effettuato l'onboarding -swagger.mscore.onboarding.info=Il servizio restituisce i dati di onboarding relativi all'utente loggato -swagger.mscore.person.verify=Il servizio verifica se uno user esiste dato l'id (uuid) -swagger.mscore.person.info=Il servizio restituisce la persona identificata tramite l'id (uuid), se esiste. -swagger.mscore.person.create=Il servizio persiste un nuovo user. -swagger.mscore.relationship.relationshipId=Identificativo univoco di uno UserBinding -swagger.mscore.onboarding.relationship.document=Il servizio restituisce il contratto relativo a una relationship -swagger.mscore.token.get=Il servizio recupera il contratto dato il tokenId -swagger.mscore.tokens.getAll=Il servizio recupera tutti i contratti -swagger.mscore.tokens.findFromProduct=Il servizio recupera tutti i contratti a partire da un prodotto -swagger.mscore.token.model.states=Stato del contratto -swagger.mscore.institution.update=Il servizio aggiorna i dati di un institution dato l'internalId -swagger.mscore.institution.geotaxonomies=Il servizio restituisce le tassonomie geografiche relative all'institution -swagger.mscore.person.get=Il servizio recupera un utente dato l'UUID -swagger.mscore.institution.verify=Il servizio verifica se un institution esiste dato l'identificativo interno. -swagger.mscore.institution.attributes=Il servizio restituisce gli attributi relativi ad un institution -swagger.mscore.institution.bygeotaxonomies=Il servizio restituisce la lista di institution che hanno una o piΓ―ΒΏΒ½ tassonomie geografiche. -swagger.mscore.institution.byproductid=Il servizio restituisce la lista di institution filtrate per productId -swagger.mscore.institutions.findFromProduct=Il servizio restituisce la lista di institution filtrate per productId -swagger.mscore.institution.info=Il servizio restituisce le informazioni relative all'ente -swagger.mscore.institutions.getInstitutionBrokers=Il servizio restitutisce i brokers dell'ente -swagger.mscore.relationships.get=Il servizio restituisce una lista di relationship con filtri opzionali -swagger.mscore.delegation.create=Il servizio crea un'associazione tra l'ente ed il partner tecnologico -swagger.mscore.institution.create.from-anac=Il servizio crea un'associazione tra l'ente ed il partner tecnologico dall'anac -swagger.mscore.institution.create.from-pda=Il servizio crea un'associazione tra l'ente ed il partner tecnologico da pda -swagger.mscore.delegation.createFromTaxCode=Il servizio crea un'associazione tra l'ente ed il partner tecnologico utilizzando per entrambi il codice fiscale invece dell'internalId. E' utile quando non conosciamo l'internalId delle institution. -swagger.mscore.delegation.delete=Il servizio elimina un'associazione tra l'ente ed il partner tecnologico -swagger.mscore.delegation.model.delegationId=Identificativo interno della delega -swagger.mscore.users.products=Il servizio restituisce la lista dei prodotti con rispettivo ruolo di cui l'utente Γ¨ abilitato -swagger.mscore.institutions.delegations=Il servizio recupera la lista delle deleghe di una institution -swagger.mscore.institutions.delegationsV2=Il servizio recupera la lista delle deleghe di una institution con paginazione -swagger.mscore.users=Il servizio restituisce i dati dell'utente dato lo userId e il productId (opzionale) -swagger.mscore.users.delete.products=Eliminazione logica dell'associazione product e institution con l'user -swagger.mscore.users.userId=Identificativo univoco dell'utente -swagger.mscore.migration.save.institution=Il servizio crea un ente -swagger.mscore.migration.delete.institution=Il servizio elimina un ente -swagger.mscore.migration.find.institution=Il servizio trova un ente -swagger.mscore.migration.findbyid.institution= Il servizio trova un ente per identificativo univoco interno -swagger.mscore.migration.save.token=Il servizio crea un contratto -swagger.mscore.migration.findbyid.token=Il servizio trova un contratto cercandolo per il suo identificativo univoco interno -swagger.mscore.migration.delete.token=Il servizio elimina un contratto -swagger.mscore.migration.save.user=Il servizio crea un utente -swagger.mscore.migration.findbyid.user=Il servizio trova un utente cercandolo per il suo identificativo univoco interno -swagger.mscore.migration.delete.user=Il servizio elimina un utente -swagger.mscore.migration.find.token=Il servizio trova un contratto -swagger.mscore.page.number=Numero di pagina -swagger.mscore.page.size=Dimensioni della pagina diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/TestUtils.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/TestUtils.java deleted file mode 100644 index 2a540ee..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/TestUtils.java +++ /dev/null @@ -1,145 +0,0 @@ -package it.pagopa.selfcare.mscore.web; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.model.institution.Billing; -import it.pagopa.selfcare.mscore.model.institution.DataProtectionOfficer; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; -import it.pagopa.selfcare.mscore.web.model.institution.InstitutionRequest; - -import java.util.ArrayList; - -public class TestUtils { - - public static Billing createSimpleBilling() { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - return billing; - } - - public static DataProtectionOfficer createSimpleDataProtectionOfficer() { - - DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); - dataProtectionOfficer.setAddress("42 Main St"); - dataProtectionOfficer.setEmail("jane.doe@example.org"); - dataProtectionOfficer.setPec("Pec"); - return dataProtectionOfficer; - } - - - - public static PaymentServiceProvider createSimplePaymentServiceProvider() { - - PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); - paymentServiceProvider.setAbiCode("Abi Code"); - paymentServiceProvider.setBusinessRegisterNumber("42"); - paymentServiceProvider.setLegalRegisterName("Legal Register Name"); - paymentServiceProvider.setLegalRegisterNumber("42"); - paymentServiceProvider.setVatNumberGroup(true); - return paymentServiceProvider; - } - - public static Institution createSimpleInstitutionPA() { - Institution institution = new Institution(); - institution.setAddress("42 Main St"); - institution.setAttributes(new ArrayList<>()); - institution.setBilling(createSimpleBilling()); - - institution.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); - institution.setDescription("The characteristics of someone or something"); - institution.setDigitalAddress("42 Main St"); - institution.setExternalId("42"); - institution.setGeographicTaxonomies(new ArrayList<>()); - institution.setId("42"); - institution.setInstitutionType(InstitutionType.PA); - institution.setOriginId("Ipa Code"); - institution.setOrigin(Origin.MOCK.name()); - institution.setOnboarding(new ArrayList<>()); - - institution.setPaymentServiceProvider(createSimplePaymentServiceProvider()); - institution.setTaxCode("Tax Code"); - institution.setZipCode("21654"); - institution.setShareCapital("Share Capital"); - institution.setRea("Rea"); - - return institution; - } - - public static Institution createSimpleInstitutionSA() { - Institution institution = new Institution(); - institution.setAddress("42 Main St"); - institution.setAttributes(new ArrayList<>()); - institution.setBilling(createSimpleBilling()); - - institution.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); - institution.setDescription("The characteristics of someone or something"); - institution.setDigitalAddress("42 Main St"); - institution.setExternalId("42"); - institution.setGeographicTaxonomies(new ArrayList<>()); - institution.setId("42"); - institution.setInstitutionType(InstitutionType.SA); - institution.setOriginId("ANAC Code"); - institution.setOrigin(Origin.ANAC.name()); - institution.setOnboarding(new ArrayList<>()); - - institution.setPaymentServiceProvider(createSimplePaymentServiceProvider()); - institution.setTaxCode("Tax Code"); - institution.setZipCode("21654"); - institution.setShareCapital("Share Capital"); - institution.setRea("Rea"); - - return institution; - } - - public static Institution createSimpleInstitutionAS() { - Institution institution = new Institution(); - institution.setAddress("42 Main St"); - institution.setAttributes(new ArrayList<>()); - institution.setBilling(createSimpleBilling()); - - institution.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); - institution.setDescription("The characteristics of someone or something"); - institution.setDigitalAddress("42 Main St"); - institution.setExternalId("42"); - institution.setGeographicTaxonomies(new ArrayList<>()); - institution.setId("42"); - institution.setInstitutionType(InstitutionType.AS); - institution.setOriginId("IVASS Code"); - institution.setOrigin(Origin.IVASS.name()); - institution.setOnboarding(new ArrayList<>()); - - institution.setPaymentServiceProvider(createSimplePaymentServiceProvider()); - institution.setTaxCode("Tax Code"); - institution.setZipCode("21654"); - institution.setShareCapital("Share Capital"); - institution.setRea("Rea"); - - return institution; - } - - public static InstitutionRequest createSimpleInstitutionRequest() { - InstitutionRequest institution = new InstitutionRequest(); - institution.setAddress("42 Main St"); - institution.setAttributes(new ArrayList<>()); - - institution.setDescription("The characteristics of someone or something"); - institution.setDigitalAddress("42 Main St"); - institution.setExternalId("42"); - institution.setGeographicTaxonomies(new ArrayList<>()); - institution.setId("42"); - institution.setInstitutionType(InstitutionType.PA); - institution.setOriginId("Ipa Code"); - institution.setOrigin(Origin.MOCK.name()); - institution.setOnboarding(new ArrayList<>()); - - institution.setTaxCode("Tax Code"); - institution.setZipCode("21654"); - institution.setShareCapital("Share Capital"); - institution.setRea("Rea"); - - return institution; - } -} diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java deleted file mode 100644 index 29edd94..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java +++ /dev/null @@ -1,116 +0,0 @@ -package it.pagopa.selfcare.mscore.web.config; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.atLeast; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import com.fasterxml.classmate.TypeResolver; -import com.fasterxml.classmate.types.TypePlaceHolder; - -import java.lang.reflect.Type; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.web.reactive.context.StandardReactiveWebEnvironment; -import org.springframework.core.env.Environment; -import org.springframework.core.env.StandardEnvironment; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; - -@ContextConfiguration(classes = {SwaggerConfig.class, TypeResolver.class}) -@ExtendWith(SpringExtension.class) -class SwaggerConfigTest { - @MockBean - private Environment environment; - - @Autowired - private SwaggerConfig swaggerConfig; - - /** - * Method under test: {@link SwaggerConfig#swaggerSpringPlugin(TypeResolver)} - */ - @Test - void testSwaggerSpringPlugin() { - - SwaggerConfig swaggerConfig = new SwaggerConfig(new StandardReactiveWebEnvironment()); - Docket actualSwaggerSpringPluginResult = swaggerConfig.swaggerSpringPlugin(new TypeResolver()); - assertTrue(actualSwaggerSpringPluginResult.isEnabled()); - assertEquals("default", actualSwaggerSpringPluginResult.getGroupName()); - } - - /** - * Method under test: {@link SwaggerConfig#swaggerSpringPlugin(TypeResolver)} - */ - @Test - void testSwaggerSpringPlugin3() { - - StandardEnvironment standardEnvironment = mock(StandardEnvironment.class); - when(standardEnvironment.getProperty(any())).thenReturn("Property"); - when(standardEnvironment.getProperty( any(), (String) any())).thenReturn("Property"); - SwaggerConfig swaggerConfig = new SwaggerConfig(standardEnvironment); - Docket actualSwaggerSpringPluginResult = swaggerConfig.swaggerSpringPlugin(new TypeResolver()); - assertTrue(actualSwaggerSpringPluginResult.isEnabled()); - assertEquals("default", actualSwaggerSpringPluginResult.getGroupName()); - verify(standardEnvironment, atLeast(1)).getProperty(any()); - verify(standardEnvironment, atLeast(1)).getProperty(any(), (String) any()); - } - - /** - * Method under test: {@link SwaggerConfig#swaggerSpringPlugin(TypeResolver)} - */ - @Test - void testSwaggerSpringPlugin5() { - - StandardEnvironment standardEnvironment = mock(StandardEnvironment.class); - when(standardEnvironment.getProperty(any())).thenReturn("Property"); - when(standardEnvironment.getProperty(any(), (String) any())).thenReturn("Property"); - SwaggerConfig swaggerConfig = new SwaggerConfig(standardEnvironment); - TypeResolver typeResolver = mock(TypeResolver.class); - when(typeResolver.resolve(any(), (Type[]) any())).thenReturn(new TypePlaceHolder(1)); - Docket actualSwaggerSpringPluginResult = swaggerConfig.swaggerSpringPlugin(typeResolver); - assertTrue(actualSwaggerSpringPluginResult.isEnabled()); - assertEquals("default", actualSwaggerSpringPluginResult.getGroupName()); - verify(standardEnvironment, atLeast(1)).getProperty(any()); - verify(standardEnvironment, atLeast(1)).getProperty(any(), (String) any()); - verify(typeResolver).resolve(any(), (Type[]) any()); - } - - /** - * Method under test: {@link SwaggerConfig#swaggerSpringPlugin(TypeResolver)} - */ - @Test - void testSwaggerSpringPlugin6() { - - StandardEnvironment standardEnvironment = mock(StandardEnvironment.class); - when(standardEnvironment.getProperty(any())).thenReturn("Property"); - when(standardEnvironment.getProperty(any(), (String) any())).thenReturn("Property"); - SwaggerConfig swaggerConfig = new SwaggerConfig(standardEnvironment); - TypeResolver typeResolver = mock(TypeResolver.class); - when(typeResolver.resolve(any(), (Type[]) any())).thenReturn(null); - Docket actualSwaggerSpringPluginResult = swaggerConfig.swaggerSpringPlugin(typeResolver); - assertTrue(actualSwaggerSpringPluginResult.isEnabled()); - assertEquals("default", actualSwaggerSpringPluginResult.getGroupName()); - verify(standardEnvironment, atLeast(1)).getProperty(any()); - verify(standardEnvironment, atLeast(1)).getProperty(any(), (String) any()); - verify(typeResolver).resolve(any(), (Type[]) any()); - } - - /** - * Method under test: {@link SwaggerConfig#emailAnnotationPlugin()} - */ - @Test - void testEmailAnnotationPlugin() { - - assertTrue((new SwaggerConfig(new StandardReactiveWebEnvironment())).emailAnnotationPlugin().supports(DocumentationType.SWAGGER_2)); - assertTrue((new SwaggerConfig(mock(StandardEnvironment.class))).emailAnnotationPlugin().supports(DocumentationType.SWAGGER_2)); - } -} - diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/WebTestConfig.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/WebTestConfig.java deleted file mode 100644 index 24fae54..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/config/WebTestConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.pagopa.selfcare.mscore.web.config; - -import org.springframework.boot.test.context.TestConfiguration; -import org.springframework.context.annotation.Import; - -@TestConfiguration -@Import(WebConfig.class) -public class WebTestConfig { -} diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationControllerTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationControllerTest.java deleted file mode 100644 index 7505c20..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationControllerTest.java +++ /dev/null @@ -1,296 +0,0 @@ -package it.pagopa.selfcare.mscore.web.controller; - -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import it.pagopa.selfcare.mscore.constant.DelegationType; -import it.pagopa.selfcare.mscore.core.DelegationService; -import it.pagopa.selfcare.mscore.model.delegation.Delegation; -import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequest; -import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequestFromTaxcode; -import it.pagopa.selfcare.mscore.web.model.delegation.DelegationResponse; -import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapper; -import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapperImpl; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.http.MediaType; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.util.NestedServletException; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -@ContextConfiguration(classes = {DelegationController.class}) -@ExtendWith(MockitoExtension.class) -class DelegationControllerTest { - - @InjectMocks - private DelegationController delegationController; - - @Mock - private DelegationService delegationService; - - @Spy - private DelegationMapper delegationResourceMapper = new DelegationMapperImpl(); - - private final ObjectMapper objectMapper = new ObjectMapper(); - - final String FROM1 = "from1"; - final String FROM2 = "from2"; - final String TO1 = "to1"; - - /** - * Method under test: {@link DelegationController#createDelegation(DelegationRequest)} - */ - @ParameterizedTest - @EnumSource(value = DelegationType.class) - void testCreateDelegation(DelegationType delegationType) throws Exception { - - Delegation delegation = new Delegation(); - delegation.setId("id"); - delegation.setFrom("from"); - when(delegationService.createDelegation(any())).thenReturn(delegation); - - DelegationRequest delegationRequest = new DelegationRequest(); - delegationRequest.setFrom("111111"); - delegationRequest.setTo("2222222"); - delegationRequest.setInstitutionFromName("Test name"); - delegationRequest.setInstitutionToName("Test to name"); - delegationRequest.setProductId("productId"); - delegationRequest.setType(delegationType); - String content = (new ObjectMapper()).writeValueAsString(delegationRequest); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .post("/delegations") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isCreated()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andReturn(); - - DelegationResponse response = objectMapper.readValue( - result.getResponse().getContentAsString(), - new TypeReference<>() { - }); - - assertNotNull(response); - assertNotNull(response.getId()); - assertEquals(delegation.getId(), response.getId()); - } - - /** - * Method under test: {@link DelegationController#createDelegation(DelegationRequest)} - */ - @Test - void testCreateDelegationWithBadRequest() throws Exception { - - DelegationRequest delegationRequest = new DelegationRequest(); - String content = (new ObjectMapper()).writeValueAsString(delegationRequest); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .post("/delegations") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - MockMvcBuilders.standaloneSetup(delegationController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isBadRequest()); - } - - /** - * Method under test: {@link InstitutionController#findFromProduct(String, Integer, Integer)} - */ - @Test - void getDelegations_shouldInvalidRequest() { - - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/delegations?&productId={productId}", "productId"); - - assertThrows(NestedServletException.class, () -> - MockMvcBuilders.standaloneSetup(delegationController) - .build() - .perform(requestBuilder)); - - } - - /** - * Method under test: {@link DelegationController#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} - */ - @Test - void getDelegations_shouldGetData() throws Exception { - // Given - Delegation expectedDelegation = dummyDelegation(); - - when(delegationService.getDelegations(expectedDelegation.getFrom(), expectedDelegation.getTo(), - expectedDelegation.getProductId(), null, null, Optional.empty(), Optional.empty(), Optional.empty())) - .thenReturn(List.of(expectedDelegation)); - // When - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/delegations?institutionId={institutionId}&brokerId={brokerId}&productId={productId}", expectedDelegation.getFrom(), - expectedDelegation.getTo(), expectedDelegation.getProductId()); - MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andReturn(); - - List response = objectMapper.readValue( - result.getResponse().getContentAsString(), new TypeReference<>() {}); - // Then - assertThat(response).isNotNull(); - assertThat(response.size()).isEqualTo(1); - DelegationResponse actual = response.get(0); - assertThat(actual.getId()).isEqualTo(expectedDelegation.getId()); - assertThat(actual.getInstitutionName()).isEqualTo(expectedDelegation.getInstitutionFromName()); - assertThat(actual.getBrokerId()).isEqualTo(expectedDelegation.getTo()); - assertThat(actual.getProductId()).isEqualTo(expectedDelegation.getProductId()); - assertThat(actual.getInstitutionId()).isEqualTo(expectedDelegation.getFrom()); - assertThat(actual.getInstitutionRootName()).isEqualTo(expectedDelegation.getInstitutionFromRootName()); - - verify(delegationService, times(1)) - .getDelegations(expectedDelegation.getFrom(), expectedDelegation.getTo(), - expectedDelegation.getProductId(), null, null, Optional.empty(), - Optional.empty(), Optional.empty()); - - verifyNoMoreInteractions(delegationService); - } - - @Test - void getDelegations_shouldGetDataCustom() throws Exception { - // Given - List expectedDelegations = new ArrayList<>(); - Delegation delegation1 = createDelegation("1", FROM1, TO1); - Delegation delegation2 = createDelegation("2", FROM2, TO1); - expectedDelegations.add(delegation1); - expectedDelegations.add(delegation2); - - when(delegationService.getDelegations(null, TO1, - null, null, null, Optional.empty(), Optional.empty(), Optional.empty())) - .thenReturn(expectedDelegations); - // When - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/delegations?brokerId={brokerId}", TO1); - MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andReturn(); - - List response = objectMapper.readValue( - result.getResponse().getContentAsString(), new TypeReference<>() {}); - // Then - assertThat(response).isNotNull(); - assertThat(response.size()).isEqualTo(2); - DelegationResponse actual = response.get(0); - assertThat(actual.getId()).isEqualTo(delegation1.getId()); - assertThat(actual.getInstitutionName()).isEqualTo(delegation1.getInstitutionFromName()); - assertThat(actual.getBrokerId()).isEqualTo(delegation1.getTo()); - assertThat(actual.getProductId()).isEqualTo(delegation1.getProductId()); - assertThat(actual.getInstitutionId()).isEqualTo(delegation1.getFrom()); - assertThat(actual.getInstitutionRootName()).isEqualTo(delegation1.getInstitutionFromRootName()); - - verify(delegationService, times(1)) - .getDelegations(null, TO1, null, - null, null, Optional.empty(), - Optional.empty(), Optional.empty()); - verifyNoMoreInteractions(delegationService); - } - - private Delegation dummyDelegation() { - Delegation delegation = new Delegation(); - delegation.setFrom("from"); - delegation.setTo("to"); - delegation.setId("setId"); - delegation.setProductId("setProductId"); - delegation.setType(DelegationType.PT); - delegation.setInstitutionFromName("setInstitutionFromName"); - delegation.setInstitutionFromRootName("setInstitutionFromRootName"); - return delegation; - } - - private Delegation createDelegation(String pattern, String from, String to) { - Delegation delegation = new Delegation(); - delegation.setId("id_" + pattern); - delegation.setProductId("productId"); - delegation.setType(DelegationType.PT); - delegation.setTo(to); - delegation.setFrom(from); - delegation.setInstitutionFromName("name_" + from); - delegation.setInstitutionFromRootName("name_" + to); - return delegation; - } - - /** - * Method under test: {@link DelegationController#createDelegationFromInstitutionsTaxCode(DelegationRequestFromTaxcode)} - */ - @Test - void testCreateDelegationUsingTaxCode() throws Exception { - - Delegation delegation = new Delegation(); - delegation.setId("id"); - delegation.setTo("to"); - delegation.setFrom("from"); - when(delegationService.createDelegationFromInstitutionsTaxCode(any())).thenReturn(delegation); - - DelegationRequestFromTaxcode delegationRequest = new DelegationRequestFromTaxcode(); - delegationRequest.setFromTaxCode("111111"); - delegationRequest.setToTaxCode("2222222"); - delegationRequest.setInstitutionFromName("Test name"); - delegationRequest.setInstitutionToName("Test to name"); - delegationRequest.setProductId("productId"); - delegationRequest.setType(DelegationType.PT); - String content = (new ObjectMapper()).writeValueAsString(delegationRequest); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .post("/delegations/from-taxcode") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isCreated()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andReturn(); - - - - - DelegationResponse response = objectMapper.readValue( - result.getResponse().getContentAsString(), - new TypeReference<>() { - }); - - assertNotNull(response); - assertNotNull(response.getId()); - assertEquals(delegation.getId(), response.getId()); - } - - @Test - void testDeleteDelegation() throws Exception { - doNothing().when(delegationService).deleteDelegationByDelegationId(any()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.delete("/delegations/{delegationId}", - "42"); - MockMvcBuilders.standaloneSetup(delegationController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isNoContent()); - } - -} \ No newline at end of file diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2ControllerTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2ControllerTest.java deleted file mode 100644 index 505ae58..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2ControllerTest.java +++ /dev/null @@ -1,296 +0,0 @@ -package it.pagopa.selfcare.mscore.web.controller; - -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import it.pagopa.selfcare.mscore.constant.DelegationType; -import it.pagopa.selfcare.mscore.constant.Order; -import it.pagopa.selfcare.mscore.core.DelegationService; -import it.pagopa.selfcare.mscore.model.delegation.Delegation; -import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; -import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; -import it.pagopa.selfcare.mscore.model.delegation.PageInfo; -import it.pagopa.selfcare.mscore.web.model.delegation.DelegationResponse; -import it.pagopa.selfcare.mscore.web.model.delegation.DelegationWithPaginationResponse; -import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapper; -import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapperImpl; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.util.NestedServletException; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.*; - -@ContextConfiguration(classes = {DelegationV2Controller.class}) -@ExtendWith(MockitoExtension.class) -class DelegationV2ControllerTest { - - @InjectMocks - private DelegationV2Controller delegationController; - - @Mock - private DelegationService delegationService; - - @Spy - private DelegationMapper delegationResourceMapper = new DelegationMapperImpl(); - - private final ObjectMapper objectMapper = new ObjectMapper(); - - final String FROM1 = "from1"; - final String FROM2 = "from2"; - final String TO1 = "to1"; - - /** - * Method under test: {@link InstitutionController#findFromProduct(String, Integer, Integer)} - */ - @Test - void getDelegations_shouldInvalidRequest() { - - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/v2/delegations?&productId={productId}", "productId"); - - assertThrows(NestedServletException.class, () -> - MockMvcBuilders.standaloneSetup(delegationController) - .build() - .perform(requestBuilder)); - - } - - /** - * Method under test: {@link DelegationController#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} - */ - @Test - void getDelegations_shouldGetData() throws Exception { - // Given - Delegation expectedDelegation = dummyDelegation(); - PageInfo exptectedPageInfo = new PageInfo(10, 0, 1, 1); - - DelegationWithPagination expectedDelegationWithPagination = new DelegationWithPagination(List.of(expectedDelegation), exptectedPageInfo); - - when(delegationService.getDelegationsV2(createDelegationParameters(expectedDelegation.getFrom(), expectedDelegation.getTo(), - expectedDelegation.getProductId(), null, null, Order.ASC, 0, 10))) - .thenReturn(expectedDelegationWithPagination); - // When - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/v2/delegations?institutionId={institutionId}&brokerId={brokerId}&productId={productId}&order={order}&page={page}&size={size}", - expectedDelegation.getFrom(), expectedDelegation.getTo(), expectedDelegation.getProductId(), - Order.ASC ,exptectedPageInfo.getPageNo(), exptectedPageInfo.getPageSize()); - MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andReturn(); - - DelegationWithPaginationResponse response = objectMapper.readValue( - result.getResponse().getContentAsString(), new TypeReference<>() {}); - // Then - assertThat(response).isNotNull(); - assertThat(response.getDelegations()).isNotNull(); - assertThat(response.getPageInfo()).isNotNull(); - assertThat((long) response.getDelegations().size()).isEqualTo(1); - DelegationResponse actualDelegation = response.getDelegations().get(0); - PageInfo actualPageInfo = response.getPageInfo(); - assertThat(actualDelegation.getId()).isEqualTo(expectedDelegation.getId()); - assertThat(actualDelegation.getInstitutionName()).isEqualTo(expectedDelegation.getInstitutionFromName()); - assertThat(actualDelegation.getBrokerId()).isEqualTo(expectedDelegation.getTo()); - assertThat(actualDelegation.getProductId()).isEqualTo(expectedDelegation.getProductId()); - assertThat(actualDelegation.getInstitutionId()).isEqualTo(expectedDelegation.getFrom()); - assertThat(actualDelegation.getInstitutionRootName()).isEqualTo(expectedDelegation.getInstitutionFromRootName()); - assertThat(actualPageInfo).isEqualTo(exptectedPageInfo); - - verify(delegationService, times(1)) - .getDelegationsV2(createDelegationParameters(expectedDelegation.getFrom(), expectedDelegation.getTo(), - expectedDelegation.getProductId(), null, null, Order.ASC, - 0, 10)); - - verifyNoMoreInteractions(delegationService); - } - - @Test - void getDelegations_shouldGetDataCustom() throws Exception { - // Given - List expectedDelegations = new ArrayList<>(); - Delegation delegation1 = createDelegation("1", FROM1, TO1); - Delegation delegation2 = createDelegation("2", FROM2, TO1); - expectedDelegations.add(delegation1); - expectedDelegations.add(delegation2); - - PageInfo exptectedPageInfo = new PageInfo(10000, 0, 2, 1); - - DelegationWithPagination expectedDelegationWithPagination = new DelegationWithPagination(expectedDelegations, exptectedPageInfo); - - when(delegationService.getDelegationsV2(createDelegationParameters(null, TO1, - null, null, null, Order.DESC, 0, 10000))) - .thenReturn(expectedDelegationWithPagination); - // When - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/v2/delegations?brokerId={brokerId}&order={order}", TO1, Order.DESC); - MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andReturn(); - - DelegationWithPaginationResponse response = objectMapper.readValue( - result.getResponse().getContentAsString(), new TypeReference<>() {}); - // Then - assertThat(response).isNotNull(); - assertThat(response.getDelegations()).isNotNull(); - assertThat(response.getPageInfo()).isNotNull(); - assertThat((long) response.getDelegations().size()).isEqualTo(2); - DelegationResponse actualDelegation = response.getDelegations().get(0); - PageInfo actualPageInfo = response.getPageInfo(); - assertThat(actualDelegation.getId()).isEqualTo(delegation1.getId()); - assertThat(actualDelegation.getInstitutionName()).isEqualTo(delegation1.getInstitutionFromName()); - assertThat(actualDelegation.getBrokerId()).isEqualTo(delegation1.getTo()); - assertThat(actualDelegation.getProductId()).isEqualTo(delegation1.getProductId()); - assertThat(actualDelegation.getInstitutionId()).isEqualTo(delegation1.getFrom()); - assertThat(actualDelegation.getInstitutionRootName()).isEqualTo(delegation1.getInstitutionFromRootName()); - assertThat(actualPageInfo).isEqualTo(exptectedPageInfo); - - verify(delegationService, times(1)) - .getDelegationsV2(createDelegationParameters(null, TO1, null, - null, null, Order.DESC, - 0, 10000)); - verifyNoMoreInteractions(delegationService); - } - - /** - * Method under test: {@link DelegationController#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} - */ - @Test - void getDelegations_shouldGetData_nullMode() throws Exception { - // Given - Delegation expectedDelegation = dummyDelegation(); - PageInfo exptectedPageInfo = new PageInfo(10000, 0, 1, 1); - - DelegationWithPagination expectedDelegationWithPagination = new DelegationWithPagination(List.of(expectedDelegation), exptectedPageInfo); - - when(delegationService.getDelegationsV2(createDelegationParameters(expectedDelegation.getFrom(), expectedDelegation.getTo(), - expectedDelegation.getProductId(), null, null, Order.NONE, 0, 10000))) - .thenReturn(expectedDelegationWithPagination); - // When - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/v2/delegations?institutionId={institutionId}&brokerId={brokerId}&productId={productId}", expectedDelegation.getFrom(), - expectedDelegation.getTo(), expectedDelegation.getProductId()); - MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andReturn(); - - DelegationWithPaginationResponse response = objectMapper.readValue( - result.getResponse().getContentAsString(), new TypeReference<>() {}); - // Then - assertThat(response).isNotNull(); - assertThat(response.getDelegations()).isNotNull(); - assertThat(response.getPageInfo()).isNotNull(); - assertThat((long) response.getDelegations().size()).isEqualTo(1); - DelegationResponse actualDelegation = response.getDelegations().get(0); - PageInfo actualPageInfo = response.getPageInfo(); - assertThat(actualDelegation.getId()).isEqualTo(expectedDelegation.getId()); - assertThat(actualDelegation.getInstitutionName()).isEqualTo(expectedDelegation.getInstitutionFromName()); - assertThat(actualDelegation.getBrokerId()).isEqualTo(expectedDelegation.getTo()); - assertThat(actualDelegation.getProductId()).isEqualTo(expectedDelegation.getProductId()); - assertThat(actualDelegation.getInstitutionId()).isEqualTo(expectedDelegation.getFrom()); - assertThat(actualDelegation.getInstitutionRootName()).isEqualTo(expectedDelegation.getInstitutionFromRootName()); - assertThat(actualPageInfo).isEqualTo(exptectedPageInfo); - - verify(delegationService, times(1)) - .getDelegationsV2(createDelegationParameters(expectedDelegation.getFrom(), expectedDelegation.getTo(), - expectedDelegation.getProductId(), null, null, Order.NONE,0, 10000)); - verifyNoMoreInteractions(delegationService); - } - - @Test - void getDelegations_shouldInvalidRequest_wrongPageSize() { - - Delegation expectedDelegation = dummyDelegation(); - - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/v2/delegations?brokerId={brokerId}&size={size}", - expectedDelegation.getTo(), 0); - - assertThrows(NestedServletException.class, () -> - MockMvcBuilders.standaloneSetup(delegationController) - .build() - .perform(requestBuilder)); - - } - - @Test - void getDelegations_shouldInvalidRequest_wrongPageNumber() { - - Delegation expectedDelegation = dummyDelegation(); - - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/v2/delegations?brokerId={brokerId}&page={size}", - expectedDelegation.getTo(), -1); - - assertThrows(NestedServletException.class, () -> - MockMvcBuilders.standaloneSetup(delegationController) - .build() - .perform(requestBuilder)); - - } - - - - - private Delegation dummyDelegation() { - Delegation delegation = new Delegation(); - delegation.setFrom("from"); - delegation.setTo("to"); - delegation.setId("setId"); - delegation.setProductId("setProductId"); - delegation.setType(DelegationType.PT); - delegation.setInstitutionFromName("setInstitutionFromName"); - delegation.setInstitutionFromRootName("setInstitutionFromRootName"); - return delegation; - } - - private Delegation createDelegation(String pattern, String from, String to) { - Delegation delegation = new Delegation(); - delegation.setId("id_" + pattern); - delegation.setProductId("productId"); - delegation.setType(DelegationType.PT); - delegation.setTo(to); - delegation.setFrom(from); - delegation.setInstitutionFromName("name_" + from); - delegation.setInstitutionFromRootName("name_" + to); - return delegation; - } - - private GetDelegationParameters createDelegationParameters(String from, String to, String productId, - String search, String taxCode, Order order, - Integer page, Integer size) { - return GetDelegationParameters.builder() - .from(from) - .to(to) - .productId(productId) - .search(search) - .taxCode(taxCode) - .order(order) - .page(page) - .size(size) - .build(); - } - -} \ No newline at end of file diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ExternalControllerTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ExternalControllerTest.java deleted file mode 100644 index 1a72041..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ExternalControllerTest.java +++ /dev/null @@ -1,419 +0,0 @@ -package it.pagopa.selfcare.mscore.web.controller; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.core.ExternalService; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapper; -import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapperImpl; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import java.util.ArrayList; -import java.util.List; - -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -class ExternalControllerTest { - @InjectMocks - private ExternalController externalController; - - @Mock - private ExternalService externalService; - - @Spy - private InstitutionResourceMapper institutionResourceMapper = new InstitutionResourceMapperImpl(); - - /** - * Method under test: {@link ExternalController#retrieveInstitutionProductsByExternalId(String, List)} - */ - @Test - void testRetrieveInstitutionProductsByExternalId() throws Exception { - when(externalService.retrieveInstitutionProductsByExternalId(any(), any())) - .thenReturn(new ArrayList<>()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/external/institutions/{externalId}/products", "42"); - MockMvcBuilders.standaloneSetup(externalController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"products\":[]}")); - } - - /** - * Method under test: {@link ExternalController#retrieveInstitutionProductsByExternalId(String, List)} - */ - @Test - void testRetrieveInstitutionProductsByExternalId2() throws Exception { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("?"); - billing.setVatNumber("42"); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setClosedAt(null); - onboarding.setContract("?"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("?"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setTokenId("42"); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - when(externalService.retrieveInstitutionProductsByExternalId(any(), any())) - .thenReturn(onboardingList); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/external/institutions/{externalId}/products", "42"); - MockMvcBuilders.standaloneSetup(externalController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string("{\"products\":[{\"id\":\"42\",\"state\":\"PENDING\"}]}")); - } - - /** - * Method under test: {@link ExternalController#retrieveInstitutionProductsByExternalId(String, List)} - */ - @Test - void testRetrieveInstitutionProductsByExternalId3() throws Exception { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("?"); - billing.setVatNumber("42"); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setClosedAt(null); - onboarding.setContract("?"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("?"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setTokenId("42"); - onboarding.setUpdatedAt(null); - - Billing billing1 = new Billing(); - billing1.setPublicServices(false); - billing1.setRecipientCode("U"); - billing1.setVatNumber("?"); - - Onboarding onboarding1 = new Onboarding(); - onboarding1.setBilling(billing1); - onboarding1.setClosedAt(null); - onboarding1.setContract("U"); - onboarding1.setCreatedAt(null); - onboarding1.setPricingPlan("U"); - onboarding1.setProductId("?"); - onboarding1.setStatus(RelationshipState.ACTIVE); - onboarding1.setTokenId("ABC123"); - onboarding1.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding1); - onboardingList.add(onboarding); - when(externalService.retrieveInstitutionProductsByExternalId(any(), any())) - .thenReturn(onboardingList); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/external/institutions/{externalId}/products", "42"); - MockMvcBuilders.standaloneSetup(externalController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string( - "{\"products\":[{\"id\":\"?\",\"state\":\"ACTIVE\"},{\"id\":\"42\",\"state\":\"PENDING\"}]}")); - } - - /** - * Method under test: {@link ExternalController#retrieveInstitutionGeoTaxonomiesByExternalId(String)} - */ - @Test - void testRetrieveInstitutionGeoTaxonomiesByExternalId() throws Exception { - when(externalService.retrieveInstitutionGeoTaxonomiesByExternalId(any())).thenReturn(new ArrayList<>()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/external/institutions/{externalId}/geotaxonomies", "42"); - MockMvcBuilders.standaloneSetup(externalController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("[]")); - } - - - /** - * Method under test: {@link ExternalController#getBillingInstitutionByExternalId(String, String)} - */ - @Test - void testGetBillingInstitutionByExternalId3() throws Exception { - Institution institution = new Institution(); - institution.setOnboarding(new ArrayList<>()); - when(externalService.retrieveInstitutionProduct(any(), any())).thenReturn(institution); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/external/institutions/{externalId}/products/{productId}/billing", "42", "42"); - MockMvcBuilders.standaloneSetup(externalController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string( - "{\"institutionId\":null,\"externalId\":null,\"origin\":null,\"originId\":null,\"description\":null,\"institutionType\":null,\"digitalAddress\":null,\"address\":null,\"zipCode\":null,\"taxCode\":null,\"pricingPlan\":null,\"billing\":null,\"subunitCode\":null,\"subunitType\":null,\"aooParentCode\":null}")); - } - - /** - * Method under test: {@link ExternalController#getBillingInstitutionByExternalId(String, String)} - */ - @Test - void testGetBillingInstitutionByExternalId5() throws Exception { - Institution institution = new Institution(); - institution.setOnboarding(new ArrayList<>()); - when(externalService.retrieveInstitutionProduct(any(), any())).thenReturn(institution); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/external/institutions/{externalId}/products/{productId}/billing", "42", "42"); - MockMvcBuilders.standaloneSetup(externalController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string( - "{\"institutionId\":null,\"externalId\":null,\"origin\":null,\"originId\":null,\"description\":null,\"institutionType" - + "\":null,\"digitalAddress\":null,\"address\":null,\"zipCode\":null,\"taxCode\":null,\"pricingPlan\":null,\"billing" - + "\":null,\"subunitCode\":null,\"subunitType\":null,\"aooParentCode\":null}")); - } - - /** - * Method under test: {@link ExternalController#getByExternalId(String)} - */ - @Test - void testGetByExternalId() throws Exception { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); - dataProtectionOfficer.setAddress("42 Main St"); - dataProtectionOfficer.setEmail("jane.doe@example.org"); - dataProtectionOfficer.setPec("Pec"); - - PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); - paymentServiceProvider.setAbiCode("Abi Code"); - paymentServiceProvider.setBusinessRegisterNumber("42"); - paymentServiceProvider.setLegalRegisterName("Legal Register Name"); - paymentServiceProvider.setLegalRegisterNumber("42"); - paymentServiceProvider.setVatNumberGroup(true); - - Institution institution = new Institution(); - institution.setAddress("42 Main St"); - institution.setAttributes(new ArrayList<>()); - institution.setBilling(billing); - institution.setDataProtectionOfficer(dataProtectionOfficer); - institution.setDescription("The characteristics of someone or something"); - institution.setDigitalAddress("42 Main St"); - institution.setExternalId("42"); - institution.setGeographicTaxonomies(new ArrayList<>()); - institution.setId("42"); - institution.setInstitutionType(InstitutionType.PA); - institution.setOnboarding(new ArrayList<>()); - institution.setOriginId("42"); - institution.setPaymentServiceProvider(paymentServiceProvider); - institution.setTaxCode("Tax Code"); - institution.setZipCode("21654"); - when(externalService.getInstitutionByExternalId(any())).thenReturn(institution); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", - "42"); - MockMvcBuilders.standaloneSetup(externalController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string("{\"id\":\"42\",\"externalId\":\"42\",\"originId\":\"42\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"imported\":false,\"delegation\":false}")); - } - - /** - * Method under test: {@link ExternalController#getByExternalId(String)} - */ - @Test - void testGetByExternalId2() throws Exception { - Attributes attributes = new Attributes(); - attributes.setCode("?"); - attributes.setDescription("The characteristics of someone or something"); - attributes.setOrigin("?"); - - ArrayList attributesList = new ArrayList<>(); - attributesList.add(attributes); - - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); - dataProtectionOfficer.setAddress("42 Main St"); - dataProtectionOfficer.setEmail("jane.doe@example.org"); - dataProtectionOfficer.setPec("Pec"); - - PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); - paymentServiceProvider.setAbiCode("Abi Code"); - paymentServiceProvider.setBusinessRegisterNumber("42"); - paymentServiceProvider.setLegalRegisterName("Legal Register Name"); - paymentServiceProvider.setLegalRegisterNumber("42"); - paymentServiceProvider.setVatNumberGroup(true); - - Institution institution = new Institution(); - institution.setAddress("42 Main St"); - institution.setAttributes(attributesList); - institution.setBilling(billing); - institution.setDataProtectionOfficer(dataProtectionOfficer); - institution.setDescription("The characteristics of someone or something"); - institution.setDigitalAddress("42 Main St"); - institution.setExternalId("42"); - institution.setGeographicTaxonomies(new ArrayList<>()); - institution.setId("42"); - institution.setInstitutionType(InstitutionType.PA); - institution.setOnboarding(new ArrayList<>()); - institution.setOriginId("42"); - institution.setPaymentServiceProvider(paymentServiceProvider); - institution.setTaxCode("Tax Code"); - institution.setZipCode("21654"); - when(externalService.getInstitutionByExternalId("42")).thenReturn(institution); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", - "42"); - MockMvcBuilders.standaloneSetup(externalController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string("{\"id\":\"42\",\"externalId\":\"42\",\"originId\":\"42\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[{\"origin\":\"?\",\"code\":\"?\",\"description\":\"The characteristics of someone or something\"}],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"imported\":false,\"delegation\":false}")); - - } - - /** - * Method under test: {@link ExternalController#getByExternalId(String)} - */ - @Test - void testGetByExternalId3() throws Exception { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); - dataProtectionOfficer.setAddress("42 Main St"); - dataProtectionOfficer.setEmail("jane.doe@example.org"); - dataProtectionOfficer.setPec("Pec"); - - InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); - geographicTaxonomies.setCode("?"); - geographicTaxonomies.setDesc("The characteristics of someone or something"); - - List geographicTaxonomiesList = new ArrayList<>(); - geographicTaxonomiesList.add(geographicTaxonomies); - - PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); - paymentServiceProvider.setAbiCode("Abi Code"); - paymentServiceProvider.setBusinessRegisterNumber("42"); - paymentServiceProvider.setLegalRegisterName("Legal Register Name"); - paymentServiceProvider.setLegalRegisterNumber("42"); - paymentServiceProvider.setVatNumberGroup(true); - - Institution institution = new Institution(); - institution.setAddress("42 Main St"); - institution.setAttributes(new ArrayList<>()); - institution.setBilling(billing); - institution.setDataProtectionOfficer(dataProtectionOfficer); - institution.setDescription("The characteristics of someone or something"); - institution.setDigitalAddress("42 Main St"); - institution.setExternalId("42"); - institution.setGeographicTaxonomies(geographicTaxonomiesList); - institution.setId("42"); - institution.setInstitutionType(InstitutionType.PA); - institution.setOnboarding(new ArrayList<>()); - institution.setOriginId("42"); - institution.setPaymentServiceProvider(paymentServiceProvider); - institution.setTaxCode("Tax Code"); - institution.setZipCode("21654"); - when(externalService.getInstitutionByExternalId(any())).thenReturn(institution); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", - "42"); - MockMvcBuilders.standaloneSetup(externalController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string("{\"id\":\"42\",\"externalId\":\"42\",\"originId\":\"42\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[{\"code\":\"?\",\"desc\":\"The characteristics of someone or something\"}],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"imported\":false,\"delegation\":false}")); - } - - /** - * Method under test: {@link ExternalController#getByExternalId(String)} - */ - @Test - void testGetByExternalId5() throws Exception { - when(externalService.getInstitutionByExternalId(any())).thenReturn(new Institution()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", - "42"); - MockMvcBuilders.standaloneSetup(externalController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); - } - - - /** - * Method under test: {@link ExternalController#getByExternalId(String)} - */ - @Test - void testGetByExternalId7() throws Exception { - when(externalService.getInstitutionByExternalId(any())).thenReturn(new Institution()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", - "42"); - MockMvcBuilders.standaloneSetup(externalController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); - } - - - - /** - * Method under test: {@link ExternalController#retrieveInstitutionByIds(List)} - */ - @Test - void testRetrieveInstitutionByIds() throws Exception { - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions") - .param("ids","[code1, code2]"); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(externalController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().is(200)); - } -} - - diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerPdaTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerPdaTest.java deleted file mode 100644 index c40c441..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerPdaTest.java +++ /dev/null @@ -1,99 +0,0 @@ -package it.pagopa.selfcare.mscore.web.controller; - -import com.fasterxml.jackson.databind.ObjectMapper; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.core.InstitutionService; -import it.pagopa.selfcare.mscore.model.institution.Billing; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.web.model.institution.PdaInstitutionRequest; -import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapper; -import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapperImpl; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.http.MediaType; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import java.util.ArrayList; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; - -@ContextConfiguration(classes = {InstitutionController.class}) -@ExtendWith(MockitoExtension.class) -public class InstitutionControllerPdaTest { - @InjectMocks - private InstitutionController institutionController; - - @Mock - private InstitutionService institutionService; - private final ObjectMapper objectMapper = new ObjectMapper(); - @Spy - private InstitutionResourceMapper institutionResourceMapper = new InstitutionResourceMapperImpl(); - - - /** - * Method under test: {@link InstitutionController#createInstitutionFromPda(PdaInstitutionRequest)}} - */ - @Test - void shouldCreateInstitutionFromPda() throws Exception { - // Given - PdaInstitutionRequest institutionRequest = new PdaInstitutionRequest(); - institutionRequest.setInjectionInstitutionType("EC"); - institutionRequest.setDescription("test ec"); - institutionRequest.setTaxCode("taxCode"); - String content = objectMapper.writeValueAsString(institutionRequest); - - Institution institution = createSimpleInstitutionPda(); - - when(institutionService.createInstitutionFromPda(any(), any())).thenReturn(institution); - - //Then - MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-pda/") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"attributes\":[],\"imported\":true,\"delegation\":false}")); - } - - public static Institution createSimpleInstitutionPda() { - Institution institution = new Institution(); - institution.setAddress("42 Main St"); - institution.setAttributes(new ArrayList<>()); - institution.setBilling(createSimpleBilling()); - - institution.setDescription("The characteristics of someone or something"); - institution.setExternalId("42"); - institution.setId("42"); - institution.setInstitutionType(InstitutionType.PA); - institution.setOriginId("Ipa Code"); - institution.setOrigin(Origin.MOCK.name()); - - institution.setTaxCode("Tax Code"); - institution.setZipCode("21654"); - institution.setImported(true); - - return institution; - } - - public static Billing createSimpleBilling() { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - return billing; - } -} diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerTest.java deleted file mode 100644 index 6b9aa3e..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerTest.java +++ /dev/null @@ -1,1395 +0,0 @@ -package it.pagopa.selfcare.mscore.web.controller; - -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import it.pagopa.selfcare.commons.base.security.SelfCareUser; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.core.DelegationService; -import it.pagopa.selfcare.mscore.core.InstitutionService; -import it.pagopa.selfcare.mscore.core.OnboardingService; -import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.web.TestUtils; -import it.pagopa.selfcare.mscore.web.model.institution.*; -import it.pagopa.selfcare.mscore.web.model.mapper.*; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.*; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.data.web.PageableHandlerMethodArgumentResolver; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import javax.validation.ValidationException; -import java.time.OffsetDateTime; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.UUID; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE; - -@ContextConfiguration(classes = {InstitutionController.class}) -@ExtendWith(MockitoExtension.class) -class InstitutionControllerTest { - - private static final String BASE_URL = "/institutions"; - - @InjectMocks - private InstitutionController institutionController; - - @Mock - private InstitutionService institutionService; - - @Mock - private OnboardingService onboardingService; - - @Mock - private DelegationService delegationService; - - @Spy - private OnboardingResourceMapper onboardingResourceMapper = new OnboardingResourceMapperImpl(); - - @Spy - private InstitutionResourceMapper institutionResourceMapper = new InstitutionResourceMapperImpl(); - - @Spy - private BrokerMapper brokerMapper = new BrokerMapperImpl(); - - @Spy - private UserMapper userMapper = new UserMapperImpl(); - - private final ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules(); - - - private final static Onboarding onboarding; - private final static Billing staticBilling; - - private final static Institution staticInstitution; - - static { - staticBilling = new Billing(); - staticBilling.setVatNumber("example"); - staticBilling.setRecipientCode("example"); - staticBilling.setTaxCodeInvoicing("example"); - - onboarding = new Onboarding(); - onboarding.setProductId("example"); - onboarding.setStatus(RelationshipState.ACTIVE); - onboarding.setBilling(staticBilling); - onboarding.setContract("contract"); - onboarding.setTokenId("tokenId"); - onboarding.setPricingPlan("setPricingPlan"); - onboarding.setIsAggregator(true); - - Attributes attribute = new Attributes(); - attribute.setCode("code"); - attribute.setDescription("description"); - - staticInstitution = new Institution(); - staticInstitution.setId("42"); - staticInstitution.setInstitutionType(InstitutionType.PG); - staticInstitution.setDescription("description"); - staticInstitution.setOnboarding(List.of(onboarding)); - staticInstitution.setAttributes(List.of(attribute)); - staticInstitution.setIstatCode("istatCode"); - - } - - @Test - void shouldGetInstitutionsByTaxCode() throws Exception { - - Institution institution = TestUtils.createSimpleInstitutionPA(); - - when(institutionService.getInstitutions(any(), any(), any(), any())) - .thenReturn(List.of(institution)); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/institutions/?taxCode={taxCode}", "TaxCode"); - - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string( - "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}]}")); - } - - @Test - void shouldGetInstitutionsByTaxCodeAndSubunitCode() throws Exception { - - Institution institution = TestUtils.createSimpleInstitutionPA(); - institution.setSubunitCode("example"); - institution.setSubunitType(InstitutionPaSubunitType.UO.name()); - institution.setParentDescription("parentDescription"); - institution.setRootParentId("rootParentId"); - - when(institutionService.getInstitutions(any(), any(), any(), any())) - .thenReturn(List.of(institution)); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/institutions/?taxCode={taxCode}&subunitCode={subunitCode}", "TaxCode", "SubunitCode"); - - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string( - "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"example\",\"subunitType\":\"UO\",\"delegation\":false}]}")); - } - - @Test - void shouldGetInstitutionsByOriginAndOriginId() throws Exception { - - Institution institution = TestUtils.createSimpleInstitutionPA(); - institution.setSubunitCode("example"); - institution.setSubunitType(InstitutionPaSubunitType.UO.name()); - institution.setParentDescription("parentDescription"); - institution.setRootParentId("rootParentId"); - - when(institutionService.getInstitutions(any(), any(), any(), any())) - .thenReturn(List.of(institution)); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/institutions/?origin={origin}&originId={originId}", "origin", "originId"); - - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string( - "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"example\",\"subunitType\":\"UO\",\"delegation\":false}]}")); - } - - @Test - void shouldGetInstitutionsByOrigin() throws Exception { - - Institution institution = TestUtils.createSimpleInstitutionPA(); - institution.setSubunitCode("example"); - institution.setSubunitType(InstitutionPaSubunitType.UO.name()); - institution.setParentDescription("parentDescription"); - institution.setRootParentId("rootParentId"); - - when(institutionService.getInstitutions(any(), any(), any(), any())) - .thenReturn(List.of(institution)); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/institutions/?origin={origin}", "origin"); - - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string( - "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"example\",\"subunitType\":\"UO\",\"delegation\":false}]}")); - } - - @Test - void shouldGetInstitutionsByOriginId() throws Exception { - - Institution institution = TestUtils.createSimpleInstitutionPA(); - institution.setSubunitCode("example"); - institution.setSubunitType(InstitutionPaSubunitType.UO.name()); - institution.setParentDescription("parentDescription"); - institution.setRootParentId("rootParentId"); - - when(institutionService.getInstitutions(any(), any(), any(), any())) - .thenReturn(List.of(institution)); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/institutions/?originId={originId}", "originId"); - - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string( - "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"example\",\"subunitType\":\"UO\",\"delegation\":false}]}")); - } - - @Test - void shouldGetInstitutionsBySubunitCodeWithoutParam(){ - Assertions.assertThrows(ValidationException.class, - () -> institutionController.getInstitutions(null, null, null, null), - "At least one of taxCode, origin or originId must be present"); - } - - @Test - void shouldGetInstitutionsBySubunitCodeWithoutTaxCode() { - Assertions.assertThrows(ValidationException.class, - () -> institutionController.getInstitutions(null, "subunitCode", "origin", null), - "TaxCode is required if subunitCode is present"); - } - - @Test - void shouldGetOnboardingsInstitutionByProductId() throws Exception { - - when(institutionService.getOnboardingInstitutionByProductId(any(), any())) - .thenReturn(List.of(onboarding)); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .get("/institutions/{institutionId}/onboardings?productId{productId}", "42", onboarding.getProductId()); - - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string( - "{\"onboardings\":[{\"productId\":\"example\",\"tokenId\":\"tokenId\",\"status\":\"ACTIVE\",\"contract\":\"contract\",\"pricingPlan\":\"setPricingPlan\",\"billing\":{\"vatNumber\":\"example\",\"taxCodeInvoicing\":\"example\",\"recipientCode\":\"example\",\"publicServices\":false},\"createdAt\":null,\"updatedAt\":null,\"closedAt\":null,\"isAggregator\":true}]}")); - } - - @Test - void retrieveInstitutionById() throws Exception { - SecurityContext securityContext = Mockito.mock(SecurityContext.class); - SecurityContextHolder.setContext(securityContext); - when(institutionService.retrieveInstitutionById("42")).thenReturn(staticInstitution); - staticInstitution.setId("id"); - MockHttpServletRequestBuilder requestBuilder = get("/institutions/{id}", "42"); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")); - } - - /** - * Method under test: {@link InstitutionController#retrieveInstitutionById(String)} - */ - @Test - void testRetrieveInstitutionById() throws Exception { - when(institutionService.retrieveInstitutionById(any())).thenReturn(staticInstitution); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/institutions/{id}", "42"); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"description\":\"description\",\"institutionType\":\"PG\",\"istatCode\":\"istatCode\",\"attributes\":[{\"origin\":null,\"code\":\"code\",\"description\":\"description\"}],\"onboarding\":[{\"productId\":\"example\",\"status\":\"ACTIVE\",\"billing\":{\"vatNumber\":\"example\",\"taxCodeInvoicing\":\"example\",\"recipientCode\":\"example\",\"publicServices\":false},\"createdAt\":null,\"updatedAt\":null,\"isAggregator\":true}],\"imported\":false,\"delegation\":false}")); - } - - @Test - void retrieveInstitutionGeoTaxonomies() throws Exception { - SecurityContext securityContext = Mockito.mock(SecurityContext.class); - SecurityContextHolder.setContext(securityContext); - Institution institution = new Institution(); - institution.setId("id"); - GeographicTaxonomyPage page = new GeographicTaxonomyPage(); - page.setData(Collections.emptyList()); - MockHttpServletRequestBuilder requestBuilder = get("/institutions/{id}/geotaxonomies", "42"); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isOk()); - } - - /** - * Method under test: {@link InstitutionController#createInstitutionFromIpa(InstitutionFromIpaPost)}} - */ - @Test - void shouldCreateInstitutionFromIpa() throws Exception { - // Given - InstitutionFromIpaPost institutionFromIpaPost = new InstitutionFromIpaPost(); - institutionFromIpaPost.setTaxCode("123456"); - institutionFromIpaPost.setSubunitType(InstitutionPaSubunitType.AOO); - institutionFromIpaPost.setSubunitCode("1234"); - GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); - geoTaxonomies.setCode("code"); - geoTaxonomies.setDesc("desc"); - institutionFromIpaPost.setGeographicTaxonomies(List.of(geoTaxonomies)); - String content = objectMapper.writeValueAsString(institutionFromIpaPost); - - Institution institution = TestUtils.createSimpleInstitutionPA(); - institution.setSubunitCode(institutionFromIpaPost.getSubunitCode()); - institution.setSubunitType(institutionFromIpaPost.getSubunitType().name()); - institution.setParentDescription("parentDescription"); - institution.setRootParentId("rootParentId"); - - when(institutionService.createInstitutionFromIpa(any(), any(), any(), any(), any())).thenReturn(institution); - - //Then - MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-ipa/") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"1234\",\"subunitType\":\"AOO\",\"delegation\":false}")); - - ArgumentCaptor> captorGeo = ArgumentCaptor.forClass(List.class); - verify(institutionService, times(1)) - .createInstitutionFromIpa(any(),any(),any(),captorGeo.capture(), any()); - assertEquals(institutionFromIpaPost.getGeographicTaxonomies().size(), captorGeo.getValue().size()); - assertEquals(geoTaxonomies.getCode(), captorGeo.getValue().get(0).getCode()); - assertEquals(geoTaxonomies.getDesc(), captorGeo.getValue().get(0).getDesc()); - } - - /** - * Method under test: {@link InstitutionController#createInstitutionFromAnac(InstitutionRequest)}} - */ - @Test - void shouldCreateInstitutionFromAnac() throws Exception { - // Given - InstitutionRequest institutionRequest = new InstitutionRequest(); - institutionRequest.setAddress("42 Main St"); - institutionRequest.setInstitutionType(InstitutionType.SA); - institutionRequest.setTaxCode("42"); - institutionRequest.setExternalId("42"); - String content = objectMapper.writeValueAsString(institutionRequest); - - Institution institution = TestUtils.createSimpleInstitutionSA(); - - when(institutionService.createInstitutionFromAnac(any())).thenReturn(institution); - - //Then - MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-anac/") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"ANAC\",\"originId\":\"ANAC Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"SA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}")); - } - - /** - * Method under test: {@link InstitutionController#createInstitutionFromIvass(InstitutionRequest)}} - */ - @Test - void shouldCreateInstitutionFromIvass() throws Exception { - // Given - InstitutionRequest institutionRequest = new InstitutionRequest(); - institutionRequest.setAddress("42 Main St"); - institutionRequest.setInstitutionType(InstitutionType.AS); - institutionRequest.setTaxCode("42"); - institutionRequest.setExternalId("42"); - String content = objectMapper.writeValueAsString(institutionRequest); - - Institution institution = TestUtils.createSimpleInstitutionAS(); - - when(institutionService.createInstitutionFromIvass(any())).thenReturn(institution); - - //Then - MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-ivass/") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"IVASS\",\"originId\":\"IVASS Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"AS\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}")); - } - - /** - * Method under test: {@link InstitutionController#createInstitutionFromInfocamere(InstitutionRequest)}} - */ - @Test - void shouldCreateInstitutionFromInfocamere() throws Exception { - // Given - InstitutionRequest institutionRequest = new InstitutionRequest(); - institutionRequest.setAddress("42 Main St"); - institutionRequest.setInstitutionType(InstitutionType.PG); - institutionRequest.setTaxCode("42"); - institutionRequest.setExternalId("42"); - String content = objectMapper.writeValueAsString(institutionRequest); - - Institution institution = TestUtils.createSimpleInstitutionPA(); - - when(institutionService.createInstitutionFromInfocamere(any())).thenReturn(institution); - - //Then - MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-infocamere/") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}")); - } - - /** - * Method under test: {@link InstitutionController#createInstitutionFromIpa(InstitutionFromIpaPost)}} - */ - @Test - void shouldThrowValidationExceptionWhenCreateInstitutionFromIpaWithoutTax() throws Exception { - - String content = objectMapper.writeValueAsString(new InstitutionFromIpaPost()); - - MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-ipa/") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isBadRequest()); - } - - - /** - * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} - */ - @Test - void shouldCreateInstitution() throws Exception { - - InstitutionRequest institution = TestUtils.createSimpleInstitutionRequest(); - Institution response = TestUtils.createSimpleInstitutionPA(); - - when(institutionService.createInstitution(any())).thenReturn(response); - - String content = objectMapper.writeValueAsString(institution); - - MockHttpServletRequestBuilder requestBuilder = post("/institutions/") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")); - } - - /** - * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} - */ - @Test - void testCreateInstitutionByExternalId() throws Exception { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); - dataProtectionOfficer.setAddress("42 Main St"); - dataProtectionOfficer.setEmail("jane.doe@example.org"); - dataProtectionOfficer.setPec("Pec"); - - PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); - paymentServiceProvider.setAbiCode("Abi Code"); - paymentServiceProvider.setBusinessRegisterNumber("42"); - paymentServiceProvider.setLegalRegisterName("Legal Register Name"); - paymentServiceProvider.setLegalRegisterNumber("42"); - paymentServiceProvider.setVatNumberGroup(true); - - Institution institution = new Institution(); - institution.setAddress("42 Main St"); - institution.setAttributes(new ArrayList<>()); - institution.setBilling(billing); - institution.setDataProtectionOfficer(dataProtectionOfficer); - institution.setDescription("The characteristics of someone or something"); - institution.setDigitalAddress("42 Main St"); - institution.setExternalId("42"); - institution.setGeographicTaxonomies(new ArrayList<>()); - institution.setId("42"); - institution.setInstitutionType(InstitutionType.PA); - institution.setOriginId("Ipa Code"); - institution.setOnboarding(new ArrayList<>()); - institution.setPaymentServiceProvider(paymentServiceProvider); - institution.setTaxCode("Tax Code"); - institution.setZipCode("21654"); - when(institutionService.createInstitutionByExternalId(any())).thenReturn(institution); - MockHttpServletRequestBuilder requestBuilder = post("/institutions/{externalId}", "42"); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")); - } - - /** - * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} - */ - @Test - void testCreateInstitutionByExternalId2() throws Exception { - when(institutionService.createInstitutionByExternalId(any())).thenReturn(new Institution()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/{externalId}", "42"); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")); - } - - /** - * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} - */ - @Test - void testCreateInstitutionByExternalId3() throws Exception { - when(institutionService.createInstitutionByExternalId(any())).thenReturn(new Institution()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/{externalId}", "42"); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); - } - - /** - * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} - */ - @Test - void testCreateInstitutionByExternalId4() throws Exception { - - Institution institution = TestUtils.createSimpleInstitutionPA(); - - when(institutionService.createInstitutionByExternalId(any())) - .thenReturn(institution); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/{externalId}", "42"); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string( - "{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}")); - } - - /** - * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} - */ - @Test - void testCreateInstitutionByExternalId5() throws Exception { - SecurityMockMvcRequestBuilders.FormLoginRequestBuilder requestBuilder = SecurityMockMvcRequestBuilders - .formLogin(); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isNotFound()); - } - - /** - * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} - */ - @Test - void testCreateInstitution() throws Exception { - when(institutionService.createInstitution(any())).thenReturn(new Institution()); - - DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); - dataProtectionOfficerRequest.setAddress("42 Main St"); - dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); - dataProtectionOfficerRequest.setPec("Pec"); - - PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); - paymentServiceProviderRequest.setAbiCode("Abi Code"); - paymentServiceProviderRequest.setBusinessRegisterNumber("42"); - paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); - paymentServiceProviderRequest.setLegalRegisterNumber("42"); - paymentServiceProviderRequest.setVatNumberGroup(true); - - InstitutionRequest institutionRequest = new InstitutionRequest(); - institutionRequest.setAddress("42 Main St"); - institutionRequest.setAttributes(new ArrayList<>()); - institutionRequest.setBusinessRegisterPlace("Business Register Place"); - institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); - institutionRequest.setDescription("The characteristics of someone or something"); - institutionRequest.setDigitalAddress("42 Main St"); - institutionRequest.setGeographicTaxonomies(new ArrayList<>()); - institutionRequest.setInstitutionType(InstitutionType.PA); - institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); - institutionRequest.setRea("Rea"); - institutionRequest.setShareCapital("Share Capital"); - institutionRequest.setSupportEmail("jane.doe@example.org"); - institutionRequest.setSupportPhone("6625550144"); - institutionRequest.setTaxCode("Tax Code"); - institutionRequest.setZipCode("21654"); - String content = (new ObjectMapper()).writeValueAsString(institutionRequest); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .post("/institutions/insert/{externalId}", "42") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); - } - - - /** - * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} - */ - @Test - void testCreateInstitution2() throws Exception { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); - dataProtectionOfficer.setAddress("42 Main St"); - dataProtectionOfficer.setEmail("jane.doe@example.org"); - dataProtectionOfficer.setPec("Pec"); - - PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); - paymentServiceProvider.setAbiCode("Abi Code"); - paymentServiceProvider.setBusinessRegisterNumber("42"); - paymentServiceProvider.setLegalRegisterName("Legal Register Name"); - paymentServiceProvider.setLegalRegisterNumber("42"); - paymentServiceProvider.setVatNumberGroup(true); - - Institution institution = new Institution(); - institution.setAddress("42 Main St"); - institution.setAttributes(new ArrayList<>()); - institution.setBilling(billing); - institution.setDataProtectionOfficer(dataProtectionOfficer); - institution.setDescription("The characteristics of someone or something"); - institution.setDigitalAddress("42 Main St"); - institution.setExternalId("42"); - institution.setGeographicTaxonomies(new ArrayList<>()); - institution.setId("42"); - institution.setInstitutionType(InstitutionType.PA); - institution.setOriginId("Ipa Code"); - institution.setOnboarding(new ArrayList<>()); - institution.setPaymentServiceProvider(paymentServiceProvider); - institution.setTaxCode("Tax Code"); - institution.setZipCode("21654"); - when(institutionService.createInstitution(any())).thenReturn(institution); - - AttributesRequest attributesRequest = new AttributesRequest(); - attributesRequest.setCode("?"); - attributesRequest.setDescription("The characteristics of someone or something"); - attributesRequest.setOrigin("?"); - - ArrayList attributesRequestList = new ArrayList<>(); - attributesRequestList.add(attributesRequest); - - DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); - dataProtectionOfficerRequest.setAddress("42 Main St"); - dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); - dataProtectionOfficerRequest.setPec("Pec"); - - PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); - paymentServiceProviderRequest.setAbiCode("Abi Code"); - paymentServiceProviderRequest.setBusinessRegisterNumber("42"); - paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); - paymentServiceProviderRequest.setLegalRegisterNumber("42"); - paymentServiceProviderRequest.setVatNumberGroup(true); - - InstitutionRequest institutionRequest = new InstitutionRequest(); - institutionRequest.setAddress("42 Main St"); - institutionRequest.setAttributes(attributesRequestList); - institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); - institutionRequest.setDescription("The characteristics of someone or something"); - institutionRequest.setDigitalAddress("42 Main St"); - institutionRequest.setGeographicTaxonomies(new ArrayList<>()); - institutionRequest.setInstitutionType(InstitutionType.PA); - institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); - institutionRequest.setTaxCode("Tax Code"); - institutionRequest.setZipCode("21654"); - String content = (new ObjectMapper()).writeValueAsString(institutionRequest); - MockHttpServletRequestBuilder requestBuilder = post("/institutions/insert/{externalId}", "42") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")); - } - - /** - * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} - */ - @Test - void testCreateInstitution3() throws Exception { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); - dataProtectionOfficer.setAddress("42 Main St"); - dataProtectionOfficer.setEmail("jane.doe@example.org"); - dataProtectionOfficer.setPec("Pec"); - - PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); - paymentServiceProvider.setAbiCode("Abi Code"); - paymentServiceProvider.setBusinessRegisterNumber("42"); - paymentServiceProvider.setLegalRegisterName("Legal Register Name"); - paymentServiceProvider.setLegalRegisterNumber("42"); - paymentServiceProvider.setVatNumberGroup(true); - - Institution institution = new Institution(); - institution.setAddress("42 Main St"); - institution.setAttributes(new ArrayList<>()); - institution.setBilling(billing); - institution.setDataProtectionOfficer(dataProtectionOfficer); - institution.setDescription("The characteristics of someone or something"); - institution.setDigitalAddress("42 Main St"); - institution.setExternalId("42"); - institution.setGeographicTaxonomies(new ArrayList<>()); - institution.setId("42"); - institution.setInstitutionType(InstitutionType.PA); - institution.setOriginId("Ipa Code"); - institution.setOnboarding(new ArrayList<>()); - institution.setPaymentServiceProvider(paymentServiceProvider); - institution.setTaxCode("Tax Code"); - institution.setZipCode("21654"); - when(institutionService.createInstitution(any())).thenReturn(institution); - - DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); - dataProtectionOfficerRequest.setAddress("42 Main St"); - dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); - dataProtectionOfficerRequest.setPec("Pec"); - - GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); - geoTaxonomies.setCode("?"); - geoTaxonomies.setDesc("The characteristics of someone or something"); - - ArrayList geoTaxonomiesList = new ArrayList<>(); - geoTaxonomiesList.add(geoTaxonomies); - - PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); - paymentServiceProviderRequest.setAbiCode("Abi Code"); - paymentServiceProviderRequest.setBusinessRegisterNumber("42"); - paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); - paymentServiceProviderRequest.setLegalRegisterNumber("42"); - paymentServiceProviderRequest.setVatNumberGroup(true); - - InstitutionRequest institutionRequest = new InstitutionRequest(); - institutionRequest.setAddress("42 Main St"); - institutionRequest.setAttributes(new ArrayList<>()); - institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); - institutionRequest.setDescription("The characteristics of someone or something"); - institutionRequest.setDigitalAddress("42 Main St"); - institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); - institutionRequest.setInstitutionType(InstitutionType.PA); - institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); - institutionRequest.setTaxCode("Tax Code"); - institutionRequest.setZipCode("21654"); - String content = (new ObjectMapper()).writeValueAsString(institutionRequest); - MockHttpServletRequestBuilder requestBuilder = post("/institutions/insert/{externalId}", "42") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"imported\":false,\"delegation\":false}")); - } - - /** - * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} - */ - @Test - void testCreateInstitution4() throws Exception { - when(institutionService.createInstitution(any())).thenReturn(new Institution()); - - DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); - dataProtectionOfficerRequest.setAddress("42 Main St"); - dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); - dataProtectionOfficerRequest.setPec("Pec"); - - PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); - paymentServiceProviderRequest.setAbiCode("Abi Code"); - paymentServiceProviderRequest.setBusinessRegisterNumber("42"); - paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); - paymentServiceProviderRequest.setLegalRegisterNumber("42"); - paymentServiceProviderRequest.setVatNumberGroup(true); - - InstitutionRequest institutionRequest = new InstitutionRequest(); - institutionRequest.setAddress("42 Main St"); - institutionRequest.setAttributes(new ArrayList<>()); - institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); - institutionRequest.setDescription("The characteristics of someone or something"); - institutionRequest.setDigitalAddress("42 Main St"); - institutionRequest.setGeographicTaxonomies(new ArrayList<>()); - institutionRequest.setInstitutionType(InstitutionType.PA); - institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); - institutionRequest.setTaxCode("Tax Code"); - institutionRequest.setZipCode("21654"); - String content = (new ObjectMapper()).writeValueAsString(institutionRequest); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .post("/institutions/insert/{externalId}", "42") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")); - } - - /** - * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} - */ - @Test - void testCreateInstitution5() throws Exception { - when(institutionService.createInstitution(any())).thenReturn(new Institution()); - - AttributesRequest attributesRequest = new AttributesRequest(); - attributesRequest.setCode("?"); - attributesRequest.setDescription("The characteristics of someone or something"); - attributesRequest.setOrigin("?"); - - ArrayList attributesRequestList = new ArrayList<>(); - attributesRequestList.add(attributesRequest); - - DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); - dataProtectionOfficerRequest.setAddress("42 Main St"); - dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); - dataProtectionOfficerRequest.setPec("Pec"); - - PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); - paymentServiceProviderRequest.setAbiCode("Abi Code"); - paymentServiceProviderRequest.setBusinessRegisterNumber("42"); - paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); - paymentServiceProviderRequest.setLegalRegisterNumber("42"); - paymentServiceProviderRequest.setVatNumberGroup(true); - - InstitutionRequest institutionRequest = new InstitutionRequest(); - institutionRequest.setAddress("42 Main St"); - institutionRequest.setAttributes(attributesRequestList); - institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); - institutionRequest.setDescription("The characteristics of someone or something"); - institutionRequest.setDigitalAddress("42 Main St"); - institutionRequest.setGeographicTaxonomies(new ArrayList<>()); - institutionRequest.setInstitutionType(InstitutionType.PA); - institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); - institutionRequest.setTaxCode("Tax Code"); - institutionRequest.setZipCode("21654"); - String content = (new ObjectMapper()).writeValueAsString(institutionRequest); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .post("/institutions/insert/{externalId}", "42") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")); - } - - /** - * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} - */ - @Test - void testCreateInstitution6() throws Exception { - when(institutionService.createInstitution(any())).thenReturn(new Institution()); - - DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); - dataProtectionOfficerRequest.setAddress("42 Main St"); - dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); - dataProtectionOfficerRequest.setPec("Pec"); - - GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); - geoTaxonomies.setCode("?"); - geoTaxonomies.setDesc("The characteristics of someone or something"); - - ArrayList geoTaxonomiesList = new ArrayList<>(); - geoTaxonomiesList.add(geoTaxonomies); - - PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); - paymentServiceProviderRequest.setAbiCode("Abi Code"); - paymentServiceProviderRequest.setBusinessRegisterNumber("42"); - paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); - paymentServiceProviderRequest.setLegalRegisterNumber("42"); - paymentServiceProviderRequest.setVatNumberGroup(true); - - InstitutionRequest institutionRequest = new InstitutionRequest(); - institutionRequest.setAddress("42 Main St"); - institutionRequest.setAttributes(new ArrayList<>()); - institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); - institutionRequest.setDescription("The characteristics of someone or something"); - institutionRequest.setDigitalAddress("42 Main St"); - institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); - institutionRequest.setInstitutionType(InstitutionType.PA); - institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); - institutionRequest.setTaxCode("Tax Code"); - institutionRequest.setZipCode("21654"); - String content = (new ObjectMapper()).writeValueAsString(institutionRequest); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .post("/institutions/insert/{externalId}", "42") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")); - } - - - /** - * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} - */ - @Test - void testCreateInstitution9() throws Exception { - when(institutionService.createInstitution(any())).thenReturn(new Institution()); - - AttributesRequest attributesRequest = new AttributesRequest(); - attributesRequest.setCode("?"); - attributesRequest.setDescription("The characteristics of someone or something"); - attributesRequest.setOrigin("?"); - - ArrayList attributesRequestList = new ArrayList<>(); - attributesRequestList.add(attributesRequest); - - DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); - dataProtectionOfficerRequest.setAddress("42 Main St"); - dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); - dataProtectionOfficerRequest.setPec("Pec"); - - PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); - paymentServiceProviderRequest.setAbiCode("Abi Code"); - paymentServiceProviderRequest.setBusinessRegisterNumber("42"); - paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); - paymentServiceProviderRequest.setLegalRegisterNumber("42"); - paymentServiceProviderRequest.setVatNumberGroup(true); - - InstitutionRequest institutionRequest = new InstitutionRequest(); - institutionRequest.setAddress("42 Main St"); - institutionRequest.setAttributes(attributesRequestList); - institutionRequest.setBusinessRegisterPlace("Business Register Place"); - institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); - institutionRequest.setDescription("The characteristics of someone or something"); - institutionRequest.setDigitalAddress("42 Main St"); - institutionRequest.setGeographicTaxonomies(new ArrayList<>()); - institutionRequest.setInstitutionType(InstitutionType.PA); - institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); - institutionRequest.setRea("Rea"); - institutionRequest.setShareCapital("Share Capital"); - institutionRequest.setSupportEmail("jane.doe@example.org"); - institutionRequest.setSupportPhone("6625550144"); - institutionRequest.setTaxCode("Tax Code"); - institutionRequest.setZipCode("21654"); - String content = (new ObjectMapper()).writeValueAsString(institutionRequest); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .post("/institutions/insert/{externalId}", "42") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); - } - - /** - * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} - */ - @Test - void testCreateInstitution10() throws Exception { - when(institutionService.createInstitution(any())).thenReturn(new Institution()); - - DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); - dataProtectionOfficerRequest.setAddress("42 Main St"); - dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); - dataProtectionOfficerRequest.setPec("Pec"); - - GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); - geoTaxonomies.setCode("?"); - geoTaxonomies.setDesc("The characteristics of someone or something"); - - ArrayList geoTaxonomiesList = new ArrayList<>(); - geoTaxonomiesList.add(geoTaxonomies); - - PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); - paymentServiceProviderRequest.setAbiCode("Abi Code"); - paymentServiceProviderRequest.setBusinessRegisterNumber("42"); - paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); - paymentServiceProviderRequest.setLegalRegisterNumber("42"); - paymentServiceProviderRequest.setVatNumberGroup(true); - - InstitutionRequest institutionRequest = new InstitutionRequest(); - institutionRequest.setAddress("42 Main St"); - institutionRequest.setAttributes(new ArrayList<>()); - institutionRequest.setBusinessRegisterPlace("Business Register Place"); - institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); - institutionRequest.setDescription("The characteristics of someone or something"); - institutionRequest.setDigitalAddress("42 Main St"); - institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); - institutionRequest.setInstitutionType(InstitutionType.PA); - institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); - institutionRequest.setRea("Rea"); - institutionRequest.setShareCapital("Share Capital"); - institutionRequest.setSupportEmail("jane.doe@example.org"); - institutionRequest.setSupportPhone("6625550144"); - institutionRequest.setTaxCode("Tax Code"); - institutionRequest.setZipCode("21654"); - String content = (new ObjectMapper()).writeValueAsString(institutionRequest); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .post("/institutions/insert/{externalId}", "42") - .contentType(MediaType.APPLICATION_JSON) - .content(content); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); - } - - /** - * Method under test: {@link InstitutionController#retrieveInstitutionProducts(String, List)} - */ - @Test - void testRetrieveInstitutionProductsEmpty() throws Exception { - when(institutionService.retrieveInstitutionById(any())).thenReturn(new Institution()); - when(institutionService.retrieveInstitutionProducts(any(), any())) - .thenReturn(new ArrayList<>()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/institutions/{id}/products", "42"); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("{\"products\":[]}")); - } - - /** - * Method under test: {@link InstitutionController#retrieveInstitutionProducts(String, List)} - */ - @Test - void testRetrieveInstitutionProducts() throws Exception { - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - when(institutionService.retrieveInstitutionById(any())).thenReturn(new Institution()); - when(institutionService.retrieveInstitutionProducts(any(), any())) - .thenReturn(onboardingList); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/institutions/{id}/products", onboarding.getProductId()); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string("{\"products\":[{\"id\":\"example\",\"state\":\"ACTIVE\"}]}")); - } - - /** - * Method under test: {@link InstitutionController#retrieveInstitutionGeoTaxonomies(String)} - */ - @Test - void testRetrieveInstitutionGeoTaxonomies() throws Exception { - when(institutionService.retrieveInstitutionById(any())).thenReturn(new Institution()); - when(institutionService.retrieveInstitutionGeoTaxonomies(any())).thenReturn(new ArrayList<>()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/institutions/{id}/geotaxonomies", - "42"); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content().string("[]")); - } - - @Test - void createPgInstitution() throws Exception { - Authentication authentication = Mockito.mock(Authentication.class); - SecurityContext securityContext = Mockito.mock(SecurityContext.class); - SecurityContextHolder.setContext(securityContext); - when(authentication.getPrincipal()).thenReturn(SelfCareUser.builder("id").build()); - - CreatePgInstitutionRequest request = new CreatePgInstitutionRequest(); - request.setTaxId("taxId"); - request.setExistsInRegistry(true); - ObjectMapper mapper = new ObjectMapper(); - when(institutionService.createPgInstitution(any(), any(), anyBoolean(), any())).thenReturn(new Institution()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/pg") - .contentType(MediaType.APPLICATION_JSON) - .content(mapper.writeValueAsString(request)) - .principal(authentication); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isCreated()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")); - } - - /** - * Method under test: {@link InstitutionController#updateInstitution(String, InstitutionPut, Authentication)} (String, PgInstitutionPut, Authentication)} - */ - @Test - void testUpdateInstitutionDescription() throws Exception { - Authentication authentication = Mockito.mock(Authentication.class); - SecurityContext securityContext = Mockito.mock(SecurityContext.class); - SecurityContextHolder.setContext(securityContext); - when(authentication.getPrincipal()).thenReturn(SelfCareUser.builder("id").build()); - - InstitutionPut pgInstitutionPut = new InstitutionPut(); - pgInstitutionPut.setDescription("desc"); - pgInstitutionPut.setDigitalAddress("digitalAddress"); - pgInstitutionPut.setParentDescription("parentDesc"); - when(institutionService.updateInstitution(any(), any(), any())).thenReturn(new Institution()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.put("/institutions/42") - .contentType(MediaType.APPLICATION_JSON) - .content(new ObjectMapper().writeValueAsString(pgInstitutionPut)) - .principal(authentication); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")); - } - - @Test - void testUpdateInstitution() throws Exception { - - InstitutionPut institutionPut = new InstitutionPut(); - institutionPut.setGeographicTaxonomyCodes(new ArrayList<>()); - SecurityContext securityContext = Mockito.mock(SecurityContext.class); - Authentication authentication = Mockito.mock(Authentication.class); - SecurityContextHolder.setContext(securityContext); - when(authentication.getPrincipal()).thenReturn(SelfCareUser.builder("id").build()); - - when(institutionService.updateInstitution(any(), any(), any())).thenReturn(new Institution()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.put("/institutions/42") - .contentType(MediaType.APPLICATION_JSON) - .content(new ObjectMapper().writeValueAsString(institutionPut)) - .principal(authentication); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")); - } - - @Test - void testGetValidInstitutionToOnboard() throws Exception { - InstitutionToOnboard institution = new InstitutionToOnboard(); - List list = new ArrayList<>(); - list.add(institution); - List validInstitutions = new ArrayList<>(); - ValidInstitution validInstitution = new ValidInstitution(); - validInstitutions.add(validInstitution); - when(institutionService.retrieveInstitutionByExternalIds(any(), any())).thenReturn(validInstitutions); - - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/onboarded/{productId}", "42") - .contentType(MediaType.APPLICATION_JSON) - .content(new ObjectMapper().writeValueAsString(list)); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")); - } - - /** - * Method under test: {@link InstitutionController#updateCreatedAt(String, CreatedAtRequest)} - */ - @Test - void updateCreatedAt() throws Exception { - // Given - String institutionIdMock = "institutionId"; - String productIdMock = "productId"; - OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); - - CreatedAtRequest createdAtRequest = new CreatedAtRequest(); - createdAtRequest.setCreatedAt(createdAtMock); - createdAtRequest.setProductId(productIdMock); - // When - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.put(BASE_URL + "/{institutionId}/createdAt", institutionIdMock) - .content(new ObjectMapper().findAndRegisterModules().writeValueAsString(createdAtRequest)) - .contentType(APPLICATION_JSON_VALUE) - .accept(APPLICATION_JSON_VALUE); - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()); - // Then - verify(institutionService, times(1)) - .updateCreatedAt(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()); - verifyNoMoreInteractions(institutionService); - } - - /** - * Method under test: {@link InstitutionController#findFromProduct(String, Integer, Integer)} - */ - @Test - void findFromProduct() throws Exception { - // Given - String productIdMock = "productId"; - Integer pageMock = 0; - Integer sizeMock = 2; - - // When - when(institutionService.getInstitutionsByProductId(any(), any(), any())).thenReturn(List.of(staticInstitution)); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get(BASE_URL + "/products/{productId}", productIdMock) - .param("page", pageMock.toString()) - .param("size", sizeMock.toString()); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) - .build() - .perform(requestBuilder); - actualPerformResult - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andExpect(MockMvcResultMatchers.content() - .string("{\"items\":[{\"id\":\"42\",\"externalId\":null,\"origin\":null,\"originId\":null,\"description\":\"description\",\"institutionType\":\"PG\",\"digitalAddress\":null,\"address\":null,\"zipCode\":null,\"taxCode\":null,\"onboardings\":{\"example\":{\"productId\":\"example\",\"tokenId\":\"tokenId\",\"status\":\"ACTIVE\",\"contract\":\"contract\",\"pricingPlan\":\"setPricingPlan\",\"billing\":{\"vatNumber\":\"example\",\"taxCodeInvoicing\":\"example\",\"recipientCode\":\"example\",\"publicServices\":false},\"createdAt\":null,\"updatedAt\":null,\"closedAt\":null,\"isAggregator\":true}},\"geographicTaxonomies\":null,\"attributes\":[{\"origin\":null,\"code\":\"code\",\"description\":\"description\"}],\"paymentServiceProvider\":null,\"dataProtectionOfficer\":null,\"rea\":null,\"shareCapital\":null,\"businessRegisterPlace\":null,\"supportEmail\":null,\"supportPhone\":null,\"imported\":false,\"subunitCode\":null,\"subunitType\":null,\"aooParentCode\":null,\"createdAt\":null,\"updatedAt\":null}]}"));; - // Then - verify(institutionService, times(1)) - .getInstitutionsByProductId(productIdMock, pageMock, sizeMock); - verifyNoMoreInteractions(institutionService); - } - - /** - * Method under test: {@link InstitutionController#getInstitutionBrokers(String, InstitutionType)} - */ - @Test - void getInstitutionBrokers() throws Exception { - // Given - final String productId = "test"; - final InstitutionType type = InstitutionType.PT; - Institution institution = new Institution(); - institution.setId("id"); - institution.setTaxCode("taxCode"); - - // When - when(institutionService.getInstitutionBrokers(any(), any())).thenReturn(List.of(institution)); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get(BASE_URL + "/{productId}/brokers/{institutionType}", productId, type); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) - .build() - .perform(requestBuilder); - MvcResult result = actualPerformResult - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType("application/json")) - .andReturn(); - - List response = objectMapper.readValue( - result.getResponse().getContentAsString(), - new TypeReference<>() { - }); - - // Then - assertNotNull(response); - assertNotNull(response.get(0)); - assertEquals(response.get(0).getId(), institution.getId()); - assertEquals(response.get(0).getTaxCode(), institution.getTaxCode()); - verify(institutionService, times(1)) - .getInstitutionBrokers(productId, type); - verifyNoMoreInteractions(institutionService); - } - - /** - * Method under test: {@link InstitutionController#getInstitutionBrokers(String, InstitutionType)} - */ - @Test - void getInstitutionBrokersWithBadRequest() throws Exception { - // Given - final String productId = "test"; - final String type = "FAKED-TYPE"; - - // When - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get(BASE_URL + "/{productId}/brokers/{institutionType}", productId, type); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) - .build() - .perform(requestBuilder); - - actualPerformResult.andExpect(MockMvcResultMatchers.status().isBadRequest()); - - } - - - - @Test - void updateCreatedAt_invalidDate() throws Exception { - // Given - - - String institutionIdMock = "institutionId"; - String productIdMock = "productId"; - OffsetDateTime createdAtMock = OffsetDateTime.now().minusHours(10); - CreatedAtRequest createdAtRequest = new CreatedAtRequest(); - createdAtRequest.setProductId(productIdMock); - createdAtRequest.setCreatedAt(createdAtMock); - // When - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .put(BASE_URL + "/{institutionId}/createdAt", institutionIdMock) - .content(objectMapper.writeValueAsString(createdAtRequest)) - .contentType(APPLICATION_JSON_VALUE) - .accept(APPLICATION_JSON_VALUE); - - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()); - } - - /** - * Method under test: {@link InstitutionController#onboardingInstitution(InstitutionOnboardingRequest, String)} - */ - @Test - void institutionOnboarding() throws Exception { - - - final String institutionId = "institutionId"; - InstitutionOnboardingRequest request = new InstitutionOnboardingRequest(); - request.setProductId("id"); - request.setIsAggregator(true); - - when(onboardingService.persistOnboarding(any(), any(), any(), any())) - .thenAnswer(invocation -> { - StringBuilder status = invocation.getArgument(3); - status.append(HttpStatus.CREATED.value()); - return new Institution(); - }); - - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .post(BASE_URL + "/{id}/onboarding/", institutionId) - .content(objectMapper.writeValueAsString(request)) - .contentType(MediaType.APPLICATION_JSON); - - MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isCreated()); - } - - @Test - void deleteOnboardedInstitution_test() throws Exception { - - String institutionId = UUID.randomUUID().toString(); - String productId = "prod-io"; - - doNothing().when(onboardingService).deleteOnboardedInstitution(institutionId, productId); - - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.delete("/institutions/{id}/products/{productId}", institutionId, productId); - - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) - .build() - .perform(requestBuilder); - - actualPerformResult - .andExpect(MockMvcResultMatchers.status().isNoContent()) - .andExpect(MockMvcResultMatchers.content().string("")); - } - -} diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ManagementControllerTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ManagementControllerTest.java deleted file mode 100644 index 85c41bf..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ManagementControllerTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package it.pagopa.selfcare.mscore.web.controller; - -import com.fasterxml.jackson.databind.ObjectMapper; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.core.InstitutionService; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import it.pagopa.selfcare.mscore.web.model.institution.BulkPartiesSeed; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.http.MediaType; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import java.util.List; - -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.when; - -@ContextConfiguration(classes = {ManagementController.class}) -@ExtendWith(MockitoExtension.class) -class ManagementControllerTest { - @Mock - private InstitutionService institutionService; - - @InjectMocks - private ManagementController managementController; - - @Test - void testGetInstitutionsByIds() throws Exception { - BulkPartiesSeed bulkPartiesSeed = new BulkPartiesSeed(); - bulkPartiesSeed.setPartyIdentifiers(List.of("42")); - ObjectMapper mapper = new ObjectMapper(); - Institution institution = new Institution(); - institution.setId("id"); - Onboarding onboarding = new Onboarding(); - onboarding.setProductId("productId"); - onboarding.setStatus(RelationshipState.ACTIVE); - institution.setOnboarding(List.of(onboarding)); - when(institutionService.retrieveInstitutionByIds(any())).thenReturn(List.of(institution)); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/bulk/institutions") - .contentType(MediaType.APPLICATION_JSON) - .content(mapper.writeValueAsString(bulkPartiesSeed)); - MockMvcBuilders.standaloneSetup(managementController) - .build() - .perform(requestBuilder) - .andExpect(MockMvcResultMatchers.status().isOk()); - } -} - diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/OnboardingControllerTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/OnboardingControllerTest.java deleted file mode 100644 index 1675844..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/OnboardingControllerTest.java +++ /dev/null @@ -1,85 +0,0 @@ -package it.pagopa.selfcare.mscore.web.controller; - -import it.pagopa.selfcare.mscore.core.OnboardingService; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.request.RequestContextHolder; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doNothing; - -@ContextConfiguration(classes = {OnboardingController.class}) -@ExtendWith(MockitoExtension.class) -class OnboardingControllerTest { - @InjectMocks - private OnboardingController onboardingController; - - @Mock - private OnboardingService onboardingService; - - @BeforeEach - void resetContext() { - SecurityContextHolder.clearContext(); - RequestContextHolder.resetRequestAttributes(); - } - - /** - * Method under test: {@link OnboardingController#verifyOnboardingInfo(String, String, String)} - */ - @Test - void shouldVerifyOnboardingInfoBySubunit() throws Exception { - doNothing().when(onboardingService).verifyOnboardingInfoSubunit(any(), any(), any()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .head("/onboarding/") - .queryParam("taxCode", "42") - .queryParam("productId", "42"); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(onboardingController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isNoContent()); - } - - /** - * Method under test: {@link OnboardingController#verifyOnboardingInfoByFilters(String, String, String, String, String, String)} - */ - @Test - void shouldVerifyOnboardingInfoByFiltersSuccess() throws Exception { - doNothing().when(onboardingService).verifyOnboardingInfoByFilters(any()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .head("/onboarding/verify") - .queryParam("origin", "42") - .queryParam("originId", "42") - .queryParam("productId", "42"); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(onboardingController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isNoContent()); - } - - /** - * Method under test: {@link OnboardingController#verifyOnboardingInfo(String, String)} - */ - @Test - void shouldVerifyOnboardingInfoByExternalId() throws Exception { - doNothing().when(onboardingService).verifyOnboardingInfo(any(), any()); - MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders - .head("/onboarding/institution/{externalId}/products/{productId}", "42", "42"); - ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(onboardingController) - .build() - .perform(requestBuilder); - actualPerformResult.andExpect(MockMvcResultMatchers.status().isNoContent()); - } - - } - diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandlerTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandlerTest.java deleted file mode 100644 index 25f5bfa..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandlerTest.java +++ /dev/null @@ -1,163 +0,0 @@ -package it.pagopa.selfcare.mscore.web.exception; - -import it.pagopa.selfcare.mscore.exception.InvalidRequestException; -import it.pagopa.selfcare.mscore.exception.MsCoreException; -import it.pagopa.selfcare.mscore.exception.ResourceConflictException; -import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; -import it.pagopa.selfcare.mscore.model.error.Problem; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.core.MethodParameter; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.validation.BindException; -import org.springframework.web.bind.MethodArgumentNotValidException; -import org.springframework.web.bind.MissingServletRequestParameterException; -import org.springframework.web.context.request.ServletWebRequest; -import org.springframework.web.context.request.WebRequest; - -import javax.servlet.http.HttpServletRequest; -import java.lang.reflect.Constructor; -import java.util.List; -import java.util.Objects; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -@ExtendWith(MockitoExtension.class) -class CustomExceptionHandlerTest { - /** - * Method under test: {@link CustomExceptionHandler#handleMissingServletRequestParameter(MissingServletRequestParameterException, HttpHeaders, HttpStatus, WebRequest)} - */ - @Test - void testHandleMissingServletRequestParameter() { - CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); - MissingServletRequestParameterException ex = new MissingServletRequestParameterException("Parameter Name", - "Parameter Type"); - - HttpHeaders httpHeaders = new HttpHeaders(); - ResponseEntity actualHandleMissingServletRequestParameterResult = customExceptionHandler - .handleMissingServletRequestParameter(ex, httpHeaders, HttpStatus.CONTINUE, - new ServletWebRequest(new MockHttpServletRequest())); - assertTrue(actualHandleMissingServletRequestParameterResult.hasBody()); - assertEquals(1, actualHandleMissingServletRequestParameterResult.getHeaders().size()); - assertEquals(HttpStatus.BAD_REQUEST, actualHandleMissingServletRequestParameterResult.getStatusCode()); - assertEquals(400, ((Problem) Objects.requireNonNull(actualHandleMissingServletRequestParameterResult.getBody())).getStatus().intValue()); - assertEquals(1, ((Problem) actualHandleMissingServletRequestParameterResult.getBody()).getErrors().size()); - List getResult = httpHeaders.get(HttpHeaders.CONTENT_TYPE); - assertEquals(1, Objects.requireNonNull(getResult).size()); - assertEquals("application/json", getResult.get(0)); - } - - /** - * Method under test: {@link CustomExceptionHandler#handleMethodArgumentNotValid(MethodArgumentNotValidException, HttpHeaders, HttpStatus, WebRequest)} - */ - @Test - void testHandleMethodArgumentNotValid() throws NoSuchMethodException { - CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); - Constructor constructor = CustomExceptionHandler.class.getConstructor(); - MethodParameter parameter = new MethodParameter(constructor,-1); - - MethodArgumentNotValidException ex = new MethodArgumentNotValidException(parameter, - new BindException("Target", "Object Name")); - - HttpHeaders headers = new HttpHeaders(); - customExceptionHandler.handleMethodArgumentNotValid(ex, headers, HttpStatus.CONTINUE, - new ServletWebRequest(new MockHttpServletRequest())); - - HttpHeaders httpHeaders = new HttpHeaders(); - ResponseEntity actualHandleMissingServletRequestParameterResult = customExceptionHandler - .handleMethodArgumentNotValid(ex, httpHeaders, HttpStatus.CONTINUE, - new ServletWebRequest(new MockHttpServletRequest())); - assertTrue(actualHandleMissingServletRequestParameterResult.hasBody()); - assertEquals(1, actualHandleMissingServletRequestParameterResult.getHeaders().size()); - assertEquals(HttpStatus.BAD_REQUEST, actualHandleMissingServletRequestParameterResult.getStatusCode()); - assertEquals(400, ((Problem) Objects.requireNonNull(actualHandleMissingServletRequestParameterResult.getBody())).getStatus().intValue()); - assertEquals(1, ((Problem) actualHandleMissingServletRequestParameterResult.getBody()).getErrors().size()); - } - - /** - * Method under test: {@link CustomExceptionHandler#handleResourceNotFoundException(HttpServletRequest, ResourceNotFoundException)} - */ - @Test - void testHandleResourceNotFoundException() { - CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); - MockHttpServletRequest request = new MockHttpServletRequest(); - - ResponseEntity actualHandleResourceNotFoundExceptionResult = customExceptionHandler - .handleResourceNotFoundException(request, new ResourceNotFoundException("An error occurred", "Code")); - assertTrue(actualHandleResourceNotFoundExceptionResult.hasBody()); - assertEquals(1, actualHandleResourceNotFoundExceptionResult.getHeaders().size()); - assertEquals(HttpStatus.NOT_FOUND, actualHandleResourceNotFoundExceptionResult.getStatusCode()); - Problem body = actualHandleResourceNotFoundExceptionResult.getBody(); - assertEquals(404, Objects.requireNonNull(body).getStatus().intValue()); - assertEquals(1, body.getErrors().size()); - } - - /** - * Method under test: {@link CustomExceptionHandler#handleResourceConflictException(HttpServletRequest, ResourceConflictException)} - */ - @Test - void testHandleResourceConflictException() { - CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); - MockHttpServletRequest request = new MockHttpServletRequest(); - ResponseEntity actualHandleResourceConflictExceptionResult = customExceptionHandler - .handleResourceConflictException(request, new ResourceConflictException("An error occurred", "Code")); - assertTrue(actualHandleResourceConflictExceptionResult.hasBody()); - assertEquals(1, actualHandleResourceConflictExceptionResult.getHeaders().size()); - assertEquals(HttpStatus.CONFLICT, actualHandleResourceConflictExceptionResult.getStatusCode()); - Problem body = actualHandleResourceConflictExceptionResult.getBody(); - assertEquals(409, Objects.requireNonNull(body).getStatus().intValue()); - assertEquals(1, body.getErrors().size()); - } - - /** - * Method under test: {@link CustomExceptionHandler#handleInvalidRequestException(HttpServletRequest, InvalidRequestException)} - */ - @Test - void testHandleInvalidRequestException() { - CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); - MockHttpServletRequest request = new MockHttpServletRequest(); - ResponseEntity actualHandleInvalidRequestExceptionResult = customExceptionHandler - .handleInvalidRequestException(request, new InvalidRequestException("An error occurred", "Code")); - assertTrue(actualHandleInvalidRequestExceptionResult.hasBody()); - assertEquals(1, actualHandleInvalidRequestExceptionResult.getHeaders().size()); - assertEquals(HttpStatus.BAD_REQUEST, actualHandleInvalidRequestExceptionResult.getStatusCode()); - Problem body = actualHandleInvalidRequestExceptionResult.getBody(); - assertEquals(400, Objects.requireNonNull(body).getStatus().intValue()); - assertEquals(1, body.getErrors().size()); - } - - /** - * Method under test: {@link CustomExceptionHandler#handleException(HttpServletRequest, Exception)} - */ - @Test - void testHandleException() { - CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); - MockHttpServletRequest request = new MockHttpServletRequest(); - ResponseEntity actualHandleExceptionResult = customExceptionHandler.handleException(request, - new Exception()); - assertTrue(actualHandleExceptionResult.hasBody()); - assertTrue(actualHandleExceptionResult.getHeaders().isEmpty()); - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualHandleExceptionResult.getStatusCode()); - Problem body = actualHandleExceptionResult.getBody(); - assertEquals(1, Objects.requireNonNull(body).getErrors().size()); - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR.value(), body.getStatus().intValue()); - } - - @Test - void handleMsCoreException() { - CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); - MockHttpServletRequest request = new MockHttpServletRequest(); - ResponseEntity actualHandleInvalidRequestExceptionResult = customExceptionHandler - .handleMsCoreException(request, new MsCoreException("An error occurred", "Code")); - assertTrue(actualHandleInvalidRequestExceptionResult.hasBody()); - assertEquals(1, actualHandleInvalidRequestExceptionResult.getHeaders().size()); - } - - -} - diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/filter/LogFilterTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/filter/LogFilterTest.java deleted file mode 100644 index 447d906..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/filter/LogFilterTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package it.pagopa.selfcare.mscore.web.filter; - -import org.apache.catalina.connector.Response; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.mock.web.MockHttpServletResponse; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import java.io.IOException; -import java.io.UnsupportedEncodingException; - -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.*; - -@ExtendWith(SpringExtension.class) -class LogFilterTest { - @InjectMocks - private LogFilter logFilter; - - @Test - void testDoFilter() throws IOException, ServletException { - MockHttpServletRequest request = new MockHttpServletRequest(); - MockHttpServletResponse response = new MockHttpServletResponse(); - FilterChain filterChain = mock(FilterChain.class); - doNothing().when(filterChain).doFilter(any(), any()); - logFilter.doFilter(request, response, filterChain); - verify(filterChain).doFilter(any(), any()); - } - - /** - * Method under test: {@link LogFilter#doFilter(ServletRequest, ServletResponse, FilterChain)} - */ - @Test - void testDoFilter4() throws IOException, ServletException { - MockHttpServletRequest request = new MockHttpServletRequest(); - MockHttpServletResponse response = new MockHttpServletResponse(); - FilterChain filterChain = mock(FilterChain.class); - doNothing().when(filterChain).doFilter(any(), any()); - logFilter.doFilter(request, response, filterChain); - verify(filterChain).doFilter(any(), any()); - } - - /** - * Method under test: {@link LogFilter#doFilter(ServletRequest, ServletResponse, FilterChain)} - */ - @Test - void testDoFilter5() throws IOException, ServletException { - MockHttpServletRequest request = new MockHttpServletRequest(); - Response response = new Response(); - FilterChain filterChain = mock(FilterChain.class); - doThrow(new UnsupportedEncodingException()).when(filterChain) - .doFilter(any(), any()); - assertThrows(UnsupportedEncodingException.class, () -> logFilter.doFilter(request, response, filterChain)); - verify(filterChain).doFilter(any(), any()); - } -} - diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustomTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustomTest.java deleted file mode 100644 index e6b90e2..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustomTest.java +++ /dev/null @@ -1,1248 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.mapper; - -import it.pagopa.selfcare.commons.base.security.PartyRole; -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.Env; -import it.pagopa.selfcare.mscore.constant.Origin; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import it.pagopa.selfcare.mscore.model.user.ProductManagerInfo; -import it.pagopa.selfcare.mscore.web.TestUtils; -import it.pagopa.selfcare.mscore.web.model.institution.*; -import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -class InstitutionMapperCustomTest { - - Institution createDmmyInstitution() { - - Institution dummyInstitution = new Institution(); - dummyInstitution.setId("42"); - dummyInstitution.setExternalId("42"); - dummyInstitution.setOrigin(Origin.MOCK.name()); - dummyInstitution.setOriginId("42"); - dummyInstitution.setDescription("The characteristics of someone or something"); - dummyInstitution.setInstitutionType(InstitutionType.PA); - dummyInstitution.setDigitalAddress("42 Main St"); - dummyInstitution.setTaxCode("taxCode"); - dummyInstitution.setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); - dummyInstitution.setAddress("42 Main St"); - dummyInstitution.setBusinessRegisterPlace("Business Register Place"); - dummyInstitution.setRea("Rea"); - dummyInstitution.setZipCode("zipCpde"); - dummyInstitution.setShareCapital("Share Capital"); - - - PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider("Abi Code", "42", - "Legal Register Name", "42", true); - dummyInstitution.setPaymentServiceProvider(paymentServiceProvider); - - return dummyInstitution; - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} - */ - @Test - void testToInstitutionManagerResponse6() { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setClosedAt(null); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setTokenId("42"); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - - Institution institution = new Institution(); - institution.setOnboarding(onboardingList); - - ProductManagerInfo productManagerInfo = new ProductManagerInfo(); - productManagerInfo.setProducts(new ArrayList<>()); - productManagerInfo.setInstitution(institution); - InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom - .toInstitutionManagerResponse(productManagerInfo, "42"); - assertNull(actualToInstitutionManagerResponseResult.getTo()); - assertNull(actualToInstitutionManagerResponseResult.getFrom()); - assertEquals("Pricing Plan", actualToInstitutionManagerResponseResult.getPricingPlan()); - InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); - assertNull(institutionUpdate.getTaxCode()); - assertNull(institutionUpdate.getSupportPhone()); - assertNull(institutionUpdate.getSupportEmail()); - assertNull(institutionUpdate.getShareCapital()); - assertNull(institutionUpdate.getRea()); - assertNull(institutionUpdate.getInstitutionType()); - BillingResponse billing1 = actualToInstitutionManagerResponseResult.getBilling(); - assertTrue(billing1.isPublicServices()); - assertEquals("Recipient Code", billing1.getRecipientCode()); - assertNull(institutionUpdate.getBusinessRegisterPlace()); - assertEquals("42", billing1.getVatNumber()); - assertNull(institutionUpdate.getDescription()); - assertNull(institutionUpdate.getDigitalAddress()); - assertNull(institutionUpdate.getZipCode()); - assertFalse(institutionUpdate.isImported()); - assertNull(institutionUpdate.getAddress()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} - */ - @Test - void testToInstitutionManagerResponse7() { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setClosedAt(null); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setTokenId("42"); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - - Institution institution = new Institution(); - institution.setOnboarding(onboardingList); - - OnboardedProduct onboardedProduct = new OnboardedProduct(); - onboardedProduct.setContract("Contract"); - onboardedProduct.setCreatedAt(null); - onboardedProduct.setEnv(Env.ROOT); - onboardedProduct.setProductId("42"); - onboardedProduct.setProductRole("Product Role"); - onboardedProduct.setRelationshipId("42"); - onboardedProduct.setRole(PartyRole.MANAGER); - onboardedProduct.setStatus(RelationshipState.PENDING); - onboardedProduct.setTokenId("42"); - onboardedProduct.setUpdatedAt(null); - - ArrayList onboardedProductList = new ArrayList<>(); - onboardedProductList.add(onboardedProduct); - - ProductManagerInfo productManagerInfo = new ProductManagerInfo(); - productManagerInfo.setProducts(onboardedProductList); - productManagerInfo.setInstitution(institution); - InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom - .toInstitutionManagerResponse(productManagerInfo, "42"); - assertNull(actualToInstitutionManagerResponseResult.getUpdatedAt()); - assertNull(actualToInstitutionManagerResponseResult.getCreatedAt()); - assertEquals("42", actualToInstitutionManagerResponseResult.getId()); - assertNull(actualToInstitutionManagerResponseResult.getTo()); - assertEquals(RelationshipState.PENDING, actualToInstitutionManagerResponseResult.getState()); - assertNull(actualToInstitutionManagerResponseResult.getFrom()); - assertEquals("Pricing Plan", actualToInstitutionManagerResponseResult.getPricingPlan()); - ProductInfo product = actualToInstitutionManagerResponseResult.getProduct(); - assertEquals("42", product.getId()); - assertNull(product.getCreatedAt()); - InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); - assertNull(institutionUpdate.getZipCode()); - assertNull(institutionUpdate.getTaxCode()); - assertNull(institutionUpdate.getSupportPhone()); - assertNull(institutionUpdate.getSupportEmail()); - assertNull(institutionUpdate.getShareCapital()); - assertNull(institutionUpdate.getRea()); - assertNull(institutionUpdate.getInstitutionType()); - BillingResponse billing1 = actualToInstitutionManagerResponseResult.getBilling(); - assertTrue(billing1.isPublicServices()); - assertEquals("Recipient Code", billing1.getRecipientCode()); - assertNull(institutionUpdate.getBusinessRegisterPlace()); - assertEquals("42", billing1.getVatNumber()); - assertNull(institutionUpdate.getDescription()); - assertNull(institutionUpdate.getDigitalAddress()); - assertEquals("Product Role", product.getRole()); - assertFalse(institutionUpdate.isImported()); - assertNull(institutionUpdate.getAddress()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} - */ - @Test - void testToInstitutionManagerResponse8() { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setClosedAt(null); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setTokenId("42"); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - - Institution institution = new Institution(); - institution.setOnboarding(onboardingList); - - OnboardedProduct onboardedProduct = new OnboardedProduct(); - onboardedProduct.setContract("Contract"); - onboardedProduct.setCreatedAt(null); - onboardedProduct.setEnv(Env.ROOT); - onboardedProduct.setProductId("42"); - onboardedProduct.setProductRole("Product Role"); - onboardedProduct.setRelationshipId("42"); - onboardedProduct.setRole(PartyRole.MANAGER); - onboardedProduct.setStatus(RelationshipState.PENDING); - onboardedProduct.setTokenId("42"); - onboardedProduct.setUpdatedAt(null); - - OnboardedProduct onboardedProduct1 = new OnboardedProduct(); - onboardedProduct1.setContract("it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct"); - onboardedProduct1.setCreatedAt(null); - onboardedProduct1.setEnv(Env.DEV); - onboardedProduct1.setProductId("Product Id"); - onboardedProduct1.setProductRole("it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct"); - onboardedProduct1.setRelationshipId("Relationship Id"); - onboardedProduct1.setRole(PartyRole.DELEGATE); - onboardedProduct1.setStatus(RelationshipState.ACTIVE); - onboardedProduct1.setTokenId("ABC123"); - onboardedProduct1.setUpdatedAt(null); - - ArrayList onboardedProductList = new ArrayList<>(); - onboardedProductList.add(onboardedProduct1); - onboardedProductList.add(onboardedProduct); - - ProductManagerInfo productManagerInfo = new ProductManagerInfo(); - productManagerInfo.setProducts(onboardedProductList); - productManagerInfo.setInstitution(institution); - InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom - .toInstitutionManagerResponse(productManagerInfo, "42"); - assertNull(actualToInstitutionManagerResponseResult.getUpdatedAt()); - assertNull(actualToInstitutionManagerResponseResult.getCreatedAt()); - assertEquals("42", actualToInstitutionManagerResponseResult.getId()); - assertNull(actualToInstitutionManagerResponseResult.getTo()); - assertEquals(RelationshipState.PENDING, actualToInstitutionManagerResponseResult.getState()); - assertNull(actualToInstitutionManagerResponseResult.getFrom()); - assertEquals("Pricing Plan", actualToInstitutionManagerResponseResult.getPricingPlan()); - ProductInfo product = actualToInstitutionManagerResponseResult.getProduct(); - assertEquals("42", product.getId()); - assertNull(product.getCreatedAt()); - InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); - assertNull(institutionUpdate.getZipCode()); - assertNull(institutionUpdate.getTaxCode()); - assertNull(institutionUpdate.getSupportPhone()); - assertNull(institutionUpdate.getSupportEmail()); - assertNull(institutionUpdate.getShareCapital()); - assertNull(institutionUpdate.getRea()); - assertNull(institutionUpdate.getInstitutionType()); - BillingResponse billing1 = actualToInstitutionManagerResponseResult.getBilling(); - assertTrue(billing1.isPublicServices()); - assertEquals("Recipient Code", billing1.getRecipientCode()); - assertNull(institutionUpdate.getBusinessRegisterPlace()); - assertEquals("42", billing1.getVatNumber()); - assertNull(institutionUpdate.getDescription()); - assertNull(institutionUpdate.getDigitalAddress()); - assertEquals("Product Role", product.getRole()); - assertFalse(institutionUpdate.isImported()); - assertNull(institutionUpdate.getAddress()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} - */ - @Test - void testToInstitutionManagerResponse9() { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setClosedAt(null); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setTokenId("42"); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - Institution toInstitutionResult = InstitutionMapperCustom.toInstitution(new InstitutionRequest(), "42"); - toInstitutionResult.setOnboarding(onboardingList); - - ProductManagerInfo productManagerInfo = new ProductManagerInfo(); - ArrayList onboardedProductList = new ArrayList<>(); - productManagerInfo.setProducts(onboardedProductList); - productManagerInfo.setInstitution(toInstitutionResult); - InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom - .toInstitutionManagerResponse(productManagerInfo, "42"); - assertNull(actualToInstitutionManagerResponseResult.getTo()); - assertNull(actualToInstitutionManagerResponseResult.getFrom()); - assertEquals("Pricing Plan", actualToInstitutionManagerResponseResult.getPricingPlan()); - InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); - assertNull(institutionUpdate.getTaxCode()); - assertNull(institutionUpdate.getSupportPhone()); - assertNull(institutionUpdate.getSupportEmail()); - assertNull(institutionUpdate.getShareCapital()); - assertNull(institutionUpdate.getRea()); - assertNull(institutionUpdate.getInstitutionType()); - BillingResponse billing1 = actualToInstitutionManagerResponseResult.getBilling(); - assertTrue(billing1.isPublicServices()); - assertEquals("Recipient Code", billing1.getRecipientCode()); - assertNull(institutionUpdate.getBusinessRegisterPlace()); - assertEquals("42", billing1.getVatNumber()); - assertNull(institutionUpdate.getDescription()); - assertNull(institutionUpdate.getDigitalAddress()); - assertNull(institutionUpdate.getZipCode()); - assertFalse(institutionUpdate.isImported()); - assertNull(institutionUpdate.getAddress()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} - */ - @Test - void testToInstitutionManagerResponse10() { - Billing billing = TestUtils.createSimpleBilling(); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setClosedAt(null); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setTokenId("42"); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - - Institution institution = createDmmyInstitution(); - institution.setOnboarding(onboardingList); - institution.setImported(true); - - ProductManagerInfo productManagerInfo = new ProductManagerInfo(); - ArrayList onboardedProductList = new ArrayList<>(); - productManagerInfo.setProducts(onboardedProductList); - productManagerInfo.setInstitution(institution); - - InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom - .toInstitutionManagerResponse(productManagerInfo, "42"); - - assertEquals("42", actualToInstitutionManagerResponseResult.getTo()); - assertNull(actualToInstitutionManagerResponseResult.getFrom()); - assertEquals(onboarding.getPricingPlan(), actualToInstitutionManagerResponseResult.getPricingPlan()); - InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); - assertEquals(institution.getTaxCode(), institutionUpdate.getTaxCode()); - assertEquals(institution.getSupportPhone(), institutionUpdate.getSupportPhone()); - assertEquals(institution.getSupportEmail(), institutionUpdate.getSupportEmail()); - assertEquals(institution.getShareCapital(), institutionUpdate.getShareCapital()); - assertEquals(institution.getRea(), institutionUpdate.getRea()); - assertEquals(InstitutionType.PA, institutionUpdate.getInstitutionType()); - BillingResponse billing2 = actualToInstitutionManagerResponseResult.getBilling(); - assertTrue(billing2.isPublicServices()); - assertEquals("Recipient Code", billing2.getRecipientCode()); - assertEquals("Business Register Place", institutionUpdate.getBusinessRegisterPlace()); - assertEquals("42", billing2.getVatNumber()); - assertEquals("The characteristics of someone or something", institutionUpdate.getDescription()); - assertEquals(institution.getDigitalAddress(), institutionUpdate.getDigitalAddress()); - assertEquals(institution.getZipCode(), institutionUpdate.getZipCode()); - assertTrue(institutionUpdate.isImported()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionBillingResponse(Institution, String)} - */ - @Test - void testToInstitutionBillingResponse2() { - Institution institution = new Institution(); - institution.setOnboarding(new ArrayList<>()); - InstitutionBillingResponse actualToInstitutionBillingResponseResult = InstitutionMapperCustom - .toInstitutionBillingResponse(institution, "42"); - assertNull(actualToInstitutionBillingResponseResult.getAddress()); - assertNull(actualToInstitutionBillingResponseResult.getZipCode()); - assertNull(actualToInstitutionBillingResponseResult.getTaxCode()); - assertNull(actualToInstitutionBillingResponseResult.getOriginId()); - assertNull(actualToInstitutionBillingResponseResult.getOrigin()); - assertNull(actualToInstitutionBillingResponseResult.getInstitutionType()); - assertNull(actualToInstitutionBillingResponseResult.getInstitutionId()); - assertNull(actualToInstitutionBillingResponseResult.getExternalId()); - assertNull(actualToInstitutionBillingResponseResult.getDigitalAddress()); - assertNull(actualToInstitutionBillingResponseResult.getDescription()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionBillingResponse(Institution, String)} - */ - @Test - void testToInstitutionBillingResponse3() { - assertNull(InstitutionMapperCustom.toInstitutionBillingResponse(null, "42")); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionBillingResponse(Institution, String)} - */ - @Test - void testToInstitutionBillingResponse4() { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setClosedAt(null); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setTokenId("42"); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - - Institution institution = new Institution(); - institution.setOnboarding(onboardingList); - InstitutionBillingResponse actualToInstitutionBillingResponseResult = InstitutionMapperCustom - .toInstitutionBillingResponse(institution, "42"); - assertNull(actualToInstitutionBillingResponseResult.getAddress()); - assertNull(actualToInstitutionBillingResponseResult.getZipCode()); - assertNull(actualToInstitutionBillingResponseResult.getTaxCode()); - assertEquals("Pricing Plan", actualToInstitutionBillingResponseResult.getPricingPlan()); - assertNull(actualToInstitutionBillingResponseResult.getOriginId()); - assertNull(actualToInstitutionBillingResponseResult.getOrigin()); - assertNull(actualToInstitutionBillingResponseResult.getInstitutionType()); - assertNull(actualToInstitutionBillingResponseResult.getInstitutionId()); - assertNull(actualToInstitutionBillingResponseResult.getExternalId()); - assertNull(actualToInstitutionBillingResponseResult.getDigitalAddress()); - assertNull(actualToInstitutionBillingResponseResult.getDescription()); - BillingResponse billing1 = actualToInstitutionBillingResponseResult.getBilling(); - assertEquals("Recipient Code", billing1.getRecipientCode()); - assertTrue(billing1.isPublicServices()); - assertEquals("42", billing1.getVatNumber()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionBillingResponse(Institution, String)} - */ - @Test - void testToInstitutionBillingResponse5() { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setClosedAt(null); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setTokenId("42"); - onboarding.setUpdatedAt(null); - - Billing billing1 = new Billing(); - billing1.setPublicServices(false); - billing1.setRecipientCode("it.pagopa.selfcare.mscore.model.institution.Billing"); - billing1.setVatNumber("Vat Number"); - - Onboarding onboarding1 = new Onboarding(); - onboarding1.setBilling(billing1); - onboarding1.setClosedAt(null); - onboarding1.setContract("it.pagopa.selfcare.mscore.model.institution.Onboarding"); - onboarding1.setCreatedAt(null); - onboarding1.setPricingPlan("it.pagopa.selfcare.mscore.model.institution.Onboarding"); - onboarding1.setProductId("Product Id"); - onboarding1.setStatus(RelationshipState.ACTIVE); - onboarding1.setTokenId("ABC123"); - onboarding1.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding1); - onboardingList.add(onboarding); - - Institution institution = new Institution(); - institution.setOnboarding(onboardingList); - InstitutionBillingResponse actualToInstitutionBillingResponseResult = InstitutionMapperCustom - .toInstitutionBillingResponse(institution, "42"); - assertNull(actualToInstitutionBillingResponseResult.getAddress()); - assertNull(actualToInstitutionBillingResponseResult.getZipCode()); - assertNull(actualToInstitutionBillingResponseResult.getTaxCode()); - assertEquals("Pricing Plan", actualToInstitutionBillingResponseResult.getPricingPlan()); - assertNull(actualToInstitutionBillingResponseResult.getOriginId()); - assertNull(actualToInstitutionBillingResponseResult.getOrigin()); - assertNull(actualToInstitutionBillingResponseResult.getInstitutionType()); - assertNull(actualToInstitutionBillingResponseResult.getInstitutionId()); - assertNull(actualToInstitutionBillingResponseResult.getExternalId()); - assertNull(actualToInstitutionBillingResponseResult.getDigitalAddress()); - assertNull(actualToInstitutionBillingResponseResult.getDescription()); - BillingResponse billing2 = actualToInstitutionBillingResponseResult.getBilling(); - assertEquals("Recipient Code", billing2.getRecipientCode()); - assertTrue(billing2.isPublicServices()); - assertEquals("42", billing2.getVatNumber()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitution(InstitutionRequest, String)} - */ - @Test - void testToInstitution() { - BillingRequest billingRequest = new BillingRequest(); - billingRequest.setPublicServices(true); - billingRequest.setRecipientCode("Recipient Code"); - billingRequest.setVatNumber("42"); - - DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); - dataProtectionOfficerRequest.setAddress("42 Main St"); - dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); - dataProtectionOfficerRequest.setPec("Pec"); - - PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); - paymentServiceProviderRequest.setAbiCode("Abi Code"); - paymentServiceProviderRequest.setBusinessRegisterNumber("42"); - paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); - paymentServiceProviderRequest.setLegalRegisterNumber("42"); - paymentServiceProviderRequest.setVatNumberGroup(true); - - InstitutionRequest institutionRequest = new InstitutionRequest(); - institutionRequest.setAddress("42 Main St"); - ArrayList attributesRequestList = new ArrayList<>(); - institutionRequest.setAttributes(attributesRequestList); - institutionRequest.setBilling(billingRequest); - institutionRequest.setBusinessRegisterPlace("Business Register Place"); - institutionRequest.setCreatedAt(null); - institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); - institutionRequest.setDescription("The characteristics of someone or something"); - institutionRequest.setDigitalAddress("42 Main St"); - institutionRequest.setExternalId("42"); - institutionRequest.setGeographicTaxonomies(new ArrayList<>()); - institutionRequest.setId("42"); - institutionRequest.setImported(true); - institutionRequest.setInstitutionType(InstitutionType.PA); - institutionRequest.setOnboarding(new ArrayList<>()); - institutionRequest.setOrigin(Origin.MOCK.name()); - institutionRequest.setOriginId("42"); - institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); - institutionRequest.setRea("Rea"); - institutionRequest.setShareCapital("Share Capital"); - institutionRequest.setSupportEmail("jane.doe@example.org"); - institutionRequest.setSupportPhone("6625550144"); - institutionRequest.setTaxCode("Tax Code"); - institutionRequest.setUpdatedAt(null); - institutionRequest.setZipCode("21654"); - Institution actualToInstitutionResult = InstitutionMapperCustom.toInstitution(institutionRequest, "42"); - assertEquals("42 Main St", actualToInstitutionResult.getAddress()); - assertEquals("21654", actualToInstitutionResult.getZipCode()); - assertEquals("Tax Code", actualToInstitutionResult.getTaxCode()); - assertEquals("6625550144", actualToInstitutionResult.getSupportPhone()); - assertEquals("jane.doe@example.org", actualToInstitutionResult.getSupportEmail()); - assertEquals("Share Capital", actualToInstitutionResult.getShareCapital()); - assertEquals("Rea", actualToInstitutionResult.getRea()); - assertEquals("Business Register Place", actualToInstitutionResult.getBusinessRegisterPlace()); - assertEquals("42 Main St", actualToInstitutionResult.getDigitalAddress()); - assertEquals("42", actualToInstitutionResult.getExternalId()); - assertEquals(InstitutionType.PA, actualToInstitutionResult.getInstitutionType()); - assertEquals("The characteristics of someone or something", actualToInstitutionResult.getDescription()); - DataProtectionOfficer dataProtectionOfficer = actualToInstitutionResult.getDataProtectionOfficer(); - assertEquals("Pec", dataProtectionOfficer.getPec()); - assertEquals("jane.doe@example.org", dataProtectionOfficer.getEmail()); - assertEquals("42 Main St", dataProtectionOfficer.getAddress()); - PaymentServiceProvider paymentServiceProvider = actualToInstitutionResult.getPaymentServiceProvider(); - assertEquals("42", paymentServiceProvider.getLegalRegisterNumber()); - assertEquals("Abi Code", paymentServiceProvider.getAbiCode()); - assertEquals("Legal Register Name", paymentServiceProvider.getLegalRegisterName()); - assertTrue(paymentServiceProvider.isVatNumberGroup()); - assertEquals("42", paymentServiceProvider.getBusinessRegisterNumber()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitution(InstitutionRequest, String)} - */ - @Test - void testToInstitution2() { - AttributesRequest attributesRequest = new AttributesRequest(); - attributesRequest.setCode("Code"); - attributesRequest.setDescription("The characteristics of someone or something"); - attributesRequest.setOrigin("Origin"); - - ArrayList attributesRequestList = new ArrayList<>(); - attributesRequestList.add(attributesRequest); - - BillingRequest billingRequest = new BillingRequest(); - billingRequest.setPublicServices(true); - billingRequest.setRecipientCode("Recipient Code"); - billingRequest.setVatNumber("42"); - - DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); - dataProtectionOfficerRequest.setAddress("42 Main St"); - dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); - dataProtectionOfficerRequest.setPec("Pec"); - - PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); - paymentServiceProviderRequest.setAbiCode("Abi Code"); - paymentServiceProviderRequest.setBusinessRegisterNumber("42"); - paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); - paymentServiceProviderRequest.setLegalRegisterNumber("42"); - paymentServiceProviderRequest.setVatNumberGroup(true); - - InstitutionRequest institutionRequest = new InstitutionRequest(); - institutionRequest.setAddress("42 Main St"); - institutionRequest.setAttributes(attributesRequestList); - institutionRequest.setBilling(billingRequest); - institutionRequest.setBusinessRegisterPlace("Business Register Place"); - institutionRequest.setCreatedAt(null); - institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); - institutionRequest.setDescription("The characteristics of someone or something"); - institutionRequest.setDigitalAddress("42 Main St"); - institutionRequest.setExternalId("42"); - ArrayList geoTaxonomiesList = new ArrayList<>(); - institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); - institutionRequest.setId("42"); - institutionRequest.setImported(true); - institutionRequest.setInstitutionType(InstitutionType.PA); - institutionRequest.setOnboarding(new ArrayList<>()); - institutionRequest.setOrigin(Origin.MOCK.name()); - institutionRequest.setOriginId("42"); - institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); - institutionRequest.setRea("Rea"); - institutionRequest.setShareCapital("Share Capital"); - institutionRequest.setSupportEmail("jane.doe@example.org"); - institutionRequest.setSupportPhone("6625550144"); - institutionRequest.setTaxCode("Tax Code"); - institutionRequest.setUpdatedAt(null); - institutionRequest.setZipCode("21654"); - Institution actualToInstitutionResult = InstitutionMapperCustom.toInstitution(institutionRequest, "42"); - assertEquals("42 Main St", actualToInstitutionResult.getAddress()); - assertEquals("21654", actualToInstitutionResult.getZipCode()); - assertEquals("Tax Code", actualToInstitutionResult.getTaxCode()); - assertEquals("6625550144", actualToInstitutionResult.getSupportPhone()); - assertEquals("jane.doe@example.org", actualToInstitutionResult.getSupportEmail()); - assertEquals("Share Capital", actualToInstitutionResult.getShareCapital()); - assertEquals("Rea", actualToInstitutionResult.getRea()); - List attributes = actualToInstitutionResult.getAttributes(); - assertEquals(1, attributes.size()); - assertEquals("Business Register Place", actualToInstitutionResult.getBusinessRegisterPlace()); - assertEquals("42 Main St", actualToInstitutionResult.getDigitalAddress()); - assertEquals("42", actualToInstitutionResult.getExternalId()); - assertEquals(InstitutionType.PA, actualToInstitutionResult.getInstitutionType()); - assertEquals("The characteristics of someone or something", actualToInstitutionResult.getDescription()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitution(InstitutionRequest, String)} - */ - @Test - void testToInstitution3() { - BillingRequest billingRequest = new BillingRequest(); - billingRequest.setPublicServices(true); - billingRequest.setRecipientCode("Recipient Code"); - billingRequest.setVatNumber("42"); - - DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); - dataProtectionOfficerRequest.setAddress("42 Main St"); - dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); - dataProtectionOfficerRequest.setPec("Pec"); - - GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); - geoTaxonomies.setCode("Code"); - geoTaxonomies.setDesc("The characteristics of someone or something"); - - ArrayList geoTaxonomiesList = new ArrayList<>(); - geoTaxonomiesList.add(geoTaxonomies); - - PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); - paymentServiceProviderRequest.setAbiCode("Abi Code"); - paymentServiceProviderRequest.setBusinessRegisterNumber("42"); - paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); - paymentServiceProviderRequest.setLegalRegisterNumber("42"); - paymentServiceProviderRequest.setVatNumberGroup(true); - - InstitutionRequest institutionRequest = new InstitutionRequest(); - institutionRequest.setAddress("42 Main St"); - ArrayList attributesRequestList = new ArrayList<>(); - institutionRequest.setAttributes(attributesRequestList); - institutionRequest.setBilling(billingRequest); - institutionRequest.setBusinessRegisterPlace("Business Register Place"); - institutionRequest.setCreatedAt(null); - institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); - institutionRequest.setDescription("The characteristics of someone or something"); - institutionRequest.setDigitalAddress("42 Main St"); - institutionRequest.setExternalId("42"); - institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); - institutionRequest.setId("42"); - institutionRequest.setImported(true); - institutionRequest.setInstitutionType(InstitutionType.PA); - institutionRequest.setOnboarding(new ArrayList<>()); - institutionRequest.setOrigin(Origin.MOCK.name()); - institutionRequest.setOriginId("42"); - institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); - institutionRequest.setRea("Rea"); - institutionRequest.setShareCapital("Share Capital"); - institutionRequest.setSupportEmail("jane.doe@example.org"); - institutionRequest.setSupportPhone("6625550144"); - institutionRequest.setTaxCode("Tax Code"); - institutionRequest.setUpdatedAt(null); - institutionRequest.setZipCode("21654"); - Institution actualToInstitutionResult = InstitutionMapperCustom.toInstitution(institutionRequest, "42"); - assertEquals("42 Main St", actualToInstitutionResult.getAddress()); - assertEquals("21654", actualToInstitutionResult.getZipCode()); - assertEquals("Tax Code", actualToInstitutionResult.getTaxCode()); - assertEquals("6625550144", actualToInstitutionResult.getSupportPhone()); - assertEquals("jane.doe@example.org", actualToInstitutionResult.getSupportEmail()); - assertEquals("Share Capital", actualToInstitutionResult.getShareCapital()); - assertEquals("Rea", actualToInstitutionResult.getRea()); - assertEquals("Business Register Place", actualToInstitutionResult.getBusinessRegisterPlace()); - assertEquals("42 Main St", actualToInstitutionResult.getDigitalAddress()); - assertEquals("42", actualToInstitutionResult.getExternalId()); - assertEquals(InstitutionType.PA, actualToInstitutionResult.getInstitutionType()); - List geographicTaxonomies = actualToInstitutionResult.getGeographicTaxonomies(); - assertEquals(1, geographicTaxonomies.size()); - assertEquals("The characteristics of someone or something", actualToInstitutionResult.getDescription()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toBillingResponse(Onboarding, Institution)} - */ - @Test - void testToBillingResponse() { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setClosedAt(null); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setTokenId("42"); - onboarding.setUpdatedAt(null); - BillingResponse actualToBillingResponseResult = InstitutionMapperCustom.toBillingResponse(onboarding, new Institution()); - assertEquals("Recipient Code", actualToBillingResponseResult.getRecipientCode()); - assertTrue(actualToBillingResponseResult.isPublicServices()); - assertEquals("42", actualToBillingResponseResult.getVatNumber()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#getBillingFromOnboarding(Onboarding, Institution)} - */ - @Test - void testGetBillingFromOnboarding2() { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Billing billing1 = new Billing(); - billing1.setPublicServices(true); - billing1.setRecipientCode("Recipient Code"); - billing1.setVatNumber("42"); - Onboarding onboarding = mock(Onboarding.class); - when(onboarding.getBilling()).thenReturn(billing1); - doNothing().when(onboarding).setBilling(any()); - doNothing().when(onboarding).setClosedAt(any()); - doNothing().when(onboarding).setContract(any()); - doNothing().when(onboarding).setCreatedAt(any()); - doNothing().when(onboarding).setPricingPlan(any()); - doNothing().when(onboarding).setProductId(any()); - doNothing().when(onboarding).setStatus(any()); - doNothing().when(onboarding).setTokenId(any()); - doNothing().when(onboarding).setUpdatedAt(any()); - onboarding.setBilling(billing); - onboarding.setClosedAt(null); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setTokenId("42"); - onboarding.setUpdatedAt(null); - InstitutionMapperCustom.getBillingFromOnboarding(onboarding, new Institution()); - verify(onboarding, atLeast(1)).getBilling(); - verify(onboarding).setBilling( any()); - verify(onboarding).setClosedAt(any()); - verify(onboarding).setContract(any()); - verify(onboarding).setCreatedAt(any()); - verify(onboarding).setPricingPlan(any()); - verify(onboarding).setProductId(any()); - verify(onboarding).setStatus(any()); - verify(onboarding).setTokenId(any()); - verify(onboarding).setUpdatedAt(any()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toBilling(BillingRequest)} - */ - @Test - void testToBilling() { - BillingRequest billingRequest = new BillingRequest(); - billingRequest.setPublicServices(true); - billingRequest.setRecipientCode("Recipient Code"); - billingRequest.setVatNumber("42"); - Billing actualToBillingResult = InstitutionMapperCustom.toBilling(billingRequest); - assertEquals("Recipient Code", actualToBillingResult.getRecipientCode()); - assertFalse(actualToBillingResult.isPublicServices()); - assertEquals("42", actualToBillingResult.getVatNumber()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toDataProtectionOfficer(DataProtectionOfficerRequest)} - */ - @Test - void testToDataProtectionOfficer() { - DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); - dataProtectionOfficerRequest.setAddress("42 Main St"); - dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); - dataProtectionOfficerRequest.setPec("Pec"); - DataProtectionOfficer actualToDataProtectionOfficerResult = InstitutionMapperCustom - .toDataProtectionOfficer(dataProtectionOfficerRequest); - assertEquals("42 Main St", actualToDataProtectionOfficerResult.getAddress()); - assertEquals("Pec", actualToDataProtectionOfficerResult.getPec()); - assertEquals("jane.doe@example.org", actualToDataProtectionOfficerResult.getEmail()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toDataProtectionOfficerResponse(DataProtectionOfficer)} - */ - @Test - void testToDataProtectionOfficerResponse() { - DataProtectionOfficerResponse actualToDataProtectionOfficerResponseResult = InstitutionMapperCustom - .toDataProtectionOfficerResponse(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); - assertEquals("42 Main St", actualToDataProtectionOfficerResponseResult.getAddress()); - assertEquals("Pec", actualToDataProtectionOfficerResponseResult.getPec()); - assertEquals("jane.doe@example.org", actualToDataProtectionOfficerResponseResult.getEmail()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toAttributes(List)} - */ - @Test - void testToAttributes2() { - AttributesRequest attributesRequest = new AttributesRequest(); - attributesRequest.setCode("Code"); - attributesRequest.setDescription("The characteristics of someone or something"); - attributesRequest.setOrigin("Origin"); - - ArrayList attributesRequestList = new ArrayList<>(); - attributesRequestList.add(attributesRequest); - List actualToAttributesResult = InstitutionMapperCustom.toAttributes(attributesRequestList); - assertEquals(1, actualToAttributesResult.size()); - Attributes getResult = actualToAttributesResult.get(0); - assertEquals("Code", getResult.getCode()); - assertEquals("Origin", getResult.getOrigin()); - assertEquals("The characteristics of someone or something", getResult.getDescription()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toAttributeResponse(List)} - */ - @Test - void testToAttributeResponse() { - assertTrue(InstitutionMapperCustom.toAttributeResponse(new ArrayList<>()).isEmpty()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toAttributeResponse(List)} - */ - @Test - void testToAttributeResponse2() { - Attributes attributes = new Attributes(); - attributes.setCode("Code"); - attributes.setDescription("The characteristics of someone or something"); - attributes.setOrigin("Origin"); - - ArrayList attributesList = new ArrayList<>(); - attributesList.add(attributes); - List actualToAttributeResponseResult = InstitutionMapperCustom.toAttributeResponse(attributesList); - assertEquals(1, actualToAttributeResponseResult.size()); - AttributesResponse getResult = actualToAttributeResponseResult.get(0); - assertEquals("Code", getResult.getCode()); - assertEquals("Origin", getResult.getOrigin()); - assertEquals("The characteristics of someone or something", getResult.getDescription()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toGeoTaxonomies(List)} - */ - @Test - void testToGeoTaxonomies() { - assertTrue(InstitutionMapperCustom.toGeoTaxonomies(new ArrayList<>()).isEmpty()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toGeoTaxonomies(List)} - */ - @Test - void testToGeoTaxonomies2() { - ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); - institutionGeographicTaxonomiesList - .add(new InstitutionGeographicTaxonomies("Code", "The characteristics of someone or something")); - List actualToGeoTaxonomiesResult = InstitutionMapperCustom - .toGeoTaxonomies(institutionGeographicTaxonomiesList); - assertEquals(1, actualToGeoTaxonomiesResult.size()); - GeoTaxonomies getResult = actualToGeoTaxonomiesResult.get(0); - assertEquals("Code", getResult.getCode()); - assertEquals("The characteristics of someone or something", getResult.getDesc()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} - */ - @Test - void testToInstitutionManagementResponse() { - InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom - .toInstitutionManagementResponse(new Institution()); - assertNull(actualToInstitutionManagementResponseResult.getAddress()); - assertFalse(actualToInstitutionManagementResponseResult.isImported()); - assertNull(actualToInstitutionManagementResponseResult.getZipCode()); - assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); - assertNull(actualToInstitutionManagementResponseResult.getTaxCode()); - assertNull(actualToInstitutionManagementResponseResult.getSupportPhone()); - assertNull(actualToInstitutionManagementResponseResult.getSupportEmail()); - assertNull(actualToInstitutionManagementResponseResult.getShareCapital()); - assertNull(actualToInstitutionManagementResponseResult.getRea()); - assertNull(actualToInstitutionManagementResponseResult.getOriginId()); - assertNull(actualToInstitutionManagementResponseResult.getOrigin()); - assertNull(actualToInstitutionManagementResponseResult.getInstitutionType()); - assertNull(actualToInstitutionManagementResponseResult.getId()); - assertNull(actualToInstitutionManagementResponseResult.getExternalId()); - assertNull(actualToInstitutionManagementResponseResult.getDigitalAddress()); - assertNull(actualToInstitutionManagementResponseResult.getDescription()); - assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); - assertNull(actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} - */ - @Test - void testToInstitutionManagementResponse4() { - - Institution institution = createDmmyInstitution(); - institution.setImported(true); - institution.setOnboarding(List.of()); - - InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom - .toInstitutionManagementResponse(institution); - - assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getAddress()); - assertTrue(actualToInstitutionManagementResponseResult.isImported()); - assertEquals(institution.getZipCode(), actualToInstitutionManagementResponseResult.getZipCode()); - assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); - assertEquals(institution.getTaxCode(), actualToInstitutionManagementResponseResult.getTaxCode()); - assertEquals(institution.getSupportPhone(), actualToInstitutionManagementResponseResult.getSupportPhone()); - assertEquals(institution.getSupportEmail(), actualToInstitutionManagementResponseResult.getSupportEmail()); - assertEquals(institution.getShareCapital(), actualToInstitutionManagementResponseResult.getShareCapital()); - assertEquals("Rea", actualToInstitutionManagementResponseResult.getRea()); - assertTrue(actualToInstitutionManagementResponseResult.getProducts().isEmpty()); - assertEquals("42", actualToInstitutionManagementResponseResult.getOriginId()); - assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); - assertEquals("42", actualToInstitutionManagementResponseResult.getExternalId()); - assertEquals(Origin.MOCK.name(), actualToInstitutionManagementResponseResult.getOrigin()); - assertEquals("42", actualToInstitutionManagementResponseResult.getId()); - assertEquals(InstitutionType.PA, actualToInstitutionManagementResponseResult.getInstitutionType()); - assertEquals("Business Register Place", actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); - assertEquals("The characteristics of someone or something", - actualToInstitutionManagementResponseResult.getDescription()); - assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getDigitalAddress()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} - */ - @Test - void testToInstitutionManagementResponse5() { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setClosedAt(null); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setTokenId("42"); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - - Institution institution = createDmmyInstitution(); - institution.setOnboarding(onboardingList); - institution.setImported(true); - - InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom - .toInstitutionManagementResponse(institution); - assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getAddress()); - assertTrue(actualToInstitutionManagementResponseResult.isImported()); - assertEquals(institution.getZipCode(), actualToInstitutionManagementResponseResult.getZipCode()); - assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); - assertEquals(institution.getTaxCode(), actualToInstitutionManagementResponseResult.getTaxCode()); - assertEquals(institution.getSupportPhone(), actualToInstitutionManagementResponseResult.getSupportPhone()); - assertEquals(institution.getSupportEmail(), actualToInstitutionManagementResponseResult.getSupportEmail()); - assertEquals("Share Capital", actualToInstitutionManagementResponseResult.getShareCapital()); - assertEquals("Rea", actualToInstitutionManagementResponseResult.getRea()); - Map products = actualToInstitutionManagementResponseResult.getProducts(); - assertEquals(1, products.size()); - assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); - assertEquals("42", actualToInstitutionManagementResponseResult.getExternalId()); - assertEquals("42", actualToInstitutionManagementResponseResult.getId()); - assertEquals(InstitutionType.PA, actualToInstitutionManagementResponseResult.getInstitutionType()); - assertEquals("Business Register Place", actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); - assertEquals("The characteristics of someone or something", - actualToInstitutionManagementResponseResult.getDescription()); - assertEquals(Origin.MOCK.name(), actualToInstitutionManagementResponseResult.getOrigin()); - assertEquals("42", actualToInstitutionManagementResponseResult.getOriginId()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} - */ - @Test - void testToInstitutionManagementResponse6() { - ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); - institutionGeographicTaxonomiesList - .add(new InstitutionGeographicTaxonomies("Code", "The characteristics of someone or something")); - Institution institution = createDmmyInstitution(); - institution.setGeographicTaxonomies(institutionGeographicTaxonomiesList); - institution.setImported(true); - institution.setOnboarding(List.of()); - - InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom - .toInstitutionManagementResponse(institution); - assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getAddress()); - assertTrue(actualToInstitutionManagementResponseResult.isImported()); - assertEquals(institution.getZipCode(), actualToInstitutionManagementResponseResult.getZipCode()); - assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); - assertEquals(institution.getTaxCode(), actualToInstitutionManagementResponseResult.getTaxCode()); - assertEquals(institution.getSupportPhone(), actualToInstitutionManagementResponseResult.getSupportPhone()); - assertEquals(institution.getSupportEmail(), actualToInstitutionManagementResponseResult.getSupportEmail()); - assertEquals("Share Capital", actualToInstitutionManagementResponseResult.getShareCapital()); - assertEquals("Rea", actualToInstitutionManagementResponseResult.getRea()); - assertTrue(actualToInstitutionManagementResponseResult.getProducts().isEmpty()); - assertEquals("42", actualToInstitutionManagementResponseResult.getOriginId()); - assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); - assertEquals("42", actualToInstitutionManagementResponseResult.getExternalId()); - List geographicTaxonomies = actualToInstitutionManagementResponseResult.getGeographicTaxonomies(); - assertEquals(1, geographicTaxonomies.size()); - assertEquals("42", actualToInstitutionManagementResponseResult.getId()); - assertEquals(InstitutionType.PA, actualToInstitutionManagementResponseResult.getInstitutionType()); - assertEquals("Business Register Place", actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); - assertEquals("The characteristics of someone or something", - actualToInstitutionManagementResponseResult.getDescription()); - assertEquals(Origin.MOCK.name(), actualToInstitutionManagementResponseResult.getOrigin()); - assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getDigitalAddress()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} - */ - @Test - void testToInstitutionManagementResponse7() { - Attributes attributes = new Attributes(); - attributes.setCode("Code"); - attributes.setDescription("The characteristics of someone or something"); - attributes.setOrigin("Origin"); - - ArrayList attributesList = new ArrayList<>(); - attributesList.add(attributes); - - Institution institution = createDmmyInstitution(); - institution.setAttributes(attributesList); - institution.setImported(true); - institution.setOnboarding(List.of()); - - InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom - .toInstitutionManagementResponse(institution); - assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getAddress()); - assertTrue(actualToInstitutionManagementResponseResult.isImported()); - assertEquals(institution.getZipCode(), actualToInstitutionManagementResponseResult.getZipCode()); - assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); - assertEquals(institution.getTaxCode(), actualToInstitutionManagementResponseResult.getTaxCode()); - assertEquals(institution.getSupportPhone(), actualToInstitutionManagementResponseResult.getSupportPhone()); - assertEquals(institution.getSupportEmail(), actualToInstitutionManagementResponseResult.getSupportEmail()); - assertEquals("Share Capital", actualToInstitutionManagementResponseResult.getShareCapital()); - assertEquals("Rea", actualToInstitutionManagementResponseResult.getRea()); - assertTrue(actualToInstitutionManagementResponseResult.getProducts().isEmpty()); - assertEquals("42", actualToInstitutionManagementResponseResult.getOriginId()); - List attributes1 = actualToInstitutionManagementResponseResult.getAttributes(); - assertEquals(1, attributes1.size()); - assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); - assertEquals("42", actualToInstitutionManagementResponseResult.getExternalId()); - assertEquals("42", actualToInstitutionManagementResponseResult.getId()); - assertEquals(InstitutionType.PA, actualToInstitutionManagementResponseResult.getInstitutionType()); - assertEquals("Business Register Place", actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); - assertEquals("The characteristics of someone or something", - actualToInstitutionManagementResponseResult.getDescription()); - assertEquals(Origin.MOCK.name(), actualToInstitutionManagementResponseResult.getOrigin()); - assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getDigitalAddress()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} - */ - @Test - void testToInstitutionListResponse() { - assertTrue(InstitutionMapperCustom.toInstitutionListResponse(new ArrayList<>()).isEmpty()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} - */ - @Test - void testToInstitutionListResponse2() { - ArrayList institutionList = new ArrayList<>(); - institutionList.add(new Institution()); - assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} - */ - @Test - void testToInstitutionListResponse4() { - ArrayList institutionList = new ArrayList<>(); - institutionList.add(InstitutionMapperCustom.toInstitution(new InstitutionRequest(), "42")); - assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} - */ - @Test - void testToInstitutionListResponse5() { - ArrayList institutionList = new ArrayList<>(); - institutionList.add(createDmmyInstitution()); - assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} - */ - @Test - void testToInstitutionListResponse6() { - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setClosedAt(null); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setTokenId("42"); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - - Institution institution = createDmmyInstitution(); - institution.setOnboarding(onboardingList); - - ArrayList institutionList = new ArrayList<>(); - institutionList.add(institution); - assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} - */ - @Test - void testToInstitutionListResponse7() { - ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); - institutionGeographicTaxonomiesList - .add(new InstitutionGeographicTaxonomies("Code", "The characteristics of someone or something")); - - Institution institution = createDmmyInstitution(); - institution.setGeographicTaxonomies(institutionGeographicTaxonomiesList); - - ArrayList institutionList = new ArrayList<>(); - institutionList.add(institution); - assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} - */ - @Test - void testToInstitutionListResponse8() { - Attributes attributes = new Attributes(); - attributes.setCode("Code"); - attributes.setDescription("The characteristics of someone or something"); - attributes.setOrigin("Origin"); - - ArrayList attributesList = new ArrayList<>(); - attributesList.add(attributes); - - Institution institution = createDmmyInstitution(); - institution.setAttributes(attributesList); - - ArrayList institutionList = new ArrayList<>(); - institutionList.add(institution); - assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); - } - - /** - * Method under test: {@link InstitutionMapperCustom#toInstitutionAttributeResponse(List, String)} - */ - @Test - void testToInstitutionAttributeResponse2() { - Attributes attributes = new Attributes(); - attributes.setCode("Attributes for institution %s not found"); - attributes.setDescription("The characteristics of someone or something"); - attributes.setOrigin("Attributes for institution %s not found"); - - ArrayList attributesList = new ArrayList<>(); - attributesList.add(attributes); - List actualToInstitutionAttributeResponseResult = InstitutionMapperCustom - .toInstitutionAttributeResponse(attributesList, "42"); - assertEquals(1, actualToInstitutionAttributeResponseResult.size()); - AttributesResponse getResult = actualToInstitutionAttributeResponseResult.get(0); - assertEquals("Attributes for institution %s not found", getResult.getCode()); - assertEquals("Attributes for institution %s not found", getResult.getOrigin()); - assertEquals("The characteristics of someone or something", getResult.getDescription()); - } -} - diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapperTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapperTest.java deleted file mode 100644 index e5b1e6b..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapperTest.java +++ /dev/null @@ -1,115 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.mapper; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import it.pagopa.selfcare.mscore.constant.TokenType; -import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionBinding; -import it.pagopa.selfcare.mscore.model.institution.Institution; -import it.pagopa.selfcare.mscore.model.institution.Onboarding; -import it.pagopa.selfcare.mscore.model.onboarding.Contract; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardingInfo; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardingLegalsRequest; -import it.pagopa.selfcare.mscore.web.model.onboarding.ContractRequest; -import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardingInfoResponse; -import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardingInstitutionLegalsRequest; -import it.pagopa.selfcare.mscore.web.model.user.Person; - -import java.util.ArrayList; -import java.util.List; - -import org.junit.jupiter.api.Test; - -class OnboardingMapperTest { - /** - * Method under test: {@link OnboardingMapper#toOnboardingLegalsRequest(OnboardingInstitutionLegalsRequest)} - */ - @Test - void testToOnboardingLegalsRequest() { - ContractRequest contractRequest = new ContractRequest(); - contractRequest.setPath("Path"); - contractRequest.setVersion("1.0.2"); - - OnboardingInstitutionLegalsRequest onboardingInstitutionLegalsRequest = new OnboardingInstitutionLegalsRequest(); - onboardingInstitutionLegalsRequest.setContract(contractRequest); - onboardingInstitutionLegalsRequest.setInstitutionExternalId("42"); - onboardingInstitutionLegalsRequest.setInstitutionId("42"); - onboardingInstitutionLegalsRequest.setProductId("42"); - onboardingInstitutionLegalsRequest.setProductName("Product Name"); - onboardingInstitutionLegalsRequest.setSignContract(true); - ArrayList personList = new ArrayList<>(); - onboardingInstitutionLegalsRequest.setUsers(personList); - OnboardingLegalsRequest actualToOnboardingLegalsRequestResult = OnboardingMapper - .toOnboardingLegalsRequest(onboardingInstitutionLegalsRequest); - assertTrue(actualToOnboardingLegalsRequestResult.isSignContract()); - assertEquals("42", actualToOnboardingLegalsRequestResult.getInstitutionExternalId()); - assertEquals("42", actualToOnboardingLegalsRequestResult.getProductId()); - assertEquals(TokenType.LEGALS, actualToOnboardingLegalsRequestResult.getTokenType()); - assertEquals("Product Name", actualToOnboardingLegalsRequestResult.getProductName()); - assertEquals("42", actualToOnboardingLegalsRequestResult.getInstitutionId()); - Contract contract = actualToOnboardingLegalsRequestResult.getContract(); - assertEquals("1.0.2", contract.getVersion()); - assertEquals("Path", contract.getPath()); - } - - /** - * Method under test: {@link OnboardingMapper#toOnboardingLegalsRequest(OnboardingInstitutionLegalsRequest)} - */ - @Test - void testToOnboardingLegalsRequest2() { - ArrayList personList = new ArrayList<>(); - personList.add(new Person()); - - OnboardingInstitutionLegalsRequest onboardingInstitutionLegalsRequest = new OnboardingInstitutionLegalsRequest(); - onboardingInstitutionLegalsRequest.setInstitutionExternalId("42"); - onboardingInstitutionLegalsRequest.setInstitutionId("42"); - onboardingInstitutionLegalsRequest.setProductId("42"); - onboardingInstitutionLegalsRequest.setProductName("Product Name"); - onboardingInstitutionLegalsRequest.setSignContract(true); - onboardingInstitutionLegalsRequest.setContract(null); - onboardingInstitutionLegalsRequest.setUsers(personList); - OnboardingLegalsRequest actualToOnboardingLegalsRequestResult = OnboardingMapper - .toOnboardingLegalsRequest(onboardingInstitutionLegalsRequest); - assertTrue(actualToOnboardingLegalsRequestResult.isSignContract()); - assertEquals("42", actualToOnboardingLegalsRequestResult.getInstitutionExternalId()); - assertEquals("42", actualToOnboardingLegalsRequestResult.getProductId()); - assertEquals(1, actualToOnboardingLegalsRequestResult.getUsers().size()); - assertEquals(TokenType.LEGALS, actualToOnboardingLegalsRequestResult.getTokenType()); - assertEquals("Product Name", actualToOnboardingLegalsRequestResult.getProductName()); - assertEquals("42", actualToOnboardingLegalsRequestResult.getInstitutionId()); - } - - @Test - void toOnboardingInfoResponse_onboardingEmpty() { - String userId = "userId"; - List onboardingInfos = new ArrayList<>(); - onboardingInfos.add(new OnboardingInfo()); - - OnboardingInfoResponse actual = OnboardingMapper.toOnboardingInfoResponse(userId, onboardingInfos); - assertEquals(actual.getUserId(), userId); - } - - @Test - void toOnboardingInfoResponse() { - String userId = "userId"; - List onboardingInfos = new ArrayList<>(); - OnboardingInfo onboardingInfo = new OnboardingInfo(); - Institution institution = new Institution(); - - Onboarding onboarding = new Onboarding(); - onboarding.setProductId("prod-io"); - institution.setOnboarding(List.of(onboarding)); - - onboardingInfo.setInstitution(institution); - UserInstitutionBinding institutionBinding = new UserInstitutionBinding(); - institutionBinding.setProducts(new OnboardedProduct()); - onboardingInfo.setBinding(institutionBinding); - onboardingInfos.add(onboardingInfo); - - OnboardingInfoResponse actual = OnboardingMapper.toOnboardingInfoResponse(userId, onboardingInfos); - assertEquals(actual.getUserId(), userId); - assertEquals(actual.getInstitutions().size(), 0); - } -} - diff --git a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapperTest.java b/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapperTest.java deleted file mode 100644 index e9615b2..0000000 --- a/apps/institution-ms-new/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapperTest.java +++ /dev/null @@ -1,351 +0,0 @@ -package it.pagopa.selfcare.mscore.web.model.mapper; - -import it.pagopa.selfcare.commons.base.utils.InstitutionType; -import it.pagopa.selfcare.mscore.constant.RelationshipState; -import it.pagopa.selfcare.mscore.model.institution.*; -import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; -import it.pagopa.selfcare.mscore.model.user.RelationshipInfo; -import it.pagopa.selfcare.mscore.web.TestUtils; -import it.pagopa.selfcare.mscore.web.model.institution.BillingResponse; -import it.pagopa.selfcare.mscore.web.model.institution.InstitutionUpdateResponse; -import it.pagopa.selfcare.mscore.web.model.institution.RelationshipResult; -import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; - -class RelationshipMapperTest { - - @Test - void testToRelationshipResult12() { - InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); - geographicTaxonomies.setCode("Code"); - geographicTaxonomies.setDesc("The characteristics of someone or something"); - - List geographicTaxonomiesList = new ArrayList<>(); - geographicTaxonomiesList.add(geographicTaxonomies); - - Institution institution = new Institution(); - institution.setOnboarding(new ArrayList<>()); - institution.setGeographicTaxonomies(geographicTaxonomiesList); - Institution institution1 = new Institution(); - - RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); - relationshipInfo.setInstitution(institution); - RelationshipResult actualToRelationshipResultResult = RelationshipMapper.toRelationshipResult(relationshipInfo); - assertNull(actualToRelationshipResultResult.getTo()); - assertNull(actualToRelationshipResultResult.getState()); - assertNull(actualToRelationshipResultResult.getRole()); - assertNull(actualToRelationshipResultResult.getId()); - assertEquals("42", actualToRelationshipResultResult.getFrom()); - InstitutionUpdateResponse institutionUpdate = actualToRelationshipResultResult.getInstitutionUpdate(); - assertEquals(1, institutionUpdate.getGeographicTaxonomyCodes().size()); - } - - /** - * Method under test: {@link RelationshipMapper#toRelationshipResult(RelationshipInfo)} - */ - @Test - void testToRelationshipResult13() { - InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); - geographicTaxonomies.setCode("Code"); - geographicTaxonomies.setDesc("The characteristics of someone or something"); - - List geographicTaxonomiesList = new ArrayList<>(); - geographicTaxonomiesList.add(geographicTaxonomies); - - Institution institution = TestUtils.createSimpleInstitutionPA(); - institution.setGeographicTaxonomies(geographicTaxonomiesList); - Institution institution1 = new Institution(); - - RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); - relationshipInfo.setInstitution(institution); - RelationshipResult actualToRelationshipResultResult = RelationshipMapper.toRelationshipResult(relationshipInfo); - assertEquals("42", actualToRelationshipResultResult.getTo()); - assertNull(actualToRelationshipResultResult.getState()); - assertNull(actualToRelationshipResultResult.getRole()); - assertNull(actualToRelationshipResultResult.getId()); - assertEquals("42", actualToRelationshipResultResult.getFrom()); - InstitutionUpdateResponse institutionUpdate = actualToRelationshipResultResult.getInstitutionUpdate(); - assertEquals("21654", institutionUpdate.getZipCode()); - assertEquals("Tax Code", institutionUpdate.getTaxCode()); - assertEquals(InstitutionType.PA, institutionUpdate.getInstitutionType()); - ProductInfo product = actualToRelationshipResultResult.getProduct(); - assertNull(product.getCreatedAt()); - assertEquals("The characteristics of someone or something", institutionUpdate.getDescription()); - assertEquals("42 Main St", institutionUpdate.getDigitalAddress()); - assertEquals("42 Main St", institutionUpdate.getAddress()); - assertEquals(1, institutionUpdate.getGeographicTaxonomyCodes().size()); - assertNull(product.getId()); - } - - /** - * Method under test: {@link RelationshipMapper#toRelationshipResult(RelationshipInfo)} - */ - @Test - void testToRelationshipResult14() { - InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); - geographicTaxonomies.setCode("Code"); - geographicTaxonomies.setDesc("The characteristics of someone or something"); - - List geographicTaxonomiesList = new ArrayList<>(); - geographicTaxonomiesList.add(geographicTaxonomies); - - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Premium premium = new Premium(); - premium.setContract("Contract"); - premium.setStatus(RelationshipState.PENDING); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - - Institution institution = new Institution(); - institution.setOnboarding(onboardingList); - institution.setGeographicTaxonomies(geographicTaxonomiesList); - Institution institution1 = new Institution(); - - RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); - relationshipInfo.setInstitution(institution); - RelationshipResult actualToRelationshipResultResult = RelationshipMapper.toRelationshipResult(relationshipInfo); - assertNull(actualToRelationshipResultResult.getTo()); - assertNull(actualToRelationshipResultResult.getState()); - assertNull(actualToRelationshipResultResult.getRole()); - assertNull(actualToRelationshipResultResult.getId()); - assertEquals("42", actualToRelationshipResultResult.getFrom()); - InstitutionUpdateResponse institutionUpdate = actualToRelationshipResultResult.getInstitutionUpdate(); - assertNull(institutionUpdate.getInstitutionType()); - assertEquals(1, institutionUpdate.getGeographicTaxonomyCodes().size()); - } - - /** - * Method under test: {@link RelationshipMapper#toRelationshipResult(RelationshipInfo)} - */ - @Test - void testToRelationshipResult15() { - InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); - geographicTaxonomies.setCode("Code"); - geographicTaxonomies.setDesc("The characteristics of someone or something"); - List geographicTaxonomiesList = new ArrayList<>(); - geographicTaxonomiesList.add(geographicTaxonomies); - - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Premium premium = new Premium(); - premium.setContract("Contract"); - premium.setStatus(RelationshipState.PENDING); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - - Institution institution = new Institution(); - institution.setOnboarding(onboardingList); - institution.setGeographicTaxonomies(geographicTaxonomiesList); - - OnboardedProduct onboardedProduct = new OnboardedProduct(); - onboardedProduct.setProductId("42"); - - RelationshipInfo relationshipInfo = new RelationshipInfo(new Institution(), "42", onboardedProduct); - relationshipInfo.setInstitution(institution); - RelationshipResult actualToRelationshipResultResult = RelationshipMapper.toRelationshipResult(relationshipInfo); - assertNull(actualToRelationshipResultResult.getId()); - assertNull(actualToRelationshipResultResult.getRole()); - assertNull(actualToRelationshipResultResult.getTo()); - assertNull(actualToRelationshipResultResult.getState()); - assertEquals("42", actualToRelationshipResultResult.getFrom()); - assertEquals("Pricing Plan", actualToRelationshipResultResult.getPricingPlan()); - ProductInfo product = actualToRelationshipResultResult.getProduct(); - assertEquals("42", product.getId()); - assertNull(product.getCreatedAt()); - InstitutionUpdateResponse institutionUpdate = actualToRelationshipResultResult.getInstitutionUpdate(); - assertEquals(1, institutionUpdate.getGeographicTaxonomyCodes().size()); - assertNull(institutionUpdate.getDigitalAddress()); - assertNull(institutionUpdate.getDescription()); - assertNull(institutionUpdate.getAddress()); - BillingResponse billing1 = actualToRelationshipResultResult.getBilling(); - assertEquals("42", billing1.getVatNumber()); - assertEquals("Recipient Code", billing1.getRecipientCode()); - assertTrue(billing1.isPublicServices()); - } - - /** - * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} - */ - @Test - void testToRelationshipResultList() { - assertTrue(RelationshipMapper.toRelationshipResultList(new ArrayList<>()).isEmpty()); - } - - - /** - * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} - */ - @Test - void testToRelationshipResultList6() { - InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); - geographicTaxonomies.setCode("Code"); - geographicTaxonomies.setDesc("The characteristics of someone or something"); - - List geographicTaxonomiesList = new ArrayList<>(); - geographicTaxonomiesList.add(geographicTaxonomies); - - Institution institution = new Institution(); - institution.setOnboarding(new ArrayList<>()); - institution.setGeographicTaxonomies(geographicTaxonomiesList); - Institution institution1 = new Institution(); - - RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); - relationshipInfo.setInstitution(institution); - - ArrayList relationshipInfoList = new ArrayList<>(); - relationshipInfoList.add(relationshipInfo); - assertEquals(1, RelationshipMapper.toRelationshipResultList(relationshipInfoList).size()); - assertFalse(relationshipInfoList.get(0).getInstitution().isImported()); - } - - /** - * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} - */ - @Test - void testToRelationshipResultList7() { - InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); - geographicTaxonomies.setCode("Code"); - geographicTaxonomies.setDesc("The characteristics of someone or something"); - - Institution institution = TestUtils.createSimpleInstitutionPA(); - institution.setGeographicTaxonomies(List.of(geographicTaxonomies)); - institution.setImported(true); - - RelationshipInfo relationshipInfo = new RelationshipInfo(institution, "42", new OnboardedProduct()); - relationshipInfo.setInstitution(institution); - - ArrayList relationshipInfoList = new ArrayList<>(); - relationshipInfoList.add(relationshipInfo); - assertEquals(1, RelationshipMapper.toRelationshipResultList(relationshipInfoList).size()); - assertTrue(relationshipInfoList.get(0).getInstitution().isImported()); - } - - /** - * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} - */ - @Test - void testToRelationshipResultList8() { - InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); - geographicTaxonomies.setCode("Code"); - geographicTaxonomies.setDesc("The characteristics of someone or something"); - - List geographicTaxonomiesList = new ArrayList<>(); - geographicTaxonomiesList.add(geographicTaxonomies); - - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Premium premium = new Premium(); - premium.setContract("Contract"); - premium.setStatus(RelationshipState.PENDING); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - - Institution institution = new Institution(); - institution.setOnboarding(onboardingList); - institution.setGeographicTaxonomies(geographicTaxonomiesList); - Institution institution1 = new Institution(); - - RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); - relationshipInfo.setInstitution(institution); - - ArrayList relationshipInfoList = new ArrayList<>(); - relationshipInfoList.add(relationshipInfo); - assertEquals(1, RelationshipMapper.toRelationshipResultList(relationshipInfoList).size()); - assertFalse(relationshipInfoList.get(0).getInstitution().isImported()); - } - - /** - * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} - */ - @Test - void testToRelationshipResultList9() { - InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); - geographicTaxonomies.setCode("Code"); - geographicTaxonomies.setDesc("The characteristics of someone or something"); - - List geographicTaxonomiesList = new ArrayList<>(); - geographicTaxonomiesList.add(geographicTaxonomies); - - Billing billing = new Billing(); - billing.setPublicServices(true); - billing.setRecipientCode("Recipient Code"); - billing.setVatNumber("42"); - - Premium premium = new Premium(); - premium.setContract("Contract"); - premium.setStatus(RelationshipState.PENDING); - - Onboarding onboarding = new Onboarding(); - onboarding.setBilling(billing); - onboarding.setContract("Contract"); - onboarding.setCreatedAt(null); - onboarding.setPricingPlan("Pricing Plan"); - onboarding.setProductId("42"); - onboarding.setStatus(RelationshipState.PENDING); - onboarding.setUpdatedAt(null); - - ArrayList onboardingList = new ArrayList<>(); - onboardingList.add(onboarding); - - Institution institution = new Institution(); - institution.setOnboarding(onboardingList); - institution.setGeographicTaxonomies(geographicTaxonomiesList); - - OnboardedProduct onboardedProduct = new OnboardedProduct(); - onboardedProduct.setProductId("42"); - - RelationshipInfo relationshipInfo = new RelationshipInfo(new Institution(), "42", onboardedProduct); - relationshipInfo.setInstitution(institution); - - ArrayList relationshipInfoList = new ArrayList<>(); - relationshipInfoList.add(relationshipInfo); - assertEquals(1, RelationshipMapper.toRelationshipResultList(relationshipInfoList).size()); - assertFalse(relationshipInfoList.get(0).getInstitution().isImported()); - } - -} From d61b933b21ef8d19468805ae21017fea884b67f8 Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Wed, 10 Jul 2024 10:20:59 +0200 Subject: [PATCH 08/29] remove folder --- apps/institution-ms | 1 - 1 file changed, 1 deletion(-) delete mode 160000 apps/institution-ms diff --git a/apps/institution-ms b/apps/institution-ms deleted file mode 160000 index bd592f5..0000000 --- a/apps/institution-ms +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bd592f54e95fb052f64c3930e5efff5595c5f693 From 8f55f8e7a8492d3683d8085e8d44147d857ff34f Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Wed, 10 Jul 2024 10:22:51 +0200 Subject: [PATCH 09/29] [SELC-5168] feat : added insitution-ms app file --- apps/institution-ms/.dockerignore | 12 + apps/institution-ms/.pre-commit-config.yaml | 10 + apps/institution-ms/.terraform-version | 1 + apps/institution-ms/CODEOWNERS | 3 + apps/institution-ms/Dockerfile | 5 + apps/institution-ms/Dockerfile.new | 35 + .../Dockerfile.new.dockerignore | 117 + apps/institution-ms/README.md | 47 + apps/institution-ms/app/pom.xml | 60 + .../mscore/SelfCareCoreApplication.java | 15 + .../src/main/resources/config/application.yml | 60 + .../config/azure-storage-config.properties | 7 + .../resources/config/core-config.properties | 31 + .../src/main/resources/swagger/api-docs.json | 3804 +++++++++++++++++ .../mscore/web/config/SwaggerConfigTest.java | 86 + apps/institution-ms/connector-api/pom.xml | 48 + .../mscore/api/DelegationConnector.java | 22 + .../selfcare/mscore/api/EmailConnector.java | 11 + .../mscore/api/FileStorageConnector.java | 19 + .../mscore/api/InstitutionConnector.java | 62 + .../api/NotificationServiceConnector.java | 11 + .../api/PartyRegistryProxyConnector.java | 28 + .../mscore/api/PecNotificationConnector.java | 10 + .../selfcare/mscore/api/ProductConnector.java | 10 + .../selfcare/mscore/api/UserApiConnector.java | 14 + .../mscore/api/UserRegistryConnector.java | 18 + .../mscore/config/AzureStorageConfig.java | 25 + .../selfcare/mscore/config/CoreConfig.java | 36 + .../mscore/config/MailTemplateConfig.java | 23 + .../selfcare/mscore/constant/CustomError.java | 68 + .../mscore/constant/DelegationState.java | 6 + .../mscore/constant/DelegationType.java | 7 + .../pagopa/selfcare/mscore/constant/Env.java | 8 + .../mscore/constant/GenericError.java | 86 + .../selfcare/mscore/constant/Order.java | 9 + .../selfcare/mscore/constant/Origin.java | 48 + .../selfcare/mscore/constant/PricingPlan.java | 16 + .../selfcare/mscore/constant/ProductId.java | 32 + .../mscore/constant/RelationshipState.java | 10 + .../selfcare/mscore/constant/SearchMode.java | 7 + .../selfcare/mscore/constant/TokenType.java | 6 + .../mscore/exception/BadGatewayException.java | 11 + .../exception/InvalidRequestException.java | 14 + .../mscore/exception/MsCoreException.java | 15 + .../exception/ResourceConflictException.java | 15 + .../exception/ResourceForbiddenException.java | 14 + .../exception/ResourceNotFoundException.java | 15 + .../ServiceUnavailableException.java | 4 + .../model/AreaOrganizzativaOmogenea.java | 22 + .../selfcare/mscore/model/Certification.java | 9 + .../selfcare/mscore/model/CertifiedField.java | 13 + .../mscore/model/InstitutionToNotify.java | 34 + .../selfcare/mscore/model/QueueEvent.java | 6 + .../selfcare/mscore/model/RootParent.java | 14 + .../mscore/model/UnitaOrganizzativa.java | 23 + .../selfcare/mscore/model/UserToNotify.java | 22 + .../mscore/model/aggregation/QueryCount.java | 15 + .../UserInstitutionAggregation.java | 19 + .../aggregation/UserInstitutionBinding.java | 16 + .../aggregation/UserInstitutionFilter.java | 24 + .../mscore/model/delegation/Delegation.java | 39 + .../delegation/DelegationInstitution.java | 18 + .../delegation/DelegationWithPagination.java | 19 + .../delegation/GetDelegationParameters.java | 18 + .../mscore/model/delegation/PageInfo.java | 17 + .../selfcare/mscore/model/error/Problem.java | 11 + .../mscore/model/error/ProblemError.java | 10 + .../mscore/model/institution/ASResource.java | 17 + .../institution/AdditionalInformations.java | 16 + .../mscore/model/institution/Attributes.java | 10 + .../mscore/model/institution/Billing.java | 20 + .../model/institution/CategoryProxyInfo.java | 11 + .../institution/DataProtectionOfficer.java | 18 + .../institution/GeographicTaxonomies.java | 26 + .../institution/GeographicTaxonomyPage.java | 11 + .../mscore/model/institution/Institution.java | 54 + .../model/institution/InstitutionByLegal.java | 9 + .../InstitutionGeographicTaxonomies.java | 13 + .../InstitutionGeographicTaxonomyPage.java | 11 + .../institution/InstitutionProxyInfo.java | 20 + .../model/institution/InstitutionUpdate.java | 36 + ...NationalRegistriesProfessionalAddress.java | 12 + .../mscore/model/institution/Onboarding.java | 23 + .../model/institution/OnboardingPage.java | 11 + .../model/institution/PaAttributes.java | 9 + .../institution/PaymentServiceProvider.java | 20 + .../mscore/model/institution/Premium.java | 16 + .../mscore/model/institution/SaResource.java | 14 + .../model/institution/ValidInstitution.java | 13 + .../mscore/model/institution/WorkContact.java | 13 + .../model/notification/MessageRequest.java | 12 + .../MultipleReceiverMessageRequest.java | 13 + .../mscore/model/onboarding/Contract.java | 9 + .../model/onboarding/ContractImported.java | 10 + .../mscore/model/onboarding/MailTemplate.java | 20 + .../model/onboarding/OnboardedProduct.java | 27 + .../model/onboarding/OnboardedUser.java | 17 + .../model/onboarding/OnboardingInfo.java | 16 + .../onboarding/OnboardingLegalsRequest.java | 19 + .../OnboardingOperatorsRequest.java | 15 + .../model/onboarding/OnboardingRequest.java | 44 + .../model/onboarding/OnboardingRollback.java | 20 + .../onboarding/OnboardingUpdateRollback.java | 18 + .../onboarding/OnboardingUsersRequest.java | 17 + .../model/onboarding/ResourceResponse.java | 10 + .../mscore/model/onboarding/Token.java | 36 + .../model/onboarding/TokenRelationships.java | 31 + .../mscore/model/onboarding/TokenUser.java | 14 + .../onboarding/VerifyOnboardingFilters.java | 45 + .../pecnotification/PecNotification.java | 23 + .../mscore/model/product/Product.java | 20 + .../mscore/model/product/ProductRoleInfo.java | 23 + .../mscore/model/product/ProductStatus.java | 6 + .../mscore/model/user/ProductManagerInfo.java | 19 + .../mscore/model/user/RelationshipInfo.java | 18 + .../mscore/model/user/RelationshipPage.java | 11 + .../model/user/RelationshipPageElement.java | 10 + .../selfcare/mscore/model/user/User.java | 35 + .../mscore/model/user/UserBinding.java | 25 + .../selfcare/mscore/model/user/UserInfo.java | 15 + .../mscore/model/user/UserToOnboard.java | 19 + .../selfcare/mscore/utils/MaskDataUtils.java | 97 + .../InvalidRequestExceptionTest.java | 21 + .../mscore/exception/MsCoreExceptionTest.java | 21 + .../ResourceConflictExceptionTest.java | 21 + .../ResourceNotFoundExceptionTest.java | 21 + .../mscore/utils/MaskDataUtilsTest.java | 29 + .../connector/azure-storage/pom.xml | 21 + .../azure_storage/AzureBlobClient.java | 170 + .../config/AzureStorageConfigTest.java | 47 + apps/institution-ms/connector/dao/pom.xml | 29 + .../mscore/connector/dao/CriteriaBuilder.java | 50 + .../dao/DelegationConnectorImpl.java | 180 + .../connector/dao/DelegationRepository.java | 18 + .../dao/InstitutionConnectorImpl.java | 359 ++ .../connector/dao/InstitutionRepository.java | 16 + .../connector/dao/MongoCustomConnector.java | 28 + .../dao/MongoCustomConnectorImpl.java | 107 + .../dao/PecNotificationConnectorImpl.java | 67 + .../dao/PecNotificationRepository.java | 8 + .../mscore/connector/dao/TokenRepository.java | 8 + .../mscore/connector/dao/UserRepository.java | 10 + .../connector/dao/config/DaoConfig.java | 22 + .../OffsetDateTimeToStringConverter.java | 16 + .../StringToOffsetDateTimeConverter.java | 15 + .../connector/dao/model/DelegationEntity.java | 36 + .../dao/model/InstitutionEntity.java | 61 + .../dao/model/PecNotificationEntity.java | 29 + .../connector/dao/model/TokenEntity.java | 46 + .../connector/dao/model/UserEntity.java | 27 + .../UserInstitutionAggregationEntity.java | 25 + .../UserInstitutionBindingEntity.java | 17 + .../inner/AdditionalInformationsEntity.java | 18 + .../dao/model/inner/AttributesEntity.java | 12 + .../dao/model/inner/BillingEntity.java | 15 + .../inner/DataProtectionOfficerEntity.java | 12 + .../dao/model/inner/GeoTaxonomyEntity.java | 11 + .../model/inner/InstitutionUpdateEntity.java | 30 + .../model/inner/OnboardedProductEntity.java | 30 + .../dao/model/inner/OnboardingEntity.java | 25 + .../dao/model/inner/PaAttributesEntity.java | 9 + .../inner/PaymentServiceProviderEntity.java | 14 + .../dao/model/inner/TokenUserEntity.java | 10 + .../dao/model/inner/UserBindingEntity.java | 22 + .../model/mapper/DelegationEntityMapper.java | 23 + .../mapper/DelegationInstitutionMapper.java | 34 + .../model/mapper/InstitutionEntityMapper.java | 18 + .../dao/model/mapper/InstitutionMapper.java | 96 + .../model/mapper/InstitutionMapperHelper.java | 87 + .../model/mapper/OnboardedProductMapper.java | 10 + .../mapper/PecNotificationEntityMapper.java | 17 + .../dao/model/mapper/UserEntityMapper.java | 43 + .../UserInstitutionAggregationMapper.java | 11 + .../resources/config/dao-config.properties | 3 + .../connector/dao/CriteriaBuilderTest.java | 39 + .../dao/DelegationConnectorImplTest.java | 350 ++ .../dao/DelegationRepositoryTest.java | 41 + .../dao/InstitutionConnectorImplTest.java | 739 ++++ .../dao/InstitutionRepositoryTest.java | 71 + .../dao/MongoCustomConnectorImplTest.java | 139 + .../dao/PecNotificationConnectorImplTest.java | 107 + .../connector/dao/config/DaoConfigTest.java | 31 + .../OffsetDateTimeToStringConverterTest.java | 19 + .../StringToOffsetDateTimeConverterTest.java | 18 + .../dao/model/mapper/UserMapperTest.java | 210 + .../mscore/connector/dao/utils/TestUtils.java | 155 + apps/institution-ms/connector/email/pom.xml | 32 + .../connector/email/EmailConnectorImpl.java | 100 + .../email/config/EmailBaseConfig.java | 9 + .../main/resources/config/email.properties | 7 + .../email/EmailConnectorImplTest.java | 101 + apps/institution-ms/connector/pom.xml | 25 + .../rest/docs/openapi/registry_proxy.json | 2199 ++++++++++ .../rest/docs/openapi/selfcare-user-docs.json | 1550 +++++++ .../rest/docs/openapi/user_registry.json | 596 +++ apps/institution-ms/connector/rest/pom.xml | 152 + .../rest/PartyRegistryProxyConnectorImpl.java | 213 + .../connector/rest/ProductConnectorImpl.java | 38 + .../connector/rest/UserApiConnectorImpl.java | 41 + .../rest/UserRegistryConnectorImpl.java | 124 + .../client/PartyRegistryProxyRestClient.java | 47 + .../rest/client/UserApiRestClient.java | 8 + .../client/UserInstitutionApiRestClient.java | 8 + .../rest/client/UserRegistryRestClient.java | 11 + .../rest/config/FeignClientConfig.java | 11 + .../PartyRegistryProxyRestClientConfig.java | 16 + .../rest/config/UserApiRestClientConfig.java | 15 + .../UserInstitutionApiRestClientConfig.java | 15 + .../config/UserRegistryRestClientConfig.java | 15 + .../rest/decoder/FeignErrorDecoder.java | 22 + .../connector/rest/mapper/AooMapper.java | 11 + .../connector/rest/mapper/AsMapper.java | 12 + .../connector/rest/mapper/SaMapper.java | 11 + .../connector/rest/mapper/UoMapper.java | 13 + .../rest/mapper/UserMapperClient.java | 26 + .../GeographicTaxonomiesResponse.java | 24 + .../rest/model/registryproxy/AooResponse.java | 38 + .../rest/model/registryproxy/AsResponse.java | 17 + .../model/registryproxy/Institutions.java | 9 + .../InstitutionsByLegalRequest.java | 9 + .../InstitutionsByLegalResponse.java | 14 + .../rest/model/registryproxy/LegalFilter.java | 8 + .../model/registryproxy/PdndResponse.java | 14 + .../registryproxy/ProxyCategoryResponse.java | 11 + .../ProxyInstitutionResponse.java | 20 + .../rest/model/registryproxy/UoResponse.java | 35 + .../resources/config/feign-client.properties | 2 + ...arty-registry-proxy-rest-client.properties | 21 + .../user-registry-rest-client.properties | 3 + .../config/user-rest-client.properties | 14 + .../PartyRegistryProxyConnectorImplTest.java | 591 +++ .../rest/ProductConnectorImplTest.java | 56 + .../rest/UserApiConnectorImplTest.java | 85 + .../rest/UserRegistryConnectorImplTest.java | 155 + .../rest/decoder/FeignErrorDecoderTest.java | 90 + apps/institution-ms/core/pom.xml | 88 + .../selfcare/mscore/core/ClassPathStream.java | 28 + .../mscore/core/ClassPathStreamFactory.java | 26 + .../selfcare/mscore/core/ContractService.java | 74 + .../mscore/core/DelegationService.java | 21 + .../mscore/core/DelegationServiceImpl.java | 162 + .../selfcare/mscore/core/ExternalService.java | 21 + .../mscore/core/ExternalServiceImpl.java | 49 + .../mscore/core/InstitutionService.java | 70 + .../mscore/core/InstitutionServiceImpl.java | 404 ++ .../mscore/core/MailNotificationService.java | 7 + .../core/MailNotificationServiceImpl.java | 76 + .../selfcare/mscore/core/OnboardingDao.java | 27 + .../mscore/core/OnboardingService.java | 18 + .../mscore/core/OnboardingServiceImpl.java | 167 + .../mscore/core/UserNotificationService.java | 10 + .../core/UserNotificationServiceImpl.java | 70 + .../core/config/CloudTemplateLoader.java | 28 + .../mscore/core/config/FreeMarkerConfig.java | 71 + .../mscore/core/config/MdcTaskDecorator.java | 32 + .../mscore/core/config/MsCoreConfig.java | 44 + .../mscore/core/mapper/InstitutionMapper.java | 17 + .../mscore/core/mapper/TokenMapper.java | 20 + .../strategy/CreateInstitutionStrategy.java | 20 + .../CreateInstitutionStrategyAnac.java | 59 + .../CreateInstitutionStrategyCommon.java | 38 + .../CreateInstitutionStrategyInfocamere.java | 95 + .../CreateInstitutionStrategyIpa.java | 200 + .../CreateInstitutionStrategyIvass.java | 58 + .../CreateInstitutionStrategyPda.java | 136 + .../CreateInstitutionStrategyRaw.java | 44 + .../CreateInstitutionStrategyFactory.java | 60 + .../input/CreateInstitutionStrategyInput.java | 22 + .../selfcare/mscore/core/util/Constants.java | 14 + .../core/util/InstitutionPaSubunitType.java | 5 + .../core/util/MailParametersMapper.java | 32 + .../mscore/core/util/OnboardingInfoUtils.java | 65 + .../mscore/core/util/UtilEnumList.java | 32 + .../core/ClassPathStreamFactoryTest.java | 30 + .../mscore/core/ClassPathStreamTest.java | 22 + .../mscore/core/ContractServiceTest.java | 63 + .../core/DelegationServiceImplTest.java | 385 ++ .../mscore/core/ExternalServiceImplTest.java | 170 + .../core/InstitutionServiceImplPdaTest.java | 33 + .../core/InstitutionServiceImplTest.java | 1102 +++++ .../core/MailNotificationServiceImplTest.java | 105 + .../mscore/core/OnboardingDaoTest.java | 37 + .../core/OnboardingServiceImplTest.java | 325 ++ .../selfcare/mscore/core/TestUtils.java | 331 ++ .../core/UserNotificationServiceImplTest.java | 61 + .../CreateInstitutionStrategyPdaTest.java | 236 + .../CreateInstitutionStrategyTest.java | 643 +++ .../core/util/MailParametersMapperTest.java | 34 + .../core/util/OnboardingInfoUtilsTest.java | 471 ++ .../selfcare/mscore/core/util/TestUtils.java | 65 + .../mscore/core/util/model/DummyUser.java | 38 + apps/institution-ms/lombok.config | 1 + apps/institution-ms/mvnw | 310 ++ apps/institution-ms/mvnw.cmd | 182 + apps/institution-ms/pom.xml | 220 + apps/institution-ms/web/pom.xml | 38 + .../mscore/web/config/CoreSecurityConfig.java | 14 + .../mscore/web/config/SwaggerConfig.java | 156 + .../selfcare/mscore/web/config/WebConfig.java | 24 + .../web/controller/DelegationController.java | 136 + .../controller/DelegationV2Controller.java | 90 + .../web/controller/ExternalController.java | 148 + .../web/controller/InstitutionController.java | 540 +++ .../web/controller/ManagementController.java | 48 + .../web/controller/OnboardingController.java | 95 + .../web/exception/CustomExceptionHandler.java | 115 + .../selfcare/mscore/web/filter/LogFilter.java | 70 + .../model/delegation/DelegationRequest.java | 25 + .../DelegationRequestFromTaxcode.java | 27 + .../model/delegation/DelegationResponse.java | 38 + .../DelegationWithPaginationResponse.java | 20 + .../AdditionalInformationsRequest.java | 16 + .../model/institution/AttributesRequest.java | 10 + .../model/institution/AttributesResponse.java | 10 + .../web/model/institution/BillingRequest.java | 11 + .../model/institution/BillingResponse.java | 11 + .../web/model/institution/BrokerResponse.java | 13 + .../model/institution/BulkInstitution.java | 48 + .../model/institution/BulkInstitutions.java | 11 + .../model/institution/BulkPartiesSeed.java | 15 + .../web/model/institution/BulkProduct.java | 19 + .../CreatePgInstitutionRequest.java | 19 + .../model/institution/CreatedAtRequest.java | 19 + .../DataProtectionOfficerRequest.java | 10 + .../DataProtectionOfficerResponse.java | 10 + .../web/model/institution/GeoTaxonomies.java | 9 + .../InstitutionBillingResponse.java | 25 + .../institution/InstitutionFromIpaPost.java | 19 + .../institution/InstitutionListResponse.java | 16 + .../InstitutionManagementResponse.java | 40 + .../InstitutionManagerResponse.java | 22 + .../InstitutionOnboardedRequest.java | 12 + .../InstitutionOnboardingListResponse.java | 16 + .../InstitutionOnboardingRequest.java | 21 + .../InstitutionOnboardingResponse.java | 39 + .../model/institution/InstitutionProduct.java | 10 + .../web/model/institution/InstitutionPut.java | 16 + .../model/institution/InstitutionRequest.java | 42 + .../institution/InstitutionResponse.java | 52 + .../institution/InstitutionToOnboard.java | 14 + .../institution/InstitutionUpdateRequest.java | 38 + .../InstitutionUpdateResponse.java | 34 + .../institution/InstitutionsResponse.java | 11 + .../model/institution/OnboardingResponse.java | 21 + .../institution/OnboardingsResponse.java | 12 + .../PaymentServiceProviderRequest.java | 12 + .../PaymentServiceProviderResponse.java | 12 + .../institution/PdaInstitutionRequest.java | 18 + .../model/institution/ProductsManagement.java | 14 + .../institution/RelationshipResponse.java | 22 + .../model/institution/RelationshipResult.java | 28 + .../institution/RelationshipsManagement.java | 14 + .../model/institution/RootParentResponse.java | 12 + .../model/institution/UserInfoResponse.java | 18 + .../mscore/web/model/mapper/BrokerMapper.java | 14 + .../web/model/mapper/DelegationMapper.java | 33 + .../model/mapper/InstitutionMapperCustom.java | 562 +++ .../mapper/InstitutionResourceMapper.java | 40 + .../model/mapper/InstitutionUpdateMapper.java | 29 + .../web/model/mapper/OnboardingMapper.java | 145 + .../mapper/OnboardingResourceMapper.java | 49 + .../web/model/mapper/RelationshipMapper.java | 60 + .../mscore/web/model/mapper/UserMapper.java | 12 + .../web/model/onboarding/BusinessData.java | 14 + .../web/model/onboarding/ContractRequest.java | 13 + .../web/model/onboarding/LegalsResponse.java | 13 + .../OnboardedInstitutionResponse.java | 46 + .../onboarding/OnboardedProductResponse.java | 21 + .../model/onboarding/OnboardedProducts.java | 11 + .../onboarding/OnboardingImportContract.java | 16 + .../onboarding/OnboardingInfoResponse.java | 13 + .../OnboardingInstitutionLegalsRequest.java | 33 + ...OnboardingInstitutionOperatorsRequest.java | 24 + .../OnboardingInstitutionRequest.java | 40 + .../OnboardingInstitutionUsersRequest.java | 24 + .../web/model/onboarding/ProductInfo.java | 16 + .../web/model/onboarding/SupportContact.java | 13 + .../model/onboarding/TokenListResponse.java | 20 + .../web/model/onboarding/TokenResponse.java | 40 + .../token/InstitutionToNotifyResponse.java | 33 + .../web/model/token/ScContractResponse.java | 30 + .../web/model/user/InstitutionProducts.java | 14 + .../model/user/OnboardedUsersResponse.java | 12 + .../mscore/web/model/user/Person.java | 34 + .../mscore/web/model/user/PersonId.java | 13 + .../mscore/web/model/user/Product.java | 24 + .../mscore/web/model/user/ProductCount.java | 9 + .../web/model/user/ProductCountResponse.java | 16 + .../web/model/user/UserProductsResponse.java | 18 + .../mscore/web/model/user/UserResponse.java | 27 + .../web/util/CustomExceptionMessage.java | 20 + .../resources/swagger/swagger_en.properties | 115 + .../resources/swagger/swagger_it.properties | 90 + .../pagopa/selfcare/mscore/web/TestUtils.java | 145 + .../mscore/web/config/SwaggerConfigTest.java | 116 + .../mscore/web/config/WebTestConfig.java | 9 + .../controller/DelegationControllerTest.java | 296 ++ .../DelegationV2ControllerTest.java | 296 ++ .../controller/ExternalControllerTest.java | 419 ++ .../InstitutionControllerPdaTest.java | 99 + .../controller/InstitutionControllerTest.java | 1395 ++++++ .../controller/ManagementControllerTest.java | 56 + .../controller/OnboardingControllerTest.java | 85 + .../exception/CustomExceptionHandlerTest.java | 163 + .../mscore/web/filter/LogFilterTest.java | 63 + .../mapper/InstitutionMapperCustomTest.java | 1248 ++++++ .../model/mapper/OnboardingMapperTest.java | 115 + .../model/mapper/RelationshipMapperTest.java | 351 ++ 408 files changed, 33436 insertions(+) create mode 100644 apps/institution-ms/.dockerignore create mode 100644 apps/institution-ms/.pre-commit-config.yaml create mode 100644 apps/institution-ms/.terraform-version create mode 100644 apps/institution-ms/CODEOWNERS create mode 100644 apps/institution-ms/Dockerfile create mode 100644 apps/institution-ms/Dockerfile.new create mode 100644 apps/institution-ms/Dockerfile.new.dockerignore create mode 100644 apps/institution-ms/README.md create mode 100644 apps/institution-ms/app/pom.xml create mode 100644 apps/institution-ms/app/src/main/java/it/pagopa/selfcare/mscore/SelfCareCoreApplication.java create mode 100644 apps/institution-ms/app/src/main/resources/config/application.yml create mode 100644 apps/institution-ms/app/src/main/resources/config/azure-storage-config.properties create mode 100644 apps/institution-ms/app/src/main/resources/config/core-config.properties create mode 100644 apps/institution-ms/app/src/main/resources/swagger/api-docs.json create mode 100644 apps/institution-ms/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java create mode 100644 apps/institution-ms/connector-api/pom.xml create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/DelegationConnector.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/EmailConnector.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/FileStorageConnector.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/InstitutionConnector.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/NotificationServiceConnector.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PartyRegistryProxyConnector.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PecNotificationConnector.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/ProductConnector.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserApiConnector.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserRegistryConnector.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/AzureStorageConfig.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/CoreConfig.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/MailTemplateConfig.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/CustomError.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationState.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationType.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Env.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/GenericError.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Order.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Origin.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/PricingPlan.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/ProductId.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/RelationshipState.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/SearchMode.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/TokenType.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/BadGatewayException.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/InvalidRequestException.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/MsCoreException.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceConflictException.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceForbiddenException.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundException.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ServiceUnavailableException.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/AreaOrganizzativaOmogenea.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/Certification.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/CertifiedField.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/InstitutionToNotify.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/QueueEvent.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/RootParent.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UnitaOrganizzativa.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UserToNotify.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/QueryCount.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionAggregation.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionBinding.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionFilter.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/Delegation.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationInstitution.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationWithPagination.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/GetDelegationParameters.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/PageInfo.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/Problem.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/ProblemError.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ASResource.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/AdditionalInformations.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Attributes.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Billing.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/CategoryProxyInfo.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/DataProtectionOfficer.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomies.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomyPage.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Institution.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionByLegal.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomies.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomyPage.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionProxyInfo.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionUpdate.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/NationalRegistriesProfessionalAddress.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Onboarding.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/OnboardingPage.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaAttributes.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaymentServiceProvider.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Premium.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/SaResource.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ValidInstitution.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/WorkContact.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MessageRequest.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MultipleReceiverMessageRequest.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Contract.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ContractImported.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/MailTemplate.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedProduct.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedUser.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingInfo.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingLegalsRequest.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingOperatorsRequest.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRequest.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRollback.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUpdateRollback.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUsersRequest.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ResourceResponse.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Token.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenRelationships.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenUser.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/VerifyOnboardingFilters.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/Product.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductRoleInfo.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductStatus.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/ProductManagerInfo.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipInfo.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPage.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPageElement.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/User.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserBinding.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserInfo.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserToOnboard.java create mode 100644 apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/utils/MaskDataUtils.java create mode 100644 apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/InvalidRequestExceptionTest.java create mode 100644 apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/MsCoreExceptionTest.java create mode 100644 apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceConflictExceptionTest.java create mode 100644 apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundExceptionTest.java create mode 100644 apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/utils/MaskDataUtilsTest.java create mode 100644 apps/institution-ms/connector/azure-storage/pom.xml create mode 100644 apps/institution-ms/connector/azure-storage/src/main/java/it/pagopa/selfcare/mscore/connector/azure_storage/AzureBlobClient.java create mode 100644 apps/institution-ms/connector/azure-storage/src/test/java/it/pagopa/selfcare/mscore/connector/azure_storage/config/AzureStorageConfigTest.java create mode 100644 apps/institution-ms/connector/dao/pom.xml create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilder.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImpl.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepository.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImpl.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepository.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnector.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImpl.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImpl.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationRepository.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/TokenRepository.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/UserRepository.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfig.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverter.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverter.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/DelegationEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/InstitutionEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/TokenEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/UserEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionAggregationEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionBindingEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AdditionalInformationsEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AttributesEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/BillingEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/DataProtectionOfficerEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/GeoTaxonomyEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/InstitutionUpdateEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardedProductEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardingEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaAttributesEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaymentServiceProviderEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/TokenUserEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/UserBindingEntity.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationEntityMapper.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationInstitutionMapper.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionEntityMapper.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapper.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapperHelper.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/OnboardedProductMapper.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserEntityMapper.java create mode 100644 apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserInstitutionAggregationMapper.java create mode 100644 apps/institution-ms/connector/dao/src/main/resources/config/dao-config.properties create mode 100644 apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilderTest.java create mode 100644 apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImplTest.java create mode 100644 apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepositoryTest.java create mode 100644 apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImplTest.java create mode 100644 apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepositoryTest.java create mode 100644 apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImplTest.java create mode 100644 apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImplTest.java create mode 100644 apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfigTest.java create mode 100644 apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverterTest.java create mode 100644 apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverterTest.java create mode 100644 apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserMapperTest.java create mode 100644 apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/utils/TestUtils.java create mode 100644 apps/institution-ms/connector/email/pom.xml create mode 100644 apps/institution-ms/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImpl.java create mode 100644 apps/institution-ms/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/config/EmailBaseConfig.java create mode 100644 apps/institution-ms/connector/email/src/main/resources/config/email.properties create mode 100644 apps/institution-ms/connector/email/src/test/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImplTest.java create mode 100644 apps/institution-ms/connector/pom.xml create mode 100644 apps/institution-ms/connector/rest/docs/openapi/registry_proxy.json create mode 100644 apps/institution-ms/connector/rest/docs/openapi/selfcare-user-docs.json create mode 100644 apps/institution-ms/connector/rest/docs/openapi/user_registry.json create mode 100644 apps/institution-ms/connector/rest/pom.xml create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImpl.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImpl.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImpl.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImpl.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/PartyRegistryProxyRestClient.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserApiRestClient.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserInstitutionApiRestClient.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserRegistryRestClient.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/FeignClientConfig.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/PartyRegistryProxyRestClientConfig.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserApiRestClientConfig.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserInstitutionApiRestClientConfig.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserRegistryRestClientConfig.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoder.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AooMapper.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AsMapper.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/SaMapper.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UoMapper.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UserMapperClient.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/geotaxonomy/GeographicTaxonomiesResponse.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AooResponse.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AsResponse.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/Institutions.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalRequest.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalResponse.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/LegalFilter.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/PdndResponse.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyCategoryResponse.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyInstitutionResponse.java create mode 100644 apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/UoResponse.java create mode 100644 apps/institution-ms/connector/rest/src/main/resources/config/feign-client.properties create mode 100644 apps/institution-ms/connector/rest/src/main/resources/config/party-registry-proxy-rest-client.properties create mode 100644 apps/institution-ms/connector/rest/src/main/resources/config/user-registry-rest-client.properties create mode 100644 apps/institution-ms/connector/rest/src/main/resources/config/user-rest-client.properties create mode 100644 apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImplTest.java create mode 100644 apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImplTest.java create mode 100644 apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImplTest.java create mode 100644 apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImplTest.java create mode 100644 apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoderTest.java create mode 100644 apps/institution-ms/core/pom.xml create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStream.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactory.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ContractService.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationService.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalService.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalServiceImpl.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionService.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImpl.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationService.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImpl.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingDao.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingService.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationService.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImpl.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/CloudTemplateLoader.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/FreeMarkerConfig.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MdcTaskDecorator.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MsCoreConfig.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/InstitutionMapper.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/TokenMapper.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategy.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyAnac.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyCommon.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyInfocamere.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIpa.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIvass.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPda.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyRaw.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/factory/CreateInstitutionStrategyFactory.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/input/CreateInstitutionStrategyInput.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/Constants.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/InstitutionPaSubunitType.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapper.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtils.java create mode 100644 apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/UtilEnumList.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactoryTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ContractServiceTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ExternalServiceImplTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplPdaTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImplTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingDaoTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/TestUtils.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImplTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPdaTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapperTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtilsTest.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/TestUtils.java create mode 100644 apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/model/DummyUser.java create mode 100644 apps/institution-ms/lombok.config create mode 100644 apps/institution-ms/mvnw create mode 100644 apps/institution-ms/mvnw.cmd create mode 100644 apps/institution-ms/pom.xml create mode 100644 apps/institution-ms/web/pom.xml create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/config/CoreSecurityConfig.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfig.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/config/WebConfig.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationController.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2Controller.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ExternalController.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ManagementController.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/OnboardingController.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandler.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/filter/LogFilter.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequestFromTaxcode.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationWithPaginationResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AdditionalInformationsRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BrokerResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitution.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitutions.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkPartiesSeed.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkProduct.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatePgInstitutionRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatedAtRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/GeoTaxonomies.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionBillingResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionFromIpaPost.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionListResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagementResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagerResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardedRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingListResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionProduct.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionPut.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionToOnboard.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionsResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingsResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PdaInstitutionRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/ProductsManagement.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResult.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipsManagement.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RootParentResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/UserInfoResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/BrokerMapper.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/DelegationMapper.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustom.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionResourceMapper.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionUpdateMapper.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapper.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingResourceMapper.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapper.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/UserMapper.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/BusinessData.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ContractRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/LegalsResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedInstitutionResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProductResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProducts.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingImportContract.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInfoResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionLegalsRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionOperatorsRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionUsersRequest.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ProductInfo.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/SupportContact.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenListResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/InstitutionToNotifyResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/ScContractResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/InstitutionProducts.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/OnboardedUsersResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Person.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/PersonId.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Product.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCount.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCountResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserProductsResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserResponse.java create mode 100644 apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/util/CustomExceptionMessage.java create mode 100644 apps/institution-ms/web/src/main/resources/swagger/swagger_en.properties create mode 100644 apps/institution-ms/web/src/main/resources/swagger/swagger_it.properties create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/TestUtils.java create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/config/WebTestConfig.java create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationControllerTest.java create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2ControllerTest.java create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ExternalControllerTest.java create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerPdaTest.java create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerTest.java create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ManagementControllerTest.java create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/OnboardingControllerTest.java create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandlerTest.java create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/filter/LogFilterTest.java create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustomTest.java create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapperTest.java create mode 100644 apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapperTest.java diff --git a/apps/institution-ms/.dockerignore b/apps/institution-ms/.dockerignore new file mode 100644 index 0000000..4cbae43 --- /dev/null +++ b/apps/institution-ms/.dockerignore @@ -0,0 +1,12 @@ +**/.dockerignore +**/.git +**/bin +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md diff --git a/apps/institution-ms/.pre-commit-config.yaml b/apps/institution-ms/.pre-commit-config.yaml new file mode 100644 index 0000000..e991df9 --- /dev/null +++ b/apps/institution-ms/.pre-commit-config.yaml @@ -0,0 +1,10 @@ +repos: + - repo: https://github.com/antonbabenko/pre-commit-terraform + rev: v1.86.0 + hooks: + - id: terraform_fmt + - id: terraform_docs + - id: terraform_validate + args: + - --args=-json + - --args=-no-color \ No newline at end of file diff --git a/apps/institution-ms/.terraform-version b/apps/institution-ms/.terraform-version new file mode 100644 index 0000000..83d1a5e --- /dev/null +++ b/apps/institution-ms/.terraform-version @@ -0,0 +1 @@ +1.6.6 \ No newline at end of file diff --git a/apps/institution-ms/CODEOWNERS b/apps/institution-ms/CODEOWNERS new file mode 100644 index 0000000..04a4227 --- /dev/null +++ b/apps/institution-ms/CODEOWNERS @@ -0,0 +1,3 @@ +# see https://help.github.com/en/articles/about-code-owners#example-of-a-codeowners-file + +* @pagopa/selfcare-contributors diff --git a/apps/institution-ms/Dockerfile b/apps/institution-ms/Dockerfile new file mode 100644 index 0000000..322cffb --- /dev/null +++ b/apps/institution-ms/Dockerfile @@ -0,0 +1,5 @@ +FROM maven@sha256:dcfe7934d3780beda6e1f0f641bc7db3fa9b8818899981f6eddae052c78394c7 +ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/3.1.1/applicationinsights-agent-3.1.1.jar /applicationinsights-agent.jar +VOLUME /tmp +COPY target/*.jar app.jar +ENTRYPOINT ["java","-jar","app.jar"] \ No newline at end of file diff --git a/apps/institution-ms/Dockerfile.new b/apps/institution-ms/Dockerfile.new new file mode 100644 index 0000000..8f8f2be --- /dev/null +++ b/apps/institution-ms/Dockerfile.new @@ -0,0 +1,35 @@ +FROM maven:3-eclipse-temurin-17@sha256:0d328fa6843bb26b60cf44d69833f241ffe96218fb29fa19df7a6603863eaae7 AS builder + +COPY . . + +RUN echo "\n" \ + "\n" \ + "\n" \ + "\${repositoryOnboarding}\n" \ + "\${repoLogin}\n" \ + "\${repoPwd}\n" \ + "\n" \ + "\n" \ + "\n" > settings.xml + +ARG REPO_ONBOARDING +ARG REPO_USERNAME +ARG REPO_PASSWORD + +RUN mvn --global-settings settings.xml -DrepositoryOnboarding=${REPO_ONBOARDING} -DrepoLogin=${REPO_USERNAME} -DrepoPwd=${REPO_PASSWORD} clean package -DskipTests=true + +FROM openjdk:17-jdk@sha256:528707081fdb9562eb819128a9f85ae7fe000e2fbaeaf9f87662e7b3f38cb7d8 AS runtime + +ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' + +WORKDIR /app + +COPY --from=builder ./target/*.jar ./app.jar + +ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/3.2.11/applicationinsights-agent-3.2.11.jar ./applicationinsights-agent.jar +RUN chmod 755 ./applicationinsights-agent.jar + +EXPOSE 8080 +USER 1001 + +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/apps/institution-ms/Dockerfile.new.dockerignore b/apps/institution-ms/Dockerfile.new.dockerignore new file mode 100644 index 0000000..427b8ce --- /dev/null +++ b/apps/institution-ms/Dockerfile.new.dockerignore @@ -0,0 +1,117 @@ +**/.dockerignore +**/.git +**/bin +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md + +**/.idea +.idea +**/.mvn +.mvn + +**/target + +# Created by .ignore support plugin (hsz.mobi) +### Maven template +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +### Java template +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests \ No newline at end of file diff --git a/apps/institution-ms/README.md b/apps/institution-ms/README.md new file mode 100644 index 0000000..7da7e5e --- /dev/null +++ b/apps/institution-ms/README.md @@ -0,0 +1,47 @@ +# selfcare-ms-core + +## Description +This Spring Boot-based microservice is designed to handle several key functionalities in the selfcare operations domain. It includes business logic for: + +- Onboarding operations. +- Management of institutions and delegations. +- User creation. +- Associating users with products and institutions. + +## Prerequisites +Before running the microservice, ensure you have installed: + +- Java JDK 17 or higher +- Maven 3.6 or higher +- Connection to VPN selc-d-vnet + +## Configuration +Look at app/src/main/resources/`application.yml` file to set up environment-specific settings, such as database details. + +## Installation and Local Startup +To run the microservice locally, follow these steps: + +1. **Clone the Repository** + +```shell script +git clone https://github.com/pagopa/selfcare-ms-core.git +cd selfcare-ms-core +``` + +2. **Build the Project** + +```shell script +mvn clean install +``` + +2. **Start the Application** + +```shell script +mvn spring-boot:run -pl app +``` + +## Usage +After starting, the microservice will be available at `http://localhost:8080/`. + +To use the API, refer to the Swagger UI documentation (if available) at `http://localhost:8080/swagger-ui.html`. + diff --git a/apps/institution-ms/app/pom.xml b/apps/institution-ms/app/pom.xml new file mode 100644 index 0000000..12a6481 --- /dev/null +++ b/apps/institution-ms/app/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + selc-ms-core + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-app + + + + it.pagopa.selfcare + selc-ms-core-web + + + it.pagopa.selfcare + selc-ms-core-connector-dao + runtime + + + it.pagopa.selfcare + selc-ms-core-connector-rest + runtime + + + it.pagopa.selfcare + selc-ms-core-connector-azure-storage + runtime + + + it.pagopa.selfcare + selc-ms-core-connector-email + runtime + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + false + ${project.parent.artifactId}-${project.parent.version}-FATJAR + ../target + + + org.projectlombok + lombok + + + + + + + + diff --git a/apps/institution-ms/app/src/main/java/it/pagopa/selfcare/mscore/SelfCareCoreApplication.java b/apps/institution-ms/app/src/main/java/it/pagopa/selfcare/mscore/SelfCareCoreApplication.java new file mode 100644 index 0000000..3b116ad --- /dev/null +++ b/apps/institution-ms/app/src/main/java/it/pagopa/selfcare/mscore/SelfCareCoreApplication.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; + +@SpringBootApplication +@EnableAsync +public class SelfCareCoreApplication { + + public static void main(String[] args) { + SpringApplication.run(SelfCareCoreApplication.class, args); + } + +} diff --git a/apps/institution-ms/app/src/main/resources/config/application.yml b/apps/institution-ms/app/src/main/resources/config/application.yml new file mode 100644 index 0000000..ebc4a01 --- /dev/null +++ b/apps/institution-ms/app/src/main/resources/config/application.yml @@ -0,0 +1,60 @@ +server: + port: ${APP_SERVER_PORT:8080} + shutdown: graceful + +spring: + application: + name: "@project.parent.artifactId@" + version: "@project.version@" + profiles: + include: + # TO enable specific-language documentations + - swaggerEN + - AzureStorage + data: + web: + pageable: + max-page-size: ${MAX_PAGE_SIZE:2000} + zipkin: + enabled: false + sleuth: + baggage: + remote-fields: X-Client-Ip + correlation-fields: X-Client-Ip + +info: + build: + artifact: "@project.parent.artifactId@" + name: "@project.parent.artifactId@" + description: "@project.description@" + version: "@project.version@" + + +logging: + level: + it: + pagopa: + selfcare: ${APP_LOG_LEVEL:DEBUG} + org: + springframework: + data: + mongodb: + core: + MongoTemplate: DEBUG + pattern: + additional-info: ",%X{X-Client-Ip:-}]" + +core: + user-event-service: + type: ${CORE_USER_EVENT_SERVICE_TYPE:ignore} + contract-event-service: + type: ${CORE_CONTRACT_EVENT_SERVICE_TYPE:ignore} + resilience4j: + retry: + retry-aspect-order: 1 + instances: + retryTimeout: + max-attempts: 3 + wait-duration: 5s + retry-exceptions: + - feign.RetryableException \ No newline at end of file diff --git a/apps/institution-ms/app/src/main/resources/config/azure-storage-config.properties b/apps/institution-ms/app/src/main/resources/config/azure-storage-config.properties new file mode 100644 index 0000000..a9370ea --- /dev/null +++ b/apps/institution-ms/app/src/main/resources/config/azure-storage-config.properties @@ -0,0 +1,7 @@ +blob-storage.account-key=${STORAGE_CREDENTIAL_SECRET} +blob-storage.container=${STORAGE_CONTAINER} +blob-storage.checkout-template-container=${STORAGE_TEMPLATE_URL}/resources/templates/email/ +blob-storage.endpoint-suffix = ${STORAGE_ENDPOINT} +blob-storage.account-name = ${STORAGE_CREDENTIAL_ID} +blob-storage.contract-path = parties/docs/ +blob-storage.connection-string = ${BLOB_STORAGE_CONN_STRING:UseDevelopmentStorage=true;} \ No newline at end of file diff --git a/apps/institution-ms/app/src/main/resources/config/core-config.properties b/apps/institution-ms/app/src/main/resources/config/core-config.properties new file mode 100644 index 0000000..9a5ec02 --- /dev/null +++ b/apps/institution-ms/app/src/main/resources/config/core-config.properties @@ -0,0 +1,31 @@ +mscore.port=8080 + +mscore.logoPath = ${PAGOPA_LOGO_URL:resources/logo.png} +mscore.infoCamereEnable = ${INFOCAMERE_ENABLE:false} +mscore.sender-mail = ${MAIL_SENDER_ADDRESS:test@test.it} +mscore.destination-mails = ${DESTINATION_MAILS:} +mscore.enableSendDelegationMail=${SEND_DELEGATION_PEC:false} +mscore.sendEmailToInstitution = ${ONBOARDING_SEND_EMAIL_TO_INSTITUTION:false} +mscore.institutionAlternativeEmail = ${ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL} + +mscore.mail-template.placeholders.onboarding.delegationNotificationPath = ${MAIL_TEMPLATE_DELEGATION_NOTIFICATION_PATH} +mscore.mail-template.placeholders.onboarding.delegationUserNotificationPath = ${MAIL_TEMPLATE_DELEGATION_USER_NOTIFICATION_PATH} +mscore.mail-template.placeholders.onboarding.delegationPartnerName = partnerName + +mscore.mail-template.placeholders.onboarding.institutionDescription = institutionName +mscore.mail-template.placeholders.onboarding.notificationProductName = productName + +scheduler.threads.max-number=${THREADS_SCHEDULE_MAX_NUMBER:1} +scheduler.fixed-delay.delay=${SCHEDULER_FIXED_DELAY:20000} + +mscore.blob-storage.container-product=${PRODUCT_STORAGE_CONTAINER:selc-d-product} +mscore.blob-storage.filepath-product = products.json +mscore.blob-storage.connection-string-product = ${BLOB_STORAGE_PRODUCT_CONNECTION_STRING:UseDevelopmentStorage=true;} + +#SES +mscore.aws-ses-secret-id=${AWS_SES_ACCESS_KEY_ID:secret-id-example} +mscore.aws-ses-secret-key=${AWS_SES_SECRET_ACCESS_KEY:secret-key-example} +mscore.aws-ses-region=${AWS_SES_REGION:eu-south-1} + +mscore.sending-frequency-pec-notification=${SENDING_FREQUENCY_PEC_NOTIFICATION:30} +mscore.epoch-date-pec-notification=${EPOCH_DATE_PEC_NOTIFICATION:2024-01-01} \ No newline at end of file diff --git a/apps/institution-ms/app/src/main/resources/swagger/api-docs.json b/apps/institution-ms/app/src/main/resources/swagger/api-docs.json new file mode 100644 index 0000000..936ecd7 --- /dev/null +++ b/apps/institution-ms/app/src/main/resources/swagger/api-docs.json @@ -0,0 +1,3804 @@ +{ + "openapi" : "3.0.3", + "info" : { + "title" : "selc-ms-core", + "version" : "1.0-SNAPSHOT" + }, + "servers" : [ { + "url" : "{url}:{port}{basePath}", + "variables" : { + "url" : { + "default" : "http://localhost" + }, + "port" : { + "default" : "80" + }, + "basePath" : { + "default" : "" + } + } + } ], + "tags" : [ { + "name" : "Delegation", + "description" : "Delegation Controller" + }, { + "name" : "External", + "description" : "External Controller" + }, { + "name" : "Institution", + "description" : "Institution Controller" + }, { + "name" : "Management", + "description" : "Management Controller" + }, { + "name" : "Onboarding", + "description" : "Onboarding Controller" + } ], + "paths" : { + "/delegations" : { + "get" : { + "tags" : [ "Delegation", "external-v2", "support" ], + "summary" : "Retrieve institution's delegations", + "description" : "Retrieve institution's delegations", + "operationId" : "getDelegationsUsingGET", + "parameters" : [ { + "name" : "institutionId", + "in" : "query", + "description" : "The internal identifier of the institution", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "brokerId", + "in" : "query", + "description" : "The internal identifier of the institution", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "query", + "description" : "Product's unique identifier", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "search", + "in" : "query", + "description" : "Description ente", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "taxCode", + "in" : "query", + "description" : "Institution's tax code", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "order", + "in" : "query", + "description" : "Order to show response NONE, ASC, DESC", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string", + "enum" : [ "ASC", "DESC", "NONE" ] + } + }, { + "name" : "page", + "in" : "query", + "description" : "page", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "size", + "in" : "query", + "description" : "size", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DelegationResponse" + } + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + }, + "post" : { + "tags" : [ "Delegation" ], + "summary" : "Create an association between institution id and technical partner", + "description" : "Create an association between institution id and technical partner", + "operationId" : "createDelegationUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/DelegationRequest" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/DelegationResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/delegations/from-taxcode" : { + "post" : { + "tags" : [ "Delegation" ], + "summary" : "Create an association between institution and technical partner using taxCode for both instead of internal id. It is useful when we don't know institution's internal id.", + "description" : "Create an association between institution and technical partner using taxCode for both instead of internal id. It is useful when we don't know institution's internal id.", + "operationId" : "createDelegationFromInstitutionsTaxCodeUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/DelegationRequestFromTaxcode" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/DelegationResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/delegations/{delegationId}" : { + "delete" : { + "tags" : [ "Delegation" ], + "summary" : "Delete an association between institution id and technical partner setting its status to DELETED and setting delegation to false on institution if it has no more delegations", + "description" : "Delete an association between institution id and technical partner setting its status to DELETED and setting delegation to false on institution if it has no more delegations", + "operationId" : "deleteDelegationUsingDELETE", + "parameters" : [ { + "name" : "delegationId", + "in" : "path", + "description" : "Delegation's unique internal identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "204" : { + "description" : "No Content" + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/v2/delegations" : { + "get" : { + "tags" : [ "Delegation" ], + "summary" : "Retrieve institution's delegations with pagination", + "description" : "Retrieve institution's delegations with pagination", + "operationId" : "getDelegationsUsingGET_1", + "parameters" : [ { + "name" : "institutionId", + "in" : "query", + "description" : "The internal identifier of the institution", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "brokerId", + "in" : "query", + "description" : "The internal identifier of the institution", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "query", + "description" : "Product's unique identifier", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "search", + "in" : "query", + "description" : "Description ente", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "taxCode", + "in" : "query", + "description" : "Institution's tax code", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "order", + "in" : "query", + "description" : "Order to show response NONE, ASC, DESC", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string", + "enum" : [ "ASC", "DESC", "NONE" ] + } + }, { + "name" : "page", + "in" : "query", + "description" : "page", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "size", + "in" : "query", + "description" : "size", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/DelegationWithPaginationResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/external/institutions" : { + "get" : { + "tags" : [ "External" ], + "summary" : "Gets the corresponding institution using internal institution id", + "description" : "Gets the corresponding institution using internal institution id", + "operationId" : "retrieveInstitutionByIdsUsingGET", + "parameters" : [ { + "name" : "ids", + "in" : "query", + "description" : "List of Institution to onboard", + "required" : true, + "style" : "form", + "explode" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/external/institutions/{externalId}" : { + "get" : { + "tags" : [ "External" ], + "summary" : "Gets institution using external institution id", + "description" : "Gets institution using external institution id", + "operationId" : "getByExternalIdUsingGET", + "parameters" : [ { + "name" : "externalId", + "in" : "path", + "description" : "Institution's unique external identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/external/institutions/{externalId}/geotaxonomies" : { + "get" : { + "tags" : [ "External" ], + "summary" : "retrieves the geographic taxonomies related to Institution.", + "description" : "retrieves the geographic taxonomies related to Institution.", + "operationId" : "retrieveInstitutionGeoTaxonomiesByExternalIdUsingGET", + "parameters" : [ { + "name" : "externalId", + "in" : "path", + "description" : "Institution's unique external identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/GeographicTaxonomies" + } + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/external/institutions/{externalId}/products" : { + "get" : { + "tags" : [ "External" ], + "summary" : "retrieves the products related to Institution", + "description" : "retrieves the products related to Institution", + "operationId" : "retrieveInstitutionProductsByExternalIdUsingGET", + "parameters" : [ { + "name" : "externalId", + "in" : "path", + "description" : "Institution's unique external identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "states", + "in" : "query", + "description" : "states", + "required" : false, + "style" : "form", + "explode" : true, + "schema" : { + "type" : "string", + "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/OnboardedProducts" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/external/institutions/{externalId}/products/{productId}/billing" : { + "get" : { + "tags" : [ "External" ], + "summary" : "retrieves the billing data related to the institution even if the current user is not related to the institution/product", + "description" : "retrieves the billing data related to the institution even if the current user is not related to the institution/product", + "operationId" : "getBillingInstitutionByExternalIdUsingGET", + "parameters" : [ { + "name" : "externalId", + "in" : "path", + "description" : "Institution's unique external identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "path", + "description" : "Product's unique identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionBillingResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions" : { + "get" : { + "tags" : [ "Institution", "external-v2", "support", "support-pnpg" ], + "summary" : "Gets institutions filtering by taxCode and/or subunitCode", + "description" : "Gets institutions filtering by taxCode and/or subunitCode", + "operationId" : "getInstitutionsUsingGET", + "parameters" : [ { + "name" : "taxCode", + "in" : "query", + "description" : "Institution's tax code", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "subunitCode", + "in" : "query", + "description" : "Institution's subunit code", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "origin", + "in" : "query", + "description" : "origin", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "originId", + "in" : "query", + "description" : "originId", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionsResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + }, + "post" : { + "tags" : [ "Institution" ], + "summary" : "create an institution using external institution id without fetching data from party-registry or info-camere", + "description" : "create an institution using external institution id without fetching data from party-registry or info-camere", + "operationId" : "createInstitutionUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionRequest" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/from-anac" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "Create an association between institution id and technical partner from anac", + "description" : "Create an association between institution id and technical partner from anac", + "operationId" : "createInstitutionFromAnacUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionRequest" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/from-infocamere" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "create an institution from infocamere registry", + "description" : "create an institution from infocamere registry", + "operationId" : "createInstitutionFromInfocamereUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionRequest" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/from-ipa" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "create an institution from ipa registry", + "description" : "create an institution from ipa registry", + "operationId" : "createInstitutionFromIpaUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionFromIpaPost" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/from-ivass" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "create an institution from ivass CSV", + "description" : "create an institution from ivass CSV", + "operationId" : "createInstitutionFromIvassUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionRequest" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/from-pda" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "Create an association between institution id and technical partner from pda", + "description" : "create an institution from ipa registry", + "operationId" : "createInstitutionFromPdaUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/PdaInstitutionRequest" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/insert/{externalId}" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "create an institution using external institution id without fetching data from party-registry or info-camere", + "description" : "create an institution using external institution id without fetching data from party-registry or info-camere", + "operationId" : "createInstitutionRawUsingPOST", + "parameters" : [ { + "name" : "externalId", + "in" : "path", + "description" : "Institution's unique external identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionRequest" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "deprecated" : true, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/onboarded/{productId}" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "Retrieve list of institution which logged user can onboard", + "description" : "Retrieve list of institution which logged user can onboard", + "operationId" : "getValidInstitutionToOnboardUsingPOST", + "parameters" : [ { + "name" : "productId", + "in" : "path", + "description" : "productId", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionToOnboard" + } + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionToOnboard" + } + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/pg" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "create an institution (PG) using external institution id fetching data from info-camere", + "description" : "create an institution (PG) using external institution id fetching data from info-camere", + "operationId" : "createPgInstitutionUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CreatePgInstitutionRequest" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/products/{productId}" : { + "get" : { + "tags" : [ "Institution" ], + "summary" : "Gets institutions filtering onboardings by product id", + "description" : "Gets institutions filtering onboardings by product id", + "operationId" : "findFromProductUsingGET", + "parameters" : [ { + "name" : "productId", + "in" : "path", + "description" : "Product's unique identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "page", + "in" : "query", + "description" : "Page number", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "size", + "in" : "query", + "description" : "Page size", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionOnboardingListResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{externalId}" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "create an institution (PA) using external institution id fetching data from party-registry", + "description" : "create an institution (PA) using external institution id fetching data from party-registry", + "operationId" : "createInstitutionByExternalIdUsingPOST", + "parameters" : [ { + "name" : "externalId", + "in" : "path", + "description" : "Institution's unique external identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "deprecated" : true, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{id}" : { + "get" : { + "tags" : [ "Institution", "external-v2" ], + "summary" : "Gets the corresponding institution using internal institution id", + "description" : "Gets the corresponding institution using internal institution id", + "operationId" : "retrieveInstitutionByIdUsingGET", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "The internal identifier of the institution", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + }, + "put" : { + "tags" : [ "Institution" ], + "summary" : "update institution data of given institution", + "description" : "update institution data of given institution", + "operationId" : "updateInstitutionUsingPUT", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "The internal identifier of the institution", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionPut" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "403" : { + "description" : "Forbidden", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{id}/geotaxonomies" : { + "get" : { + "tags" : [ "Institution" ], + "summary" : "retrieves the geographic taxonomies this institution is related to", + "description" : "retrieves the geographic taxonomies this institution is related to", + "operationId" : "retrieveInstitutionGeoTaxonomiesUsingGET", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "The internal identifier of the institution", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/GeographicTaxonomies" + } + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{id}/onboarding" : { + "post" : { + "tags" : [ "Institution" ], + "summary" : "The service adds users to the registry if they are not present and associates them with the institution and product contained in the body", + "description" : "The service adds users to the registry if they are not present and associates them with the institution and product contained in the body", + "operationId" : "onboardingInstitutionUsingPOST", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "id", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionOnboardingRequest" + } + } + } + }, + "responses" : { + "200" : { + "description" : "User already exists an onboarding in status ACTIVE or SUSPENDED with that productId", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "201" : { + "description" : "Created", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{id}/products" : { + "get" : { + "tags" : [ "Institution" ], + "summary" : "retrieves the insistitution's related products.", + "description" : "retrieves the insistitution's related products.", + "operationId" : "retrieveInstitutionProductsUsingGET", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "The internal identifier of the institution", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "states", + "in" : "query", + "description" : "List of Relationship state for filter products", + "required" : false, + "style" : "form", + "explode" : true, + "schema" : { + "type" : "string", + "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/OnboardedProducts" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{id}/products/{productId}" : { + "delete" : { + "tags" : [ "Institution" ], + "summary" : "The service set DELETE status on onboarding association with the product and institutionId", + "description" : "The service set DELETE status on onboarding association with the product and institutionId", + "operationId" : "deleteOnboardedInstitutionUsingDELETE", + "parameters" : [ { + "name" : "productId", + "in" : "path", + "description" : "productId", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "id", + "in" : "path", + "description" : "id", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "204" : { + "description" : "No Content" + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{institutionId}/createdAt" : { + "put" : { + "tags" : [ "Institution" ], + "summary" : "The service updates the createdAt field for the institution-product pair", + "description" : "The service updates the createdAt field for the institution-product pair", + "operationId" : "updateCreatedAtUsingPUT", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "description" : "The internal identifier of the institution", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CreatedAtRequest" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK" + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "403" : { + "description" : "Forbidden", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{institutionId}/onboardings" : { + "get" : { + "tags" : [ "Institution", "external-v2" ], + "summary" : "Retrieve institution information", + "description" : "Retrieve institution information", + "operationId" : "getOnboardingsInstitutionUsingGET", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "description" : "The internal identifier of the institution", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "query", + "description" : "productId", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/OnboardingsResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{productId}/brokers/{institutionType}" : { + "get" : { + "tags" : [ "Institution" ], + "summary" : "Retrieve institution brokers", + "description" : "Retrieve institution brokers", + "operationId" : "getInstitutionBrokersUsingGET", + "parameters" : [ { + "name" : "productId", + "in" : "path", + "description" : "Product's unique identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "institutionType", + "in" : "path", + "description" : "Institution's type", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BrokerResponse" + } + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/bulk/institutions" : { + "post" : { + "tags" : [ "Management" ], + "summary" : "Gets the corresponding institution using internal institution id", + "description" : "Gets the corresponding institution using internal institution id", + "operationId" : "retrieveInstitutionByIdsUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/BulkPartiesSeed" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/BulkInstitutions" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/onboarding" : { + "head" : { + "tags" : [ "Onboarding" ], + "summary" : "verify if onboardedProduct is already onboarded for institution", + "description" : "verify if onboardedProduct is already onboarded for institution", + "operationId" : "verifyOnboardingInfoUsingHEAD", + "parameters" : [ { + "name" : "taxCode", + "in" : "query", + "description" : "Institution's tax code", + "required" : true, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "subunitCode", + "in" : "query", + "description" : "Institution's subunit code", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "query", + "description" : "Product's unique identifier", + "required" : true, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "204" : { + "description" : "No Content" + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/onboarding/institution/{externalId}/products/{productId}" : { + "head" : { + "tags" : [ "Onboarding" ], + "summary" : "verify if onboardedProduct is already onboarded for institution", + "description" : "verify if onboardedProduct is already onboarded for institution", + "operationId" : "verifyOnboardingInfoUsingHEAD_1", + "parameters" : [ { + "name" : "externalId", + "in" : "path", + "description" : "Institution's unique external identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "path", + "description" : "Product's unique identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "204" : { + "description" : "No Content" + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/onboarding/verify" : { + "head" : { + "tags" : [ "Onboarding" ], + "summary" : "verify if onboardedProduct is already onboarded for institution", + "description" : "verify if onboardedProduct is already onboarded for institution", + "operationId" : "verifyOnboardingInfoByFiltersUsingHEAD", + "parameters" : [ { + "name" : "productId", + "in" : "query", + "description" : "Product's unique identifier", + "required" : true, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "externalId", + "in" : "query", + "description" : "Institution's unique external identifier", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "taxCode", + "in" : "query", + "description" : "Institution's tax code", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "origin", + "in" : "query", + "description" : "Institution's origin", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "originId", + "in" : "query", + "description" : "Institution's id in the relative origin open data", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "subunitCode", + "in" : "query", + "description" : "Institution's subunit code", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "204" : { + "description" : "No Content" + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + } + }, + "components" : { + "schemas" : { + "AdditionalInformations" : { + "title" : "AdditionalInformations", + "type" : "object", + "properties" : { + "agentOfPublicService" : { + "type" : "boolean" + }, + "agentOfPublicServiceNote" : { + "type" : "string" + }, + "belongRegulatedMarket" : { + "type" : "boolean" + }, + "establishedByRegulatoryProvision" : { + "type" : "boolean" + }, + "establishedByRegulatoryProvisionNote" : { + "type" : "string" + }, + "ipa" : { + "type" : "boolean" + }, + "ipaCode" : { + "type" : "string" + }, + "otherNote" : { + "type" : "string" + }, + "regulatedMarketNote" : { + "type" : "string" + } + } + }, + "AttributesRequest" : { + "title" : "AttributesRequest", + "type" : "object", + "properties" : { + "code" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "origin" : { + "type" : "string" + } + } + }, + "AttributesResponse" : { + "title" : "AttributesResponse", + "type" : "object", + "properties" : { + "code" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "origin" : { + "type" : "string" + } + } + }, + "Billing" : { + "title" : "Billing", + "type" : "object", + "properties" : { + "publicServices" : { + "type" : "boolean" + }, + "recipientCode" : { + "type" : "string" + }, + "taxCodeInvoicing" : { + "type" : "string" + }, + "vatNumber" : { + "type" : "string" + } + } + }, + "BillingRequest" : { + "title" : "BillingRequest", + "type" : "object", + "properties" : { + "publicServices" : { + "type" : "boolean" + }, + "recipientCode" : { + "type" : "string" + }, + "taxCodeInvoicing" : { + "type" : "string" + }, + "vatNumber" : { + "type" : "string" + } + } + }, + "BillingResponse" : { + "title" : "BillingResponse", + "type" : "object", + "properties" : { + "publicServices" : { + "type" : "boolean" + }, + "recipientCode" : { + "type" : "string" + }, + "taxCodeInvoicing" : { + "type" : "string" + }, + "vatNumber" : { + "type" : "string" + } + } + }, + "BrokerResponse" : { + "title" : "BrokerResponse", + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "id" : { + "type" : "string" + }, + "numberOfDelegations" : { + "type" : "integer", + "format" : "int32" + }, + "taxCode" : { + "type" : "string" + } + } + }, + "BulkInstitution" : { + "title" : "BulkInstitution", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "attributes" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/AttributesResponse" + } + }, + "description" : { + "type" : "string" + }, + "digitalAddress" : { + "type" : "string" + }, + "externalId" : { + "type" : "string" + }, + "id" : { + "type" : "string" + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "origin" : { + "type" : "string" + }, + "originId" : { + "type" : "string" + }, + "products" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/BulkProduct" + } + }, + "taxCode" : { + "type" : "string" + }, + "zipCode" : { + "type" : "string" + } + } + }, + "BulkInstitutions" : { + "title" : "BulkInstitutions", + "type" : "object", + "properties" : { + "found" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BulkInstitution" + } + }, + "notFound" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "BulkPartiesSeed" : { + "title" : "BulkPartiesSeed", + "type" : "object", + "properties" : { + "partyIdentifiers" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "BulkProduct" : { + "title" : "BulkProduct", + "type" : "object", + "properties" : { + "billing" : { + "$ref" : "#/components/schemas/BillingResponse" + }, + "pricingPlan" : { + "type" : "string" + }, + "product" : { + "type" : "string" + }, + "status" : { + "type" : "string", + "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] + } + } + }, + "Contract" : { + "title" : "Contract", + "type" : "object", + "properties" : { + "path" : { + "type" : "string" + }, + "version" : { + "type" : "string" + } + } + }, + "CreatePgInstitutionRequest" : { + "title" : "CreatePgInstitutionRequest", + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "existsInRegistry" : { + "type" : "boolean" + }, + "taxId" : { + "type" : "string" + } + } + }, + "CreatedAtRequest" : { + "title" : "CreatedAtRequest", + "type" : "object", + "properties" : { + "activatedAt" : { + "type" : "string", + "format" : "date-time" + }, + "createdAt" : { + "type" : "string", + "format" : "date-time" + }, + "productId" : { + "type" : "string" + } + } + }, + "DataProtectionOfficer" : { + "title" : "DataProtectionOfficer", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "pec" : { + "type" : "string" + } + } + }, + "DataProtectionOfficerRequest" : { + "title" : "DataProtectionOfficerRequest", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "pec" : { + "type" : "string" + } + } + }, + "DataProtectionOfficerResponse" : { + "title" : "DataProtectionOfficerResponse", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "pec" : { + "type" : "string" + } + } + }, + "DelegationRequest" : { + "title" : "DelegationRequest", + "type" : "object", + "properties" : { + "from" : { + "type" : "string" + }, + "institutionFromName" : { + "type" : "string" + }, + "institutionToName" : { + "type" : "string" + }, + "productId" : { + "type" : "string" + }, + "to" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "enum" : [ "AOO", "EA", "PT" ] + } + } + }, + "DelegationRequestFromTaxcode" : { + "title" : "DelegationRequestFromTaxcode", + "type" : "object", + "properties" : { + "fromSubunitCode" : { + "type" : "string" + }, + "fromTaxCode" : { + "type" : "string" + }, + "institutionFromName" : { + "type" : "string" + }, + "institutionToName" : { + "type" : "string" + }, + "productId" : { + "type" : "string" + }, + "toSubunitCode" : { + "type" : "string" + }, + "toTaxCode" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "enum" : [ "AOO", "EA", "PT" ] + } + } + }, + "DelegationResponse" : { + "title" : "DelegationResponse", + "type" : "object", + "properties" : { + "brokerId" : { + "type" : "string" + }, + "brokerName" : { + "type" : "string" + }, + "brokerTaxCode" : { + "type" : "string" + }, + "brokerType" : { + "type" : "string" + }, + "createdAt" : { + "type" : "string", + "format" : "date-time" + }, + "id" : { + "type" : "string" + }, + "institutionId" : { + "type" : "string" + }, + "institutionName" : { + "type" : "string" + }, + "institutionRootName" : { + "type" : "string" + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "productId" : { + "type" : "string" + }, + "status" : { + "type" : "string", + "enum" : [ "ACTIVE", "DELETED" ] + }, + "taxCode" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "enum" : [ "AOO", "EA", "PT" ] + }, + "updatedAt" : { + "type" : "string", + "format" : "date-time" + } + } + }, + "DelegationWithPaginationResponse" : { + "title" : "DelegationWithPaginationResponse", + "type" : "object", + "properties" : { + "delegations" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DelegationResponse" + } + }, + "pageInfo" : { + "$ref" : "#/components/schemas/PageInfo" + } + } + }, + "GeoTaxonomies" : { + "title" : "GeoTaxonomies", + "type" : "object", + "properties" : { + "code" : { + "type" : "string" + }, + "desc" : { + "type" : "string" + } + } + }, + "GeographicTaxonomies" : { + "title" : "GeographicTaxonomies", + "type" : "object", + "properties" : { + "code" : { + "type" : "string" + }, + "country" : { + "type" : "string" + }, + "country_abbreviation" : { + "type" : "string" + }, + "desc" : { + "type" : "string" + }, + "enabled" : { + "type" : "boolean" + }, + "istat_code" : { + "type" : "string" + }, + "province_abbreviation" : { + "type" : "string" + }, + "province_id" : { + "type" : "string" + }, + "region_id" : { + "type" : "string" + } + } + }, + "InstitutionBillingResponse" : { + "title" : "InstitutionBillingResponse", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "aooParentCode" : { + "type" : "string" + }, + "billing" : { + "$ref" : "#/components/schemas/BillingResponse" + }, + "description" : { + "type" : "string" + }, + "digitalAddress" : { + "type" : "string" + }, + "externalId" : { + "type" : "string" + }, + "institutionId" : { + "type" : "string" + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "origin" : { + "type" : "string", + "enum" : [ "ADE", "ANAC", "INFOCAMERE", "IPA", "IVASS", "MOCK", "SELC", "UNKNOWN" ] + }, + "originId" : { + "type" : "string" + }, + "pricingPlan" : { + "type" : "string" + }, + "subunitCode" : { + "type" : "string" + }, + "subunitType" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "zipCode" : { + "type" : "string" + } + } + }, + "InstitutionFromIpaPost" : { + "title" : "InstitutionFromIpaPost", + "type" : "object", + "properties" : { + "geographicTaxonomies" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/GeoTaxonomies" + } + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "subunitCode" : { + "type" : "string" + }, + "subunitType" : { + "type" : "string", + "enum" : [ "AOO", "UO" ] + }, + "taxCode" : { + "type" : "string" + } + } + }, + "InstitutionGeographicTaxonomies" : { + "title" : "InstitutionGeographicTaxonomies", + "type" : "object", + "properties" : { + "code" : { + "type" : "string" + }, + "desc" : { + "type" : "string" + } + } + }, + "InstitutionOnboardingListResponse" : { + "title" : "InstitutionOnboardingListResponse", + "type" : "object", + "properties" : { + "items" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionOnboardingResponse" + } + } + } + }, + "InstitutionOnboardingRequest" : { + "title" : "InstitutionOnboardingRequest", + "type" : "object", + "properties" : { + "activatedAt" : { + "type" : "string", + "format" : "date-time" + }, + "billing" : { + "$ref" : "#/components/schemas/BillingRequest" + }, + "contractPath" : { + "type" : "string" + }, + "isAggregator" : { + "type" : "boolean" + }, + "pricingPlan" : { + "type" : "string" + }, + "productId" : { + "type" : "string" + }, + "tokenId" : { + "type" : "string" + } + } + }, + "InstitutionOnboardingResponse" : { + "title" : "InstitutionOnboardingResponse", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "aooParentCode" : { + "type" : "string" + }, + "attributes" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/AttributesResponse" + } + }, + "businessRegisterPlace" : { + "type" : "string" + }, + "createdAt" : { + "type" : "string", + "format" : "date-time" + }, + "dataProtectionOfficer" : { + "$ref" : "#/components/schemas/DataProtectionOfficerResponse" + }, + "description" : { + "type" : "string" + }, + "digitalAddress" : { + "type" : "string" + }, + "externalId" : { + "type" : "string" + }, + "geographicTaxonomies" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/GeoTaxonomies" + } + }, + "id" : { + "type" : "string" + }, + "imported" : { + "type" : "boolean" + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "onboardings" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/OnboardingResponse" + } + }, + "origin" : { + "type" : "string" + }, + "originId" : { + "type" : "string" + }, + "paymentServiceProvider" : { + "$ref" : "#/components/schemas/PaymentServiceProviderResponse" + }, + "rea" : { + "type" : "string" + }, + "shareCapital" : { + "type" : "string" + }, + "subunitCode" : { + "type" : "string" + }, + "subunitType" : { + "type" : "string" + }, + "supportEmail" : { + "type" : "string" + }, + "supportPhone" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "updatedAt" : { + "type" : "string", + "format" : "date-time" + }, + "zipCode" : { + "type" : "string" + } + } + }, + "InstitutionProduct" : { + "title" : "InstitutionProduct", + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "state" : { + "type" : "string", + "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] + } + } + }, + "InstitutionPut" : { + "title" : "InstitutionPut", + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "digitalAddress" : { + "type" : "string" + }, + "geographicTaxonomyCodes" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "parentDescription" : { + "type" : "string" + } + } + }, + "InstitutionRequest" : { + "title" : "InstitutionRequest", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "attributes" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/AttributesRequest" + } + }, + "billing" : { + "$ref" : "#/components/schemas/BillingRequest" + }, + "businessRegisterPlace" : { + "type" : "string" + }, + "city" : { + "type" : "string" + }, + "country" : { + "type" : "string" + }, + "county" : { + "type" : "string" + }, + "createdAt" : { + "type" : "string", + "format" : "date-time" + }, + "dataProtectionOfficer" : { + "$ref" : "#/components/schemas/DataProtectionOfficerRequest" + }, + "delegation" : { + "type" : "boolean" + }, + "description" : { + "type" : "string" + }, + "digitalAddress" : { + "type" : "string" + }, + "externalId" : { + "type" : "string" + }, + "geographicTaxonomies" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/GeoTaxonomies" + } + }, + "id" : { + "type" : "string" + }, + "imported" : { + "type" : "boolean" + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "onboarding" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/OnboardingRequest" + } + }, + "origin" : { + "type" : "string" + }, + "originId" : { + "type" : "string" + }, + "paymentServiceProvider" : { + "$ref" : "#/components/schemas/PaymentServiceProviderRequest" + }, + "rea" : { + "type" : "string" + }, + "shareCapital" : { + "type" : "string" + }, + "supportEmail" : { + "type" : "string" + }, + "supportPhone" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "updatedAt" : { + "type" : "string", + "format" : "date-time" + }, + "zipCode" : { + "type" : "string" + } + } + }, + "InstitutionResponse" : { + "title" : "InstitutionResponse", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "aooParentCode" : { + "type" : "string" + }, + "attributes" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/AttributesResponse" + } + }, + "businessRegisterPlace" : { + "type" : "string" + }, + "city" : { + "type" : "string" + }, + "country" : { + "type" : "string" + }, + "county" : { + "type" : "string" + }, + "createdAt" : { + "type" : "string", + "format" : "date-time" + }, + "dataProtectionOfficer" : { + "$ref" : "#/components/schemas/DataProtectionOfficerResponse" + }, + "delegation" : { + "type" : "boolean" + }, + "description" : { + "type" : "string" + }, + "digitalAddress" : { + "type" : "string" + }, + "externalId" : { + "type" : "string" + }, + "geographicTaxonomies" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/GeoTaxonomies" + } + }, + "id" : { + "type" : "string" + }, + "imported" : { + "type" : "boolean" + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "istatCode" : { + "type" : "string" + }, + "onboarding" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/OnboardedProductResponse" + } + }, + "origin" : { + "type" : "string" + }, + "originId" : { + "type" : "string" + }, + "paymentServiceProvider" : { + "$ref" : "#/components/schemas/PaymentServiceProviderResponse" + }, + "rea" : { + "type" : "string" + }, + "rootParent" : { + "$ref" : "#/components/schemas/RootParentResponse" + }, + "shareCapital" : { + "type" : "string" + }, + "subunitCode" : { + "type" : "string" + }, + "subunitType" : { + "type" : "string" + }, + "supportEmail" : { + "type" : "string" + }, + "supportPhone" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "updatedAt" : { + "type" : "string", + "format" : "date-time" + }, + "zipCode" : { + "type" : "string" + } + } + }, + "InstitutionToOnboard" : { + "title" : "InstitutionToOnboard", + "type" : "object", + "properties" : { + "cfImpresa" : { + "type" : "string" + }, + "denominazione" : { + "type" : "string" + } + } + }, + "InstitutionUpdate" : { + "title" : "InstitutionUpdate", + "type" : "object", + "properties" : { + "additionalInformations" : { + "$ref" : "#/components/schemas/AdditionalInformations" + }, + "address" : { + "type" : "string" + }, + "businessRegisterPlace" : { + "type" : "string" + }, + "city" : { + "type" : "string" + }, + "country" : { + "type" : "string" + }, + "county" : { + "type" : "string" + }, + "dataProtectionOfficer" : { + "$ref" : "#/components/schemas/DataProtectionOfficer" + }, + "delegation" : { + "type" : "boolean" + }, + "description" : { + "type" : "string" + }, + "digitalAddress" : { + "type" : "string" + }, + "geographicTaxonomies" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionGeographicTaxonomies" + } + }, + "imported" : { + "type" : "boolean" + }, + "institutionType" : { + "type" : "string", + "enum" : [ "AS", "CON", "GSP", "PA", "PG", "PSP", "PT", "REC", "SA", "SCP" ] + }, + "ivassCode" : { + "type" : "string" + }, + "parentDescription" : { + "type" : "string" + }, + "paymentServiceProvider" : { + "$ref" : "#/components/schemas/PaymentServiceProvider" + }, + "rea" : { + "type" : "string" + }, + "shareCapital" : { + "type" : "string" + }, + "supportEmail" : { + "type" : "string" + }, + "supportPhone" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "zipCode" : { + "type" : "string" + } + } + }, + "InstitutionsResponse" : { + "title" : "InstitutionsResponse", + "type" : "object", + "properties" : { + "institutions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionResponse" + } + } + } + }, + "OnboardedProductResponse" : { + "title" : "OnboardedProductResponse", + "type" : "object", + "properties" : { + "billing" : { + "$ref" : "#/components/schemas/BillingResponse" + }, + "createdAt" : { + "type" : "string", + "format" : "date-time" + }, + "isAggregator" : { + "type" : "boolean" + }, + "productId" : { + "type" : "string" + }, + "status" : { + "type" : "string", + "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] + }, + "updatedAt" : { + "type" : "string", + "format" : "date-time" + } + } + }, + "OnboardedProducts" : { + "title" : "OnboardedProducts", + "type" : "object", + "properties" : { + "products" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionProduct" + } + } + } + }, + "OnboardingRequest" : { + "title" : "OnboardingRequest", + "type" : "object", + "properties" : { + "billingRequest" : { + "$ref" : "#/components/schemas/Billing" + }, + "contract" : { + "$ref" : "#/components/schemas/Contract" + }, + "contractActivatedAt" : { + "type" : "string", + "format" : "date-time" + }, + "contractCreatedAt" : { + "type" : "string", + "format" : "date-time" + }, + "contractFilePath" : { + "type" : "string" + }, + "institutionExternalId" : { + "type" : "string" + }, + "institutionUpdate" : { + "$ref" : "#/components/schemas/InstitutionUpdate" + }, + "pricingPlan" : { + "type" : "string" + }, + "productId" : { + "type" : "string" + }, + "productName" : { + "type" : "string" + }, + "sendCompleteOnboardingEmail" : { + "type" : "boolean" + }, + "signContract" : { + "type" : "boolean" + }, + "tokenType" : { + "type" : "string", + "enum" : [ "INSTITUTION", "LEGALS" ] + }, + "users" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserToOnboard" + } + } + } + }, + "OnboardingResponse" : { + "title" : "OnboardingResponse", + "type" : "object", + "properties" : { + "billing" : { + "$ref" : "#/components/schemas/BillingResponse" + }, + "closedAt" : { + "type" : "string", + "format" : "date-time" + }, + "contract" : { + "type" : "string" + }, + "createdAt" : { + "type" : "string", + "format" : "date-time" + }, + "isAggregator" : { + "type" : "boolean" + }, + "pricingPlan" : { + "type" : "string" + }, + "productId" : { + "type" : "string" + }, + "status" : { + "type" : "string", + "enum" : [ "ACTIVE", "DELETED", "PENDING", "REJECTED", "SUSPENDED", "TOBEVALIDATED" ] + }, + "tokenId" : { + "type" : "string" + }, + "updatedAt" : { + "type" : "string", + "format" : "date-time" + } + } + }, + "OnboardingsResponse" : { + "title" : "OnboardingsResponse", + "type" : "object", + "properties" : { + "onboardings" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/OnboardingResponse" + } + } + } + }, + "PageInfo" : { + "title" : "PageInfo", + "type" : "object", + "properties" : { + "pageNo" : { + "type" : "integer", + "format" : "int64" + }, + "pageSize" : { + "type" : "integer", + "format" : "int64" + }, + "totalElements" : { + "type" : "integer", + "format" : "int64" + }, + "totalPages" : { + "type" : "integer", + "format" : "int64" + } + } + }, + "PaymentServiceProvider" : { + "title" : "PaymentServiceProvider", + "type" : "object", + "properties" : { + "abiCode" : { + "type" : "string" + }, + "businessRegisterNumber" : { + "type" : "string" + }, + "legalRegisterName" : { + "type" : "string" + }, + "legalRegisterNumber" : { + "type" : "string" + }, + "vatNumberGroup" : { + "type" : "boolean" + } + } + }, + "PaymentServiceProviderRequest" : { + "title" : "PaymentServiceProviderRequest", + "type" : "object", + "properties" : { + "abiCode" : { + "type" : "string" + }, + "businessRegisterNumber" : { + "type" : "string" + }, + "legalRegisterName" : { + "type" : "string" + }, + "legalRegisterNumber" : { + "type" : "string" + }, + "vatNumberGroup" : { + "type" : "boolean" + } + } + }, + "PaymentServiceProviderResponse" : { + "title" : "PaymentServiceProviderResponse", + "type" : "object", + "properties" : { + "abiCode" : { + "type" : "string" + }, + "businessRegisterNumber" : { + "type" : "string" + }, + "legalRegisterName" : { + "type" : "string" + }, + "legalRegisterNumber" : { + "type" : "string" + }, + "vatNumberGroup" : { + "type" : "boolean" + } + } + }, + "PdaInstitutionRequest" : { + "title" : "PdaInstitutionRequest", + "type" : "object", + "properties" : { + "billing" : { + "$ref" : "#/components/schemas/BillingRequest" + }, + "description" : { + "type" : "string" + }, + "injectionInstitutionType" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + } + } + }, + "Problem" : { + "title" : "Problem", + "type" : "object", + "properties" : { + "errors" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/ProblemError" + } + }, + "status" : { + "type" : "integer", + "format" : "int32" + } + } + }, + "ProblemError" : { + "title" : "ProblemError", + "type" : "object" + }, + "RootParentResponse" : { + "title" : "RootParentResponse", + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "id" : { + "type" : "string" + } + } + }, + "UserToOnboard" : { + "title" : "UserToOnboard", + "type" : "object", + "properties" : { + "email" : { + "type" : "string" + }, + "env" : { + "type" : "string", + "enum" : [ "COLL", "DEV", "PROD", "ROOT" ] + }, + "id" : { + "type" : "string" + }, + "name" : { + "type" : "string" + }, + "productRole" : { + "type" : "string" + }, + "role" : { + "type" : "string", + "enum" : [ "DELEGATE", "MANAGER", "OPERATOR", "SUB_DELEGATE" ] + }, + "roleLabel" : { + "type" : "string" + }, + "surname" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + } + } + } + }, + "securitySchemes" : { + "bearerAuth" : { + "type" : "http", + "description" : "A bearer token in the format of a JWS and conformed to the specifications included in [RFC8725](https://tools.ietf.org/html/RFC8725)", + "scheme" : "bearer", + "bearerFormat" : "JWT" + } + } + } +} \ No newline at end of file diff --git a/apps/institution-ms/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java b/apps/institution-ms/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java new file mode 100644 index 0000000..572f386 --- /dev/null +++ b/apps/institution-ms/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java @@ -0,0 +1,86 @@ +package it.pagopa.selfcare.mscore.web.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.core.*; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.http.MediaType; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import springfox.documentation.oas.annotations.EnableOpenApi; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@SpringBootTest(classes = { + SwaggerConfig.class, + WebConfig.class +}) +@EnableOpenApi +@EnableWebMvc +@Slf4j +@ComponentScan(basePackages = {"it.pagopa.selfcare.mscore.web.controller","it.pagopa.selfcare.mscore.web.model"}) +@TestPropertySource(locations = "classpath:config/application.yml") +class SwaggerConfigTest { + + @MockBean + ExternalService externalService; + + @MockBean + InstitutionService institutionService; + + @MockBean + OnboardingService onboardingService; + + @Autowired + WebApplicationContext context; + + @MockBean + DelegationService delegationService; + + @Autowired + private ObjectMapper objectMapper; + + @Test + void swaggerSpringPlugin() throws Exception { + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(context).build(); + mockMvc.perform(MockMvcRequestBuilders.get("/v3/api-docs").accept(MediaType.APPLICATION_JSON)) + .andExpect(MockMvcResultMatchers.status().is2xxSuccessful()).andDo(result -> { + assertNotNull(result); + assertNotNull(result.getResponse()); + final String content = result.getResponse().getContentAsString(); + checkPlaceholders(content); + assertFalse(content.isBlank()); + assertFalse(content.contains("${"), "Generated swagger contains placeholders"); + Object swagger = objectMapper.readValue(result.getResponse().getContentAsString(), Object.class); + String formatted = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(swagger); + Path basePath = Paths.get("src/main/resources/swagger/"); + Files.createDirectories(basePath); + Files.write(basePath.resolve("api-docs.json"), formatted.getBytes()); + }); + } + + private static void checkPlaceholders(String content) { + Pattern pattern = Pattern.compile("\\$\\{(.*?)\\}"); + Matcher matcher = pattern.matcher(content); + while (matcher.find()) { + log.error("\033[31m An error occurred with placeholder: {}", matcher.group(1)); + } + } +} + diff --git a/apps/institution-ms/connector-api/pom.xml b/apps/institution-ms/connector-api/pom.xml new file mode 100644 index 0000000..a2f0c26 --- /dev/null +++ b/apps/institution-ms/connector-api/pom.xml @@ -0,0 +1,48 @@ + + + 4.0.0 + + selc-ms-core + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-connector-api + + + + com.fasterxml.jackson.core + jackson-annotations + 2.13.4 + + + com.fasterxml.jackson.core + jackson-databind + + + + org.springframework.data + spring-data-commons + + + it.pagopa.selfcare + selc-commons-base + + + + it.pagopa.selfcare + onboarding-sdk-product + 0.1.15 + + + + + + selfcare-onboarding + Selfcare Onboarding SDK + https://maven.pkg.github.com/pagopa/selfcare-onboarding + + + + diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/DelegationConnector.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/DelegationConnector.java new file mode 100644 index 0000000..3f2eff6 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/DelegationConnector.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.api; + +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.Order; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; +import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; +import it.pagopa.selfcare.mscore.model.institution.Institution; + +import java.util.List; + +public interface DelegationConnector { + + Delegation save(Delegation delegation); + boolean checkIfExistsWithStatus(Delegation delegation, DelegationState status); + List find(String from, String to, String productId, String search, String taxCode, Order order, Integer page, Integer size); + DelegationWithPagination findAndCount(GetDelegationParameters delegationParameters); + Delegation findByIdAndModifyStatus(String delegationId, DelegationState status); + boolean checkIfDelegationsAreActive(String institutionId); + Delegation findAndActivate(String from, String to, String productId); + void updateDelegation(Institution update); +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/EmailConnector.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/EmailConnector.java new file mode 100644 index 0000000..9c9733f --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/EmailConnector.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.api; + +import java.io.File; +import java.util.List; +import java.util.Map; + +public interface EmailConnector { + + void sendMail(String templateName, List destinationMail, File pdf, String productName, Map mailParameters, String nameFile); + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/FileStorageConnector.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/FileStorageConnector.java new file mode 100644 index 0000000..73020d7 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/FileStorageConnector.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.api; + +import it.pagopa.selfcare.mscore.model.onboarding.ResourceResponse; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; + +public interface FileStorageConnector { + + ResourceResponse getFile(String fileName); + + String getTemplateFile(String templateName); + + String uploadContract(String id, MultipartFile contract); + + void removeContract(String fileName, String tokenId); + + File getFileAsPdf(String contractTemplate); +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/InstitutionConnector.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/InstitutionConnector.java new file mode 100644 index 0000000..661f7a4 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/InstitutionConnector.java @@ -0,0 +1,62 @@ +package it.pagopa.selfcare.mscore.api; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.SearchMode; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; + +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Optional; + +public interface InstitutionConnector { + + Institution save(Institution example); + + List findAll(); + + void deleteById(String id); + + void findAndDeleteOnboarding(String institutionId, String productId); + + List findByTaxCodeSubunitCodeAndOrigin(String taxtCode, String subunitCode, String origin, String originId); + + Boolean existsByTaxCodeAndSubunitCodeAndProductAndStatusList(String taxtCode, String subunitCode, Optional productId, List validRelationshipStates); + + Optional findByExternalId(String externalId); + + List findWithFilter(String externalId, String productId, List validRelationshipStates); + + Institution findById(String id); + + Institution findAndUpdateStatus(String id, String tokenId, RelationshipState state); + + Institution findAndUpdate(String id, Onboarding onboarding, List geographicTaxonomies, InstitutionUpdate institutionUpdate); + + Institution findByExternalIdAndProductId(String externalId, String productId); + + List findOnboardingByIdAndProductId(String externalId, String productId); + + List findInstitutionsByProductId(String productId, Integer page, Integer size); + + void findAndRemoveOnboarding(String institutionId, Onboarding onboarding); + + List findByGeotaxonomies(List geo, SearchMode searchMode); + + List findByProductId(String productId); + + List findAllByIds(List ids); + + List findByExternalIdsAndProductId(List externalIds, String productId); + + Institution updateOnboardedProductCreatedAt(String institutionId, String productId, OffsetDateTime createdAt); + + List findBrokers(String productId, InstitutionType type); + + List findByTaxCodeAndSubunitCode(String taxCode, String subunitCode); + + List findByOriginAndOriginId(String origin, String originId); + + Boolean existsOnboardingByFilters(VerifyOnboardingFilters filters); +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/NotificationServiceConnector.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/NotificationServiceConnector.java new file mode 100644 index 0000000..e934b0e --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/NotificationServiceConnector.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.api; + + +import it.pagopa.selfcare.mscore.model.notification.MessageRequest; +import it.pagopa.selfcare.mscore.model.notification.MultipleReceiverMessageRequest; + +public interface NotificationServiceConnector { + void sendNotificationToUser(MessageRequest messageRequest); + void sendNotificationToUsers(MultipleReceiverMessageRequest multipleReceiverMessageRequest); + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PartyRegistryProxyConnector.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PartyRegistryProxyConnector.java new file mode 100644 index 0000000..bf81a39 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PartyRegistryProxyConnector.java @@ -0,0 +1,28 @@ +package it.pagopa.selfcare.mscore.api; + +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; +import it.pagopa.selfcare.mscore.model.institution.*; + +import java.util.List; + +public interface PartyRegistryProxyConnector { + + InstitutionProxyInfo getInstitutionById(String id); + + CategoryProxyInfo getCategory(String origin, String code); + + List getInstitutionsByLegal(String taxId); + + NationalRegistriesProfessionalAddress getLegalAddress(String taxId); + + GeographicTaxonomies getExtByCode(String code); + + AreaOrganizzativaOmogenea getAooById(String aooId); + + UnitaOrganizzativa getUoById(String uoId); + + SaResource getSAFromAnac(String taxId); + + ASResource getASFromIvass(String ivassCode); +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PecNotificationConnector.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PecNotificationConnector.java new file mode 100644 index 0000000..003c214 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/PecNotificationConnector.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.api; + +import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; + +public interface PecNotificationConnector { + + boolean findAndDeletePecNotification(String institutionId, String productId); + + boolean insertPecNotification(PecNotification pecNotification); +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/ProductConnector.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/ProductConnector.java new file mode 100644 index 0000000..5ff62c7 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/ProductConnector.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.api; + + +import it.pagopa.selfcare.product.entity.Product; + +public interface ProductConnector { + Product getProductById(String productId); + + Product getProductValidById(String productId); +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserApiConnector.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserApiConnector.java new file mode 100644 index 0000000..383081c --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserApiConnector.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.api; + + +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; + +import java.util.List; + +public interface UserApiConnector { + + List getUserEmails(String institutionId, String productId); + + void updateUserInstitution(String institutionId, InstitutionUpdate institutionUpdate); + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserRegistryConnector.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserRegistryConnector.java new file mode 100644 index 0000000..2bff80e --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/api/UserRegistryConnector.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.api; + +import it.pagopa.selfcare.mscore.model.user.User; + +public interface UserRegistryConnector { + + User getUserByInternalIdWithFiscalCode(String userId); + + User getUserByInternalId(String userId); + + User getUserByInternalIdWithCustomFields(String userId, String fieldList); + + User getUserByFiscalCode(String fiscalCode); + + User persistUserUsingPatch(String name, String familyName, String fiscalCode, String email, String institutionId); + + User persistUserWorksContractUsingPatch(String fiscalCode, String email, String institutionId); +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/AzureStorageConfig.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/AzureStorageConfig.java new file mode 100644 index 0000000..22a5e8d --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/AzureStorageConfig.java @@ -0,0 +1,25 @@ +package it.pagopa.selfcare.mscore.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.context.annotation.PropertySource; + +@Data +@Configuration +@PropertySource("classpath:config/azure-storage-config.properties") +@ConfigurationProperties(prefix = "blob-storage") +@Profile("AzureStorage") +public class AzureStorageConfig { + + private String connectionString; + private String accountName; + private String endpointSuffix; + private String accountKey; + + private String container; + private String contractPath; + + private String checkoutTemplateContainer; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/CoreConfig.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/CoreConfig.java new file mode 100644 index 0000000..0741d36 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/CoreConfig.java @@ -0,0 +1,36 @@ +package it.pagopa.selfcare.mscore.config; + +import lombok.Data; +import lombok.ToString; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +import java.util.List; + +@Configuration +@PropertySource("classpath:config/core-config.properties") +@ConfigurationProperties(prefix = "mscore") +@Data +@ToString +public class CoreConfig { + + private String logoPath; + private String senderMail; + private List destinationMails; + private String institutionAlternativeEmail; + private boolean sendEmailToInstitution; + private boolean infoCamereEnable; + private boolean enableSendDelegationMail; + private BlobStorage blobStorage; + private String awsSesSecretId; + private String awsSesSecretKey; + private String awsSesRegion; + + @Data + public static class BlobStorage { + private String containerProduct; + private String filepathProduct; + private String connectionStringProduct; + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/MailTemplateConfig.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/MailTemplateConfig.java new file mode 100644 index 0000000..dc111e9 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/config/MailTemplateConfig.java @@ -0,0 +1,23 @@ +package it.pagopa.selfcare.mscore.config; + +import lombok.Data; +import lombok.ToString; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@PropertySource("classpath:config/core-config.properties") +@ConfigurationProperties(prefix = "mscore.mail-template.placeholders.onboarding") +@Data +@ToString +public class MailTemplateConfig { + + private String delegationNotificationPath; + private String delegationUserNotificationPath; + private String delegationPartnerName; + + private String institutionDescription; + + private String notificationProductName; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/CustomError.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/CustomError.java new file mode 100644 index 0000000..8f0f4f5 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/CustomError.java @@ -0,0 +1,68 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum CustomError { + + RELATIONSHIP_ID_NOT_FOUND("0008", "Relationship %s not found"), + GET_INSTITUTION_MANAGER_NOT_FOUND("0043", "Cannot find active manager for institution having externalId %s and product %s"), + USER_NOT_FOUND_ERROR("0031", "User having userId %s not found"), + USERS_NOT_FOUND_ERROR("0031", "Users having userIds %s not found"), + USERS_SIZE_NOT_ADMITTED("0030","At least one user for onboarding PG"), + PRODUCT_ALREADY_ONBOARDED("0032", "Product %s already onboarded for institution having externalId %s"), + MANAGER_NOT_FOUND_GENERIC_ERROR("0033", "No onboarded managers"), + MANAGER_NOT_FOUND_ERROR("0033", "No onboarded managers for at least one of the institutions %s and product %s"), + ROLES_NOT_ADMITTED_ERROR("0034","Roles %s are not admitted for this operation"), + INSTITUTION_NOT_ONBOARDED("0004", "Institution having externalId %s is not onboarded for product %s"), + INSTITUTION_NOT_ONBOARDED_BY_FILTERS("0004", "Has not been found an onboarded Institution with the provided filters"), + INSTITUTION_NOT_FOUND("0036", "Cannot find Institution using institutionId %s and externalInstitutionId %s"), + INSTITUTION_LEGAL_NOT_FOUND("0037", "Institution with externalInstitutionId %s is not related to user"), + CREATE_INSTITUTION_CONFLICT("0038", "Institution having externalId %s already exists"), + CREATE_INSTITUTION_IPA_CONFLICT("0038", "Institution having taxCode %s and subunitCode %s already exists"), + CREATE_INSTITUTION_ORIGIN_CONFLICT("0038", "Institution having origin %s and originId %s already exists"), + CREATE_INSTITUTION_NOT_FOUND("0039", "Institution having externalId %s not exists in registry"), + INSTITUTION_TAX_CODE_NOT_FOUND("0040", "Cannot find Institution using taxCode %s"), + ONBOARDING_INVALID_UPDATES("0046", "Cannot perform data overrides on institution having external id %s"), + GEO_TAXONOMY_CODE_NOT_FOUND("0049", "Error on retrieve geographic taxonomy code: %s"), + PRODUCTS_NOT_FOUND_ERROR("0030", "Products not found for institution having internalId %s"), + ONBOARDING_INFO_INSTITUTION_NOT_FOUND("0050", "No onboarding information found for %s"), + ONBOARDING_INFO_ERROR("0051", "Error getting onboarding info"), + ONBOARDING_INFO_FILTERS_ERROR("0052", "Invalid filters parameters to retrieve onboarding info"), + ONBOARDING_BILLING_ERROR("0000", "Billing vatNumber and recipientCode are required"), + ONBOARDING_BILLING_VATNUMBER_ERROR("0000", "Billing vatNumber is required"), + ONBOARDING_PENDING("0000", "There is already an onboarding request for product %s pending"), + TOKEN_ALREADY_CONSUMED("0040", "Token %s has already consumed"), + TOKEN_EXPIRED("0040", "Token %s is expired in %s and is status is DELETED"), + TOKEN_NOT_FOUND("0014", "Token %s not found"), + CONTRACT_NOT_FOUND("0015", "Token for institution %s and product %s not found or is in invalid status"), + DOCUMENT_NOT_FOUND("0016", "Document for relationship %s not found"), + GET_INSTITUTION_BILLING_ERROR("0044", "Error while retrieving institution having externalId %s and productId %s"), + RELATIONSHIP_NOT_ACTIVABLE("0007", "Relationship %s cannot be activated"), + INVALID_STATUS_CHANGE("0000", "Cannot update state from value %s to value %s"), + RELATIONSHIP_NOT_SUSPENDABLE("0010", "Relationship %s cannot be suspended"), + MISSING_QUERY_PARAMETER("0045", "At least one query parameter between [userId, institutionId] must be passed"), + RELATIONSHIP_NOT_FOUND("0008", "Relationship not found for Institution %s, User %s and Role %s"), + CREATE_DELEGATION_CONFLICT("0041", "Delegation with parameters [from, to, productId, type] already exists"), + INSTITUTION_NOT_FOUND_IN_REGISTRY("0042", "NOT_FOUND_IN_REGISTRY"), + ROLE_NOT_FOUND("0000", "ROLE_NOT_FOUND"), + ROLE_IS_NULL("0000", "ROLE_IS_NULL - Role is required if productRole is present"), + PRODUCT_ROLE_NOT_FOUND("0000", "PRODUCT_ROLE_NOT_FOUND"), + DELEGATION_NOT_FOUND("0047", "Cannot find Delegation with parameters: to %s, from %s, productId: %s"); + + + + private final String code; + private final String detail; + + CustomError(String code, String detail) { + this.code = code; + this.detail = detail; + } + + public String getCode() { + return code; + } + + public String getMessage() { + return detail; + } + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationState.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationState.java new file mode 100644 index 0000000..cb78d40 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationState.java @@ -0,0 +1,6 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum DelegationState { + ACTIVE, + DELETED, +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationType.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationType.java new file mode 100644 index 0000000..5d96f18 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/DelegationType.java @@ -0,0 +1,7 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum DelegationType { + PT, + AOO, + EA +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Env.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Env.java new file mode 100644 index 0000000..b94d52a --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Env.java @@ -0,0 +1,8 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum Env { + ROOT, + DEV, + COLL, + PROD +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/GenericError.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/GenericError.java new file mode 100644 index 0000000..c7b0911 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/GenericError.java @@ -0,0 +1,86 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum GenericError { + + GET_USER_INSTITUTION_RELATIONSHIP_ERROR("0023", "Error while retrieving user relationships"), + GET_INSTITUTION_BY_ID_ERROR("0040", "Error while retrieving institution having id %s"), + GET_INSTITUTION_BY_EXTERNAL_ID_ERROR("0041", "Error while retrieving institution having externalId %s"), + INSTITUTION_MANAGER_ERROR("0042", "Error while retrieving institution having externalId %s"), + INSTITUTION_BILLING_ERROR("0044", "Error while retrieving institution having externalId %s"), + CREATE_INSTITUTION_ERROR("0037", "Error while creating requested institution"), + INSTITUTION_INFOCAMERE_NOTFOUND("0039", "Institution %s not found on INFOCAMERE"), + ONBOARDING_OPERATION_ERROR("0017", "Error while performing onboarding operation"), + CREATE_DELEGATION_ERROR("001-0027", "Error while creating requested delegation"), + SEND_MAIL_FOR_DELEGATION_ERROR("002-0027", "Error during send mail for delegation"), + DELETE_DELEGATION_ERROR("0003-0027", "Error while deleting delegation"), + UPDATE_DELEGATION_ERROR("004-0027", "Error while updating delegation"), + ONBOARDING_VERIFICATION_ERROR("0015", "Error while verifying onboarding"), + GETTING_ONBOARDING_INFO_ERROR("0016", "Error while getting onboarding info"), + GET_PRODUCTS_ERROR("0031", "Error while getting products"), + CONTRACT_PATH_ERROR("0100", "Contract Path is required"), + MANAGER_EMAIL_NOT_FOUND("0101", "Manager email not found"), + VERIFY_TOKEN_FAILED("0041", "Something went wrong trying to verify token"), + + SIGNATURE_NOT_FOUND("002-1007", "No signature found"), + SIGNATURE_VALIDATION_ERROR("002-1004", "The tax code related to signature does not match anyone contained in the relationships"), + ORIGINAL_DOCUMENT_NOT_FOUND("002-1008", "Original document information not found"), + + INSTITUTION_NOT_ONBOARDED("002-1009", "Institution having externalId %s has already onboarded for product %s"), + DOCUMENT_VALIDATION_FAIL("002-1000", "Error trying to validate document, due: %s"), + INVALID_SIGNATURE_FORMS("002-1003", "Only CAdES signature form is admitted. Invalid signatures forms detected: %s"), + INVALIDATE_ONBOARDING_ERROR("0022", "Error while invalidating onboarding"), + CONFIRM_ONBOARDING_ERROR("0021", "Error while confirming onboarding"), + INVALID_DOCUMENT_SIGNATURE("002-1002", "Document signature is invalid"), + INVALID_CONTRACT_DIGEST("002-1001", "Invalid file digest"), + + INVALIDE_SIGNATURE_TAX_CODE_FORMAT("002-1005", "Invalid tax code format found in digital signature"), + TAX_CODE_NOT_FOUND_IN_SIGNATURE("002-1006", "No tax code has been found in digital signature"), + INVALID_SIGNATURE_TAX_CODE("002-1004", "The tax code related to signature does not match anyone contained in the relationships"), + UNABLE_TO_DOWNLOAD_FILE("1102", "Unable to download template %s"), + INVALID_SIGNATURE("002-1005", "Signature not valid: "), + ERROR_DURING_SEND_MAIL("0000", "Error during send mail"), + ERROR_DURING_UPLOAD_FILE("0000", "Error during upload file %s"), + + ERROR_DURING_DELETED_FILE("0000", "Error during deleted file %s"), + ERROR_DURING_DOWNLOAD_FILE("0000", "Error during download file %s"), + ERROR_DURING_COMPRESS_FILE("0000", "Error compressing the file %s"), + RETRIEVING_USER_RELATIONSHIP_ERROR("0023", "Error while retrieving user relationships"), + ACTIVATE_RELATIONSHIP_ERROR("0024", "Error while activating relationship"), + SUSPEND_RELATIONSHIP_ERROR("0025", "Error while suspending relationship"), + PUT_INSTITUTION_ERROR("0051", "Error while updating institution"), + ONBOARDING_SUBDELEGATES_ERROR("0019", "Error while onboarding subdelegates"), + ONBOARDING_OPERATORS_ERROR("0020", "Error while onboarding operators"), + ONBOARDING_LEGALS_ERROR("0018", "Error while onboarding legals"), + RETRIEVE_GEO_TAXONOMIES_ERROR("0050", "Error while retrieving institution geographic taxonomy"), + GET_RELATIONSHIP_ERROR("0028", "Error while getting relationship"), + CREATE_PERSON_ERROR("0009", "Error while creating person"), + GET_INSTITUTION_ATTRIBUTES_ERROR("0022", "Error while getting party attributes"), + GET_INSTITUTION_BY_GEOTAXONOMY_ERROR("0053", "Error while searching institutions related to given geoTaxonomies"), + GET_INSTITUTION_BY_PRODUCTID_ERROR("0053", "Error while searching institutions related to given productId"), + GET_INSTITUTIONS_REQUEST_ERROR("0054", "Invalid request parameters sent. Allowed filters combinations taxCode and subunit or origin and originId"), + VERIFY_USER_ERROR("0000", "Error while searching institutions related to given productId"), + GET_USER_ERROR("0000", "Error while searching user given UserID"), + UPDATE_USER_INSTITUTION_ERROR("0000", "Error while updating InstitutionUser for id %s"), + GENERIC_ERROR("0000", "Generic Error"), + DELETE_ONBOARDED_OPERATION_ERROR("0000", "Error while deleting Onboarded Institution"), + DELETE_NOTIFICATION_OPERATION_ERROR ("0000", "PecNotificationEntity was not deleted because either it does not exist or there are multiple records"), + INVALID_INSERT_PEC_NOTIFICATION_ERROR ("0001", "PecNotificationEntity was not inserted because either it exist or the data are invalid"); + + private final String code; + private final String detail; + + + GenericError(String code, String detail) { + this.code = code; + this.detail = detail; + } + + public String getCode() { + return code; + } + + public String getMessage() { + return detail; + } + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Order.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Order.java new file mode 100644 index 0000000..c02e8db --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Order.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum Order { + + NONE, + ASC, + DESC; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Origin.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Origin.java new file mode 100644 index 0000000..31bcbbb --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/Origin.java @@ -0,0 +1,48 @@ +package it.pagopa.selfcare.mscore.constant; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import org.springframework.util.StringUtils; + +import java.util.Arrays; + +public enum Origin { + MOCK("MOCK"), + IPA("IPA"), + SELC("SELC"), + ANAC("ANAC"), + UNKNOWN("UNKNOWN"), + ADE("ADE"), + INFOCAMERE("INFOCAMERE"), + IVASS("IVASS"); + + private final String value; + + Origin(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + @JsonValue + public String toString() { + return value; + } + + @JsonCreator + public static Origin fromValue(String value) { + if(StringUtils.hasText(value)) { + return Arrays.stream(values()) + .filter(origin -> origin.toString().equals(value)) + .findAny() + .orElseThrow(() -> new InvalidRequestException("Valid value for Origin are: IPA, INFOCAMERE, SELC or static", "0000")); + }else{ + return Origin.UNKNOWN; + } + } + +} \ No newline at end of file diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/PricingPlan.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/PricingPlan.java new file mode 100644 index 0000000..42c8326 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/PricingPlan.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum PricingPlan { + + FA("FAST"), + BASE("BASE"), + PREMIUM("PREMIUM"); + + private final String value; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/ProductId.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/ProductId.java new file mode 100644 index 0000000..7657544 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/ProductId.java @@ -0,0 +1,32 @@ +package it.pagopa.selfcare.mscore.constant; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum ProductId { + + PROD_INTEROP("prod-interop"), + PROD_PN("prod-pn"), + PROD_FD("prod-fd"), + PROD_FD_GARANTITO("prod-fd-garantito"), + PROD_IO("prod-io"), + PROD_INTEROP_COLL("prod-interop-coll"), + PROD_IO_SIGN("prod-io-sign"), + PROD_PAGOPA("prod-pagopa"), + PROD_IO_PREMIUM("prod-io-premium"); + + private final String value; + + ProductId(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + @JsonValue + public String toString() { + return value; + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/RelationshipState.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/RelationshipState.java new file mode 100644 index 0000000..89bac4c --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/RelationshipState.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum RelationshipState { + ACTIVE, + PENDING, + TOBEVALIDATED, + SUSPENDED, + DELETED, + REJECTED +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/SearchMode.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/SearchMode.java new file mode 100644 index 0000000..0075c6e --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/SearchMode.java @@ -0,0 +1,7 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum SearchMode { + ALL, + ANY, + EXACT +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/TokenType.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/TokenType.java new file mode 100644 index 0000000..f424c78 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/constant/TokenType.java @@ -0,0 +1,6 @@ +package it.pagopa.selfcare.mscore.constant; + +public enum TokenType { + INSTITUTION, + LEGALS +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/BadGatewayException.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/BadGatewayException.java new file mode 100644 index 0000000..604792b --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/BadGatewayException.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.exception; + +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class BadGatewayException extends RuntimeException { + + public BadGatewayException(String message) { + super(message); + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/InvalidRequestException.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/InvalidRequestException.java new file mode 100644 index 0000000..58218f3 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/InvalidRequestException.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.exception; + +public class InvalidRequestException extends RuntimeException{ + private final String code; + + public InvalidRequestException(String message, String code) { + super(message); + this.code = code; + } + + public String getCode() { + return code; + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/MsCoreException.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/MsCoreException.java new file mode 100644 index 0000000..04a9b2f --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/MsCoreException.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.exception; + +public class MsCoreException extends RuntimeException { + + private final String code; + + public MsCoreException(String message, String code) { + super(message); + this.code = code; + } + + public String getCode() { + return code; + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceConflictException.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceConflictException.java new file mode 100644 index 0000000..3e0386e --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceConflictException.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.exception; + + +public class ResourceConflictException extends RuntimeException { + + private final String code; + public ResourceConflictException(String message, String code) { + super(message); + this.code = code; + } + + public String getCode() { + return code; + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceForbiddenException.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceForbiddenException.java new file mode 100644 index 0000000..c38a896 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceForbiddenException.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.exception; + +public class ResourceForbiddenException extends RuntimeException{ + private final String code; + + public ResourceForbiddenException(String message, String code) { + super(message); + this.code = code; + } + + public String getCode() { + return code; + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundException.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundException.java new file mode 100644 index 0000000..e3eeb6f --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundException.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.exception; + + +public class ResourceNotFoundException extends RuntimeException { + + private final String code; + public ResourceNotFoundException(String message, String code) { + super(message); + this.code = code; + } + + public String getCode() { + return code; + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ServiceUnavailableException.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ServiceUnavailableException.java new file mode 100644 index 0000000..d51d4c4 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/exception/ServiceUnavailableException.java @@ -0,0 +1,4 @@ +package it.pagopa.selfcare.mscore.exception; + +public class ServiceUnavailableException extends RuntimeException { +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/AreaOrganizzativaOmogenea.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/AreaOrganizzativaOmogenea.java new file mode 100644 index 0000000..ec9a832 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/AreaOrganizzativaOmogenea.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.model; + +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; + +@Data +public class AreaOrganizzativaOmogenea { + + private String id; + private String codiceIpa; + private String denominazioneEnte; + private String codiceFiscaleEnte; + private String codiceUniAoo; + private String denominazioneAoo; + private String mail1; + private String tipoMail1; + private String codAoo; + private Origin origin; + private String indirizzo; + private String CAP; + private String codiceComuneISTAT; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/Certification.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/Certification.java new file mode 100644 index 0000000..d27f90b --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/Certification.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.model; + +public enum Certification { + NONE, SPID; + + public static boolean isCertified(Certification certification) { + return certification != null && !Certification.NONE.equals(certification); + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/CertifiedField.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/CertifiedField.java new file mode 100644 index 0000000..983c4f9 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/CertifiedField.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.model; + +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +public class CertifiedField { + + private Certification certification; + private T value; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/InstitutionToNotify.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/InstitutionToNotify.java new file mode 100644 index 0000000..ce6e8bf --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/InstitutionToNotify.java @@ -0,0 +1,34 @@ +package it.pagopa.selfcare.mscore.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class InstitutionToNotify { + + private InstitutionType institutionType; + private String description; + private String digitalAddress; + private String address; + private String taxCode; + private String origin; + private String originId; + private String zipCode; + private PaymentServiceProvider paymentServiceProvider; + private String istatCode; + private String city; + private String country; + private String county; + private String subUnitCode; + private String category; + private String subUnitType; + private RootParent rootParent; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/QueueEvent.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/QueueEvent.java new file mode 100644 index 0000000..a2c907d --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/QueueEvent.java @@ -0,0 +1,6 @@ +package it.pagopa.selfcare.mscore.model; + +public enum QueueEvent { + ADD, + UPDATE +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/RootParent.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/RootParent.java new file mode 100644 index 0000000..9d55f2d --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/RootParent.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RootParent { + private String id; + private String originId; + private String description; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UnitaOrganizzativa.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UnitaOrganizzativa.java new file mode 100644 index 0000000..51cd888 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UnitaOrganizzativa.java @@ -0,0 +1,23 @@ +package it.pagopa.selfcare.mscore.model; + +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; + +@Data +public class UnitaOrganizzativa { + + private String id; + private String codiceIpa; + private String denominazioneEnte; + private String codiceFiscaleEnte; + private String codiceUniUo; + private String codiceUniUoPadre; + private String codiceUniAoo; + private String descrizioneUo; + private String mail1; + private String tipoMail1; + private Origin origin; + private String indirizzo; + private String CAP; + private String codiceComuneISTAT; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UserToNotify.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UserToNotify.java new file mode 100644 index 0000000..d7e16d3 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/UserToNotify.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.model; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserToNotify { + + private String userId; + private String name; + private String familyName; + private String email; + private PartyRole role; + private String productRole; + private RelationshipState relationshipStatus; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/QueryCount.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/QueryCount.java new file mode 100644 index 0000000..09a23b2 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/QueryCount.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.model.aggregation; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +@AllArgsConstructor +@NoArgsConstructor +public class QueryCount { + private String _id; + private Integer count; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionAggregation.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionAggregation.java new file mode 100644 index 0000000..86bcfe5 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionAggregation.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.model.aggregation; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +import java.util.List; + +@Data +@FieldNameConstants(asEnum = true) +@AllArgsConstructor +@NoArgsConstructor +public class UserInstitutionAggregation { + private String id; + private UserInstitutionBinding bindings; + private List institutions; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionBinding.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionBinding.java new file mode 100644 index 0000000..171d78b --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionBinding.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.model.aggregation; + +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +@AllArgsConstructor +@NoArgsConstructor +public class UserInstitutionBinding { + private String institutionId; + private OnboardedProduct products; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionFilter.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionFilter.java new file mode 100644 index 0000000..964a20f --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/aggregation/UserInstitutionFilter.java @@ -0,0 +1,24 @@ +package it.pagopa.selfcare.mscore.model.aggregation; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +public class UserInstitutionFilter { + private String fromCollection = "User"; + private String toCollection = "Institution"; + private String userId; + private String institutionId; + private String externalId; + private List states; + + public UserInstitutionFilter(String userId, String institutionId, String externalId, List states) { + this.userId = userId; + this.institutionId = institutionId; + this.externalId = externalId; + this.states = states; + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/Delegation.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/Delegation.java new file mode 100644 index 0000000..ac280c7 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/Delegation.java @@ -0,0 +1,39 @@ +package it.pagopa.selfcare.mscore.model.delegation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Delegation { + + private String id; + private String from; + private String institutionFromName; + private String institutionToName; + private String institutionFromRootName; + private DelegationType type; + private String to; + private String productId; + private InstitutionType institutionType; + private String taxCode; + private String toTaxCode; + private String fromTaxCode; + private InstitutionType brokerType; + private String brokerTaxCode; + private String fromSubunitCode; + private String toSubunitCode; + private DelegationState status; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationInstitution.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationInstitution.java new file mode 100644 index 0000000..d8ae94f --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationInstitution.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.model.delegation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class DelegationInstitution extends Delegation { + private List institutions; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationWithPagination.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationWithPagination.java new file mode 100644 index 0000000..21caece --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/DelegationWithPagination.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.model.delegation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class DelegationWithPagination { + + private List delegations; + private PageInfo pageInfo; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/GetDelegationParameters.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/GetDelegationParameters.java new file mode 100644 index 0000000..902fcf5 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/GetDelegationParameters.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.model.delegation; + +import it.pagopa.selfcare.mscore.constant.Order; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class GetDelegationParameters { + private String from; + private String to; + private String productId; + private String search; + private String taxCode; + private Order order; + private Integer page; + private Integer size; +} \ No newline at end of file diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/PageInfo.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/PageInfo.java new file mode 100644 index 0000000..7927725 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/delegation/PageInfo.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.model.delegation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class PageInfo { + private long pageSize; + private long pageNo; + private long totalElements; + private long totalPages; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/Problem.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/Problem.java new file mode 100644 index 0000000..3e29c6d --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/Problem.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.model.error; + +import lombok.Data; + +import java.util.List; + +@Data +public class Problem { + private Integer status; + private List errors; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/ProblemError.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/ProblemError.java new file mode 100644 index 0000000..0e81b2c --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/error/ProblemError.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.model.error; + +import lombok.Builder; + + +@Builder +public class ProblemError { + private String code; + private String detail; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ASResource.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ASResource.java new file mode 100644 index 0000000..98d2568 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ASResource.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; + +@Data +public class ASResource { + private String id; + private String originId; + private String taxCode; + private String description; + private String digitalAddress; + private String workType; + private String registerType; + private String address; + private Origin origin; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/AdditionalInformations.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/AdditionalInformations.java new file mode 100644 index 0000000..04847ad --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/AdditionalInformations.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class AdditionalInformations { + private boolean belongRegulatedMarket; + private String regulatedMarketNote; + private boolean ipa; + private String ipaCode; + private boolean establishedByRegulatoryProvision; + private String establishedByRegulatoryProvisionNote; + private boolean agentOfPublicService; + private String agentOfPublicServiceNote; + private String otherNote; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Attributes.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Attributes.java new file mode 100644 index 0000000..51c3b66 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Attributes.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class Attributes { + private String origin; + private String code; + private String description; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Billing.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Billing.java new file mode 100644 index 0000000..bd79c5a --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Billing.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class Billing { + + @JsonProperty("vatNumber") + private String vatNumber; + + @JsonProperty("taxCodeInvoicing") + private String taxCodeInvoicing; + + @JsonProperty("recipientCode") + private String recipientCode; + + @JsonProperty("publicServices") + private boolean publicServices; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/CategoryProxyInfo.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/CategoryProxyInfo.java new file mode 100644 index 0000000..f6fd86a --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/CategoryProxyInfo.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class CategoryProxyInfo { + private String code; + private String name; + private String kind; + private String origin; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/DataProtectionOfficer.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/DataProtectionOfficer.java new file mode 100644 index 0000000..b1f80b6 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/DataProtectionOfficer.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@FieldNameConstants(asEnum = true) +public class DataProtectionOfficer { + + private String address; + private String email; + private String pec; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomies.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomies.java new file mode 100644 index 0000000..b586660 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomies.java @@ -0,0 +1,26 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class GeographicTaxonomies { + @JsonProperty("code") + private String geotaxId; //REQUIRED + @JsonProperty("desc") + private String description; + @JsonProperty("istat_code")//REQUIRED + private String istatCode; + @JsonProperty("province_id") + private String provinceId; + @JsonProperty("province_abbreviation") + private String provinceAbbreviation; + @JsonProperty("region_id") + private String regionId; + @JsonProperty("country") + private String country; + @JsonProperty("country_abbreviation") + private String countryAbbreviation; + @JsonProperty("enabled") + private boolean enable; //REQUIRED +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomyPage.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomyPage.java new file mode 100644 index 0000000..fe9e2b1 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/GeographicTaxonomyPage.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +import java.util.List; + +@Data +public class GeographicTaxonomyPage { + private Integer total; + private List data; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Institution.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Institution.java new file mode 100644 index 0000000..84c6b61 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Institution.java @@ -0,0 +1,54 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Institution { + + private String id; + private String externalId; + private String origin; + private String originId; + private String description; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String taxCode; + private String ivassCode; + private String city; + private String county; + private String country; + private String istatCode; + private Billing billing; + private List onboarding; + private List geographicTaxonomies; + private List attributes; + private PaymentServiceProvider paymentServiceProvider; + private DataProtectionOfficer dataProtectionOfficer; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private String subunitCode; + private String subunitType; + private String rootParentId; + private String parentDescription; + private PaAttributes paAttributes; + private boolean delegation; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionByLegal.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionByLegal.java new file mode 100644 index 0000000..37c7316 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionByLegal.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class InstitutionByLegal { + private String businessName; + private String businessTaxId; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomies.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomies.java new file mode 100644 index 0000000..ccc76f9 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomies.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class InstitutionGeographicTaxonomies { + private String code; + private String desc; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomyPage.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomyPage.java new file mode 100644 index 0000000..23ebe6a --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionGeographicTaxonomyPage.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +import java.util.List; + +@Data +public class InstitutionGeographicTaxonomyPage { + private Integer total; + private List data; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionProxyInfo.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionProxyInfo.java new file mode 100644 index 0000000..ee0e4ec --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionProxyInfo.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class InstitutionProxyInfo { + private String id; + private String originId; + private String o; + private String ou; + private String aoo; + private String taxCode; + private String category; + private String description; + private String digitalAddress; + private String address; + private String zipCode; + private String origin; + private String istatCode; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionUpdate.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionUpdate.java new file mode 100644 index 0000000..902bfb7 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/InstitutionUpdate.java @@ -0,0 +1,36 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +import java.util.List; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +@FieldNameConstants(asEnum = true) +public class InstitutionUpdate { + private InstitutionType institutionType; + private String description; + private String digitalAddress; + private String address; + private String taxCode; + private String zipCode; + private String city; + private String county; + private String country; + private PaymentServiceProvider paymentServiceProvider; + private DataProtectionOfficer dataProtectionOfficer; + private List geographicTaxonomies; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private String ivassCode; + private boolean imported; + private AdditionalInformations additionalInformations; + private Boolean delegation; + private String parentDescription; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/NationalRegistriesProfessionalAddress.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/NationalRegistriesProfessionalAddress.java new file mode 100644 index 0000000..6dcf220 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/NationalRegistriesProfessionalAddress.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class NationalRegistriesProfessionalAddress { + private String description; + private String municipality; + private String province; + private String address; + private String zipCode; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Onboarding.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Onboarding.java new file mode 100644 index 0000000..8d3e97c --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Onboarding.java @@ -0,0 +1,23 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +import java.time.OffsetDateTime; + +@Data +@FieldNameConstants(asEnum = true) +public class Onboarding { + + private String productId; + private String tokenId; + private RelationshipState status; + private String contract; + private String pricingPlan; + private Billing billing; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private OffsetDateTime closedAt; + private Boolean isAggregator; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/OnboardingPage.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/OnboardingPage.java new file mode 100644 index 0000000..7211e76 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/OnboardingPage.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +import java.util.List; + +@Data +public class OnboardingPage { + private Integer total; + private List data; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaAttributes.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaAttributes.java new file mode 100644 index 0000000..b401f63 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaAttributes.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class PaAttributes { + + private String aooParentCode; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaymentServiceProvider.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaymentServiceProvider.java new file mode 100644 index 0000000..053228f --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/PaymentServiceProvider.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@FieldNameConstants(asEnum = true) +public class PaymentServiceProvider { + + private String abiCode; + private String businessRegisterNumber; + private String legalRegisterName; + private String legalRegisterNumber; + private boolean vatNumberGroup; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Premium.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Premium.java new file mode 100644 index 0000000..ca7cbaa --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/Premium.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import com.fasterxml.jackson.annotation.JsonProperty; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; + +@Data +public class Premium { + + @JsonProperty("status") + private RelationshipState status; + + @JsonProperty("contract") + private String contract; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/SaResource.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/SaResource.java new file mode 100644 index 0000000..6c90169 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/SaResource.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.Data; + +@Data +public class SaResource { + private String id; + private String originId; + private boolean anacEngaged; + private boolean anacEnabled; + private String taxCode; + private String description; + private String digitalAddress; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ValidInstitution.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ValidInstitution.java new file mode 100644 index 0000000..a99ad17 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/ValidInstitution.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ValidInstitution { + private String id; + private String description; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/WorkContact.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/WorkContact.java new file mode 100644 index 0000000..bffa736 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/institution/WorkContact.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.model.institution; + +import it.pagopa.selfcare.mscore.model.CertifiedField; +import lombok.Data; + +@Data +public class WorkContact { + private CertifiedField email; + + public String getEmail() { + return email != null ? email.getValue() : ""; + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MessageRequest.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MessageRequest.java new file mode 100644 index 0000000..fc6549b --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MessageRequest.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.model.notification; + +import lombok.Data; + +@Data +public class MessageRequest { + + String content; + String subject; + String senderEmail; + String receiverEmail; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MultipleReceiverMessageRequest.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MultipleReceiverMessageRequest.java new file mode 100644 index 0000000..c13613a --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/notification/MultipleReceiverMessageRequest.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.model.notification; + +import lombok.Data; + +import java.util.List; + +@Data +public class MultipleReceiverMessageRequest { + + String content; + String subject; + List receiverEmails; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Contract.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Contract.java new file mode 100644 index 0000000..f0b71a5 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Contract.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import lombok.Data; + +@Data +public class Contract { + private String version; + private String path; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ContractImported.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ContractImported.java new file mode 100644 index 0000000..0902293 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ContractImported.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import lombok.Data; + +@Data +public class ContractImported { + private String fileName; + private String filePath; + private String contractType; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/MailTemplate.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/MailTemplate.java new file mode 100644 index 0000000..c6f34e6 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/MailTemplate.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import lombok.Data; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +@Data +public class MailTemplate { + private String subject; + private String body; + + public String getSubject() { + return new String(Base64.getDecoder().decode(subject), StandardCharsets.UTF_8); + } + + public String getBody() { + return new String(Base64.getDecoder().decode(body), StandardCharsets.UTF_8); + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedProduct.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedProduct.java new file mode 100644 index 0000000..6fa9513 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedProduct.java @@ -0,0 +1,27 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.Env; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +import java.time.OffsetDateTime; + +import static it.pagopa.selfcare.mscore.constant.Env.ROOT; + +@Data +@FieldNameConstants(asEnum = true) +public class OnboardedProduct { + + private String relationshipId; + private String productId; + private RelationshipState status; + private String contract; + private String productRole; + private PartyRole role; + private String tokenId; + private Env env = ROOT; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedUser.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedUser.java new file mode 100644 index 0000000..fe72999 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardedUser.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.model.user.UserBinding; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OnboardedUser { + private String id; + private List bindings; + private OffsetDateTime createdAt; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingInfo.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingInfo.java new file mode 100644 index 0000000..755142b --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingInfo.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionBinding; +import it.pagopa.selfcare.mscore.model.institution.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OnboardingInfo { + private String userId; + private Institution institution; + private UserInstitutionBinding binding; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingLegalsRequest.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingLegalsRequest.java new file mode 100644 index 0000000..402d02e --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingLegalsRequest.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.model.user.UserToOnboard; +import it.pagopa.selfcare.mscore.constant.TokenType; +import lombok.Data; +import java.util.List; + +@Data +public class OnboardingLegalsRequest { + + private TokenType tokenType; + private String productId; + private String productName; + private List users; + private String institutionExternalId; + private String institutionId; + private Contract contract; + private boolean signContract; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingOperatorsRequest.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingOperatorsRequest.java new file mode 100644 index 0000000..f34cefa --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingOperatorsRequest.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.model.user.UserToOnboard; +import lombok.Data; +import java.util.List; + +@Data +public class OnboardingOperatorsRequest { + + private String productId; + private String productTitle; + private List users; + private String institutionId; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRequest.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRequest.java new file mode 100644 index 0000000..5657c02 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRequest.java @@ -0,0 +1,44 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.TokenType; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import it.pagopa.selfcare.mscore.model.user.UserToOnboard; +import lombok.Data; +import org.springframework.util.StringUtils; + +import java.time.OffsetDateTime; +import java.util.List; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CONTRACT_PATH_ERROR; + +@Data +public class OnboardingRequest { + + private String productId; + private String productName; + private List users; + private String institutionExternalId; + private InstitutionUpdate institutionUpdate; + private String pricingPlan; + private Billing billingRequest; + private Contract contract; + + private Boolean signContract; + private TokenType tokenType; + private String contractFilePath; + private OffsetDateTime contractCreatedAt; + private OffsetDateTime contractActivatedAt; + private Boolean sendCompleteOnboardingEmail; + + public Contract getContract() { + if ((institutionUpdate != null && InstitutionType.PG == institutionUpdate.getInstitutionType()) + || (contract != null && StringUtils.hasText(contract.getPath()))) { + return contract; + } else { + throw new InvalidRequestException(CONTRACT_PATH_ERROR.getMessage(), CONTRACT_PATH_ERROR.getCode()); + } + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRollback.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRollback.java new file mode 100644 index 0000000..928024f --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingRollback.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OnboardingRollback { + private Token token; + private Onboarding onboarding; + private Map productMap; + private Institution updatedInstitution; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUpdateRollback.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUpdateRollback.java new file mode 100644 index 0000000..5c81b60 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUpdateRollback.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OnboardingUpdateRollback { + private Token token; + private List userList; + private Institution updatedInstitution; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUsersRequest.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUsersRequest.java new file mode 100644 index 0000000..032999d --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/OnboardingUsersRequest.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.model.user.UserToOnboard; +import lombok.Data; + +import java.util.List; + +@Data +public class OnboardingUsersRequest { + + private String productId; + private List users; + private String institutionTaxCode; + private String institutionSubunitCode; + private Boolean sendCreateUserNotificationEmail; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ResourceResponse.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ResourceResponse.java new file mode 100644 index 0000000..fb38fd0 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/ResourceResponse.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import lombok.Data; + +@Data +public class ResourceResponse { + private byte[] data; + private String fileName; + private String mimetype; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Token.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Token.java new file mode 100644 index 0000000..3a6c553 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/Token.java @@ -0,0 +1,36 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.TokenType; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; +import java.util.List; +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Token { + private String id; + private TokenType type; + private RelationshipState status; + private String institutionId; + private String productId; + private OffsetDateTime expiringDate; + private String checksum; + private String contractVersion; + private String contractTemplate; + private String contractSigned; + private String contentType; + private List users; + private InstitutionUpdate institutionUpdate; + private OffsetDateTime createdAt; + private OffsetDateTime activatedAt; + private OffsetDateTime updatedAt; + private OffsetDateTime deletedAt; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenRelationships.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenRelationships.java new file mode 100644 index 0000000..9140bd7 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenRelationships.java @@ -0,0 +1,31 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.TokenType; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TokenRelationships { + private String tokenId; + private String checksum; + private TokenType type; + private String institutionId; + private String productId; + private String contractSigned; + private String contentType; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private OffsetDateTime closedAt; + private OffsetDateTime activatedAt; + private RelationshipState status; + private List users; + private InstitutionUpdate institutionUpdate; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenUser.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenUser.java new file mode 100644 index 0000000..8c7e80d --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/TokenUser.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TokenUser { + private String userId; + private PartyRole role; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/VerifyOnboardingFilters.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/VerifyOnboardingFilters.java new file mode 100644 index 0000000..3f1ea91 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/onboarding/VerifyOnboardingFilters.java @@ -0,0 +1,45 @@ +package it.pagopa.selfcare.mscore.model.onboarding; + +import it.pagopa.selfcare.mscore.constant.CustomError; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import lombok.Data; +import org.springframework.util.StringUtils; + +import java.util.List; + +@Data +public class VerifyOnboardingFilters { + private String productId; + private String externalId; + private String taxCode; + private String origin; + private String originId; + private String subunitCode; + private List validRelationshipStates; + + public VerifyOnboardingFilters(String productId, String externalId, String taxCode, String origin, String originId, String subunitCode) { + this.productId = productId; + + /* + We don't set the values of all the attributes of the class, but try to value only a portion of them based on different + search patterns priority that we intend to convey. + And if the provided parameters do not fall within the identified cases for a search then return exception. + */ + if (StringUtils.hasText(externalId)) { + this.externalId = externalId; + } else if (StringUtils.hasText(taxCode)) { + this.taxCode = taxCode; + this.subunitCode = subunitCode; + this.origin = origin; + } else if(StringUtils.hasText(subunitCode)) { + this.subunitCode = subunitCode; + this.origin = origin; + } else if (StringUtils.hasText(origin) && StringUtils.hasText(originId)) { + this.origin = origin; + this.originId = originId; + } else { + throw new InvalidRequestException(CustomError.ONBOARDING_INFO_FILTERS_ERROR.getMessage(), CustomError.ONBOARDING_INFO_FILTERS_ERROR.getCode()); + } + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java new file mode 100644 index 0000000..f6fcf92 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java @@ -0,0 +1,23 @@ +package it.pagopa.selfcare.mscore.model.pecnotification; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PecNotification { + + private String id; + private String institutionId; + private String productId; + private Integer moduleDayOfTheEpoch; + private String digitalAddress; + + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/Product.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/Product.java new file mode 100644 index 0000000..a8e976e --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/Product.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.model.product; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import it.pagopa.selfcare.commons.base.security.PartyRole; +import lombok.Data; + +import java.util.EnumMap; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class Product { + + private String id; + private EnumMap roleMappings; + private String contractTemplatePath; + private String contractTemplateVersion; + private String title; + private String parentId; + private ProductStatus status; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductRoleInfo.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductRoleInfo.java new file mode 100644 index 0000000..1d177d8 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductRoleInfo.java @@ -0,0 +1,23 @@ +package it.pagopa.selfcare.mscore.model.product; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +public class ProductRoleInfo { + + private boolean multiroleAllowed; + private List roles; + + + @Data + @EqualsAndHashCode(of = "code") + public static class ProductRole { + private String code; + private String label; + private String description; + } + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductStatus.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductStatus.java new file mode 100644 index 0000000..b174336 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/product/ProductStatus.java @@ -0,0 +1,6 @@ +package it.pagopa.selfcare.mscore.model.product; + +public enum ProductStatus { + + ACTIVE, TESTING, PHASE_OUT, INACTIVE +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/ProductManagerInfo.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/ProductManagerInfo.java new file mode 100644 index 0000000..e57f15e --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/ProductManagerInfo.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.model.user; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProductManagerInfo { + + private String userId; + private Institution institution; + private List products; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipInfo.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipInfo.java new file mode 100644 index 0000000..34a0a9c --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipInfo.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.model.user; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@NoArgsConstructor +@AllArgsConstructor +@Data +public class RelationshipInfo { + + Institution institution; + String userId; + OnboardedProduct onboardedProduct; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPage.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPage.java new file mode 100644 index 0000000..a2af676 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPage.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.model.user; + +import lombok.Data; + +import java.util.List; + +@Data +public class RelationshipPage { + private Integer total; + private List data; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPageElement.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPageElement.java new file mode 100644 index 0000000..47f551a --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/RelationshipPageElement.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.model.user; + +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import lombok.Data; + +@Data +public class RelationshipPageElement { + private String userId; + private OnboardedProduct product; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/User.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/User.java new file mode 100644 index 0000000..b0f1d5a --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/User.java @@ -0,0 +1,35 @@ +package it.pagopa.selfcare.mscore.model.user; + +import it.pagopa.selfcare.mscore.model.CertifiedField; +import it.pagopa.selfcare.mscore.model.institution.WorkContact; +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +import java.util.Map; + +@Data +@FieldNameConstants(asEnum = true) +public class User { + + @FieldNameConstants.Exclude + private String id; + private String fiscalCode; + private CertifiedField name; + private CertifiedField familyName; + @FieldNameConstants.Exclude + private CertifiedField email; + + private Map workContacts; + + public String getName() { + return name != null ? name.getValue() : ""; + } + + public String getFamilyName() { + return familyName != null ? familyName.getValue() : ""; + } + + public String getEmail() { + return email != null ? email.getValue() : ""; + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserBinding.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserBinding.java new file mode 100644 index 0000000..4733b7c --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserBinding.java @@ -0,0 +1,25 @@ +package it.pagopa.selfcare.mscore.model.user; + +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +import java.util.List; + +@Data +@FieldNameConstants(asEnum = true) +@AllArgsConstructor +@NoArgsConstructor +public class UserBinding { + private String institutionId; + private String institutionName; + private String institutionRootName; + private List products; + + public UserBinding(String institutionId, List products) { + this.institutionId = institutionId; + this.products = products; + } +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserInfo.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserInfo.java new file mode 100644 index 0000000..6af23c1 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserInfo.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.model.user; + +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import lombok.Data; + +import java.util.List; + +@Data +public class UserInfo { + + private String id; + private User user; + private List products; + +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserToOnboard.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserToOnboard.java new file mode 100644 index 0000000..64cc151 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/user/UserToOnboard.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.model.user; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.Env; +import lombok.Data; + +@Data +public class UserToOnboard { + + private String id; + private String taxCode; + private String name; + private String surname; + private String email; + private PartyRole role; + private String productRole; + private String roleLabel; + private Env env; +} diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/utils/MaskDataUtils.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/utils/MaskDataUtils.java new file mode 100644 index 0000000..c3103f8 --- /dev/null +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/utils/MaskDataUtils.java @@ -0,0 +1,97 @@ +package it.pagopa.selfcare.mscore.utils; + +import io.micrometer.core.instrument.util.StringUtils; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +@NoArgsConstructor(access = AccessLevel.NONE) +public class MaskDataUtils { + + private static final int MATCHER_GROUP = 2; + private static final int MASK_STRING_END = 3; + private static final int CHARACTER_LIMIT = 4; + private static final String REGEX_ELENCO_CF = "(\"elencoCf\")\\s*:\\s*\\[\"(.*?)\""; + private static final String REGEX_TAX_ID = "(\"taxId\"|\"legalTaxId\"|\"businessTaxId\"|\"vatNumber\")\\s*:\\s*\"(.*?)\""; + private static final String REGEX_ADDRESS = "(\"description\"|\"at\"|\"address\"|\"zip\"|\"municipality\"|\"municipalityDetails\"|\"province\"|\"foreignState\"|\"codiceStato\"|\"descrizioneStato\"|\"descrizioneLocalita\"|\"denominazione\"|\"numeroCivico\"|\"digitalAddress\")\\s*:\\s*\"(.*?)\""; + private static final String REGEX_PEC = "(\"pecProfessionista\"|\"cf\"|\"codFiscale\"|\"codiceFiscale\"|\"cognome\"|\"nome\"|\"sesso\"|\"dataNascita\")\\s*:\\s*\"(.*?)\""; + private static final String REGEX_TOKEN = "(\"access_token\")\\s*:\\s*\"(.*?)\""; + private static final Pattern PATTERN_ELENCO_CF = Pattern.compile(REGEX_ELENCO_CF); + private static final Pattern PATTERN_TAX_ID = Pattern.compile(REGEX_TAX_ID); + private static final Pattern PATTERN_ADDRESS = Pattern.compile(REGEX_ADDRESS); + private static final Pattern PATTERN_PEC = Pattern.compile(REGEX_PEC); + private static final Pattern PATTERN_TOKEN = Pattern.compile(REGEX_TOKEN); + + public static String maskInformation(String dataBuffered){ + + dataBuffered = maskMatcher(PATTERN_ELENCO_CF, dataBuffered); + dataBuffered = maskMatcher(PATTERN_TAX_ID, dataBuffered); + dataBuffered = maskMatcher(PATTERN_ADDRESS, dataBuffered); + dataBuffered = maskMatcher(PATTERN_PEC, dataBuffered); + dataBuffered = maskMatcher(PATTERN_TOKEN, dataBuffered); + + return dataBuffered; + } + + private static String maskMatcher(Pattern pattern, String dataBuffered){ + Matcher matcher = pattern.matcher(dataBuffered); + while(matcher.find()){ + String toBeMasked = matcher.group(MATCHER_GROUP); + String valueMasked = mask(toBeMasked); + if(!toBeMasked.isBlank()){ + dataBuffered = dataBuffered.replace("\""+toBeMasked+"\"","\""+valueMasked+"\""); + } + } + return dataBuffered; + } + + private static String mask(String unmasked){ + if(unmasked.contains(",")){ + return maskAddress(unmasked); + } + else if(unmasked.contains("@")){ + return maskEmailAddress(unmasked); + } + else{ + return maskString(unmasked); + } + } + + + private static String maskAddress(String strAddress){ + String[] parts = strAddress.split(","); + StringBuilder masked = new StringBuilder(); + for (String part : parts) { + masked.append(maskString(part)).append(","); + } + return masked.substring(0,masked.length()-1); + } + + private static String maskEmailAddress(String strEmail) { + String[] parts = strEmail.split("@"); + String strId = maskString(parts[0]); + return strId + "@" + parts[1]; + } + + public static String maskString(String strText) { + int start = 1; + int end = strText.length()-MASK_STRING_END; + String maskChar = String.valueOf('*'); + if(StringUtils.isEmpty(strText)){ + return strText; + } + if(strText.length() < CHARACTER_LIMIT){ + end = strText.length(); + } + int maskLength = end - start; + if(maskLength == 0){ + return maskChar; + } + String sbMaskString = maskChar.repeat(Math.max(0, maskLength)); + return strText.substring(0, start) + + sbMaskString + + strText.substring(start + maskLength); + } + +} diff --git a/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/InvalidRequestExceptionTest.java b/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/InvalidRequestExceptionTest.java new file mode 100644 index 0000000..91dba2e --- /dev/null +++ b/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/InvalidRequestExceptionTest.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.exception; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class InvalidRequestExceptionTest { + /** + * Methods under test: + * + *
    + *
  • {@link InvalidRequestException#InvalidRequestException(String, String)} + *
  • {@link InvalidRequestException#getCode()} + *
+ */ + @Test + void testConstructor() { + assertEquals("Code", (new InvalidRequestException("An error occurred", "Code")).getCode()); + } +} + diff --git a/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/MsCoreExceptionTest.java b/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/MsCoreExceptionTest.java new file mode 100644 index 0000000..05a609b --- /dev/null +++ b/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/MsCoreExceptionTest.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.exception; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class MsCoreExceptionTest { + /** + * Methods under test: + * + *
    + *
  • {@link MsCoreException#MsCoreException(String, String)} + *
  • {@link MsCoreException#getCode()} + *
+ */ + @Test + void testConstructor() { + assertEquals("Code", (new MsCoreException("An error occurred", "Code")).getCode()); + } +} + diff --git a/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceConflictExceptionTest.java b/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceConflictExceptionTest.java new file mode 100644 index 0000000..f6a3206 --- /dev/null +++ b/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceConflictExceptionTest.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.exception; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class ResourceConflictExceptionTest { + /** + * Methods under test: + * + *
    + *
  • {@link ResourceConflictException#ResourceConflictException(String, String)} + *
  • {@link ResourceConflictException#getCode()} + *
+ */ + @Test + void testConstructor() { + assertEquals("Code", (new ResourceConflictException("An error occurred", "Code")).getCode()); + } +} + diff --git a/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundExceptionTest.java b/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundExceptionTest.java new file mode 100644 index 0000000..615d4bf --- /dev/null +++ b/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/exception/ResourceNotFoundExceptionTest.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.exception; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class ResourceNotFoundExceptionTest { + /** + * Methods under test: + * + *
    + *
  • {@link ResourceNotFoundException#ResourceNotFoundException(String, String)} + *
  • {@link ResourceNotFoundException#getCode()} + *
+ */ + @Test + void testConstructor() { + assertEquals("Code", (new ResourceNotFoundException("An error occurred", "Code")).getCode()); + } +} + diff --git a/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/utils/MaskDataUtilsTest.java b/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/utils/MaskDataUtilsTest.java new file mode 100644 index 0000000..b3aec2e --- /dev/null +++ b/apps/institution-ms/connector-api/src/test/java/it/pagopa/selfcare/mscore/utils/MaskDataUtilsTest.java @@ -0,0 +1,29 @@ +package it.pagopa.selfcare.mscore.utils; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class MaskDataUtilsTest { + /** + * Method under test: {@link MaskDataUtils#maskInformation(String)} + */ + @Test + void testMaskInformation() { + assertEquals("Data Buffered", MaskDataUtils.maskInformation("Data Buffered")); + assertEquals("\"elencoCf\" : [\"U*\"", MaskDataUtils.maskInformation("\"elencoCf\" : [\"UU\"")); + assertEquals("\"elencoCf\" : [\"V***********ssi, **\"", MaskDataUtils.maskInformation("\"elencoCf\" : [\"Via Mario Rossi, 47\"")); + assertEquals("\"elencoCf\" : [\"m******ssi@mario.rossi\"", MaskDataUtils.maskInformation("\"elencoCf\" : [\"mariorossi@mario.rossi\"")); + + } + + /** + * Method under test: {@link MaskDataUtils#maskString(String)} + */ + @Test + void testMaskString() { + assertEquals("S****ext", MaskDataUtils.maskString("Str Text")); + assertEquals("", MaskDataUtils.maskString("")); + } +} + diff --git a/apps/institution-ms/connector/azure-storage/pom.xml b/apps/institution-ms/connector/azure-storage/pom.xml new file mode 100644 index 0000000..5bf605f --- /dev/null +++ b/apps/institution-ms/connector/azure-storage/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + + selc-ms-core-connector + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-connector-azure-storage + + + + com.microsoft.azure + azure-storage + 8.6.6 + + + + \ No newline at end of file diff --git a/apps/institution-ms/connector/azure-storage/src/main/java/it/pagopa/selfcare/mscore/connector/azure_storage/AzureBlobClient.java b/apps/institution-ms/connector/azure-storage/src/main/java/it/pagopa/selfcare/mscore/connector/azure_storage/AzureBlobClient.java new file mode 100644 index 0000000..646d54a --- /dev/null +++ b/apps/institution-ms/connector/azure-storage/src/main/java/it/pagopa/selfcare/mscore/connector/azure_storage/AzureBlobClient.java @@ -0,0 +1,170 @@ +package it.pagopa.selfcare.mscore.connector.azure_storage; + +import com.microsoft.azure.storage.CloudStorageAccount; +import com.microsoft.azure.storage.StorageCredentials; +import com.microsoft.azure.storage.StorageCredentialsAccountAndKey; +import com.microsoft.azure.storage.StorageException; +import com.microsoft.azure.storage.blob.*; +import it.pagopa.selfcare.mscore.api.FileStorageConnector; +import it.pagopa.selfcare.mscore.config.AzureStorageConfig; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.onboarding.ResourceResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Profile; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Paths; + +import static it.pagopa.selfcare.mscore.constant.GenericError.*; + +@Slf4j +@Service +@PropertySource("classpath:config/azure-storage-config.properties") +@Profile("AzureStorage") +class AzureBlobClient implements FileStorageConnector { + + private final CloudBlobClient blobClient; + private final AzureStorageConfig azureStorageConfig; + + AzureBlobClient(AzureStorageConfig azureStorageConfig) throws URISyntaxException { + log.trace("AzureBlobClient.AzureBlobClient"); + this.azureStorageConfig = azureStorageConfig; + final CloudStorageAccount storageAccount = buildStorageAccount(); + this.blobClient = storageAccount.createCloudBlobClient(); + } + + private CloudStorageAccount buildStorageAccount() throws URISyntaxException { + StorageCredentials storageCredentials = new StorageCredentialsAccountAndKey(azureStorageConfig.getAccountName(), azureStorageConfig.getAccountKey()); + return new CloudStorageAccount(storageCredentials, + true, + azureStorageConfig.getEndpointSuffix(), + azureStorageConfig.getAccountName()); + } + + @Override + public ResourceResponse getFile(String fileName) { + log.info("START - getFile for path: {}", fileName); + try { + ResourceResponse response = new ResourceResponse(); + final CloudBlobContainer blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); + final CloudBlockBlob blob = blobContainer.getBlockBlobReference(fileName); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + BlobProperties properties = blob.getProperties(); + blob.download(outputStream); + log.info("END - getFile - path {}", fileName); + response.setData(outputStream.toByteArray()); + response.setFileName(blob.getName()); + response.setMimetype(properties.getContentType()); + return response; + } catch (StorageException e) { + if (e.getHttpStatusCode() == 404) { + throw new ResourceNotFoundException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), fileName), + ERROR_DURING_DOWNLOAD_FILE.getCode()); + } + throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), fileName), + ERROR_DURING_DOWNLOAD_FILE.getCode()); + } catch (URISyntaxException e) { + throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), fileName), + ERROR_DURING_DOWNLOAD_FILE.getCode()); + } + } + + @Override + public String getTemplateFile(String templateName) { + log.info("START - getTemplateFile for template: {}", templateName); + try { + final CloudBlobContainer blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); + final CloudBlockBlob blob = blobContainer.getBlockBlobReference(templateName); + String downloaded = blob.downloadText(); + log.info("END - getTemplateFile - Downloaded {}", templateName); + return downloaded; + } catch (StorageException | URISyntaxException | IOException e) { + log.error(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), templateName), e); + throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), templateName), + ERROR_DURING_DOWNLOAD_FILE.getCode()); + } + } + + @Override + public File getFileAsPdf(String contractTemplate){ + log.info("START - getFileAsPdf for template: {}", contractTemplate); + + final CloudBlobContainer blobContainer; + final CloudBlockBlob blob; + final File downloadedFile; + + try { + blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); + blob = blobContainer.getBlockBlobReference(contractTemplate); + + String fileName = Paths.get(contractTemplate).getFileName().toString(); + downloadedFile = File.createTempFile(fileName, ".pdf"); + } catch (URISyntaxException | StorageException | IOException e) { + log.error(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), contractTemplate), e); + throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), contractTemplate), + ERROR_DURING_DOWNLOAD_FILE.getCode()); + } + + try (BlobInputStream blobInputStream = blob.openInputStream(); + FileOutputStream fileOutputStream = new FileOutputStream(downloadedFile)){ + + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = blobInputStream.read(buffer)) != -1) { + fileOutputStream.write(buffer, 0, bytesRead); + } + + } catch (IOException | StorageException e) { + log.error(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), contractTemplate), e); + throw new MsCoreException(String.format(ERROR_DURING_DOWNLOAD_FILE.getMessage(), contractTemplate), + ERROR_DURING_DOWNLOAD_FILE.getCode()); + } + + log.info("END - getFileAsPdf"); + return downloadedFile; + } + + @Override + public String uploadContract(String id, MultipartFile contract) { + log.info("START - uploadContract for token: {}", id); + String fileName = Paths.get(azureStorageConfig.getContractPath(), id, contract.getOriginalFilename()).toString(); + log.debug("uploadContract fileName = {}, contentType = {}", fileName, contract.getContentType()); + try { + final CloudBlobContainer blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); + final CloudBlockBlob blob = blobContainer.getBlockBlobReference(fileName); + blob.getProperties().setContentType(contract.getContentType()); + blob.upload(contract.getInputStream(), contract.getInputStream().available()); + log.info("Uploaded {}", fileName); + return fileName; + } catch (StorageException | URISyntaxException | IOException e) { + log.error(String.format(ERROR_DURING_UPLOAD_FILE.getMessage(), fileName), e); + throw new MsCoreException(String.format(ERROR_DURING_UPLOAD_FILE.getMessage(), fileName), + ERROR_DURING_UPLOAD_FILE.getCode()); + } + } + + @Override + public void removeContract(String fileName, String tokenId) { + log.info("START - deleteContract for token: {}", tokenId); + + try { + final CloudBlobContainer blobContainer = blobClient.getContainerReference(azureStorageConfig.getContainer()); + final CloudBlockBlob blob = blobContainer.getBlockBlobReference(fileName); + blob.deleteIfExists(); + log.info("Deleted {}", fileName); + } catch (StorageException | URISyntaxException e) { + log.error(String.format(ERROR_DURING_DELETED_FILE.getMessage(), fileName), e); + throw new MsCoreException(String.format(ERROR_DURING_DELETED_FILE.getMessage(), fileName), + ERROR_DURING_DELETED_FILE.getCode()); + } + } + +} diff --git a/apps/institution-ms/connector/azure-storage/src/test/java/it/pagopa/selfcare/mscore/connector/azure_storage/config/AzureStorageConfigTest.java b/apps/institution-ms/connector/azure-storage/src/test/java/it/pagopa/selfcare/mscore/connector/azure_storage/config/AzureStorageConfigTest.java new file mode 100644 index 0000000..5015bfc --- /dev/null +++ b/apps/institution-ms/connector/azure-storage/src/test/java/it/pagopa/selfcare/mscore/connector/azure_storage/config/AzureStorageConfigTest.java @@ -0,0 +1,47 @@ +package it.pagopa.selfcare.mscore.connector.azure_storage.config; + +import it.pagopa.selfcare.mscore.config.AzureStorageConfig; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class AzureStorageConfigTest { + + /** + * Method under test: {@link AzureStorageConfig#getConnectionString()} + */ + @Test + void testGetConnectionString2() { + + AzureStorageConfig azureStorageConfig = new AzureStorageConfig(); + azureStorageConfig.setConnectionString("42"); + assertEquals("42", azureStorageConfig.getConnectionString()); + } + + /** + * Method under test: {@link AzureStorageConfig#getContainer()} ()); + } + + /** + * Method under test: {@link AzureStorageConfig#getContainer()} ()} + */ + @Test + void testGetContractsTemplateContainer3() { + + AzureStorageConfig azureStorageConfig = new AzureStorageConfig(); + azureStorageConfig.setContractPath("42"); + assertEquals("42", azureStorageConfig.getContractPath()); + } + + @Test + void testGetContractsTemplateContainer4() { + + AzureStorageConfig azureStorageConfig = new AzureStorageConfig(); + azureStorageConfig.setConnectionString("42"); + azureStorageConfig.setContainer("42"); + azureStorageConfig.setContractPath("42"); + + assertEquals("AzureStorageConfig(connectionString=42, accountName=null, endpointSuffix=null, accountKey=null, container=42, contractPath=42, checkoutTemplateContainer=null)", azureStorageConfig.toString()); + } +} + diff --git a/apps/institution-ms/connector/dao/pom.xml b/apps/institution-ms/connector/dao/pom.xml new file mode 100644 index 0000000..93e3b22 --- /dev/null +++ b/apps/institution-ms/connector/dao/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + selc-ms-core-connector + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-connector-dao + + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + de.flapdoodle.embed + de.flapdoodle.embed.mongo + test + + + it.pagopa.selfcare + selc-ms-core-connector-rest + + + + diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilder.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilder.java new file mode 100644 index 0000000..c1a88e4 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilder.java @@ -0,0 +1,50 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.lang.NonNull; +import org.springframework.lang.Nullable; + +import java.util.List; + +public class CriteriaBuilder { + + private Criteria criteria; + private boolean first; + + private CriteriaBuilder() { + criteria = new Criteria(); + first = true; + } + + public static CriteriaBuilder builder() { + return new CriteriaBuilder(); + } + + public Criteria build() { + return criteria; + } + + public CriteriaBuilder inIfNotEmpty(@NonNull String key, @Nullable List value) { + if (value != null && !value.isEmpty()) { + if (first) { + criteria = Criteria.where(key).in(value); + first = false; + } else { + criteria = criteria.and(key).in(value); + } + } + return this; + } + + public CriteriaBuilder isIfNotNull(@NonNull String key, @Nullable Object value) { + if (value != null) { + if (first) { + criteria = Criteria.where(key).is(value); + first = false; + } else { + criteria = criteria.and(key).is(value); + } + } + return this; + } +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImpl.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImpl.java new file mode 100644 index 0000000..9aaa08a --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImpl.java @@ -0,0 +1,180 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.api.DelegationConnector; +import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationEntityMapper; +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.Order; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; +import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; +import it.pagopa.selfcare.mscore.model.delegation.PageInfo; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.FindAndModifyOptions; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.data.support.PageableExecutionUtils; +import org.springframework.stereotype.Component; + +import java.time.OffsetDateTime; +import java.util.*; +import java.util.regex.Pattern; + +@Slf4j +@Component +public class DelegationConnectorImpl implements DelegationConnector { + + public static final String INSTITUTION = "Institution"; + public static final String INSTITUTIONS = "institutions"; + public static final String DELEGATIONS = "Delegations"; + private final DelegationRepository repository; + private final DelegationEntityMapper delegationMapper; + private final MongoTemplate mongoTemplate; + + public DelegationConnectorImpl(DelegationRepository repository, + DelegationEntityMapper delegationMapper, + MongoTemplate mongoTemplate) { + this.repository = repository; + this.delegationMapper = delegationMapper; + this.mongoTemplate = mongoTemplate; + } + + @Override + public Delegation save(Delegation delegation) { + final DelegationEntity entity = delegationMapper.convertToDelegationEntity(delegation); + return delegationMapper.convertToDelegation(repository.save(entity)); + } + + @Override + public boolean checkIfExistsWithStatus(Delegation delegation, DelegationState status) { + Optional opt = repository.findByFromAndToAndProductIdAndTypeAndStatus( + delegation.getFrom(), + delegation.getTo(), + delegation.getProductId(), + delegation.getType(), + status + ); + return opt.isPresent(); + } + + private List getCriterias(String from, String to, String productId, String search, String taxCode) { + List criterias = new ArrayList<>(); + + criterias.add(Criteria.where(DelegationEntity.Fields.status.name()).is(DelegationState.ACTIVE.name())); + + if (Objects.nonNull(from)) { + criterias.add(Criteria.where(DelegationEntity.Fields.from.name()).is(from)); + if(Objects.nonNull(taxCode)) { + criterias.add(Criteria.where(DelegationEntity.Fields.toTaxCode.name()).is(taxCode)); + } + } + if (Objects.nonNull(to)) { + criterias.add(Criteria.where(DelegationEntity.Fields.to.name()).is(to)); + if(Objects.nonNull(taxCode)) { + criterias.add(Criteria.where(DelegationEntity.Fields.fromTaxCode.name()).is(taxCode)); + } + } + if (Objects.nonNull(productId)) { + criterias.add(Criteria.where(DelegationEntity.Fields.productId.name()).is(productId)); + } + if (Objects.nonNull(search)) { + criterias.add(Criteria.where(DelegationEntity.Fields.institutionFromName.name()).regex("(?i)" + Pattern.quote(search))); + } + return criterias; + } + + @Override + public List find(String from, String to, String productId, String search, String taxCode, Order order, Integer page, Integer size) { + Criteria criteria = new Criteria(); + Pageable pageable = PageRequest.of(page, size); + List criterias = getCriterias(from, to, productId, search, taxCode); + + Sort.Direction sortDirection = order.equals(Order.ASC) ? Sort.Direction.ASC : Sort.Direction.DESC; + + Query query = Query.query(criteria.andOperator(criterias)); + + if (!order.equals(Order.NONE)) { + query = query.with(Sort.by(sortDirection, DelegationEntity.Fields.institutionFromName.name())); + } + + return repository.find(query, pageable, DelegationEntity.class) + .stream() + .map(delegationMapper::convertToDelegation) + .toList(); + } + + @Override + public DelegationWithPagination findAndCount(GetDelegationParameters delegationParameters) { + + List delegations = find(delegationParameters.getFrom(), delegationParameters.getTo(), delegationParameters.getProductId(), + delegationParameters.getSearch(), delegationParameters.getTaxCode(), delegationParameters.getOrder(), + delegationParameters.getPage(), delegationParameters.getSize()); + + Query query = Query.query(new Criteria().andOperator(getCriterias(delegationParameters.getFrom(), delegationParameters.getTo(), + delegationParameters.getProductId(), delegationParameters.getSearch(), delegationParameters.getTaxCode()))); + + long count = mongoTemplate.count(query, DelegationEntity.class); + + Pageable pageable = PageRequest.of(delegationParameters.getPage(), delegationParameters.getSize()); + Page result = PageableExecutionUtils.getPage(delegations, pageable, () -> count); + + PageInfo pageInfo = new PageInfo(result.getSize(), result.getNumber(), result.getTotalElements(), result.getTotalPages()); + return new DelegationWithPagination(delegations, pageInfo); + } + + @Override + public Delegation findByIdAndModifyStatus(String delegationId, DelegationState status) { + Query query = Query.query(Criteria.where(DelegationEntity.Fields.id.name()).is(delegationId)); + Update update = new Update(); + update.set(DelegationEntity.Fields.updatedAt.name(), OffsetDateTime.now()); + update.set(DelegationEntity.Fields.status.name(), status); + FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false); + return delegationMapper.convertToDelegation(repository.findAndModify(query, update, findAndModifyOptions, DelegationEntity.class)); + } + + @Override + public boolean checkIfDelegationsAreActive(String institutionId) { + List opt = repository.findByToAndStatus(institutionId, DelegationState.ACTIVE).orElse(Collections.emptyList()); + return !opt.isEmpty(); + } + + @Override + public Delegation findAndActivate(String from, String to, String productId) { + Query query = Query.query(Criteria.where(DelegationEntity.Fields.from.name()).is(from).and(DelegationEntity.Fields.to.name()).is(to).and(DelegationEntity.Fields.productId.name()).is(productId)); + Update update = new Update(); + update.set(DelegationEntity.Fields.updatedAt.name(), OffsetDateTime.now()); + update.set(DelegationEntity.Fields.status.name(), DelegationState.ACTIVE); + FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); + return delegationMapper.convertToDelegation(repository.findAndModify(query, update, findAndModifyOptions, DelegationEntity.class)); + } + + @Override + public void updateDelegation(Institution institutionUpdate) { + + // If institution own some delegations, we also update "to" reference + // isDelegation is true if institution own some delegations + if (institutionUpdate.isDelegation()) { + Update updateFrom = new Update(); + Query queryFrom = Query.query(Criteria.where(DelegationEntity.Fields.to.name()).is(institutionUpdate.getId())); + updateFrom.set(DelegationEntity.Fields.institutionToName.name(), institutionUpdate.getDescription()); + repository.updateMulti(queryFrom, updateFrom, DelegationEntity.class); + } + + Update updateTo = new Update(); + Query queryTo = Query.query(Criteria.where(DelegationEntity.Fields.from.name()).is(institutionUpdate.getId())); + updateTo.set(DelegationEntity.Fields.institutionFromName.name(), institutionUpdate.getDescription()); + if (Objects.nonNull(institutionUpdate.getParentDescription())) { + updateTo.set(DelegationEntity.Fields.institutionFromRootName.name(), institutionUpdate.getParentDescription()); + } + repository.updateMulti(queryTo, updateTo, DelegationEntity.class); + + } + +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepository.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepository.java new file mode 100644 index 0000000..352b2bd --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepository.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface DelegationRepository extends MongoRepository, MongoCustomConnector { + + Optional findByFromAndToAndProductIdAndTypeAndStatus(String from, String to, String productId, DelegationType type, DelegationState status); + + Optional> findByToAndStatus(String to, DelegationState status); +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImpl.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImpl.java new file mode 100644 index 0000000..04bea06 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImpl.java @@ -0,0 +1,359 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.GeoTaxonomyEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardingEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionEntityMapper; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionMapperHelper; +import it.pagopa.selfcare.mscore.constant.GenericError; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.SearchMode; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; +import it.pagopa.selfcare.product.entity.ProductStatus; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.mongodb.core.FindAndModifyOptions; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Component; + +import java.time.OffsetDateTime; +import java.util.*; +import java.util.stream.Collectors; + +import static it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionMapperHelper.addGeographicTaxonomies; +import static it.pagopa.selfcare.mscore.constant.CustomError.GET_INSTITUTION_BILLING_ERROR; +import static it.pagopa.selfcare.mscore.constant.CustomError.INSTITUTION_NOT_FOUND; + +@Slf4j +@Component +public class InstitutionConnectorImpl implements InstitutionConnector { + + private static final String CURRENT_ONBOARDING = "current."; + private static final String CURRENT_ONBOARDING_REFER = "$[current]"; + + private final InstitutionRepository repository; + private final InstitutionEntityMapper institutionMapper; + + public InstitutionConnectorImpl(InstitutionRepository repository, InstitutionEntityMapper institutionMapper) { + this.repository = repository; + this.institutionMapper = institutionMapper; + } + + @Override + public List findAll() { + return repository.findAll().stream().map(institutionMapper::convertToInstitution).collect(Collectors.toList()); + } + + @Override + public Institution save(Institution institution) { + final InstitutionEntity entity = institutionMapper.convertToInstitutionEntity(institution); + return institutionMapper.convertToInstitution(repository.save(entity)); + } + + @Override + public List findByExternalIdsAndProductId(List validInstitutionList, String productId) { + List externalIds = validInstitutionList.stream().map(ValidInstitution::getId).collect(Collectors.toList()); + Query query = Query.query(Criteria.where(constructQuery(Onboarding.Fields.productId.name())).is(productId) + .and(InstitutionEntity.Fields.externalId.name()).in(externalIds)); + return repository.find(query, InstitutionEntity.class).stream() + .map(InstitutionEntity::getExternalId) + .collect(Collectors.toList()); + } + + @Override + public void deleteById(String id) { + repository.deleteById(id); + } + + @Override + public Institution findById(String id) { + return repository.findById(id) + .map(institution -> { + log.info("Founded institution {}", institution.getExternalId()); + return institutionMapper.convertToInstitution(institution); + }) + .orElseThrow(() -> new ResourceNotFoundException(String.format(INSTITUTION_NOT_FOUND.getMessage(), id, "UNDEFINED"), INSTITUTION_NOT_FOUND.getCode())); + } + + @Override + public Institution findAndUpdateStatus(String institutionId, String tokenId, RelationshipState status) { + OffsetDateTime now = OffsetDateTime.now(); + + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); + Update update = new Update() + .set(constructQuery(CURRENT_ONBOARDING_REFER, Onboarding.Fields.status.name()), status) + .set(constructQuery(CURRENT_ONBOARDING_REFER, Onboarding.Fields.updatedAt.name()), now) + .filterArray(Criteria.where(CURRENT_ONBOARDING + Onboarding.Fields.tokenId.name()).is(tokenId)); + if (status == RelationshipState.DELETED) { + update.set(constructQuery(CURRENT_ONBOARDING_REFER, Onboarding.Fields.closedAt.name()), now); + } + FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); + return institutionMapper.convertToInstitution(repository.findAndModify(query, update, findAndModifyOptions, InstitutionEntity.class)); + } + + @Override + public Institution findAndUpdate(String institutionId, Onboarding onboarding, List geographicTaxonomiesList, InstitutionUpdate institutionUpdate) { + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); + Update update = new Update(); + update.set(InstitutionEntity.Fields.updatedAt.name(), OffsetDateTime.now()); + if (onboarding != null) { + update.addToSet(InstitutionEntity.Fields.onboarding.name(), onboarding); + } + if (institutionUpdate != null) { + Map map = InstitutionMapperHelper.getNotNullField(institutionUpdate); + map.forEach(update::set); + } + addGeographicTaxonomies(geographicTaxonomiesList, update); + FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); + return institutionMapper.convertToInstitution(repository.findAndModify(query, update, findAndModifyOptions, InstitutionEntity.class)); + } + + @Override + public List findByGeotaxonomies(List geo, SearchMode searchMode) { + Query query = constructQueryWithSearchMode(geo, searchMode); + return repository.find(query, InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public List findByProductId(String productId) { + Query query = Query.query(Criteria.where(constructQuery(Onboarding.Fields.productId.name())).is(productId)); + return repository.find(query, InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public List findAllByIds(List ids) { + List list = new ArrayList<>(); + repository.findAllById(ids) + .forEach(entity -> list.add(institutionMapper.convertToInstitution(entity))); + return list; + } + + @Override + public Institution findByExternalIdAndProductId(String externalId, String productId) { + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.externalId.name()).is(externalId) + .and(constructQuery(Onboarding.Fields.productId.name())).is(productId)); + + return repository.find(query, InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .findFirst().orElseThrow(() -> new ResourceNotFoundException(String.format(GET_INSTITUTION_BILLING_ERROR.getMessage(), externalId, productId), + GET_INSTITUTION_BILLING_ERROR.getCode())); + } + + @Override + public List findOnboardingByIdAndProductId(String institutionId, String productId) { + + Optional optionalInstitution = Objects.nonNull(productId) + ? Optional + .ofNullable(repository.findByInstitutionIdAndOnboardingProductId(institutionId, productId)) + : repository.findById(institutionId); + return optionalInstitution + .map(institutionMapper::convertToInstitution) + .map(Institution::getOnboarding) + .orElse(List.of()); + } + + @Override + public List findInstitutionsByProductId(String productId, Integer page, Integer size) { + + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.onboarding.name()). + elemMatch(Criteria.where(Onboarding.Fields.productId.name()).is(productId))); + + Pageable pageable = PageRequest.of(Objects.nonNull(page) ? page : 0, + Objects.nonNull(size) ? size : 100); + + Page institutionEntities = repository.find(query, pageable, InstitutionEntity.class); + return institutionEntities.getContent().stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public void findAndRemoveOnboarding(String institutionId, Onboarding onboarding) { + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); + Update update = new Update(); + update.set(InstitutionEntity.Fields.updatedAt.name(), OffsetDateTime.now()); + if (onboarding != null) { + update.pull(InstitutionEntity.Fields.onboarding.name(), onboarding); + } + FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(false); + repository.findAndModify(query, update, findAndModifyOptions, InstitutionEntity.class); + } + + @Override + public void findAndDeleteOnboarding(String institutionId, String productId) { + + Query query = Query.query( + Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); + + Update update = new Update(); + update.set(InstitutionEntity.Fields.updatedAt.name(), OffsetDateTime.now()); + update.set("onboarding.$[elem].status", RelationshipState.DELETED.name()); + update.set("onboarding.$[elem].updatedAt", OffsetDateTime.now()); + + update.filterArray(Criteria.where("elem.productId").is(productId) + .and("elem.status").is(RelationshipState.ACTIVE.name())); + + FindAndModifyOptions options = FindAndModifyOptions.options().upsert(false).returnNew(false); + InstitutionEntity updatedEntity = repository.findAndModify(query, update, options, InstitutionEntity.class); + } + + + @Override + public List findByTaxCodeSubunitCodeAndOrigin(String taxCode, String subunitCode, String origin, String originId) { + return repository.find(Query.query(CriteriaBuilder.builder() + .isIfNotNull(InstitutionEntity.Fields.taxCode.name(), taxCode) + .isIfNotNull(InstitutionEntity.Fields.subunitCode.name(), subunitCode) + .isIfNotNull(InstitutionEntity.Fields.origin.name(), origin) + .isIfNotNull(InstitutionEntity.Fields.originId.name(), originId) + .build() + ), + InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public Boolean existsByTaxCodeAndSubunitCodeAndProductAndStatusList(String taxCode, String subunitCode, + Optional optProductId, List validRelationshipStates) { + + Criteria criteriaInstitution = Criteria.where(InstitutionEntity.Fields.taxCode.name()).is(taxCode) + .and(InstitutionEntity.Fields.subunitCode.name()).is(subunitCode); + + Criteria criteriaOnboarding = Criteria.where(Onboarding.Fields.status.name()).in(validRelationshipStates); + optProductId.ifPresent(productId -> criteriaOnboarding.and(Onboarding.Fields.productId.name()).is(productId)); + + return repository.exists(Query.query(criteriaInstitution) + .addCriteria(Criteria.where(InstitutionEntity.Fields.onboarding.name()) + .elemMatch(criteriaOnboarding)) + , InstitutionEntity.class); + } + + @Override + public Optional findByExternalId(String externalId) { + return repository.find(Query.query(Criteria.where(InstitutionEntity.Fields.externalId.name()).is(externalId)), + InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .findFirst(); + } + + @Override + public List findWithFilter(String externalId, String productId, List validRelationshipStates) { + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.externalId.name()).is(externalId)) + .addCriteria(Criteria.where(InstitutionEntity.Fields.onboarding.name()) + .elemMatch(Criteria.where(Onboarding.Fields.productId.name()).is(productId) + .and(Onboarding.Fields.status.name()).in(validRelationshipStates))); + + return repository.find(query, InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public Institution updateOnboardedProductCreatedAt(String institutionId, String productId, OffsetDateTime createdAt) { + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.id.name()).is(institutionId)); + + Update update = new Update(); + update.set(constructQuery(CURRENT_ONBOARDING_REFER, OnboardingEntity.Fields.createdAt.name()), createdAt) + .set(constructQuery(CURRENT_ONBOARDING_REFER, OnboardingEntity.Fields.updatedAt.name()), OffsetDateTime.now()) + .filterArray(Criteria.where(CURRENT_ONBOARDING + OnboardingEntity.Fields.productId.name()).is(productId) + .and(CURRENT_ONBOARDING + OnboardingEntity.Fields.status.name()).is(RelationshipState.ACTIVE.name())); + + Update updateInstitutionEntityUpdatedAt = new Update(); + updateInstitutionEntityUpdatedAt.set(InstitutionEntity.Fields.updatedAt.name(), OffsetDateTime.now()); + + FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); + repository.findAndModify(query, update, findAndModifyOptions, InstitutionEntity.class); + return institutionMapper.convertToInstitution(repository.findAndModify(query, updateInstitutionEntityUpdatedAt, findAndModifyOptions, InstitutionEntity.class)); + } + + @Override + public List findBrokers(String productId, InstitutionType type) { + + Query query = Query.query(Criteria.where(InstitutionEntity.Fields.institutionType.name()).is(type) + .and(InstitutionEntity.Fields.onboarding.name()).elemMatch(Criteria.where(Onboarding.Fields.productId.name()).is(productId) + .and(Onboarding.Fields.status.name()).is(ProductStatus.ACTIVE))); + + List institutionEntities = repository.find(query, InstitutionEntity.class); + return institutionEntities.stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public List findByTaxCodeAndSubunitCode(String taxCode, String subunitCode) { + return repository.find(Query.query(Criteria.where(InstitutionEntity.Fields.taxCode.name()).is(taxCode) + .and(InstitutionEntity.Fields.subunitCode.name()).is(subunitCode) + ), + InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public List findByOriginAndOriginId(String origin, String originId) { + return repository.find(Query.query(CriteriaBuilder.builder() + .isIfNotNull(InstitutionEntity.Fields.origin.name(), origin) + .isIfNotNull(InstitutionEntity.Fields.originId.name(), originId) + .build() + ), + InstitutionEntity.class).stream() + .map(institutionMapper::convertToInstitution) + .collect(Collectors.toList()); + } + + @Override + public Boolean existsOnboardingByFilters(VerifyOnboardingFilters filters) { + Criteria criteriaInstitution = CriteriaBuilder.builder() + .isIfNotNull(InstitutionEntity.Fields.externalId.name(), filters.getExternalId()) + .isIfNotNull(InstitutionEntity.Fields.taxCode.name(), filters.getTaxCode()) + .isIfNotNull(InstitutionEntity.Fields.origin.name(), filters.getOrigin()) + .isIfNotNull(InstitutionEntity.Fields.originId.name(), filters.getOriginId()) + .build(); + + criteriaInstitution.and(InstitutionEntity.Fields.subunitCode.name()).is(filters.getSubunitCode()); + + Criteria criteriaOnboarding = Criteria.where(Onboarding.Fields.status.name()).in(filters.getValidRelationshipStates()) + .and(Onboarding.Fields.productId.name()).is(filters.getProductId()); + + return repository.exists(Query.query(criteriaInstitution) + .addCriteria(Criteria.where(InstitutionEntity.Fields.onboarding.name()) + .elemMatch(criteriaOnboarding)) + , InstitutionEntity.class); + } + + private Query constructQueryWithSearchMode(List geo, SearchMode searchMode) { + String geoQuery = InstitutionEntity.Fields.geographicTaxonomies.name() + + "." + GeoTaxonomyEntity.Fields.code.name(); + switch (searchMode) { + case ALL: + return Query.query(Criteria.where(geoQuery).all(geo)); + case ANY: + return Query.query(Criteria.where(geoQuery).in(geo)); + case EXACT: + return Query.query(Criteria.where(geoQuery).all(geo) + .and(InstitutionEntity.Fields.geographicTaxonomies.name()).size(geo.size())); + default: + throw new InvalidRequestException("Invalid search mode", "0000"); + } + } + + private String constructQuery(String... variables) { + StringBuilder builder = new StringBuilder(); + builder.append(InstitutionEntity.Fields.onboarding.name()); + Arrays.stream(variables).forEach(s -> builder.append(".").append(s)); + return builder.toString(); + } +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepository.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepository.java new file mode 100644 index 0000000..e742364 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepository.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.Query; +import org.springframework.stereotype.Repository; + +@Repository +public interface InstitutionRepository extends MongoRepository, MongoCustomConnector { + + @Query(value = "{ '_id' : ?0, 'onboarding' : { $elemMatch: { 'productId' : ?1 } } }", + fields = "{ 'onboarding': { $elemMatch: { 'productId' : ?1 } } }") + InstitutionEntity findByInstitutionIdAndOnboardingProductId(String institutionId, String productId); + + +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnector.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnector.java new file mode 100644 index 0000000..5fbb442 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnector.java @@ -0,0 +1,28 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import com.mongodb.client.result.UpdateResult; +import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionFilter; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.mongodb.core.FindAndModifyOptions; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.UpdateDefinition; + +import java.util.List; + +public interface MongoCustomConnector { + + boolean exists(Query query, Class outputType); + + Long count(Query query, Class outputType); + + List find(Query query, Class outputType); + + Page find(Query query, Pageable pageable, Class outputType); + + O findAndModify(Query query, UpdateDefinition updateDefinition, FindAndModifyOptions findAndModifyOptions, Class outputType); + + List findUserInstitutionAggregation(UserInstitutionFilter filter, Class outputType); + + UpdateResult updateMulti(Query query, UpdateDefinition updateDefinition, Class outputType); +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImpl.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImpl.java new file mode 100644 index 0000000..a9c352a --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImpl.java @@ -0,0 +1,107 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import com.mongodb.client.result.UpdateResult; +import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionFilter; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.data.mongodb.core.FindAndModifyOptions; +import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.GraphLookupOperation; +import org.springframework.data.mongodb.core.aggregation.MatchOperation; +import org.springframework.data.mongodb.core.aggregation.UnwindOperation; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.UpdateDefinition; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +public class MongoCustomConnectorImpl implements MongoCustomConnector { + private static final String INSTITUTION_ID = "institutionId"; + private static final String INSTITUTIONS = "institutions"; + private static final String ENTITY_ID = "_id"; + private static final String BINDINGS = "$bindings"; + private final MongoOperations mongoOperations; + + public MongoCustomConnectorImpl(MongoOperations mongoOperations) { + this.mongoOperations = mongoOperations; + } + + + @Override + public boolean exists(Query query, Class outputType) { + return mongoOperations.exists(query, outputType); + } + + @Override + public Long count(Query query, Class outputType) { + return mongoOperations.count(query, outputType); + } + + @Override + public List find(Query query, Class outputType) { + return mongoOperations.find(query, outputType); + } + + @Override + public Page find(Query query, Pageable pageable, Class outputType) { + long count = mongoOperations.count(query, outputType); + List list = new ArrayList<>(); + if (count > 0) { + list = mongoOperations.find(query.with(pageable), outputType); + } + return new PageImpl<>(list, pageable, count); + } + + @Override + public O findAndModify(Query query, UpdateDefinition updateDefinition, FindAndModifyOptions findAndModifyOptions, Class outputType) { + return mongoOperations.findAndModify(query, updateDefinition, findAndModifyOptions, outputType); + } + + @Override + public List findUserInstitutionAggregation(UserInstitutionFilter filter, Class outputType) { + MatchOperation matchUserId = Aggregation.match(Criteria.where(ENTITY_ID).is(filter.getUserId())); + //Output a new document for each userBindings + UnwindOperation unwindBindings = Aggregation.unwind(BINDINGS); + //retrieve institution for each binding + GraphLookupOperation.GraphLookupOperationBuilder graphLookupInstitution = Aggregation.graphLookup(filter.getToCollection()) + .startWith(BINDINGS + "." + INSTITUTION_ID) + .connectFrom(INSTITUTION_ID) + .connectTo(ENTITY_ID) + .maxDepth(2); + //Output a new document for each product in bindings + UnwindOperation unwindProducts = Aggregation.unwind(BINDINGS + ".products"); + //remove document with product status not in filter + MatchOperation matchProductStatus = Aggregation.match(Criteria.where("bindings.products.status").in(filter.getStates())); + //remove document with no institution + MatchOperation matchInstitutionExist = Aggregation.match(Criteria.where(INSTITUTIONS).size(1)); + + Aggregation aggregation; + if (StringUtils.hasText(filter.getInstitutionId())) { + MatchOperation matchInstitutionId = checkIfInstitutionIdIsPresent(filter); + aggregation = Aggregation.newAggregation(matchUserId, unwindBindings, graphLookupInstitution.as(INSTITUTIONS), matchInstitutionId, unwindProducts, matchProductStatus, matchInstitutionExist); + } else if (StringUtils.hasText(filter.getExternalId())) { + checkIfExternalIdIsPresent(filter, graphLookupInstitution); + aggregation = Aggregation.newAggregation(matchUserId, unwindBindings, graphLookupInstitution.as(INSTITUTIONS), unwindProducts, matchProductStatus, matchInstitutionExist); + } else { + aggregation = Aggregation.newAggregation(matchUserId, unwindBindings, graphLookupInstitution.as(INSTITUTIONS), unwindProducts, matchProductStatus, matchInstitutionExist); + } + return mongoOperations.aggregate(aggregation, filter.getFromCollection(), outputType).getMappedResults(); + } + + private MatchOperation checkIfInstitutionIdIsPresent(UserInstitutionFilter filter) { + return Aggregation.match(Criteria.where("bindings." + INSTITUTION_ID).is(filter.getInstitutionId())); + } + + private void checkIfExternalIdIsPresent(UserInstitutionFilter filter, GraphLookupOperation.GraphLookupOperationBuilder graphLookupOperation) { + graphLookupOperation.restrict(Criteria.where("externalId").is(filter.getExternalId())); + } + + @Override + public UpdateResult updateMulti(Query query, UpdateDefinition updateDefinition, Class outputType){ + return mongoOperations.updateMulti(query, updateDefinition, outputType); + } +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImpl.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImpl.java new file mode 100644 index 0000000..c6ee1c3 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImpl.java @@ -0,0 +1,67 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.api.PecNotificationConnector; +import it.pagopa.selfcare.mscore.connector.dao.model.PecNotificationEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.PecNotificationEntityMapper; +import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Objects; + +@Slf4j +@Component +public class PecNotificationConnectorImpl implements PecNotificationConnector { + + private final PecNotificationRepository repository; + private final PecNotificationEntityMapper pecNotificationMapper; + + public PecNotificationConnectorImpl(PecNotificationRepository repository, PecNotificationEntityMapper pecNotificationMapper) { + this.repository = repository; + this.pecNotificationMapper = pecNotificationMapper; + } + + @Override + public boolean findAndDeletePecNotification(String institutionId, String productId) { + + Query query = Query.query(Criteria.where(PecNotificationEntity.Fields.institutionId.name()).is(institutionId) + .and(PecNotificationEntity.Fields.productId.name()).is(productId)); + + List pecNotificationEntityList = repository.find(query, PecNotificationEntity.class); + + if(Objects.nonNull(pecNotificationEntityList) && pecNotificationEntityList.size() == 1) { + repository.delete(pecNotificationEntityList.get(0)); + log.trace("Deleted PecNotification with institutionId: {} and productId: {}", institutionId, productId); + return true; + } + + if (Objects.nonNull(pecNotificationEntityList) && pecNotificationEntityList.size() > 1) { + log.trace("Cannot delete PecNotification with institutionId: {} and productId: {}, because there are multiple entries", institutionId, productId); + return false; + } + + log.trace("Cannot delete PecNotification with institutionId: {} and productId: {}, because it does not exist", institutionId, productId); + return false; + } + + @Override + public boolean insertPecNotification(PecNotification pecNotification){ + + PecNotificationEntity pecNotificationEntity = this.pecNotificationMapper.convertToPecNotificationEntity(pecNotification); + + boolean exist = repository.existsByInstitutionIdAndProductId(pecNotificationEntity.getInstitutionId(), pecNotificationEntity.getProductId()); + + if (exist){ + log.trace("Cannot insert the PecNotification: {}, as it already exists in the collection", pecNotification.toString()); + return false; + } + + repository.insert(pecNotificationEntity); + log.trace("Inserted PecNotification: {}", pecNotification.toString()); + return true; + } + +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationRepository.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationRepository.java new file mode 100644 index 0000000..87c8f85 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationRepository.java @@ -0,0 +1,8 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.connector.dao.model.PecNotificationEntity; +import org.springframework.data.mongodb.repository.MongoRepository; + +public interface PecNotificationRepository extends MongoRepository, MongoCustomConnector { + boolean existsByInstitutionIdAndProductId(String institutionId, String productId); +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/TokenRepository.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/TokenRepository.java new file mode 100644 index 0000000..483a662 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/TokenRepository.java @@ -0,0 +1,8 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.connector.dao.model.TokenEntity; +import org.springframework.data.mongodb.repository.MongoRepository; + +public interface TokenRepository extends MongoRepository, MongoCustomConnector { + +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/UserRepository.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/UserRepository.java new file mode 100644 index 0000000..ee21f99 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/UserRepository.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.connector.dao.model.UserEntity; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository extends MongoRepository,MongoCustomConnector { + +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfig.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfig.java new file mode 100644 index 0000000..6e55562 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfig.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.connector.dao.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.data.mongodb.core.convert.MongoCustomConversions; + +import java.util.Arrays; + +@Configuration +@PropertySource("classpath:config/dao-config.properties") +class DaoConfig{ + + @Bean + public MongoCustomConversions customConversions() { + return new MongoCustomConversions(Arrays.asList( + new OffsetDateTimeToStringConverter(), + new StringToOffsetDateTimeConverter() + )); + } + +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverter.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverter.java new file mode 100644 index 0000000..161d0c2 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverter.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.connector.dao.config; + +import org.springframework.core.convert.converter.Converter; + +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; + +class OffsetDateTimeToStringConverter implements Converter { + + @Override + public String convert(OffsetDateTime source) { + return source.toInstant().atOffset(ZoneOffset.UTC).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); + } + +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverter.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverter.java new file mode 100644 index 0000000..686f031 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverter.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.connector.dao.config; + +import org.springframework.core.convert.converter.Converter; + +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; + +class StringToOffsetDateTimeConverter implements Converter { + + @Override + public OffsetDateTime convert(String source) { + return OffsetDateTime.parse(source, DateTimeFormatter.ISO_OFFSET_DATE_TIME); + } + +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/DelegationEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/DelegationEntity.java new file mode 100644 index 0000000..4b14e6b --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/DelegationEntity.java @@ -0,0 +1,36 @@ +package it.pagopa.selfcare.mscore.connector.dao.model; + +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import lombok.Data; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Sharded; + +import java.time.OffsetDateTime; + +@Data +@Document("Delegations") +@Sharded(shardKey = {"id"}) +@FieldNameConstants(asEnum = true) +public class DelegationEntity { + + @Id + private String id; + private String from; + private String institutionFromName; + private String institutionToName; + private String institutionFromRootName; + private String to; + private String toTaxCode; + private String fromTaxCode; + private String toType; + private String fromType; + private String productId; + private DelegationType type; + private DelegationState status; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/InstitutionEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/InstitutionEntity.java new file mode 100644 index 0000000..b370791 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/InstitutionEntity.java @@ -0,0 +1,61 @@ +package it.pagopa.selfcare.mscore.connector.dao.model; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.*; +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.index.Indexed; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Sharded; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@Document("Institution") +@Sharded(shardKey = {"id"}) +@FieldNameConstants(asEnum = true) +public class InstitutionEntity { + + @Id + private String id; + + @Indexed(unique = true) + private String externalId; + + private Origin origin; + private String originId; + private String description; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String taxCode; + private String city; + private String county; + private String country; + private String istatCode; + private BillingEntity billing; + private List onboarding; + private List geographicTaxonomies; + private List attributes; + private PaymentServiceProviderEntity paymentServiceProvider; + private DataProtectionOfficerEntity dataProtectionOfficer; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private String subunitCode; + private String subunitType; + private String parentDescription; + private String rootParentId; + private PaAttributesEntity paAttributes; + private boolean delegation; + +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java new file mode 100644 index 0000000..ac2c57a --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java @@ -0,0 +1,29 @@ +package it.pagopa.selfcare.mscore.connector.dao.model; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Sharded; + +import java.time.OffsetDateTime; + +@Data +@NoArgsConstructor +@Document("PecNotification") +@Sharded(shardKey = {"id"}) +@FieldNameConstants(asEnum = true) +public class PecNotificationEntity { + + @Id + private String id; + private String institutionId; + private String productId; + private Integer moduleDayOfTheEpoch; + private String digitalAddress; + + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + +} \ No newline at end of file diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/TokenEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/TokenEntity.java new file mode 100644 index 0000000..03a6c23 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/TokenEntity.java @@ -0,0 +1,46 @@ +package it.pagopa.selfcare.mscore.connector.dao.model; + +import it.pagopa.selfcare.mscore.connector.dao.model.inner.InstitutionUpdateEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.TokenUserEntity; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.TokenType; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.index.Indexed; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Sharded; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@NoArgsConstructor +@Document("Token") +@Sharded(shardKey = {"id"}) +@FieldNameConstants(asEnum = true) +public class TokenEntity { + + @Id + private String id; + private TokenType type; + private RelationshipState status; + private String institutionId; + private String productId; + private OffsetDateTime expiringDate; + private String checksum; + private String contractVersion; + private String contractTemplate; + private String contractSigned; + private String contentType; + private List users; + private InstitutionUpdateEntity institutionUpdate; + @Indexed + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private OffsetDateTime deletedAt; + private OffsetDateTime activatedAt; + +} + diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/UserEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/UserEntity.java new file mode 100644 index 0000000..1162bfc --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/UserEntity.java @@ -0,0 +1,27 @@ +package it.pagopa.selfcare.mscore.connector.dao.model; + +import it.pagopa.selfcare.mscore.connector.dao.model.inner.UserBindingEntity; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Sharded; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@NoArgsConstructor +@Document("User") +@Sharded(shardKey = {"id"}) +@FieldNameConstants(asEnum = true) +public class UserEntity { + + @Id + private String id; + private List bindings; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionAggregationEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionAggregationEntity.java new file mode 100644 index 0000000..e4ef1ad --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionAggregationEntity.java @@ -0,0 +1,25 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.aggregation; + + +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Sharded; + +import java.util.List; + +@Data +@NoArgsConstructor +@Document("User") +@Sharded(shardKey = {"id"}) +@FieldNameConstants(asEnum = true) +public class UserInstitutionAggregationEntity { + + @Id + private String id; + private UserInstitutionBindingEntity bindings; + private List institutions; +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionBindingEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionBindingEntity.java new file mode 100644 index 0000000..f5a6ed5 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/aggregation/UserInstitutionBindingEntity.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.aggregation; + +import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardedProductEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +@AllArgsConstructor +@NoArgsConstructor +public class UserInstitutionBindingEntity { + + private String institutionId; + private OnboardedProductEntity products; +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AdditionalInformationsEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AdditionalInformationsEntity.java new file mode 100644 index 0000000..a53ff98 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AdditionalInformationsEntity.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +public class AdditionalInformationsEntity { + private boolean belongRegulatedMarket; + private String regulatedMarketNote; + private boolean ipa; + private String ipaCode; + private boolean establishedByRegulatoryProvision; + private String establishedByRegulatoryProvisionNote; + private boolean agentOfPublicService; + private String agentOfPublicServiceNote; + private String otherNote; +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AttributesEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AttributesEntity.java new file mode 100644 index 0000000..67248df --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/AttributesEntity.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +public class AttributesEntity { + private String origin; + private String code; + private String description; +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/BillingEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/BillingEntity.java new file mode 100644 index 0000000..47e5edd --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/BillingEntity.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +public class BillingEntity { + + private String vatNumber; + private String taxCodeInvoicing; + private String recipientCode; + private boolean publicServices; + +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/DataProtectionOfficerEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/DataProtectionOfficerEntity.java new file mode 100644 index 0000000..d6224c5 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/DataProtectionOfficerEntity.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +public class DataProtectionOfficerEntity { + private String address; + private String email; + private String pec; +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/GeoTaxonomyEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/GeoTaxonomyEntity.java new file mode 100644 index 0000000..518e0fb --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/GeoTaxonomyEntity.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +public class GeoTaxonomyEntity { + private String code; + private String desc; +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/InstitutionUpdateEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/InstitutionUpdateEntity.java new file mode 100644 index 0000000..4a2cd3b --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/InstitutionUpdateEntity.java @@ -0,0 +1,30 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.Data; + +import java.util.List; + +@Data +public class InstitutionUpdateEntity { + + private InstitutionType institutionType; + private String description; + private String digitalAddress; + private String address; + private String taxCode; + private String zipCode; + private String city; + private String county; + private String country; + private PaymentServiceProviderEntity paymentServiceProvider; + private DataProtectionOfficerEntity dataProtectionOfficer; + private List geographicTaxonomies; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private AdditionalInformationsEntity additionalInformations; +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardedProductEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardedProductEntity.java new file mode 100644 index 0000000..e8a040d --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardedProductEntity.java @@ -0,0 +1,30 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.Env; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.mongodb.core.index.Indexed; + +import java.time.OffsetDateTime; + +import static it.pagopa.selfcare.mscore.constant.Env.ROOT; + +@Data +@FieldNameConstants(asEnum = true) +public class OnboardedProductEntity { + + @Indexed + private String productId; + + private String relationshipId; + private String tokenId; + private RelationshipState status; + private String contract; + private String productRole; + private PartyRole role; + private Env env = ROOT; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardingEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardingEntity.java new file mode 100644 index 0000000..6c86903 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/OnboardingEntity.java @@ -0,0 +1,25 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.mongodb.core.index.Indexed; + +import java.time.OffsetDateTime; + +@Data +@FieldNameConstants(asEnum = true) +public class OnboardingEntity { + + @Indexed(unique = true) + private String productId; + private RelationshipState status; + private String tokenId; + private String contract; + private String pricingPlan; + private BillingEntity billing; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private OffsetDateTime closedAt; + private Boolean isAggregator; +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaAttributesEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaAttributesEntity.java new file mode 100644 index 0000000..e2c7098 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaAttributesEntity.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.Data; + +@Data +public class PaAttributesEntity { + + private String aooParentCode; +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaymentServiceProviderEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaymentServiceProviderEntity.java new file mode 100644 index 0000000..d7f4bf6 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/PaymentServiceProviderEntity.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants(asEnum = true) +public class PaymentServiceProviderEntity { + private String abiCode; + private String businessRegisterNumber; + private String legalRegisterName; + private String legalRegisterNumber; + private boolean vatNumberGroup; +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/TokenUserEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/TokenUserEntity.java new file mode 100644 index 0000000..9e3ef4f --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/TokenUserEntity.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import lombok.Data; + +@Data +public class TokenUserEntity { + private String userId; + private PartyRole role; +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/UserBindingEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/UserBindingEntity.java new file mode 100644 index 0000000..ce3fad0 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/inner/UserBindingEntity.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.inner; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; +import org.springframework.data.mongodb.core.index.Indexed; + +import java.util.List; + +@Data +@FieldNameConstants(asEnum = true) +@AllArgsConstructor +@NoArgsConstructor +public class UserBindingEntity { + + @Indexed(unique = true) + private String institutionId; + private String institutionName; + private String institutionRootName; + private List products; +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationEntityMapper.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationEntityMapper.java new file mode 100644 index 0000000..b762a79 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationEntityMapper.java @@ -0,0 +1,23 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + + +import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +import java.util.UUID; + +@Mapper(componentModel = "spring", imports = UUID.class) +public interface DelegationEntityMapper { + + @Mapping(target = "id", defaultExpression = "java(UUID.randomUUID().toString())") + @Mapping(target = "toType", source = "brokerType") + @Mapping(target = "fromType", source = "institutionType") + DelegationEntity convertToDelegationEntity(Delegation delegation); + + @Mapping(target = "brokerType", source = "toType") + @Mapping(target = "institutionType", source = "fromType") + Delegation convertToDelegation(DelegationEntity entity); + +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationInstitutionMapper.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationInstitutionMapper.java new file mode 100644 index 0000000..7b84a97 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/DelegationInstitutionMapper.java @@ -0,0 +1,34 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.model.delegation.DelegationInstitution; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; + +import java.util.List; + +@Mapper(componentModel = "spring") +public interface DelegationInstitutionMapper { + + @Mapping(source = "institutions", target = "taxCode", qualifiedByName = "setTaxCode") + @Mapping(source = "institutions", target = "institutionType", qualifiedByName = "setInstitutionType") + Delegation convertToDelegationInstitution(DelegationInstitution delegation); + + @Mapping(source = "institutions", target = "brokerTaxCode", qualifiedByName = "setTaxCode") + @Mapping(source = "institutions", target = "brokerType", qualifiedByName = "setInstitutionType") + Delegation convertToDelegationBroker(DelegationInstitution delegation); + + @Named("setTaxCode") + default String setTaxCode(List institutionList) { + return !institutionList.isEmpty() ? institutionList.get(0).getTaxCode() : null; + } + + @Named("setInstitutionType") + default InstitutionType setInstitutionType(List institutionList) { + return !institutionList.isEmpty()? institutionList.get(0).getInstitutionType() : null; + } + +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionEntityMapper.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionEntityMapper.java new file mode 100644 index 0000000..73c4e9b --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionEntityMapper.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + + +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +import java.util.UUID; + +@Mapper(componentModel = "spring", imports = UUID.class) +public interface InstitutionEntityMapper { + + @Mapping(target = "id", defaultExpression = "java(UUID.randomUUID().toString())") + InstitutionEntity convertToInstitutionEntity(Institution institution); + + Institution convertToInstitution(InstitutionEntity entity); +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapper.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapper.java new file mode 100644 index 0000000..bc0abcf --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapper.java @@ -0,0 +1,96 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + +import it.pagopa.selfcare.mscore.connector.dao.model.inner.AdditionalInformationsEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.DataProtectionOfficerEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.GeoTaxonomyEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.PaymentServiceProviderEntity; +import it.pagopa.selfcare.mscore.model.institution.AdditionalInformations; +import it.pagopa.selfcare.mscore.model.institution.DataProtectionOfficer; +import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; +import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; + +/** Deprecated: Use InstitutionEntityMapper */ +@Deprecated +@NoArgsConstructor(access = AccessLevel.NONE) +public class InstitutionMapper { + + public static DataProtectionOfficer toDataProtectionOfficer(DataProtectionOfficerEntity dataProtectionOfficer) { + DataProtectionOfficer data = new DataProtectionOfficer(); + data.setPec(dataProtectionOfficer.getPec()); + data.setEmail(dataProtectionOfficer.getEmail()); + data.setAddress(dataProtectionOfficer.getAddress()); + return data; + } + + public static AdditionalInformations toAdditionalInformations(AdditionalInformationsEntity additionalInformations) { + AdditionalInformations additionalInfo = new AdditionalInformations(); + additionalInfo.setIpa(additionalInformations.isIpa()); + additionalInfo.setIpaCode(additionalInformations.getIpaCode()); + additionalInfo.setAgentOfPublicService(additionalInformations.isAgentOfPublicService()); + additionalInfo.setAgentOfPublicServiceNote(additionalInformations.getAgentOfPublicServiceNote()); + additionalInfo.setBelongRegulatedMarket(additionalInformations.isBelongRegulatedMarket()); + additionalInfo.setRegulatedMarketNote(additionalInformations.getRegulatedMarketNote()); + additionalInfo.setEstablishedByRegulatoryProvision(additionalInformations.isEstablishedByRegulatoryProvision()); + additionalInfo.setEstablishedByRegulatoryProvisionNote(additionalInformations.getEstablishedByRegulatoryProvisionNote()); + additionalInfo.setOtherNote(additionalInformations.getOtherNote()); + return additionalInfo; + } + + public static PaymentServiceProvider toPaymentServiceProvider(PaymentServiceProviderEntity paymentServiceProvider) { + PaymentServiceProvider provider = new PaymentServiceProvider(); + provider.setLegalRegisterName(paymentServiceProvider.getLegalRegisterName()); + provider.setAbiCode(paymentServiceProvider.getAbiCode()); + provider.setLegalRegisterNumber(paymentServiceProvider.getLegalRegisterNumber()); + provider.setVatNumberGroup(paymentServiceProvider.isVatNumberGroup()); + provider.setBusinessRegisterNumber(paymentServiceProvider.getBusinessRegisterNumber()); + return provider; + } + + public static List toGeoTaxonomyEntity(List geographicTaxonomies) { + List list = new ArrayList<>(); + for(InstitutionGeographicTaxonomies geo : geographicTaxonomies){ + GeoTaxonomyEntity entity = new GeoTaxonomyEntity(); + entity.setDesc(geo.getDesc()); + entity.setCode(geo.getCode()); + list.add(entity); + } + return list; + } + + public static DataProtectionOfficerEntity toDataProtectionOfficerEntity(DataProtectionOfficer dataProtectionOfficer) { + DataProtectionOfficerEntity data = new DataProtectionOfficerEntity(); + data.setPec(dataProtectionOfficer.getPec()); + data.setEmail(dataProtectionOfficer.getEmail()); + data.setAddress(dataProtectionOfficer.getAddress()); + return data; + } + + public static AdditionalInformationsEntity toAdditionalInformationsEntity(AdditionalInformations additionalInformations) { + AdditionalInformationsEntity additionalInfo = new AdditionalInformationsEntity(); + additionalInfo.setIpa(additionalInformations.isIpa()); + additionalInfo.setIpaCode(additionalInformations.getIpaCode()); + additionalInfo.setAgentOfPublicService(additionalInformations.isAgentOfPublicService()); + additionalInfo.setAgentOfPublicServiceNote(additionalInformations.getAgentOfPublicServiceNote()); + additionalInfo.setBelongRegulatedMarket(additionalInformations.isBelongRegulatedMarket()); + additionalInfo.setRegulatedMarketNote(additionalInformations.getRegulatedMarketNote()); + additionalInfo.setEstablishedByRegulatoryProvision(additionalInformations.isEstablishedByRegulatoryProvision()); + additionalInfo.setEstablishedByRegulatoryProvisionNote(additionalInformations.getEstablishedByRegulatoryProvisionNote()); + additionalInfo.setOtherNote(additionalInformations.getOtherNote()); + return additionalInfo; + } + + public static PaymentServiceProviderEntity toPaymentServiceProviderEntity(PaymentServiceProvider paymentServiceProvider) { + PaymentServiceProviderEntity provider = new PaymentServiceProviderEntity(); + provider.setLegalRegisterName(paymentServiceProvider.getLegalRegisterName()); + provider.setAbiCode(paymentServiceProvider.getAbiCode()); + provider.setLegalRegisterNumber(paymentServiceProvider.getLegalRegisterNumber()); + provider.setVatNumberGroup(paymentServiceProvider.isVatNumberGroup()); + provider.setBusinessRegisterNumber(paymentServiceProvider.getBusinessRegisterNumber()); + return provider; + } +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapperHelper.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapperHelper.java new file mode 100644 index 0000000..88543fc --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/InstitutionMapperHelper.java @@ -0,0 +1,87 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.GeoTaxonomyEntity; +import it.pagopa.selfcare.mscore.model.institution.DataProtectionOfficer; +import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.springframework.data.mongodb.core.query.Update; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +@NoArgsConstructor(access = AccessLevel.NONE) +public class InstitutionMapperHelper { + + + public static void addGeographicTaxonomies(List taxonomiesList, Update update) { + if (taxonomiesList != null && !taxonomiesList.isEmpty()) { + List list = taxonomiesList.stream().map(geographicTaxonomies -> { + GeoTaxonomyEntity entity = new GeoTaxonomyEntity(); + entity.setCode(geographicTaxonomies.getCode()); + entity.setDesc(geographicTaxonomies.getDesc()); + return entity; + }).collect(Collectors.toList()); + update.set(InstitutionEntity.Fields.geographicTaxonomies.name(), list); + } + } + + public static Map getNotNullField(InstitutionUpdate institutionUpdate) { + Map response = new HashMap<>(); + if(institutionUpdate.getInstitutionType() != null) { + response.put(InstitutionUpdate.Fields.institutionType.name(), institutionUpdate.getInstitutionType().name()); + } + response.put(InstitutionUpdate.Fields.description.name(), institutionUpdate.getDescription()); + response.put(InstitutionUpdate.Fields.parentDescription.name(), institutionUpdate.getParentDescription()); + response.put(InstitutionUpdate.Fields.digitalAddress.name(), institutionUpdate.getDigitalAddress()); + response.put(InstitutionUpdate.Fields.address.name(), institutionUpdate.getAddress()); + response.put(InstitutionUpdate.Fields.taxCode.name(), institutionUpdate.getTaxCode()); + response.put(InstitutionUpdate.Fields.zipCode.name(), institutionUpdate.getZipCode()); + response.put(InstitutionUpdate.Fields.rea.name(), institutionUpdate.getRea()); + response.put(InstitutionUpdate.Fields.shareCapital.name(), institutionUpdate.getShareCapital()); + response.put(InstitutionUpdate.Fields.businessRegisterPlace.name(), institutionUpdate.getBusinessRegisterPlace()); + response.put(InstitutionUpdate.Fields.supportEmail.name(), institutionUpdate.getSupportEmail()); + response.put(InstitutionUpdate.Fields.supportPhone.name(), institutionUpdate.getSupportPhone()); + response.put(InstitutionUpdate.Fields.imported.name(), institutionUpdate.isImported()); + response.put(InstitutionUpdate.Fields.delegation.name(), institutionUpdate.getDelegation()); + + if(institutionUpdate.getPaymentServiceProvider() != null) { + response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.abiCode.name()), + institutionUpdate.getPaymentServiceProvider().getAbiCode()); + response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.businessRegisterNumber.name()), + institutionUpdate.getPaymentServiceProvider().getBusinessRegisterNumber()); + response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.legalRegisterNumber.name()), + institutionUpdate.getPaymentServiceProvider().getLegalRegisterNumber()); + response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.legalRegisterName.name()), + institutionUpdate.getPaymentServiceProvider().getLegalRegisterName()); + response.put(constructPaymentInnerField(PaymentServiceProvider.Fields.vatNumberGroup.name()), + institutionUpdate.getPaymentServiceProvider().isVatNumberGroup()); + } + + if(institutionUpdate.getDataProtectionOfficer() != null){ + response.put(constructProtectionOfficerInnerField(DataProtectionOfficer.Fields.pec.name()), + institutionUpdate.getDataProtectionOfficer().getPec()); + response.put(constructProtectionOfficerInnerField(DataProtectionOfficer.Fields.address.name()), + institutionUpdate.getDataProtectionOfficer().getAddress()); + response.put(constructProtectionOfficerInnerField(DataProtectionOfficer.Fields.email.name()), + institutionUpdate.getDataProtectionOfficer().getEmail()); + } + + response.values().removeIf(Objects::isNull); + return response; + } + + private static String constructProtectionOfficerInnerField(String name) { + return InstitutionUpdate.Fields.dataProtectionOfficer.name() + "." + name; + } + + private static String constructPaymentInnerField(String name) { + return InstitutionUpdate.Fields.businessRegisterPlace.name() + "." + name; + } +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/OnboardedProductMapper.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/OnboardedProductMapper.java new file mode 100644 index 0000000..bd392bf --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/OnboardedProductMapper.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + +import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardedProductEntity; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface OnboardedProductMapper { + OnboardedProduct toOnboardedProduct(OnboardedProductEntity onboardedProductEntity); +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java new file mode 100644 index 0000000..fe31aad --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + +import it.pagopa.selfcare.mscore.connector.dao.model.PecNotificationEntity; +import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +import java.util.UUID; + +@Mapper(componentModel = "spring", imports = UUID.class) +public interface PecNotificationEntityMapper { + + @Mapping(target = "id", defaultExpression = "java(UUID.randomUUID().toString())") + PecNotificationEntity convertToPecNotificationEntity(PecNotification institution); + + PecNotification convertToPecNotification(PecNotificationEntity entity); +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserEntityMapper.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserEntityMapper.java new file mode 100644 index 0000000..9da1c6a --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserEntityMapper.java @@ -0,0 +1,43 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + + +import it.pagopa.selfcare.mscore.connector.dao.model.UserEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.UserBindingEntity; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedUser; +import it.pagopa.selfcare.mscore.model.user.UserInfo; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; +import org.mapstruct.factory.Mappers; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import java.util.stream.Collectors; + +@Mapper(componentModel = "spring", imports = UUID.class) +public interface UserEntityMapper { + + OnboardedProductMapper productMapper = Mappers.getMapper(OnboardedProductMapper.class); + + OnboardedUser toOnboardedUser(UserEntity entity); + + @Mapping(target = "products", expression = "java(setProducts(entity.getBindings(), institutionId))") + UserInfo toUserInfoByFirstInstitution(UserEntity entity, String institutionId); + + @Named("setProducts") + default List setProducts(List bindings, String institutionId) { + if(Objects.nonNull(bindings) && !bindings.isEmpty()) { + UserBindingEntity filteredEntity = bindings.stream().filter(el -> institutionId.equals(el.getInstitutionId())).findFirst().orElse(null); + return Objects.nonNull(filteredEntity) ? + filteredEntity.getProducts().stream().map(productMapper::toOnboardedProduct).collect(Collectors.toList()) + : Collections.emptyList(); + } + return Collections.emptyList(); + } + + @Mapping(target = "id", defaultExpression = "java(UUID.randomUUID().toString())") + UserEntity toUserEntity(OnboardedUser user); +} diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserInstitutionAggregationMapper.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserInstitutionAggregationMapper.java new file mode 100644 index 0000000..e226111 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserInstitutionAggregationMapper.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + +import it.pagopa.selfcare.mscore.connector.dao.model.aggregation.UserInstitutionAggregationEntity; +import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionAggregation; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring", uses = {InstitutionEntityMapper.class}) +public interface UserInstitutionAggregationMapper { + + UserInstitutionAggregation constructUserInstitutionAggregation(UserInstitutionAggregationEntity entity); +} diff --git a/apps/institution-ms/connector/dao/src/main/resources/config/dao-config.properties b/apps/institution-ms/connector/dao/src/main/resources/config/dao-config.properties new file mode 100644 index 0000000..93dce21 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/main/resources/config/dao-config.properties @@ -0,0 +1,3 @@ +spring.data.mongodb.uri=${MONGODB_CONNECTION_URI::mongodb://localhost:27017/?readPreference=primary&appname=MongoDB%20Compass&directConnection=true&ssl=false}&appname=${MONGODB_APPNAME:selcMsCore} +spring.data.mongodb.database=${MONGODB_NAME_SELC_MSCORE:selcMsCore} +##spring.data.mongodb.auto-index-creation=true \ No newline at end of file diff --git a/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilderTest.java b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilderTest.java new file mode 100644 index 0000000..b20f591 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/CriteriaBuilderTest.java @@ -0,0 +1,39 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.test.context.ContextConfiguration; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@ContextConfiguration(classes = {CriteriaBuilder.class}) +@ExtendWith(MockitoExtension.class) +class CriteriaBuilderTest { + + @Test + void testInIfNotEmpty() { + Criteria criteria = CriteriaBuilder.builder() + .inIfNotEmpty("colors", List.of("red", "green", "blue")) + .inIfNotEmpty("sizes", List.of("small", "medium", "large")) + .build(); + + org.bson.conversions.Bson bson = criteria.getCriteriaObject(); + assertEquals("Document{{colors=Document{{$in=[red, green, blue]}}, sizes=Document{{$in=[small, medium, large]}}}}", bson.toString()); + } + + @Test + void testIsIfNotNull() { + Criteria criteria = CriteriaBuilder.builder() + .isIfNotNull("quantity", 10) + .isIfNotNull("price", 19.99) + .build(); + + org.bson.conversions.Bson bson = criteria.getCriteriaObject(); + + assertEquals("Document{{quantity=10, price=19.99}}", bson.toString()); + } +} diff --git a/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImplTest.java b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImplTest.java new file mode 100644 index 0000000..142f591 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationConnectorImplTest.java @@ -0,0 +1,350 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationEntityMapper; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationEntityMapperImpl; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationInstitutionMapper; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.DelegationInstitutionMapperImpl; +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import it.pagopa.selfcare.mscore.constant.Order; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.model.delegation.*; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.function.Executable; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.support.PageableExecutionUtils; +import org.springframework.test.context.ContextConfiguration; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_DELEGATION_ERROR; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {DelegationConnectorImpl.class}) +@ExtendWith(MockitoExtension.class) +class DelegationConnectorImplTest { + + public static final int PAGE_SIZE = 0; + public static final int MAX_PAGE_SIZE = 100; + static Institution dummyInstitution; + static DelegationInstitution dummyDelegationEntity; + + static { + dummyInstitution = new Institution(); + dummyInstitution.setTaxCode("taxCode"); + dummyInstitution.setInstitutionType(InstitutionType.PT); + dummyDelegationEntity = new DelegationInstitution(); + dummyDelegationEntity.setId("id"); + dummyDelegationEntity.setProductId("productId"); + dummyDelegationEntity.setType(DelegationType.PT); + dummyDelegationEntity.setTo("To"); + dummyDelegationEntity.setFrom("From"); + dummyDelegationEntity.setInstitutionFromName("setInstitutionFromName"); + dummyDelegationEntity.setInstitutionFromRootName("setInstitutionFromRootName"); + dummyDelegationEntity.setInstitutions(List.of(dummyInstitution)); + } + + @InjectMocks + private DelegationConnectorImpl delegationConnectorImpl; + + @Mock + private DelegationRepository delegationRepository; + + @Mock + private MongoTemplate mongoTemplate; + + @Spy + private DelegationEntityMapper delegationMapper = new DelegationEntityMapperImpl(); + + @Spy + private DelegationInstitutionMapper delegationInstitutionMapper = new DelegationInstitutionMapperImpl(); + + @Test + void testSaveDelegation() { + DelegationEntity delegationEntity = new DelegationEntity(); + delegationEntity.setId("id"); + delegationEntity.setType(DelegationType.PT); + when(delegationRepository.save(Mockito.any())).thenReturn(delegationEntity); + Delegation response = delegationConnectorImpl.save(new Delegation()); + assertNotNull(response); + assertNotNull(response.getId()); + assertEquals(response.getId(), delegationEntity.getId()); + assertEquals(response.getType(), delegationEntity.getType()); + } + + @Test + void testSaveDelegationWithError() { + when(delegationRepository.save(any())).thenThrow(new MsCoreException(CREATE_DELEGATION_ERROR.getMessage(), CREATE_DELEGATION_ERROR.getCode())); + assertThrows(MsCoreException.class, () -> delegationConnectorImpl.save(new Delegation())); + verify(delegationRepository).save(any()); + } + + @Test + void testCheckIfExists() { + Delegation delegation = new Delegation(); + delegation.setTo("to"); + delegation.setFrom("from"); + delegation.setType(DelegationType.PT); + delegation.setProductId("prod"); + delegation.setStatus(DelegationState.DELETED); + when(delegationRepository.findByFromAndToAndProductIdAndTypeAndStatus(any(), any(), any(), any(), any())).thenReturn(Optional.of(new DelegationEntity())); + boolean response = delegationConnectorImpl.checkIfExistsWithStatus(delegation, DelegationState.DELETED); + assertTrue(response); + + } + + @Test + void find_shouldGetData() { + DelegationEntity delegationEntity = new DelegationEntity(); + delegationEntity.setId("id"); + delegationEntity.setProductId("productId"); + delegationEntity.setType(DelegationType.PT); + delegationEntity.setTo("To"); + delegationEntity.setFrom("From"); + delegationEntity.setInstitutionFromName("setInstitutionFromName"); + delegationEntity.setInstitutionFromRootName("setInstitutionFromRootName"); + + List delegationEntities = List.of(delegationEntity); + Page delegationEntityPage = new PageImpl<>(delegationEntities); + //When + + doReturn(delegationEntityPage) + .when(delegationRepository) + .find(any(), any(), any()); + + List response = delegationConnectorImpl.find(delegationEntity.getFrom(), + delegationEntity.getTo(), delegationEntity.getProductId(), null, null, Order.NONE, PAGE_SIZE, MAX_PAGE_SIZE); + + //Then + assertNotNull(response); + assertFalse(response.isEmpty()); + Delegation actual = response.get(0); + + assertEquals(actual.getId(), delegationEntity.getId()); + assertEquals(actual.getType(), delegationEntity.getType()); + assertEquals(actual.getProductId(), delegationEntity.getProductId()); + assertEquals(actual.getTo(), delegationEntity.getTo()); + assertEquals(actual.getFrom(), delegationEntity.getFrom()); + assertEquals(actual.getInstitutionFromName(), delegationEntity.getInstitutionFromName()); + assertEquals(actual.getInstitutionFromRootName(), delegationEntity.getInstitutionFromRootName()); + assertEquals(actual.getToTaxCode(), delegationEntity.getToTaxCode()); + assertEquals(actual.getFromTaxCode(), delegationEntity.getFromTaxCode()); + } + + @Test + void findByIdAndModifyStatus() { + DelegationEntity delegationEntity = new DelegationEntity(); + delegationEntity.setId("id"); + delegationEntity.setStatus(DelegationState.ACTIVE); + when(delegationRepository.findAndModify(any(), any(), any(), any())).thenReturn(delegationEntity); + Delegation delegation = delegationConnectorImpl.findByIdAndModifyStatus(delegationEntity.getId(), DelegationState.DELETED); + assertNotNull(delegation); + assertEquals(delegation.getId(), delegationEntity.getId()); + } + + @Test + void checkIfDelegationsAreActive_true() { + when(delegationRepository.findByToAndStatus(anyString(), any())).thenReturn(Optional.of(List.of(new DelegationEntity()))); + boolean response = delegationConnectorImpl.checkIfDelegationsAreActive("id"); + assertTrue(response); + } + + @Test + void checkIfDelegationsAreActive_false() { + when(delegationRepository.findByToAndStatus(anyString(), any())).thenReturn(Optional.of(Collections.emptyList())); + boolean response = delegationConnectorImpl.checkIfDelegationsAreActive("id"); + assertFalse(response); + } + + + @Test + void find_shouldGetDataPaginated() { + DelegationEntity delegationEntity = new DelegationEntity(); + delegationEntity.setId("id"); + delegationEntity.setProductId("productId"); + delegationEntity.setType(DelegationType.PT); + delegationEntity.setTo("To"); + delegationEntity.setFrom("From"); + delegationEntity.setInstitutionFromName("setInstitutionFromName"); + delegationEntity.setInstitutionFromRootName("setInstitutionFromRootName"); + + List delegationEntities = List.of(delegationEntity); + Page delegationEntityPage = new PageImpl<>(delegationEntities); + + //When + doReturn(delegationEntityPage) + .when(delegationRepository) + .find(any(), any(), any()); + + List response = delegationConnectorImpl.find(null, delegationEntity.getTo(), "productId", + null, null, Order.NONE, 0, 1); + + //Then + assertNotNull(response); + assertFalse(response.isEmpty()); + assertEquals(1, response.size()); + + Delegation actual = response.get(0); + + assertEquals(actual.getId(), delegationEntity.getId()); + assertEquals(actual.getType(), delegationEntity.getType()); + assertEquals(actual.getProductId(), delegationEntity.getProductId()); + assertEquals(actual.getTo(), delegationEntity.getTo()); + assertEquals(actual.getFrom(), delegationEntity.getFrom()); + assertEquals(actual.getFromTaxCode(), delegationEntity.getFromTaxCode()); + assertEquals(actual.getToTaxCode(), delegationEntity.getToTaxCode()); + + } + + @Test + void findAndActivate() { + DelegationEntity delegationEntity = new DelegationEntity(); + delegationEntity.setId("id"); + delegationEntity.setFrom("from"); + delegationEntity.setTo("to"); + delegationEntity.setProductId("prod-io"); + delegationEntity.setStatus(DelegationState.ACTIVE); + when(delegationRepository.findAndModify(any(), any(), any(), any())).thenReturn(delegationEntity); + Delegation delegation = delegationConnectorImpl.findAndActivate(delegationEntity.getFrom(), delegationEntity.getTo(), delegationEntity.getProductId()); + assertNotNull(delegation); + assertEquals(delegation.getId(), delegationEntity.getId()); + } + + private DelegationInstitution createAggregation(String pattern, String from, String to) { + Institution institution = new Institution(); + institution.setTaxCode("taxCode_" + pattern); + institution.setInstitutionType(InstitutionType.PT); + DelegationInstitution delegationEntity = new DelegationInstitution(); + delegationEntity.setId("id_" + pattern); + delegationEntity.setProductId("productId"); + delegationEntity.setType(DelegationType.PT); + delegationEntity.setTo(to); + delegationEntity.setFrom(from); + delegationEntity.setInstitutionFromName("name_" + from); + delegationEntity.setInstitutions(List.of(institution)); + return delegationEntity; + } + + @Test + void findAndCount_shouldGetData() { + + DelegationEntity delegationEntity = new DelegationEntity(); + delegationEntity.setId("id"); + delegationEntity.setProductId("productId"); + delegationEntity.setType(DelegationType.PT); + delegationEntity.setTo("To"); + delegationEntity.setFrom("From"); + delegationEntity.setInstitutionFromName("setInstitutionFromName"); + delegationEntity.setInstitutionFromRootName("setInstitutionFromRootName"); + + + List delegationEntities = List.of(delegationEntity); + Page delegationEntityPage = new PageImpl<>(delegationEntities); + + Pageable pageable = PageRequest.of(PAGE_SIZE, MAX_PAGE_SIZE); + Page result = PageableExecutionUtils.getPage(List.of(new Delegation()), pageable, () -> 1L); + PageInfo expectedPageInfo = new PageInfo(result.getSize(), result.getNumber(), result.getTotalElements(), result.getTotalPages()); + + //When + + doReturn(delegationEntityPage) + .when(delegationRepository) + .find(any(), any(), any()); + + doReturn(1L) + .when(mongoTemplate) + .count(any(), eq(DelegationEntity.class)); + + DelegationWithPagination response = delegationConnectorImpl.findAndCount(createDelegationParameters(delegationEntity.getFrom(), + delegationEntity.getTo(), delegationEntity.getProductId(), null, null, Order.NONE, PAGE_SIZE, MAX_PAGE_SIZE)); + + //Then + assertNotNull(response); + assertNotNull(response.getDelegations()); + assertNotNull(response.getPageInfo()); + assertFalse(response.getDelegations().isEmpty()); + Delegation actualDelegation = response.getDelegations().get(0); + PageInfo actualPageInfo = response.getPageInfo(); + + assertEquals(actualDelegation.getId(), delegationEntity.getId()); + assertEquals(actualDelegation.getType(), delegationEntity.getType()); + assertEquals(actualDelegation.getProductId(), delegationEntity.getProductId()); + assertEquals(actualDelegation.getTo(), delegationEntity.getTo()); + assertEquals(actualDelegation.getFrom(), delegationEntity.getFrom()); + assertEquals(actualDelegation.getInstitutionFromName(), delegationEntity.getInstitutionFromName()); + assertEquals(actualDelegation.getInstitutionFromRootName(), delegationEntity.getInstitutionFromRootName()); + assertEquals(actualPageInfo, expectedPageInfo); + } + private GetDelegationParameters createDelegationParameters(String from, String to, String productId, + String search, String taxCode, Order order, + Integer page, Integer size) { + return GetDelegationParameters.builder() + .from(from) + .to(to) + .productId(productId) + .search(search) + .taxCode(taxCode) + .order(order) + .page(page) + .size(size) + .build(); + } + + @Test + void updateDelegation() { + + String description = "description"; + String rootName = "rootName"; + String institutionId = "institutionId"; + + Institution institutionUpdate = new Institution(); + institutionUpdate.setId(institutionId); + institutionUpdate.setDescription(description); + institutionUpdate.setParentDescription(rootName); + institutionUpdate.setDelegation(true); + + //when + final Executable executable = () -> delegationConnectorImpl.updateDelegation(institutionUpdate); + + Assertions.assertDoesNotThrow(executable); + verify(delegationRepository, times(2)).updateMulti(any(), any(), any()); + + } + + @Test + void updateDelegation_noDelegation() { + + String description = "description"; + String institutionId = "institutionId"; + + Institution institutionUpdate = new Institution(); + institutionUpdate.setId(institutionId); + institutionUpdate.setDescription(description); + + //when + final Executable executable = () -> delegationConnectorImpl.updateDelegation(institutionUpdate); + + Assertions.assertDoesNotThrow(executable); + verify(delegationRepository, times(1)).updateMulti(any(), any(), any()); + + } +} diff --git a/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepositoryTest.java b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepositoryTest.java new file mode 100644 index 0000000..028ce05 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/DelegationRepositoryTest.java @@ -0,0 +1,41 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.mscore.connector.dao.config.DaoConfigTest; +import it.pagopa.selfcare.mscore.connector.dao.model.DelegationEntity; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.test.context.ContextConfiguration; + +import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; +import static it.pagopa.selfcare.commons.utils.TestUtils.reflectionEqualsByName; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@DataMongoTest +@EnableAutoConfiguration +@ContextConfiguration(classes = {DelegationEntity.class, DaoConfigTest.class}) +class DelegationRepositoryTest { + + @Autowired + private DelegationRepository repository; + + @Test + void create() { + // Given + DelegationEntity delegationEntity = mockInstance(new DelegationEntity()); + delegationEntity.setFrom("from"); + delegationEntity.setTo("to"); + delegationEntity.setType(DelegationType.PT); + delegationEntity.setProductId("productId"); + // When + DelegationEntity savedDelegationEntity = repository.save(delegationEntity); + // Then + assertFalse(repository.findAll().isEmpty()); + assertNotNull(savedDelegationEntity); + reflectionEqualsByName(delegationEntity, savedDelegationEntity); + } + +} diff --git a/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImplTest.java b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImplTest.java new file mode 100644 index 0000000..17b3531 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionConnectorImplTest.java @@ -0,0 +1,739 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.*; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionEntityMapper; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.InstitutionEntityMapperImpl; +import it.pagopa.selfcare.mscore.connector.dao.utils.TestUtils; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.SearchMode; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.*; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.data.mongodb.core.FindAndModifyOptions; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.test.context.ContextConfiguration; + +import java.time.OffsetDateTime; +import java.util.*; + +import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {InstitutionConnectorImpl.class}) +@ExtendWith(MockitoExtension.class) +class InstitutionConnectorImplTest { + + @InjectMocks + InstitutionConnectorImpl institutionConnectorImpl; + + @Mock + InstitutionRepository institutionRepository; + + @Spy + InstitutionEntityMapper institutionMapper = new InstitutionEntityMapperImpl(); + + @Captor + ArgumentCaptor queryArgumentCaptor; + + @Captor + ArgumentCaptor updateArgumentCaptor; + + @Captor + ArgumentCaptor findAndModifyOptionsArgumentCaptor; + + @Captor + ArgumentCaptor pageableArgumentCaptor; + + /** + * Method under test: {@link InstitutionConnectorImpl#findAll()} + */ + @Test + void testFindAll() { + when(institutionRepository.findAll()).thenReturn(new ArrayList<>()); + assertTrue(institutionConnectorImpl.findAll().isEmpty()); + verify(institutionRepository).findAll(); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findAll()} + */ + @Test + void testFindAll2() { + InstitutionEntity institutionEntity = TestUtils.createSimpleInstitutionEntity(); + + ArrayList institutionEntityList = new ArrayList<>(); + institutionEntityList.add(institutionEntity); + when(institutionRepository.findAll()).thenReturn(institutionEntityList); + assertEquals(1, institutionConnectorImpl.findAll().size()); + verify(institutionRepository).findAll(); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findAll()} + */ + @Test + void testFindAll4() { + when(institutionRepository.findAll()).thenThrow(new InvalidRequestException("An error occurred", "Code")); + assertThrows(InvalidRequestException.class, () -> institutionConnectorImpl.findAll()); + verify(institutionRepository).findAll(); + } + + @Test + void findById() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + institutionEntity.setId("507f1f77bcf86cd799439011"); + Optional response = institutionConnectorImpl.findByExternalId("id"); + Assertions.assertTrue(response.isEmpty()); + } + + @Test + void shouldSaveInstitution() { + List geographicTaxonomies = new ArrayList<>(); + geographicTaxonomies.add(new InstitutionGeographicTaxonomies()); + List onboardings = new ArrayList<>(); + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(new Billing()); + onboarding.setContract("contract"); + onboarding.setStatus(RelationshipState.ACTIVE); + onboarding.setCreatedAt(OffsetDateTime.now()); + onboarding.setProductId("productId"); + onboarding.setUpdatedAt(OffsetDateTime.now()); + onboarding.setPricingPlan("pricingPal"); + onboardings.add(onboarding); + + Institution institution = new Institution(); + institution.setExternalId("ext"); + institution.setId("507f1f77bcf86cd799439011"); + institution.setParentDescription("parentDescription"); + institution.setOnboarding(onboardings); + institution.setZipCode("zipCpde"); + institution.setRea("rea"); + institution.setGeographicTaxonomies(geographicTaxonomies); + + when(institutionRepository.save(any())).thenAnswer(arg -> arg.getArguments()[0]); + + Institution response = institutionConnectorImpl.save(institution); + Assertions.assertEquals(institution.getId(), response.getId()); + Assertions.assertEquals(institution.getExternalId(), response.getExternalId()); + Assertions.assertEquals(institution.getParentDescription(), response.getParentDescription()); + Assertions.assertEquals(institution.getRea(), response.getRea()); + Assertions.assertEquals(institution.getZipCode(), response.getZipCode()); + Assertions.assertEquals(institution.getOnboarding().size(), response.getOnboarding().size()); + + Onboarding responseOnboarding = institution.getOnboarding().get(0); + Assertions.assertEquals(onboarding.getContract(), responseOnboarding.getContract()); + Assertions.assertEquals(onboarding.getStatus(), responseOnboarding.getStatus()); + Assertions.assertEquals(onboarding.getCreatedAt(), responseOnboarding.getCreatedAt()); + Assertions.assertEquals(onboarding.getProductId(), responseOnboarding.getProductId()); + Assertions.assertEquals(onboarding.getUpdatedAt(), responseOnboarding.getUpdatedAt()); + Assertions.assertEquals(onboarding.getPricingPlan(), responseOnboarding.getPricingPlan()); + } + + @Test + void findByExternalIdTest() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + institutionEntity.setId("507f1f77bcf86cd799439011"); + when(institutionRepository.find(any(), any())).thenReturn(new ArrayList<>()); + Optional response = institutionConnectorImpl.findByExternalId("ext"); + Assertions.assertFalse(response.isPresent()); + } + + @Test + void findByExternalIdNotFoundTest() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + institutionEntity.setId("507f1f77bcf86cd799439011"); + Optional response = institutionConnectorImpl.findByExternalId("ext"); + Assertions.assertTrue(response.isEmpty()); + } + + @Test + void deleteById() { + doNothing().when(institutionRepository).deleteById(any()); + Assertions.assertDoesNotThrow(() -> institutionConnectorImpl.deleteById("507f1f77bcf86cd799439011")); + } + + @Test + void testFindById() { + when(institutionRepository.findById(any())).thenReturn(Optional.empty()); + assertThrows(ResourceNotFoundException.class, () -> institutionConnectorImpl.findById("42")); + } + + @Test + void testFindById2() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + List onboardings = new ArrayList<>(); + onboardings.add(new OnboardingEntity()); + institutionEntity.setAttributes(new ArrayList<>()); + institutionEntity.setOnboarding(onboardings); + institutionEntity.setGeographicTaxonomies(new ArrayList<>()); + institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); + institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); + when(institutionRepository.findById(any())).thenReturn(Optional.of(institutionEntity)); + assertNotNull(institutionConnectorImpl.findById("id")); + } + + @Test + void testFindAndUpdate() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + List onboardings = new ArrayList<>(); + onboardings.add(new OnboardingEntity()); + institutionEntity.setAttributes(new ArrayList<>()); + institutionEntity.setOnboarding(onboardings); + institutionEntity.setGeographicTaxonomies(new ArrayList<>()); + institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); + institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); + when(institutionRepository.findAndModify(any(), any(), any(), any())).thenReturn(institutionEntity); + List geographicTaxonomies = new ArrayList<>(); + InstitutionGeographicTaxonomies geographicTaxonomies1 = new InstitutionGeographicTaxonomies(); + geographicTaxonomies1.setCode("code"); + geographicTaxonomies1.setDesc("desc"); + geographicTaxonomies.add(geographicTaxonomies1); + Institution response = institutionConnectorImpl.findAndUpdate("institutionId", new Onboarding(), geographicTaxonomies, new InstitutionUpdate()); + assertNotNull(response); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} + */ + @Test + void testFindByGeotaxonomies() { + when(institutionRepository.find(org.mockito.Mockito.any(), org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); + assertTrue(institutionConnectorImpl.findByGeotaxonomies(new ArrayList<>(), SearchMode.ALL).isEmpty()); + verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} + */ + @Test + void testFindByGeotaxonomies2() { + InstitutionEntity institutionEntity = TestUtils.createSimpleInstitutionEntity(); + + ArrayList institutionEntityList = new ArrayList<>(); + institutionEntityList.add(institutionEntity); + when(institutionRepository.find(org.mockito.Mockito.any(), + (Class) org.mockito.Mockito.any())).thenReturn(institutionEntityList); + assertEquals(1, institutionConnectorImpl.findByGeotaxonomies(new ArrayList<>(), SearchMode.ALL).size()); + verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} + */ + @Test + void testFindByGeotaxonomies4() { + when(institutionRepository.find(org.mockito.Mockito.any(),org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); + assertTrue(institutionConnectorImpl.findByGeotaxonomies(new ArrayList<>(), SearchMode.ANY).isEmpty()); + verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} + */ + @Test + void testFindByGeotaxonomies5() { + when(institutionRepository.find(org.mockito.Mockito.any(), org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); + assertTrue(institutionConnectorImpl.findByGeotaxonomies(new ArrayList<>(), SearchMode.EXACT).isEmpty()); + verify(institutionRepository).find(org.mockito.Mockito.any(),org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByGeotaxonomies(List, SearchMode)} + */ + @Test + void testFindByGeotaxonomies6() { + when(institutionRepository.find(org.mockito.Mockito.any(), org.mockito.Mockito.any())) + .thenThrow(new InvalidRequestException("An error occurred", "Code")); + List list = new ArrayList<>(); + assertThrows(InvalidRequestException.class, + () -> institutionConnectorImpl.findByGeotaxonomies(list, SearchMode.ALL)); + verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByProductId} + */ + @Test + void testFindByProductId() { + when(institutionRepository.find(org.mockito.Mockito.any(),org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); + assertTrue(institutionConnectorImpl.findByProductId("42").isEmpty()); + verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByProductId} + */ + @Test + void testFindByProductId2() { + InstitutionEntity institutionEntity = TestUtils.createSimpleInstitutionEntity(); + + ArrayList institutionEntityList = new ArrayList<>(); + institutionEntityList.add(institutionEntity); + when(institutionRepository.find(org.mockito.Mockito.any(), + (Class) org.mockito.Mockito.any())).thenReturn(institutionEntityList); + assertEquals(1, institutionConnectorImpl.findByProductId("42").size()); + verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByProductId} + */ + @Test + void testFindByProductId4() { + when(institutionRepository.find(org.mockito.Mockito.any(), + (Class) org.mockito.Mockito.any())) + .thenThrow(new InvalidRequestException("An error occurred", ".")); + assertThrows(InvalidRequestException.class, () -> institutionConnectorImpl.findByProductId("42")); + verify(institutionRepository).find(org.mockito.Mockito.any(), org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findAllByIds(List)} + */ + @Test + void testFindAllByIds3() { + when(institutionRepository.findAllById(org.mockito.Mockito.any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + List ids = new ArrayList<>(); + assertThrows(ResourceNotFoundException.class, () -> institutionConnectorImpl.findAllByIds(ids)); + verify(institutionRepository).findAllById(org.mockito.Mockito.any()); + } + + @Test + void testFindAllByIds2() { + when(institutionRepository.findAllById(org.mockito.Mockito.any())).thenReturn(List.of(new InstitutionEntity())); + List ids = new ArrayList<>(); + assertDoesNotThrow(() -> institutionConnectorImpl.findAllByIds(ids)); + verify(institutionRepository).findAllById(org.mockito.Mockito.any()); + } + + @Test + void testFindWithFilter() { + when(institutionRepository.find(any(), any())).thenReturn(new ArrayList<>()); + List response = institutionConnectorImpl.findWithFilter("externalId", "productId", new ArrayList<>()); + assertNotNull(response); + } + + @Test + void testFindInstitutionProduct() { + when(institutionRepository.find(any(), any())).thenReturn(new ArrayList<>()); + assertThrows(ResourceNotFoundException.class, () -> institutionConnectorImpl.findByExternalIdAndProductId("externalId", "productId")); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByExternalIdsAndProductId(List, String)} + */ + @Test + void testFindByExternalIdAndProductId() { + when(institutionRepository.find(org.mockito.Mockito.any(),org.mockito.Mockito.any())).thenReturn(new ArrayList<>()); + assertTrue(institutionConnectorImpl.findByExternalIdsAndProductId(new ArrayList<>(), "42").isEmpty()); + verify(institutionRepository).find( org.mockito.Mockito.any(),org.mockito.Mockito.any()); + } + + /** + * Method under test: {@link InstitutionConnectorImpl#findByExternalIdsAndProductId(List, String)} + */ + @Test + void testFindByExternalIdAndProductId2() { + when(institutionRepository.find( org.mockito.Mockito.any(),org.mockito.Mockito.any())) + .thenThrow(new InvalidRequestException("An error occurred", ".")); + List list = new ArrayList<>(); + assertThrows(InvalidRequestException.class, + () -> institutionConnectorImpl.findByExternalIdsAndProductId(list, "42")); + verify(institutionRepository).find(org.mockito.Mockito.any(),org.mockito.Mockito.any()); + } + + @Test + void findAndUpdateStatus() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + List onboardings = new ArrayList<>(); + onboardings.add(new OnboardingEntity()); + institutionEntity.setAttributes(new ArrayList<>()); + institutionEntity.setOnboarding(onboardings); + institutionEntity.setGeographicTaxonomies(new ArrayList<>()); + institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); + institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); + when(institutionRepository.findAndModify(any(), any(), any(), any())).thenReturn(institutionEntity); + institutionConnectorImpl.findAndUpdateStatus("institutionId", "tokenId", RelationshipState.ACTIVE); + assertNotNull(institutionEntity); + } + + @Test + void findAndUpdateStatus2() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + List onboardings = new ArrayList<>(); + onboardings.add(new OnboardingEntity()); + institutionEntity.setAttributes(new ArrayList<>()); + institutionEntity.setOnboarding(onboardings); + institutionEntity.setGeographicTaxonomies(new ArrayList<>()); + institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); + institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); + when(institutionRepository.findAndModify(any(), any(), any(), any())).thenReturn(institutionEntity); + institutionConnectorImpl.findAndUpdateStatus("institutionId", "tokenId", RelationshipState.DELETED); + assertNotNull(institutionEntity); + } + + @Test + void findAndRemoveOnboarding() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + List onboardings = new ArrayList<>(); + onboardings.add(new OnboardingEntity()); + institutionEntity.setAttributes(new ArrayList<>()); + institutionEntity.setOnboarding(onboardings); + institutionEntity.setGeographicTaxonomies(new ArrayList<>()); + institutionEntity.setPaymentServiceProvider(new PaymentServiceProviderEntity()); + institutionEntity.setDataProtectionOfficer(new DataProtectionOfficerEntity()); + when(institutionRepository.findAndModify(any(), any(), any(), any())).thenReturn(institutionEntity); + institutionConnectorImpl.findAndRemoveOnboarding("institutionId", new Onboarding()); + assertNotNull(institutionEntity); + } + + @Test + void updateOnboardedProductCreatedAt() { + // Given + String institutionIdMock = "InstitutionIdMock"; + String productIdMock = "ProductIdMock"; + OffsetDateTime createdAt = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); + InstitutionEntity updatedInstitutionMock = mockInstance(new InstitutionEntity()); + OnboardingEntity onboardingEntityMock = mockInstance(new OnboardingEntity()); + onboardingEntityMock.setProductId(productIdMock); + updatedInstitutionMock.setOnboarding(List.of(onboardingEntityMock)); + updatedInstitutionMock.setId(institutionIdMock); + updatedInstitutionMock.setInstitutionType(InstitutionType.PA); + updatedInstitutionMock.setOrigin(Origin.IPA); + when(institutionRepository.findAndModify(any(), any(), any(), any())) + .thenReturn(updatedInstitutionMock); + // When + Institution result = institutionConnectorImpl.updateOnboardedProductCreatedAt(institutionIdMock, productIdMock, createdAt); + // Then + assertNotNull(result); + assertEquals(result.getId(), institutionIdMock); + verify(institutionRepository, times(2)) + .findAndModify(queryArgumentCaptor.capture(), updateArgumentCaptor.capture(), findAndModifyOptionsArgumentCaptor.capture(), Mockito.eq(InstitutionEntity.class)); + List capturedQuery = queryArgumentCaptor.getAllValues(); + assertEquals(2, capturedQuery.size()); + assertSame(capturedQuery.get(0).getQueryObject().get(InstitutionEntity.Fields.id.name()), institutionIdMock); + assertSame(capturedQuery.get(1).getQueryObject().get(InstitutionEntity.Fields.id.name()), institutionIdMock); + assertEquals(2, updateArgumentCaptor.getAllValues().size()); + Update updateOnboardedProduct = updateArgumentCaptor.getAllValues().get(0); + Update updateInstitutionEntityUpdatedAt = updateArgumentCaptor.getAllValues().get(1); + assertEquals(1, updateOnboardedProduct.getArrayFilters().size()); + assertTrue(updateInstitutionEntityUpdatedAt.getArrayFilters().isEmpty()); + assertTrue(updateInstitutionEntityUpdatedAt.getUpdateObject().get("$set").toString().contains(InstitutionEntity.Fields.updatedAt.name())); + assertTrue(updateOnboardedProduct.getUpdateObject().get("$set").toString().contains("onboarding.$[current].createdAt") && + updateOnboardedProduct.getUpdateObject().get("$set").toString().contains("onboarding.$[current].updatedAt") && + updateOnboardedProduct.getUpdateObject().get("$set").toString().contains(createdAt.toString())); + verifyNoMoreInteractions(institutionRepository); + } + + @Test + void shouldFindOnboardingByIdAndProductId() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + institutionEntity.setOnboarding(List.of(new OnboardingEntity())); + when(institutionRepository.findByInstitutionIdAndOnboardingProductId(anyString(), anyString())) + .thenReturn(institutionEntity); + + List onboardings = institutionConnectorImpl + .findOnboardingByIdAndProductId("example", "example"); + + assertFalse(onboardings.isEmpty()); + } + + @Test + void shouldFindOnboardingByIdAndProductIdIfProductIsNull() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + institutionEntity.setOnboarding(List.of(new OnboardingEntity())); + when(institutionRepository.findById(anyString())) + .thenReturn(Optional.of(institutionEntity)); + + List onboardings = institutionConnectorImpl + .findOnboardingByIdAndProductId("example", null); + + assertFalse(onboardings.isEmpty()); + } + + @Test + void shouldFindByTaxCodeAndSubunitCode() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + + when(institutionRepository.find(any(), any())) + .thenReturn(List.of(institutionEntity)); + + List onboardings = institutionConnectorImpl + .findByTaxCodeAndSubunitCode("example", "example"); + + assertFalse(onboardings.isEmpty()); + } + + @Test + void shouldExistsByTaxCodeAndSubunitCodeAndProductAndStatusList() { + + when(institutionRepository.exists(any(), any())).thenReturn(Boolean.TRUE); + + Boolean exists = institutionConnectorImpl.existsByTaxCodeAndSubunitCodeAndProductAndStatusList("example", + "example", Optional.of("example"), List.of()); + + assertTrue(exists); + } + + @Test + void testRetrieveByProduct() { + String productId = "productId"; + Integer pageNumber = 0; + Integer sizeNumber = 5; + + BillingEntity billingEntity = createSimpleBillingEntity(); + DataProtectionOfficerEntity dataProtectionOfficerEntity = createSimpleDPOEntity(); + PaymentServiceProviderEntity paymentServiceProviderEntity = createSimpleServiceProviderEntity(); + OnboardingEntity onboardingEntity = createSimpleOnboardingEntity(productId, billingEntity); + InstitutionEntity institutionEntity = createSimpleInstitutionEntity(billingEntity, dataProtectionOfficerEntity, onboardingEntity, paymentServiceProviderEntity); + + BillingEntity billingEntity1 = createSimpleBillingEntity(); + DataProtectionOfficerEntity dataProtectionOfficerEntity1 = createSimpleDPOEntity(); + PaymentServiceProviderEntity paymentServiceProviderEntity1 = createSimpleServiceProviderEntity(); + OnboardingEntity onboardingEntity1 = createSimpleOnboardingEntity(productId, billingEntity1); + InstitutionEntity institutionEntity1 = createSimpleInstitutionEntity(billingEntity1, dataProtectionOfficerEntity1, onboardingEntity1, paymentServiceProviderEntity1); + + + List institutionEntityList = new ArrayList<>(); + institutionEntityList.add(institutionEntity1); + institutionEntityList.add(institutionEntity); + Page institutionEntityPage = new PageImpl<>(institutionEntityList); + + doReturn(institutionEntityPage) + .when(institutionRepository) + .find(any(), any(), any()); + + // When + List institutionsResult = institutionConnectorImpl.findInstitutionsByProductId(productId, + pageNumber, sizeNumber); + // Then + assertNotNull(institutionsResult); + assertEquals(2, institutionsResult.size()); + verify(institutionRepository, times(1)) + .find(queryArgumentCaptor.capture(), pageableArgumentCaptor.capture(), Mockito.eq(InstitutionEntity.class)); + + Pageable capturedPage = pageableArgumentCaptor.getValue(); + assertEquals(pageNumber, capturedPage.getPageNumber()); + verifyNoMoreInteractions(institutionRepository); + } + + @Test + void findBrokers() { + + final String productId = "productId"; + + BillingEntity billingEntity = createSimpleBillingEntity(); + DataProtectionOfficerEntity dataProtectionOfficerEntity = createSimpleDPOEntity(); + PaymentServiceProviderEntity paymentServiceProviderEntity = createSimpleServiceProviderEntity(); + OnboardingEntity onboardingEntity = createSimpleOnboardingEntity(productId, billingEntity); + InstitutionEntity institutionEntity = createSimpleInstitutionEntity(billingEntity, dataProtectionOfficerEntity, onboardingEntity, paymentServiceProviderEntity); + + BillingEntity billingEntity1 = createSimpleBillingEntity(); + DataProtectionOfficerEntity dataProtectionOfficerEntity1 = createSimpleDPOEntity(); + PaymentServiceProviderEntity paymentServiceProviderEntity1 = createSimpleServiceProviderEntity(); + OnboardingEntity onboardingEntity1 = createSimpleOnboardingEntity(productId, billingEntity1); + InstitutionEntity institutionEntity1 =createSimpleInstitutionEntity(billingEntity1, dataProtectionOfficerEntity1, onboardingEntity1, paymentServiceProviderEntity1); + + List institutionEntityList = List.of(institutionEntity, institutionEntity1); + + doReturn(institutionEntityList) + .when(institutionRepository) + .find(any(), any()); + + // When + List institutionsResult = institutionConnectorImpl.findBrokers(productId, InstitutionType.PT); + // Then + assertNotNull(institutionsResult); + assertEquals(2, institutionsResult.size()); + verify(institutionRepository, times(1)) + .find(queryArgumentCaptor.capture(), Mockito.eq(InstitutionEntity.class)); + verifyNoMoreInteractions(institutionRepository); + } + + private BillingEntity createSimpleBillingEntity() { + BillingEntity billingEntity = new BillingEntity(); + billingEntity.setPublicServices(true); + billingEntity.setRecipientCode("Recipient Code"); + billingEntity.setVatNumber("42"); + return billingEntity; + } + + private DataProtectionOfficerEntity createSimpleDPOEntity() { + DataProtectionOfficerEntity dataProtectionOfficerEntity = new DataProtectionOfficerEntity(); + dataProtectionOfficerEntity.setAddress("42 Main St"); + dataProtectionOfficerEntity.setEmail("jane.doe@example.org"); + dataProtectionOfficerEntity.setPec("Pec"); + return dataProtectionOfficerEntity; + } + + private PaymentServiceProviderEntity createSimpleServiceProviderEntity() { + PaymentServiceProviderEntity paymentServiceProviderEntity = new PaymentServiceProviderEntity(); + paymentServiceProviderEntity.setAbiCode("Abi Code"); + paymentServiceProviderEntity.setBusinessRegisterNumber("42"); + paymentServiceProviderEntity.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderEntity.setLegalRegisterNumber("42"); + paymentServiceProviderEntity.setVatNumberGroup(true); + return paymentServiceProviderEntity; + } + + private OnboardingEntity createSimpleOnboardingEntity(String productId, BillingEntity billingEntity) { + OnboardingEntity onboardingEntity = new OnboardingEntity(); + onboardingEntity.setBilling(billingEntity); + onboardingEntity.setClosedAt(null); + onboardingEntity.setContract("Contract"); + onboardingEntity.setCreatedAt(null); + onboardingEntity.setPricingPlan("Pricing Plan"); + onboardingEntity.setProductId(productId); + onboardingEntity.setStatus(RelationshipState.PENDING); + onboardingEntity.setTokenId("42"); + onboardingEntity.setUpdatedAt(null); + return onboardingEntity; + } + + private InstitutionEntity createSimpleInstitutionEntity(BillingEntity billingEntity, + DataProtectionOfficerEntity dpoEntity, + OnboardingEntity onboardingEntity, + PaymentServiceProviderEntity serviceProviderEntity) { + InstitutionEntity institutionEntity = new InstitutionEntity(); + institutionEntity.setAddress("42 Main St"); + institutionEntity.setAttributes(new ArrayList<>()); + institutionEntity.setBilling(billingEntity); + institutionEntity.setBusinessRegisterPlace("Business Register Place"); + institutionEntity.setCreatedAt(null); + institutionEntity.setDataProtectionOfficer(dpoEntity); + institutionEntity.setDescription("The characteristics of someone or something"); + institutionEntity.setDigitalAddress("42 Main St"); + institutionEntity.setExternalId("42"); + institutionEntity.setGeographicTaxonomies(new ArrayList<>()); + institutionEntity.setId("42"); + institutionEntity.setImported(true); + institutionEntity.setInstitutionType(InstitutionType.PA); + institutionEntity.setOnboarding(List.of(onboardingEntity)); + institutionEntity.setOrigin(Origin.MOCK); + institutionEntity.setOriginId("42"); + institutionEntity.setPaymentServiceProvider(serviceProviderEntity); + institutionEntity.setRea("Rea"); + institutionEntity.setShareCapital("Share Capital"); + institutionEntity.setSupportEmail("jane.doe@example.org"); + institutionEntity.setSupportPhone("6625550144"); + institutionEntity.setTaxCode("Tax Code"); + institutionEntity.setUpdatedAt(null); + institutionEntity.setZipCode("21654"); + return institutionEntity; + } + + @Test + void findByOriginOriginId() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + + when(institutionRepository.find(any(), any())) + .thenReturn(List.of(institutionEntity)); + + List onboardings = institutionConnectorImpl + .findByOriginAndOriginId("example", "example"); + + assertFalse(onboardings.isEmpty()); + } + + @Test + @DisplayName("Should return true when onboarding exists by filters") + void shouldReturnTrueWhenOnboardingExistsByFilters() { + // Given + VerifyOnboardingFilters filters = new VerifyOnboardingFilters("productId", "externalId", "taxCode", "origin", "originId", "subunitCode"); + filters.setValidRelationshipStates(List.of(RelationshipState.ACTIVE)); + when(institutionRepository.exists(any(Query.class), any())).thenReturn(true); + + // When + Boolean exists = institutionConnectorImpl.existsOnboardingByFilters(filters); + + // Then + assertTrue(exists); + } + + @Test + @DisplayName("Should return true when onboarding exists by filters when subunitCode is null") + void shouldReturnTrueWhenOnboardingExistsByFiltersAndSubunitCodeIsNull() { + // Given + VerifyOnboardingFilters filters = new VerifyOnboardingFilters("productId", "externalId", "taxCode", "origin", "originId", null); + filters.setValidRelationshipStates(List.of(RelationshipState.ACTIVE)); + when(institutionRepository.exists(any(Query.class), any())).thenReturn(true); + + // When + Boolean exists = institutionConnectorImpl.existsOnboardingByFilters(filters); + + // Then + assertTrue(exists); + } + + @Test + @DisplayName("Should return false when onboarding exists by filters when subunitCode is null") + void shouldReturnFalseWhenOnboardingExistsByFiltersAndSubunitCodeIsNull() { + // Given + VerifyOnboardingFilters filters = new VerifyOnboardingFilters("productId", "externalId", "taxCode", "origin", "originId", null); + filters.setValidRelationshipStates(List.of(RelationshipState.ACTIVE)); + when(institutionRepository.exists(any(Query.class), any())).thenReturn(false); + + // When + Boolean exists = institutionConnectorImpl.existsOnboardingByFilters(filters); + + // Then + assertFalse(exists); + } + + @Test + @DisplayName("Should return false when onboarding does not exist by filters") + void shouldReturnFalseWhenOnboardingDoesNotExistByFilters() { + // Given + VerifyOnboardingFilters filters = new VerifyOnboardingFilters("productId", "externalId", "taxCode", "origin", "originId", "subunitCode"); + filters.setValidRelationshipStates(List.of(RelationshipState.ACTIVE)); + + when(institutionRepository.exists(any(Query.class), any())).thenReturn(false); + + // When + Boolean exists = institutionConnectorImpl.existsOnboardingByFilters(filters); + + // Then + assertFalse(exists); + } + @Test + public void testFindAndDeleteOnboarding() { + + String institutionId = UUID.randomUUID().toString(); + String productId = "prod-io"; + + OnboardingEntity mockOnboarding = new OnboardingEntity(); + mockOnboarding.setProductId(productId); + mockOnboarding.setUpdatedAt(OffsetDateTime.now()); + mockOnboarding.setStatus(RelationshipState.ACTIVE); + + InstitutionEntity mockEntity = new InstitutionEntity(); + mockEntity.setId(institutionId); + mockEntity.setOnboarding(Collections.singletonList(mockOnboarding)); + + when(institutionRepository.findAndModify(any(Query.class), any(Update.class), + any(FindAndModifyOptions.class), eq(InstitutionEntity.class))) + .thenReturn(mockEntity); + + institutionConnectorImpl.findAndDeleteOnboarding(institutionId, productId); + + verify(institutionRepository, times(1)).findAndModify(any(Query.class), any(Update.class), any(FindAndModifyOptions.class), eq(InstitutionEntity.class)); + assertNotNull(mockEntity); + } +} \ No newline at end of file diff --git a/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepositoryTest.java b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepositoryTest.java new file mode 100644 index 0000000..62a1be8 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/InstitutionRepositoryTest.java @@ -0,0 +1,71 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.connector.dao.config.DaoConfigTest; +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.AttributesEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.GeoTaxonomyEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardingEntity; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.test.context.ContextConfiguration; + +import java.time.OffsetDateTime; +import java.util.List; + +import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; +import static it.pagopa.selfcare.commons.utils.TestUtils.reflectionEqualsByName; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@DataMongoTest +@EnableAutoConfiguration +@ContextConfiguration(classes = {InstitutionEntity.class, OnboardingEntity.class, InstitutionRepository.class, DaoConfigTest.class}) +class InstitutionRepositoryTest { + + @Autowired + private InstitutionRepository repository; + + + @AfterEach + void clear() { + repository.deleteAll(); + } + + @Test + void create() { + // Given + InstitutionEntity institutionEntity = mockInstance(new InstitutionEntity()); + institutionEntity.setOrigin(Origin.IPA); + institutionEntity.setInstitutionType(InstitutionType.PA); + institutionEntity.setCreatedAt(OffsetDateTime.parse("2020-11-01T02:15:30Z")); + institutionEntity.setUpdatedAt(OffsetDateTime.parse("2021-12-12T02:15:30Z")); + OnboardingEntity onboardingEntity1 = mockInstance(new OnboardingEntity(), 1); + onboardingEntity1.setProductId("prod-io"); + onboardingEntity1.setStatus(RelationshipState.ACTIVE); + onboardingEntity1.setCreatedAt(OffsetDateTime.parse("2020-11-01T02:15:30Z")); + onboardingEntity1.setUpdatedAt(null); + onboardingEntity1.setClosedAt(null); + OnboardingEntity onboardingEntity2 = mockInstance(new OnboardingEntity(), 2); + onboardingEntity1.setProductId("prod-pagopa"); + onboardingEntity2.setStatus(RelationshipState.ACTIVE); + onboardingEntity2.setCreatedAt(OffsetDateTime.parse("2021-12-12T02:15:30Z")); + onboardingEntity2.setUpdatedAt(null); + onboardingEntity2.setClosedAt(null); + institutionEntity.setOnboarding(List.of(onboardingEntity1, onboardingEntity2)); + institutionEntity.setGeographicTaxonomies(List.of(mockInstance(new GeoTaxonomyEntity()))); + institutionEntity.setAttributes(List.of(mockInstance(new AttributesEntity()))); + // When + InstitutionEntity savedInstitutionEntity = repository.save(institutionEntity); + // Then + assertFalse(repository.findAll().isEmpty()); + assertNotNull(savedInstitutionEntity); + reflectionEqualsByName(institutionEntity, savedInstitutionEntity); + } + +} diff --git a/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImplTest.java b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImplTest.java new file mode 100644 index 0000000..79a58c6 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/MongoCustomConnectorImplTest.java @@ -0,0 +1,139 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import com.mongodb.client.result.UpdateResult; +import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionAggregation; +import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionFilter; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.data.domain.Pageable; +import org.springframework.data.mongodb.core.FindAndModifyOptions; +import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.AggregationResults; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.data.mongodb.core.query.UpdateDefinition; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@ExtendWith(SpringExtension.class) +class MongoCustomConnectorImplTest { + @InjectMocks + private MongoCustomConnectorImpl mongoCustomConnector; + + @Mock + private MongoOperations mongoOperations; + + @Test + void testExist() { + when(mongoOperations.exists(any(), (Class) any())).thenReturn(true); + Query query = new Query(); + assertTrue(mongoCustomConnector.exists(query, Object.class)); + } + + @Test + void testCount() { + when(mongoOperations.count(any(), (Class) any())).thenReturn(10L); + Query query = new Query(); + assertEquals(10L, mongoCustomConnector.count(query, Object.class)); + } + + + @Test + void testFind() { + List list = new ArrayList<>(); + when(mongoOperations.find(any(), any())).thenReturn(list); + Query query = new Query(); + assertNotNull(mongoCustomConnector.find(query, Object.class)); + } + + @Test + void testFind2() { + List list = new ArrayList<>(); + when(mongoOperations.find(any(), any())).thenReturn(list); + Query query = new Query(); + Pageable page = Pageable.ofSize(3); + assertNotNull(mongoCustomConnector.find(query, page, Object.class)); + } + + @Test + void testFind3() { + Object a = new Object(); + List list = new ArrayList<>(); + list.add(a); + when(mongoOperations.count(any(), (Class) any())).thenReturn(1L); + when(mongoOperations.find(any(), any())).thenReturn(list); + Query query = new Query(); + Pageable page = Pageable.ofSize(3); + assertNotNull(mongoCustomConnector.find(query, page, Object.class)); + } + + @Test + void findAndModify() { + Object a = new Object(); + List list = new ArrayList<>(); + list.add(a); + when(mongoOperations.findAndModify(any(), any(), any(), (Class) any())).thenReturn(list); + Query query = new Query(); + UpdateDefinition updateDefinition = new Update(); + FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(false).returnNew(true); + assertNotNull(mongoCustomConnector.findAndModify(query, updateDefinition, findAndModifyOptions, Object.class)); + } + + @Test + void findUserAndInstitution() { + AggregationResults results = mock(AggregationResults.class); + when(results.getUniqueMappedResult()).thenReturn(new Object()); + when(mongoOperations.aggregate((Aggregation) any(), anyString(), any())).thenReturn(results); + UserInstitutionFilter filter = new UserInstitutionFilter(); + filter.setUserId("userId"); + Assertions.assertDoesNotThrow(() -> mongoCustomConnector.findUserInstitutionAggregation(filter, UserInstitutionAggregation.class)); + + } + + @Test + void findUserAndInstitutionWithInstitutionId() { + AggregationResults results = mock(AggregationResults.class); + when(results.getUniqueMappedResult()).thenReturn(new Object()); + when(mongoOperations.aggregate((Aggregation) any(), anyString(), any())).thenReturn(results); + UserInstitutionFilter filter = new UserInstitutionFilter(); + filter.setUserId("userId"); + filter.setInstitutionId("institutionId"); + Assertions.assertDoesNotThrow(() -> mongoCustomConnector.findUserInstitutionAggregation(filter, UserInstitutionAggregation.class)); + + } + + @Test + void findUserAndInstitutionWithExternalId() { + AggregationResults results = mock(AggregationResults.class); + when(results.getUniqueMappedResult()).thenReturn(new Object()); + when(mongoOperations.aggregate((Aggregation) any(), anyString(), any())).thenReturn(results); + UserInstitutionFilter filter = new UserInstitutionFilter(); + filter.setUserId("userId"); + filter.setExternalId("externalId"); + Assertions.assertDoesNotThrow(() -> mongoCustomConnector.findUserInstitutionAggregation(filter, UserInstitutionAggregation.class)); + + } + + @Test + void updateMulti() { + UpdateResult updateResult = mock(UpdateResult.class); + when(mongoOperations.updateMulti(any(), any(), (Class) any())).thenReturn(updateResult); + Query query = new Query(); + UpdateDefinition updateDefinition = new Update(); + assertNotNull(mongoCustomConnector.updateMulti(query, updateDefinition, Object.class)); + } + +} + diff --git a/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImplTest.java b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImplTest.java new file mode 100644 index 0000000..43d6f95 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/PecNotificationConnectorImplTest.java @@ -0,0 +1,107 @@ +package it.pagopa.selfcare.mscore.connector.dao; + +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.context.ContextConfiguration; + +import it.pagopa.selfcare.mscore.connector.dao.model.PecNotificationEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.mapper.PecNotificationEntityMapper; +import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; + +@ContextConfiguration(classes = {PecNotificationConnectorImpl.class}) +@ExtendWith(MockitoExtension.class) +class PecNotificationConnectorImplTest { + + @Mock + private PecNotificationRepository repository; + + @Mock + private PecNotificationEntityMapper pecNotificationMapper; + + @InjectMocks + private PecNotificationConnectorImpl pecNotificationConnector; + + private String institutionId; + private String productId; + private PecNotificationEntity pecNotificationEntity; + private PecNotification pecNotification; + + @BeforeEach + void setUp() { + institutionId = UUID.randomUUID().toString(); + productId = "prod-io"; + pecNotificationEntity = new PecNotificationEntity(); + pecNotificationEntity.setInstitutionId(institutionId); + pecNotificationEntity.setProductId(productId); + pecNotification = new PecNotification(); + } + + @Test + void findAndDeletePecNotification_success() { + when(repository.find(any(), eq(PecNotificationEntity.class))) + .thenReturn(Collections.singletonList(pecNotificationEntity)); + + boolean result = pecNotificationConnector.findAndDeletePecNotification(institutionId, productId); + + assertTrue(result); + verify(repository, times(1)).delete(pecNotificationEntity); + } + + @Test + void findAndDeletePecNotification_multipleEntries() { + when(repository.find(any(), eq(PecNotificationEntity.class))) + .thenReturn(List.of(pecNotificationEntity, pecNotificationEntity)); + + boolean result = pecNotificationConnector.findAndDeletePecNotification(institutionId, productId); + + assertFalse(result); + verify(repository, never()).delete(any()); + } + + @Test + void findAndDeletePecNotification_notExist() { + List pecNotificationList = Collections.emptyList(); + when(repository.find(any(), eq(PecNotificationEntity.class))) + .thenReturn(pecNotificationList); + + boolean result = pecNotificationConnector.findAndDeletePecNotification(institutionId, productId); + + assertFalse(result); + verify(repository, never()).delete(any()); + } + + @Test + void insertPecNotification_success() { + when(pecNotificationMapper.convertToPecNotificationEntity(pecNotification)).thenReturn(pecNotificationEntity); + when(repository.existsByInstitutionIdAndProductId(any(), any())).thenReturn(false); + + boolean result = pecNotificationConnector.insertPecNotification(pecNotification); + + assertTrue(result); + verify(repository, times(1)).insert(pecNotificationEntity); + } + + @Test + void insertPecNotification_alreadyExists() { + when(pecNotificationMapper.convertToPecNotificationEntity(pecNotification)).thenReturn(pecNotificationEntity); + when(repository.existsByInstitutionIdAndProductId(any(), any())).thenReturn(true); + + boolean result = pecNotificationConnector.insertPecNotification(pecNotification); + + assertFalse(result); + verify(repository, never()).insert(pecNotificationEntity); + + } + +} diff --git a/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfigTest.java b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfigTest.java new file mode 100644 index 0000000..aef5628 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/DaoConfigTest.java @@ -0,0 +1,31 @@ +package it.pagopa.selfcare.mscore.connector.dao.config; + +import com.mongodb.assertions.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Import; +import org.springframework.data.mongodb.MongoDatabaseFactory; +import org.springframework.test.context.junit.jupiter.SpringExtension; + + +@ExtendWith(SpringExtension.class) +@TestConfiguration +@Import(DaoConfig.class) +public class DaoConfigTest { + @InjectMocks + private DaoConfig daoConfig; + + @Mock + private MongoDatabaseFactory mongoDatabaseFactory; + + + @Test + void testCustomConversions() { + Assertions.assertNotNull(daoConfig.customConversions()); + } + +} + diff --git a/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverterTest.java b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverterTest.java new file mode 100644 index 0000000..e7e5b52 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/OffsetDateTimeToStringConverterTest.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.connector.dao.config; + +import java.time.OffsetDateTime; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@ExtendWith(SpringExtension.class) +class OffsetDateTimeToStringConverterTest { + + @Test + void testConvert() { + String offsetDateTime = new OffsetDateTimeToStringConverter().convert(OffsetDateTime.now()); + Assertions.assertDoesNotThrow(() -> offsetDateTime); + } +} + diff --git a/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverterTest.java b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverterTest.java new file mode 100644 index 0000000..fe89941 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/config/StringToOffsetDateTimeConverterTest.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.connector.dao.config; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.time.OffsetDateTime; + +class StringToOffsetDateTimeConverterTest { + /** + * Method under test: {@link StringToOffsetDateTimeConverter#convert(String)} + */ + @Test + void testConvert() { + OffsetDateTime offsetDateTime = new StringToOffsetDateTimeConverter().convert("2011-12-03T10:15:30+01:00"); + Assertions.assertDoesNotThrow(() -> offsetDateTime); + } +} + diff --git a/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserMapperTest.java b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserMapperTest.java new file mode 100644 index 0000000..9c401f2 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/UserMapperTest.java @@ -0,0 +1,210 @@ +package it.pagopa.selfcare.mscore.connector.dao.model.mapper; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.connector.dao.model.UserEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.OnboardedProductEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.UserBindingEntity; +import it.pagopa.selfcare.mscore.constant.Env; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedUser; +import it.pagopa.selfcare.mscore.model.user.UserBinding; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class UserMapperTest { + + private final UserEntityMapper userMapper = new UserEntityMapperImpl(); + /** + * Method under test: {@link UserEntityMapper#toOnboardedUser(UserEntity)} + */ + @Test + void testToOnboardedUser() { + UserEntity userEntity = new UserEntity(); + ArrayList userBindingEntityList = new ArrayList<>(); + userEntity.setBindings(userBindingEntityList); + userEntity.setCreatedAt(null); + userEntity.setId("42"); + userEntity.setUpdatedAt(null); + OnboardedUser actualToOnboardedUserResult = userMapper.toOnboardedUser(userEntity); + assertEquals("42", actualToOnboardedUserResult.getId()); + assertNull(actualToOnboardedUserResult.getCreatedAt()); + } + + /** + * Method under test: {@link UserEntityMapper#toOnboardedUser(UserEntity)} + */ + @Test + void testToOnboardedUser2() { + UserEntity userEntity = new UserEntity(); + userEntity.setCreatedAt(null); + userEntity.setId("42"); + userEntity.setUpdatedAt(null); + userEntity.setBindings(null); + OnboardedUser actualToOnboardedUserResult = userMapper.toOnboardedUser(userEntity); + assertEquals("42", actualToOnboardedUserResult.getId()); + assertNull(actualToOnboardedUserResult.getCreatedAt()); + } + + /** + * Method under test: {@link UserEntityMapper#toOnboardedUser(UserEntity)} + */ + @Test + void testToOnboardedUser3() { + UserBindingEntity userBindingEntity = new UserBindingEntity(); + userBindingEntity.setProducts(null); + + UserBindingEntity userBindingEntity1 = new UserBindingEntity(); + userBindingEntity1.setProducts(null); + + OnboardedProductEntity onboardedProductEntity = new OnboardedProductEntity(); + onboardedProductEntity.setContract("Contract"); + onboardedProductEntity.setCreatedAt(null); + onboardedProductEntity.setEnv(Env.ROOT); + onboardedProductEntity.setProductId("42"); + onboardedProductEntity.setProductRole("Product Role"); + onboardedProductEntity.setRelationshipId("42"); + onboardedProductEntity.setRole(PartyRole.MANAGER); + onboardedProductEntity.setStatus(RelationshipState.PENDING); + onboardedProductEntity.setTokenId("42"); + onboardedProductEntity.setUpdatedAt(null); + + ArrayList onboardedProductEntityList = new ArrayList<>(); + onboardedProductEntityList.add(onboardedProductEntity); + + UserBindingEntity userBindingEntity2 = new UserBindingEntity(); + userBindingEntity2.setProducts(onboardedProductEntityList); + + ArrayList userBindingEntityList = new ArrayList<>(); + userBindingEntityList.add(new UserBindingEntity()); + userBindingEntityList.add(userBindingEntity); + userBindingEntityList.add(userBindingEntity1); + userBindingEntityList.add(userBindingEntity2); + + UserEntity userEntity = new UserEntity(); + userEntity.setCreatedAt(null); + userEntity.setId("42"); + userEntity.setUpdatedAt(null); + userEntity.setBindings(userBindingEntityList); + OnboardedUser actualToOnboardedUserResult = userMapper.toOnboardedUser(userEntity); + List bindings = actualToOnboardedUserResult.getBindings(); + assertEquals(4, bindings.size()); + assertEquals("42", actualToOnboardedUserResult.getId()); + assertNull(actualToOnboardedUserResult.getCreatedAt()); + UserBinding getResult = bindings.get(3); + assertEquals(1, getResult.getProducts().size()); + assertNull(bindings.get(0).getInstitutionId()); + assertNull(getResult.getInstitutionId()); + assertNull(bindings.get(1).getInstitutionId()); + assertNull(bindings.get(2).getInstitutionId()); + } + + /** + * Method under test: {@link UserEntityMapper#toOnboardedUser(UserEntity)} + */ + @Test + void testToOnboardedUser4() { + List userBindingEntityList = new ArrayList<>(); + + UserEntity userEntity = new UserEntity(); + userEntity.setCreatedAt(null); + userEntity.setId("42"); + userEntity.setUpdatedAt(null); + userEntity.setBindings(userBindingEntityList); + OnboardedUser actualToOnboardedUserResult = userMapper.toOnboardedUser(userEntity); + assertTrue(actualToOnboardedUserResult.getBindings().isEmpty()); + assertEquals("42", actualToOnboardedUserResult.getId()); + assertNull(actualToOnboardedUserResult.getCreatedAt()); + } + + /** + * Method under test: {@link UserEntityMapper#toUserEntity(OnboardedUser)} + */ + @Test + void testToUserEntity() { + assertNull(userMapper.toUserEntity(new OnboardedUser()).getCreatedAt()); + } + + /** + * Method under test: {@link UserEntityMapper#toUserEntity(OnboardedUser)} + */ + @Test + void testToUserEntity2() { + OnboardedUser onboardedUser = new OnboardedUser(); + ArrayList userBindingList = new ArrayList<>(); + onboardedUser.setBindings(userBindingList); + onboardedUser.setId(null); + UserEntity actualToUserEntityResult = userMapper.toUserEntity(onboardedUser); + assertNull(actualToUserEntityResult.getCreatedAt()); + } + + /** + * Method under test: {@link UserEntityMapper#toUserEntity(OnboardedUser)} + */ + @Test + void testToUserEntity3() { + UserBinding userBinding = new UserBinding(); + userBinding.setProducts(null); + + UserBinding userBinding1 = new UserBinding(); + userBinding1.setProducts(null); + + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract("Contract"); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole("Product Role"); + onboardedProduct.setRelationshipId("42"); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setTokenId("42"); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding2 = new UserBinding(); + userBinding2.setProducts(onboardedProductList); + + ArrayList userBindingList = new ArrayList<>(); + userBindingList.add(new UserBinding()); + userBindingList.add(userBinding); + userBindingList.add(userBinding1); + userBindingList.add(userBinding2); + + OnboardedUser onboardedUser = new OnboardedUser(); + onboardedUser.setBindings(userBindingList); + onboardedUser.setId(null); + UserEntity actualToUserEntityResult = userMapper.toUserEntity(onboardedUser); + List bindings = actualToUserEntityResult.getBindings(); + assertEquals(4, bindings.size()); + assertNull(actualToUserEntityResult.getCreatedAt()); + UserBindingEntity getResult = bindings.get(3); + assertEquals(1, getResult.getProducts().size()); + assertNull(bindings.get(2).getInstitutionId()); + assertNull(getResult.getInstitutionId()); + assertNull(bindings.get(0).getInstitutionId()); + assertNull(bindings.get(1).getInstitutionId()); + } + + /** + * Method under test: {@link UserEntityMapper#toUserEntity(OnboardedUser)} + */ + @Test + void testToUserEntity4() { + OnboardedUser onboardedUser = new OnboardedUser(); + onboardedUser.setBindings(null); + onboardedUser.setId("foo"); + UserEntity actualToUserEntityResult = userMapper.toUserEntity(onboardedUser); + assertEquals("foo", actualToUserEntityResult.getId()); + assertNull(actualToUserEntityResult.getCreatedAt()); + } +} + diff --git a/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/utils/TestUtils.java b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/utils/TestUtils.java new file mode 100644 index 0000000..f1c1500 --- /dev/null +++ b/apps/institution-ms/connector/dao/src/test/java/it/pagopa/selfcare/mscore/connector/dao/utils/TestUtils.java @@ -0,0 +1,155 @@ +package it.pagopa.selfcare.mscore.connector.dao.utils; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.connector.dao.model.InstitutionEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.BillingEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.DataProtectionOfficerEntity; +import it.pagopa.selfcare.mscore.connector.dao.model.inner.PaymentServiceProviderEntity; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.TokenType; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.Token; + +import java.util.ArrayList; + +public class TestUtils { + public static PaymentServiceProvider createSimplePaymentServiceProvider() { + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + return paymentServiceProvider; + } + + public static DataProtectionOfficer createSimpleDataProtectionOfficer() { + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + return dataProtectionOfficer; + } + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + + + public static InstitutionUpdate createSimpleInstitutionUpdatePA() { + + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setAddress("42 Main St"); + institutionUpdate.setBusinessRegisterPlace("Business Register Place"); + institutionUpdate.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); + institutionUpdate.setDescription("The characteristics of someone or something"); + institutionUpdate.setDigitalAddress("42 Main St"); + institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); + institutionUpdate.setImported(true); + institutionUpdate.setInstitutionType(InstitutionType.PA); + institutionUpdate.setPaymentServiceProvider(createSimplePaymentServiceProvider()); + institutionUpdate.setRea("Rea"); + institutionUpdate.setShareCapital("Share Capital"); + institutionUpdate.setSupportEmail("jane.doe@example.org"); + institutionUpdate.setSupportPhone("6625550144"); + institutionUpdate.setTaxCode("Tax Code"); + institutionUpdate.setZipCode("21654"); + return institutionUpdate; + } + + public static BillingEntity createSimpleBillingEntity() { + BillingEntity billingEntity = new BillingEntity(); + billingEntity.setPublicServices(true); + billingEntity.setRecipientCode("Recipient Code"); + billingEntity.setVatNumber("42"); + return billingEntity; + } + + public static DataProtectionOfficerEntity createSimpleDataProtectionOfficerEntity() { + DataProtectionOfficerEntity dataProtectionOfficerEntity = new DataProtectionOfficerEntity(); + dataProtectionOfficerEntity.setAddress("42 Main St"); + dataProtectionOfficerEntity.setEmail("jane.doe@example.org"); + dataProtectionOfficerEntity.setPec("Pec"); + return dataProtectionOfficerEntity; + } + + public static PaymentServiceProviderEntity createSimplePaymentServiceProviderEntity() { + PaymentServiceProviderEntity paymentServiceProviderEntity = new PaymentServiceProviderEntity(); + paymentServiceProviderEntity.setAbiCode("Abi Code"); + paymentServiceProviderEntity.setBusinessRegisterNumber("42"); + paymentServiceProviderEntity.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderEntity.setLegalRegisterNumber("42"); + paymentServiceProviderEntity.setVatNumberGroup(true); + return paymentServiceProviderEntity; + } + + public static InstitutionEntity createSimpleInstitutionEntity() { + InstitutionEntity institutionEntity = new InstitutionEntity(); + institutionEntity.setAddress("42 Main St"); + institutionEntity.setAttributes(new ArrayList<>()); + institutionEntity.setBilling(createSimpleBillingEntity()); + institutionEntity.setBusinessRegisterPlace("Business Register Place"); + institutionEntity.setCreatedAt(null); + institutionEntity.setDataProtectionOfficer(createSimpleDataProtectionOfficerEntity()); + institutionEntity.setDescription("The characteristics of someone or something"); + institutionEntity.setDigitalAddress("42 Main St"); + institutionEntity.setExternalId("42"); + institutionEntity.setGeographicTaxonomies(new ArrayList<>()); + institutionEntity.setId("42"); + institutionEntity.setImported(true); + institutionEntity.setInstitutionType(InstitutionType.PA); + institutionEntity.setOnboarding(new ArrayList<>()); + institutionEntity.setOrigin(Origin.MOCK); + institutionEntity.setOriginId("42"); + institutionEntity.setPaymentServiceProvider(createSimplePaymentServiceProviderEntity()); + institutionEntity.setRea("Rea"); + institutionEntity.setShareCapital("Share Capital"); + institutionEntity.setSupportEmail("jane.doe@example.org"); + institutionEntity.setSupportPhone("6625550144"); + institutionEntity.setTaxCode("Tax Code"); + institutionEntity.setUpdatedAt(null); + institutionEntity.setZipCode("21654"); + return institutionEntity; + } + + public static Billing createSimpleBilling() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + return billing; + } + + public static Onboarding createSimpleOnboarding() { + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(createSimpleBilling()); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + return onboarding; + } + + public static Token createSimpleToken(InstitutionUpdate institutionUpdate) { + Token token = new Token(); + token.setChecksum("Checksum"); + token.setDeletedAt(null); + token.setContractSigned("Contract Signed"); + token.setContractTemplate("Contract Template"); + token.setCreatedAt(null); + token.setExpiringDate(null); + token.setId("42"); + token.setInstitutionId("42"); + token.setInstitutionUpdate(institutionUpdate); + token.setProductId("42"); + token.setStatus(RelationshipState.PENDING); + token.setType(TokenType.INSTITUTION); + token.setUpdatedAt(null); + token.setUsers(new ArrayList<>()); + return token; + } +} diff --git a/apps/institution-ms/connector/email/pom.xml b/apps/institution-ms/connector/email/pom.xml new file mode 100644 index 0000000..976bae7 --- /dev/null +++ b/apps/institution-ms/connector/email/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + selc-ms-core-connector + it.pagopa.selfcare + 1.0-SNAPSHOT + + + + selc-ms-core-connector-email + + + + org.springframework.boot + spring-boot-starter-mail + + + it.pagopa.selfcare + selc-ms-core-connector-azure-storage + + + org.apache.commons + commons-text + 1.10.0 + compile + + + + \ No newline at end of file diff --git a/apps/institution-ms/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImpl.java b/apps/institution-ms/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImpl.java new file mode 100644 index 0000000..947c749 --- /dev/null +++ b/apps/institution-ms/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImpl.java @@ -0,0 +1,100 @@ +package it.pagopa.selfcare.mscore.connector.email; + +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.api.EmailConnector; +import it.pagopa.selfcare.mscore.api.FileStorageConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.model.onboarding.MailTemplate; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.text.StringSubstitutor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.stereotype.Service; +import org.springframework.util.FileCopyUtils; +import org.springframework.util.StringUtils; + +import javax.activation.DataSource; +import javax.mail.internet.MimeMessage; +import javax.mail.util.ByteArrayDataSource; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import static it.pagopa.selfcare.mscore.constant.GenericError.ERROR_DURING_COMPRESS_FILE; +import static it.pagopa.selfcare.mscore.constant.GenericError.ERROR_DURING_SEND_MAIL; + +@Slf4j +@Service +public class EmailConnectorImpl implements EmailConnector { + + private final JavaMailSender mailSender; + private final FileStorageConnector fileStorageConnector; + private final ObjectMapper mapper; + private final CoreConfig coreConfig; + + @Autowired + public EmailConnectorImpl(JavaMailSender javaMailSender, + FileStorageConnector fileStorageConnector, + ObjectMapper mapper, + CoreConfig coreConfig) { + this.mailSender = javaMailSender; + this.fileStorageConnector = fileStorageConnector; + this.mapper = mapper; + this.coreConfig = coreConfig; + } + + @Override + public void sendMail(String templateName, List destinationMail, File pdf, String productName, Map mailParameters, String fileName) { + try { + log.info("START - sendMail to {}, for product {}", destinationMail, productName); + String template = fileStorageConnector.getTemplateFile(templateName); + MailTemplate mailTemplate = mapper.readValue(template, MailTemplate.class); + String html = StringSubstitutor.replace(mailTemplate.getBody(), mailParameters); + log.trace("sendMessage start"); + MimeMessage mimeMessage = mailSender.createMimeMessage(); + + MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8"); + + message.setSubject(productName + ": " + mailTemplate.getSubject()); + message.setFrom(coreConfig.getSenderMail()); + message.setTo(destinationMail.toArray(new String[0])); + message.setText(html, true); + if(pdf != null && StringUtils.hasText(fileName)) { + byte[] bytes = zipBytes(fileName, pdf); + DataSource source = new ByteArrayDataSource(bytes, "application/zip"); + message.addAttachment(fileName + ".zip", source); + log.info("sendMail to: {}, attached file: {}, for product {}", destinationMail, pdf.getName(), productName); + } + mailSender.send(mimeMessage); + log.info("END - sendMail to {}, for product {}", destinationMail, productName); + } catch (Exception e) { + log.error(ERROR_DURING_SEND_MAIL.getMessage() + ":", e.getMessage(), e); + throw new MsCoreException(ERROR_DURING_SEND_MAIL.getMessage(), ERROR_DURING_SEND_MAIL.getCode()); + } + log.trace("sendMessage end"); + } + + public byte[] zipBytes(String filename, File pdf) { + try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ZipOutputStream zos = new ZipOutputStream(baos)) { + ZipEntry entry = new ZipEntry(filename); + byte[] pdfToByte = FileCopyUtils.copyToByteArray(pdf); + zos.putNextEntry(entry); + zos.write(pdfToByte); + zos.closeEntry(); + zos.finish(); + return baos.toByteArray(); + } catch (IOException e) { + log.error(String.format(ERROR_DURING_COMPRESS_FILE.getMessage(), filename), e); + throw new MsCoreException(String.format(ERROR_DURING_COMPRESS_FILE.getMessage(), filename), + ERROR_DURING_COMPRESS_FILE.getCode()); + } + } +} + diff --git a/apps/institution-ms/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/config/EmailBaseConfig.java b/apps/institution-ms/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/config/EmailBaseConfig.java new file mode 100644 index 0000000..9f2b4da --- /dev/null +++ b/apps/institution-ms/connector/email/src/main/java/it/pagopa/selfcare/mscore/connector/email/config/EmailBaseConfig.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.connector.email.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@PropertySource("classpath:config/email.properties") +public class EmailBaseConfig { +} diff --git a/apps/institution-ms/connector/email/src/main/resources/config/email.properties b/apps/institution-ms/connector/email/src/main/resources/config/email.properties new file mode 100644 index 0000000..a5fe663 --- /dev/null +++ b/apps/institution-ms/connector/email/src/main/resources/config/email.properties @@ -0,0 +1,7 @@ +spring.mail.host=${SMTP_HOST} +spring.mail.port=${SMTP_PORT} +spring.mail.username=${SMTP_USR} +spring.mail.password=${SMTP_PSW} +spring.mail.properties.mail.smtp.auth=${SMTP_AUTH:true} +spring.mail.properties.mail.smtp.starttls.enable=${SMTP_SSL:true} +spring.mail.protocol=${MAIL_SERVER_PROTOCOL:smtps} \ No newline at end of file diff --git a/apps/institution-ms/connector/email/src/test/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImplTest.java b/apps/institution-ms/connector/email/src/test/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImplTest.java new file mode 100644 index 0000000..6cb7d39 --- /dev/null +++ b/apps/institution-ms/connector/email/src/test/java/it/pagopa/selfcare/mscore/connector/email/EmailConnectorImplTest.java @@ -0,0 +1,101 @@ +package it.pagopa.selfcare.mscore.connector.email; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.api.FileStorageConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.model.onboarding.MailTemplate; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import javax.mail.internet.MimeMessage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.*; + +@ExtendWith(SpringExtension.class) +class EmailConnectorImplTest { + + @InjectMocks + private EmailConnectorImpl emailConnector; + + @Mock + private ObjectMapper mapper; + + @Mock + private FileStorageConnector fileStorageConnector; + + @Mock + private JavaMailSender javaMailSender; + + @Mock + private CoreConfig coreConfig; + + @Test + void testSendMail() throws IOException { + when(fileStorageConnector.getTemplateFile(any())).thenReturn("templateFile"); + MailTemplate mailTemplate = new MailTemplate(); + Path path = Files.createTempFile("contratto", ".pdf"); + File pdf = new File(path.toUri()); + String fileName = "text.pdf"; + byte [] bytes = emailConnector.zipBytes(fileName, pdf); + assertNotNull(bytes); + mailTemplate.setBody("body"); + mailTemplate.setSubject("subject"); + when(mapper.readValue("templateFile", MailTemplate.class)).thenReturn(mailTemplate); + + MimeMessage mimeMessage = mock(MimeMessage.class); + when(javaMailSender.createMimeMessage()).thenReturn(mimeMessage); + when(coreConfig.getSenderMail()).thenReturn("senderMail"); + + ArrayList destinationMail = new ArrayList<>(); + + Assertions.assertDoesNotThrow(() -> emailConnector.sendMail("Template Name", destinationMail, pdf, "Product Name", new HashMap<>(), "foo.txt")); + } + + @Test + void testSendMailWithoutAttachment() throws JsonProcessingException { + when(fileStorageConnector.getTemplateFile(any())).thenReturn("templateFile"); + MailTemplate mailTemplate = new MailTemplate(); + mailTemplate.setBody("body"); + mailTemplate.setSubject("subject"); + when(mapper.readValue("templateFile", MailTemplate.class)).thenReturn(mailTemplate); + + MimeMessage mimeMessage = mock(MimeMessage.class); + when(javaMailSender.createMimeMessage()).thenReturn(mimeMessage); + when(coreConfig.getSenderMail()).thenReturn("senderMail"); + + ArrayList destinationMail = new ArrayList<>(); + Assertions.assertDoesNotThrow(() -> emailConnector.sendMail("Template Name", destinationMail, null, "Product Name", new HashMap<>(), null)); + } + + @Test + void testSendMail2() { + FileStorageConnector fileStorageConnector = mock(FileStorageConnector.class); + when(fileStorageConnector.getTemplateFile(any())).thenReturn("Template File"); + ObjectMapper mapper = new ObjectMapper(); + EmailConnectorImpl emailConnectorImpl = new EmailConnectorImpl(null, fileStorageConnector, mapper, + new CoreConfig()); + ArrayList destinationMail = new ArrayList<>(); + File pdf = Paths.get(System.getProperty("java.io.tmpdir"), "test.txt").toFile(); + assertThrows(MsCoreException.class, () -> emailConnectorImpl.sendMail("Template Name", destinationMail, pdf, + "Product Name", new HashMap<>(), "foo.txt")); + verify(fileStorageConnector).getTemplateFile(any()); + } + +} + diff --git a/apps/institution-ms/connector/pom.xml b/apps/institution-ms/connector/pom.xml new file mode 100644 index 0000000..7220fdf --- /dev/null +++ b/apps/institution-ms/connector/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + selc-ms-core + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-connector + pom + + dao + rest + azure-storage + email + + + + + it.pagopa.selfcare + selc-ms-core-connector-api + + + \ No newline at end of file diff --git a/apps/institution-ms/connector/rest/docs/openapi/registry_proxy.json b/apps/institution-ms/connector/rest/docs/openapi/registry_proxy.json new file mode 100644 index 0000000..fa2a92c --- /dev/null +++ b/apps/institution-ms/connector/rest/docs/openapi/registry_proxy.json @@ -0,0 +1,2199 @@ +{ + "openapi" : "3.0.3", + "info" : { + "title" : "selc-party-registry-proxy", + "description" : "Party Registry Proxy API documentation", + "version" : "0.0.1-SNAPSHOT" + }, + "servers" : [ { + "url" : "{url}:{port}{basePath}", + "variables" : { + "url" : { + "default" : "http://localhost" + }, + "port" : { + "default" : "80" + }, + "basePath" : { + "default" : "" + } + } + } ], + "tags" : [ { + "name" : "GeographicTaxonomies", + "description" : "Geographic Taxonomies Controller" + }, { + "name" : "aoo", + "description" : "AOO Controller" + }, { + "name" : "category", + "description" : "Category operations" + }, { + "name" : "infocamere", + "description" : "Info Camere Controller" + }, { + "name" : "institution", + "description" : "Institution operations" + }, { + "name" : "insurance-companies", + "description" : "Ivass Controller" + }, { + "name" : "nationalRegistries", + "description" : "National Registries Controller" + }, { + "name" : "stations", + "description" : "Station Controller" + }, { + "name" : "uo", + "description" : "UO Controller" + } ], + "paths" : { + "/aoo" : { + "get" : { + "tags" : [ "aoo" ], + "summary" : "Retrieve all AOO from IPA", + "description" : "Returns the AOO list", + "operationId" : "findAllUsingGET", + "parameters" : [ { + "name" : "page", + "in" : "query", + "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "limit", + "in" : "query", + "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/AOOsResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/aoo/{codiceUniAoo}" : { + "get" : { + "tags" : [ "aoo" ], + "summary" : "Retrieve an AOO given its code", + "description" : "Returns an AOO", + "operationId" : "findByUnicodeUsingGET", + "parameters" : [ { + "name" : "codiceUniAoo", + "in" : "path", + "description" : "AOO unique identifier, the same of Id", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "categories", + "in" : "query", + "description" : "Filter from origin category", + "required" : false, + "style" : "form", + "explode" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/AOOResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/categories" : { + "get" : { + "tags" : [ "category" ], + "summary" : "Get all categories", + "description" : "Returns the categories list", + "operationId" : "findCategoriesUsingGET", + "parameters" : [ { + "name" : "origin", + "in" : "query", + "description" : "Describes which is the source of data", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + } + }, { + "name" : "page", + "in" : "query", + "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "limit", + "in" : "query", + "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CategoriesResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/origins/{origin}/categories/{code}" : { + "get" : { + "tags" : [ "category" ], + "summary" : "Get a category", + "description" : "Returns a category", + "operationId" : "findCategoryUsingGET", + "parameters" : [ { + "name" : "origin", + "in" : "path", + "description" : "Describes which is the source of data", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + } + }, { + "name" : "code", + "in" : "path", + "description" : "code", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CategoryResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/geotaxonomies" : { + "get" : { + "tags" : [ "GeographicTaxonomies" ], + "summary" : "retrieves the geographic taxonomies by description", + "description" : "retrieves the geographic taxonomies by description", + "operationId" : "retrieveGeoTaxonomiesByDescriptionUsingGET", + "parameters" : [ { + "name" : "description", + "in" : "query", + "description" : "geographic taxonomy description", + "required" : true, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "offset", + "in" : "query", + "description" : "identifies the page 0-based index, default to 0", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "limit", + "in" : "query", + "description" : "identifies the number of entries in a page, default to 10", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/GeographicTaxonomyResource" + } + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/geotaxonomies/{geotaxId}" : { + "get" : { + "tags" : [ "GeographicTaxonomies" ], + "summary" : "retrieves the geographic taxonomy by code", + "description" : "retrieves the geographic taxonomy by code", + "operationId" : "retrieveGeoTaxonomiesByCodeUsingGET", + "parameters" : [ { + "name" : "geotaxId", + "in" : "path", + "description" : "Geographic taxonomy unique identifier ", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/GeographicTaxonomyResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/info-camere/institutions" : { + "post" : { + "tags" : [ "infocamere" ], + "summary" : "Get institutions by legal tax id", + "description" : "Get the list of companies represented by the tax code of the person (physical or juridical) passed as a parameter", + "operationId" : "institutionsByLegalTaxIdUsingPOST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/GetInstitutionsByLegalDto" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/BusinessesResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions" : { + "get" : { + "tags" : [ "institution" ], + "summary" : "Search institutions", + "description" : "Returns a list of Institutions.", + "operationId" : "searchUsingGET", + "parameters" : [ { + "name" : "search", + "in" : "query", + "description" : "if passed, the result is filtered based on the contained value.", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "page", + "in" : "query", + "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "limit", + "in" : "query", + "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "categories", + "in" : "query", + "description" : "Filter from origin category", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionsResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/institutions/{id}" : { + "get" : { + "tags" : [ "institution" ], + "summary" : "Find institution by ID", + "description" : "Returns a single institution. If 'origin' param is filled, the ID to find is treated as 'originId' ($ref: '#/components/schemas/Institution'); otherwise is treated as 'id' ($ref: '#/components/schemas/Institution') ", + "operationId" : "findInstitutionUsingGET", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "The institution ID. It change semantic based on the origin param value (see notes)", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "origin", + "in" : "query", + "description" : "Describes which is the source of data", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + } + }, { + "name" : "categories", + "in" : "query", + "description" : "Filter from origin category", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InstitutionResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/insurance-companies" : { + "get" : { + "tags" : [ "insurance-companies" ], + "summary" : "Search insurance company", + "description" : "Returns a list of insurance companies", + "operationId" : "searchUsingGET_1", + "parameters" : [ { + "name" : "search", + "in" : "query", + "description" : "Optional search field. Users can provide a search string to filter results", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "page", + "in" : "query", + "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "limit", + "in" : "query", + "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InsuranceCompaniesResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/insurance-companies/origin/{originId}" : { + "get" : { + "tags" : [ "insurance-companies" ], + "summary" : "Search insurance company by its taxCode", + "description" : "Returns only one insurance company.", + "operationId" : "searchByOriginIdUsingGET", + "parameters" : [ { + "name" : "originId", + "in" : "path", + "description" : "insurance company's IVASS unique identifier", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InsuranceCompanyResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/insurance-companies/{taxId}" : { + "get" : { + "tags" : [ "insurance-companies" ], + "summary" : "Search insurance company by its taxCode", + "description" : "Returns only one insurance company.", + "operationId" : "searchByTaxCodeUsingGET", + "parameters" : [ { + "name" : "taxId", + "in" : "path", + "description" : "taxCode of insurance company", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/InsuranceCompanyResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/national-registries/legal-address" : { + "get" : { + "tags" : [ "nationalRegistries" ], + "summary" : "Retrieve data from AdE and InfoCamere", + "description" : "Get the legal address of the business", + "operationId" : "legalAddressUsingGET", + "parameters" : [ { + "name" : "taxId", + "in" : "query", + "description" : "taxId", + "required" : true, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/LegalAddressResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/national-registries/verify-legal" : { + "get" : { + "tags" : [ "nationalRegistries" ], + "summary" : "Retrieve data from AdE and InfoCamere", + "description" : "verify if given taxId is legal of given institution identified with vatNumber", + "operationId" : "verifyLegalUsingGET", + "parameters" : [ { + "name" : "taxId", + "in" : "query", + "description" : "taxId", + "required" : true, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "vatNumber", + "in" : "query", + "description" : "vatNumber", + "required" : true, + "style" : "form", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/LegalVerificationResult" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/stations" : { + "get" : { + "tags" : [ "stations" ], + "summary" : "Search station", + "description" : "Returns a list of station.", + "operationId" : "searchUsingGET_2", + "parameters" : [ { + "name" : "search", + "in" : "query", + "description" : "Optional search field. Users can provide a search string to filter results", + "required" : false, + "style" : "form", + "schema" : { + "type" : "string" + } + }, { + "name" : "page", + "in" : "query", + "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "limit", + "in" : "query", + "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/StationsResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/stations/{taxId}" : { + "get" : { + "tags" : [ "stations" ], + "summary" : "Search station by its taxCode", + "description" : "Returns only one station.", + "operationId" : "searchByTaxCodeUsingGET_1", + "parameters" : [ { + "name" : "taxId", + "in" : "path", + "description" : "taxCode of station", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/StationResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/uo" : { + "get" : { + "tags" : [ "uo" ], + "summary" : "Retrieve all UO from IPA", + "description" : "Returns the UO list", + "operationId" : "findAllUsingGET_1", + "parameters" : [ { + "name" : "page", + "in" : "query", + "description" : "Desired page number for result pagination. It is optional, and the default value is 1 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + }, { + "name" : "limit", + "in" : "query", + "description" : "Maximum number of items per page. It is optional, and the default value is 10 when not specified", + "required" : false, + "style" : "form", + "schema" : { + "type" : "integer", + "format" : "int32" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UOsResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + }, + "/uo/{codiceUniAoo}" : { + "get" : { + "tags" : [ "uo" ], + "summary" : "Retrieve a UO given its code", + "description" : "Returns a UO", + "operationId" : "findByUnicodeUsingGET_1", + "parameters" : [ { + "name" : "codiceUniAoo", + "in" : "path", + "description" : "UO unique identifier, the same of Id", + "required" : true, + "style" : "simple", + "schema" : { + "type" : "string" + } + }, { + "name" : "categories", + "in" : "query", + "description" : "Filter from origin category", + "required" : false, + "style" : "form", + "explode" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UOResource" + } + } + } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "401" : { + "description" : "Unauthorized", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "bearerAuth" : [ "global" ] + } ] + } + } + }, + "components" : { + "schemas" : { + "AOOResource" : { + "title" : "AOOResource", + "type" : "object", + "properties" : { + "cap" : { + "type" : "string" + }, + "codAoo" : { + "type" : "string", + "description" : "AOO code" + }, + "codiceCatastaleComune" : { + "type" : "string", + "description" : "AOO land registry code" + }, + "codiceComuneISTAT" : { + "type" : "string", + "description" : "AOO istat code" + }, + "codiceFiscaleEnte" : { + "type" : "string", + "description" : "AOO fiscal code" + }, + "codiceIpa" : { + "type" : "string", + "description" : "AOO ipa code" + }, + "codiceUniAoo" : { + "type" : "string", + "description" : "AOO unique identifier, the same of Id" + }, + "cognomeResponsabile" : { + "type" : "string", + "description" : "AOO manager lastname" + }, + "dataAggiornamento" : { + "type" : "string", + "description" : "Identifies date of last update on the specific AOO" + }, + "dataIstituzione" : { + "type" : "string", + "description" : "Identifies date of first creation for AOO" + }, + "denominazioneAoo" : { + "type" : "string", + "description" : "AOO description" + }, + "denominazioneEnte" : { + "type" : "string", + "description" : "AOO parent description" + }, + "fax" : { + "type" : "string", + "description" : "AOO fax" + }, + "id" : { + "type" : "string" + }, + "indirizzo" : { + "type" : "string", + "description" : "AOO address" + }, + "mail1" : { + "type" : "string" + }, + "mailResponsabile" : { + "type" : "string", + "description" : "AOO manager email" + }, + "nomeResponsabile" : { + "type" : "string", + "description" : "AOO manager firstname" + }, + "origin" : { + "type" : "string", + "description" : "{swagger.model.*.origin}", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + }, + "protocolloInformatico" : { + "type" : "string", + "description" : "AOO IT protocol" + }, + "telefono" : { + "type" : "string", + "description" : "AOO phone number" + }, + "telefonoResponsabile" : { + "type" : "string", + "description" : "AOO manager phone number" + }, + "tipoMail1" : { + "type" : "string" + }, + "uriprotocolloInformatico" : { + "type" : "string" + } + } + }, + "AOOsResource" : { + "title" : "AOOsResource", + "required" : [ "count", "items" ], + "type" : "object", + "properties" : { + "count" : { + "type" : "integer", + "description" : "Total count of items", + "format" : "int64" + }, + "items" : { + "type" : "array", + "description" : "List of AOO resource", + "items" : { + "$ref" : "#/components/schemas/AOOResource" + } + } + } + }, + "BusinessResource" : { + "title" : "BusinessResource", + "type" : "object", + "properties" : { + "businessName" : { + "type" : "string" + }, + "businessTaxId" : { + "type" : "string" + } + } + }, + "BusinessesResource" : { + "title" : "BusinessesResource", + "type" : "object", + "properties" : { + "businesses" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BusinessResource" + } + }, + "legalTaxId" : { + "type" : "string" + }, + "requestDateTime" : { + "type" : "string" + } + } + }, + "CategoriesResource" : { + "title" : "CategoriesResource", + "required" : [ "items" ], + "type" : "object", + "properties" : { + "items" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/CategoryResource" + } + } + } + }, + "CategoryResource" : { + "title" : "CategoryResource", + "type" : "object", + "properties" : { + "code" : { + "type" : "string" + }, + "id" : { + "type" : "string" + }, + "kind" : { + "type" : "string" + }, + "name" : { + "type" : "string" + }, + "origin" : { + "type" : "string", + "description" : "Describes which is the source of data", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + } + } + }, + "GeographicTaxonomyResource" : { + "title" : "GeographicTaxonomyResource", + "type" : "object", + "properties" : { + "code" : { + "type" : "string", + "description" : "Geographic taxonomy unique identifier " + }, + "country" : { + "type" : "string", + "description" : "Geographic taxonomy country" + }, + "country_abbreviation" : { + "type" : "string", + "description" : "Geographic taxonomy country abbreviation" + }, + "desc" : { + "type" : "string", + "description" : "Geographic taxonomy description" + }, + "enabled" : { + "type" : "boolean", + "description" : "Geographic taxonomy enabled", + "example" : false + }, + "istat_code" : { + "type" : "string", + "description" : "Geographic taxonomy istat code" + }, + "province_abbreviation" : { + "type" : "string", + "description" : "Geographic taxonomy province abbreviation" + }, + "province_id" : { + "type" : "string", + "description" : "Geographic taxonomy province unique identifier" + }, + "region_id" : { + "type" : "string", + "description" : "Geographic taxonomy region unique identifier" + } + } + }, + "GetInstitutionsByLegalDto" : { + "title" : "GetInstitutionsByLegalDto", + "type" : "object", + "properties" : { + "filter" : { + "$ref" : "#/components/schemas/GetInstitutionsByLegalFilterDto" + } + } + }, + "GetInstitutionsByLegalFilterDto" : { + "title" : "GetInstitutionsByLegalFilterDto", + "type" : "object", + "properties" : { + "legalTaxId" : { + "type" : "string" + } + } + }, + "InstitutionResource" : { + "title" : "InstitutionResource", + "type" : "object", + "properties" : { + "address" : { + "type" : "string", + "description" : "Institution address" + }, + "aoo" : { + "type" : "string", + "description" : "Area organizzativa omogenea" + }, + "category" : { + "type" : "string", + "description" : "Institution category" + }, + "description" : { + "type" : "string", + "description" : "Institution description" + }, + "digitalAddress" : { + "type" : "string", + "description" : "Institution digital address" + }, + "id" : { + "type" : "string", + "description" : "Semantic id to recognize a party between origins (or externalId)" + }, + "istatCode" : { + "type" : "string", + "description" : "Institution istat Code" + }, + "o" : { + "type" : "string", + "description" : "o" + }, + "origin" : { + "type" : "string", + "description" : "Describes which is the source of data", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + }, + "originId" : { + "type" : "string", + "description" : "Id of the institution from its origin" + }, + "ou" : { + "type" : "string", + "description" : "ou" + }, + "taxCode" : { + "type" : "string", + "description" : "Institution fiscal code" + }, + "zipCode" : { + "type" : "string", + "description" : "Institution zipCode" + } + } + }, + "InstitutionsResource" : { + "title" : "InstitutionsResource", + "required" : [ "count", "items" ], + "type" : "object", + "properties" : { + "count" : { + "type" : "integer", + "format" : "int64" + }, + "items" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/InstitutionResource" + } + } + } + }, + "InsuranceCompaniesResource" : { + "title" : "InsuranceCompaniesResource", + "required" : [ "count", "items" ], + "type" : "object", + "properties" : { + "count" : { + "type" : "integer", + "description" : "list of companies resource size", + "format" : "int64" + }, + "items" : { + "type" : "array", + "description" : "list of insurance companies resource", + "items" : { + "$ref" : "#/components/schemas/InsuranceCompanyResource" + } + } + } + }, + "InsuranceCompanyResource" : { + "title" : "InsuranceCompanyResource", + "type" : "object", + "properties" : { + "address" : { + "type" : "string", + "description" : "Identifies legal address of insurance company" + }, + "description" : { + "type" : "string", + "description" : "insurance company's name" + }, + "digitalAddress" : { + "type" : "string", + "description" : "insurance company's mail address" + }, + "id" : { + "type" : "string", + "description" : "insurance company's unique identifier" + }, + "origin" : { + "type" : "string", + "description" : "Describes which is the source of data", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + }, + "originId" : { + "type" : "string", + "description" : "insurance company's IVASS unique identifier" + }, + "registerType" : { + "type" : "string", + "description" : "Identifies register type for company" + }, + "taxCode" : { + "type" : "string", + "description" : "taxCode of insurance company" + }, + "workType" : { + "type" : "string", + "description" : "Identifies work type for company" + } + } + }, + "InvalidParam" : { + "title" : "InvalidParam", + "required" : [ "name", "reason" ], + "type" : "object", + "properties" : { + "name" : { + "type" : "string", + "description" : "Invalid parameter name." + }, + "reason" : { + "type" : "string", + "description" : "Invalid parameter reason." + } + } + }, + "LegalAddressResponse" : { + "title" : "LegalAddressResponse", + "type" : "object", + "properties" : { + "address" : { + "type" : "string" + }, + "zipCode" : { + "type" : "string" + } + } + }, + "LegalVerificationResult" : { + "title" : "LegalVerificationResult", + "type" : "object", + "properties" : { + "resultCode" : { + "type" : "string" + }, + "resultDetail" : { + "type" : "string" + }, + "verificationResult" : { + "type" : "boolean" + } + } + }, + "Problem" : { + "title" : "Problem", + "required" : [ "status", "title" ], + "type" : "object", + "properties" : { + "detail" : { + "type" : "string", + "description" : "Human-readable description of this specific problem." + }, + "instance" : { + "type" : "string", + "description" : "A URI that describes where the problem occurred." + }, + "invalidParams" : { + "type" : "array", + "description" : "A list of invalid parameters details.", + "items" : { + "$ref" : "#/components/schemas/InvalidParam" + } + }, + "status" : { + "type" : "integer", + "description" : "The HTTP status code.", + "format" : "int32", + "example" : 500 + }, + "title" : { + "type" : "string", + "description" : "Short human-readable summary of the problem." + }, + "type" : { + "type" : "string", + "description" : "A URL to a page with more details regarding the problem." + } + }, + "description" : "A \"problem detail\" as a way to carry machine-readable details of errors (https://datatracker.ietf.org/doc/html/rfc7807)" + }, + "StationResource" : { + "title" : "StationResource", + "type" : "object", + "properties" : { + "anacEnabled" : { + "type" : "boolean", + "description" : "Identifies if ANAC station is enabled", + "example" : false + }, + "anacEngaged" : { + "type" : "boolean", + "description" : "Identifies if ANAC station is engaged", + "example" : false + }, + "description" : { + "type" : "string", + "description" : "station's name" + }, + "digitalAddress" : { + "type" : "string", + "description" : "station's mail address" + }, + "id" : { + "type" : "string", + "description" : "station's unique identifier" + }, + "origin" : { + "type" : "string", + "description" : "Describes which is the source of data", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + }, + "originId" : { + "type" : "string", + "description" : "station's anac unique identifier" + }, + "taxCode" : { + "type" : "string", + "description" : "taxCode of station" + } + } + }, + "StationsResource" : { + "title" : "StationsResource", + "required" : [ "count", "items" ], + "type" : "object", + "properties" : { + "count" : { + "type" : "integer", + "description" : "list of station resource size", + "format" : "int64" + }, + "items" : { + "type" : "array", + "description" : "list of station resource", + "items" : { + "$ref" : "#/components/schemas/StationResource" + } + } + } + }, + "UOResource" : { + "title" : "UOResource", + "type" : "object", + "properties" : { + "cap" : { + "type" : "string" + }, + "codiceCatastaleComune" : { + "type" : "string", + "description" : "UO land registry code" + }, + "codiceComuneISTAT" : { + "type" : "string", + "description" : "UO istat code" + }, + "codiceFiscaleEnte" : { + "type" : "string", + "description" : "UO fiscal code" + }, + "codiceIpa" : { + "type" : "string", + "description" : "UO ipa code" + }, + "codiceUniAoo" : { + "type" : "string", + "description" : "AOO unique identifier, the same of Id" + }, + "codiceUniUo" : { + "type" : "string", + "description" : "UO unique identifier, the same of Id" + }, + "codiceUniUoPadre" : { + "type" : "string", + "description" : "UO parent code" + }, + "cognomeResponsabile" : { + "type" : "string", + "description" : "UO manager lastname" + }, + "dataAggiornamento" : { + "type" : "string", + "description" : "Identifies date of last update on the specific UO" + }, + "dataIstituzione" : { + "type" : "string", + "description" : "Identifies date of first creation for UO" + }, + "denominazioneEnte" : { + "type" : "string", + "description" : "UO parent description" + }, + "descrizioneUo" : { + "type" : "string", + "description" : "UO description" + }, + "fax" : { + "type" : "string", + "description" : "UO fax" + }, + "id" : { + "type" : "string" + }, + "indirizzo" : { + "type" : "string", + "description" : "UO address" + }, + "mail1" : { + "type" : "string" + }, + "mailResponsabile" : { + "type" : "string", + "description" : "UO manager email" + }, + "nomeResponsabile" : { + "type" : "string", + "description" : "UO manager firstname" + }, + "origin" : { + "type" : "string", + "description" : "Describes which is the source of data", + "enum" : [ "ANAC", "INFOCAMERE", "IPA", "IVASS", "static" ] + }, + "telefono" : { + "type" : "string", + "description" : "UO phone number" + }, + "telefonoResponsabile" : { + "type" : "string", + "description" : "UO manager phone number" + }, + "tipoMail1" : { + "type" : "string" + }, + "url" : { + "type" : "string", + "description" : "UO url" + } + } + }, + "UOsResource" : { + "title" : "UOsResource", + "required" : [ "count", "items" ], + "type" : "object", + "properties" : { + "count" : { + "type" : "integer", + "description" : "Total count of items", + "format" : "int64" + }, + "items" : { + "type" : "array", + "description" : "List of UO resource", + "items" : { + "$ref" : "#/components/schemas/UOResource" + } + } + } + } + }, + "securitySchemes" : { + "bearerAuth" : { + "type" : "http", + "description" : "A bearer token in the format of a JWS and conformed to the specifications included in [RFC8725](https://tools.ietf.org/html/RFC8725)", + "scheme" : "bearer", + "bearerFormat" : "JWT" + } + } + } +} \ No newline at end of file diff --git a/apps/institution-ms/connector/rest/docs/openapi/selfcare-user-docs.json b/apps/institution-ms/connector/rest/docs/openapi/selfcare-user-docs.json new file mode 100644 index 0000000..2cbbda3 --- /dev/null +++ b/apps/institution-ms/connector/rest/docs/openapi/selfcare-user-docs.json @@ -0,0 +1,1550 @@ +{ + "openapi" : "3.0.3", + "info" : { + "title" : "User API", + "version" : "1.0.0" + }, + "servers" : [ { + "url" : "http://localhost:8080", + "description" : "Auto generated value" + }, { + "url" : "http://0.0.0.0:8080", + "description" : "Auto generated value" + } ], + "paths" : { + "/authorize" : { + "get" : { + "tags" : [ "User Permission Controller" ], + "summary" : "Get permission for a user in an institution", + "parameters" : [ { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "permission", + "in" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/PermissionTypeEnum" + } + }, { + "name" : "productId", + "in" : "query", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "boolean" + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/institutions/{institutionId}" : { + "put" : { + "tags" : [ "Institution Controller" ], + "summary" : "The API updates the description in all occurrences of userInstitution, given a certain institutionId.", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UpdateDescriptionDto" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/institutions/{institutionId}/products/{productId}/createdAt" : { + "put" : { + "tags" : [ "Institution Controller" ], + "summary" : "The API updates user's onboarded product with createdAt passed in input", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "createdAt", + "in" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/LocalDateTime" + } + }, { + "name" : "userIds", + "in" : "query", + "required" : true, + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/institutions/{institutionId}/user-institutions" : { + "get" : { + "tags" : [ "Institution Controller" ], + "summary" : "The API retrieves users with optional filters in input as query params", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "productRoles", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "products", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "roles", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "states", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "userId", + "in" : "query", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserInstitutionResponse" + } + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/institutions/{institutionId}/users" : { + "get" : { + "tags" : [ "Institution Controller" ], + "summary" : "The API retrieves user's info including details of roles on products", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserProductResponse" + } + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "The API retrieves paged users with optional filters in input as query params", + "parameters" : [ { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "page", + "in" : "query", + "schema" : { + "format" : "int32", + "default" : "0", + "type" : "integer" + } + }, { + "name" : "productRoles", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "products", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "roles", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/PartyRole" + } + } + }, { + "name" : "size", + "in" : "query", + "schema" : { + "format" : "int32", + "default" : "100", + "type" : "integer" + } + }, { + "name" : "states", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "userId", + "in" : "query", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserInstitutionResponse" + } + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + }, + "post" : { + "tags" : [ "User Controller" ], + "summary" : "The createOrUpdateByFiscalCode function is used to create a new user or update an existing one.", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CreateUserDto" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "string" + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/emails" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "The API retrieves Users' emails using institution id and product id", + "parameters" : [ { + "name" : "institutionId", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/ids" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "Retrieve all users given their userIds", + "parameters" : [ { + "name" : "userIds", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserInstitutionResponse" + } + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/notification" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "Retrieve all SC-User for DataLake filtered by optional productId", + "parameters" : [ { + "name" : "page", + "in" : "query", + "schema" : { + "format" : "int32", + "default" : "0", + "type" : "integer" + } + }, { + "name" : "productId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "size", + "in" : "query", + "schema" : { + "format" : "int32", + "default" : "100", + "type" : "integer" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UsersNotificationResponse" + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/search" : { + "post" : { + "tags" : [ "User Controller" ], + "summary" : "Search user by fiscalCode", + "parameters" : [ { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/SearchUserDto" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserDetailResponse" + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{id}" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "Retrieves user given userId and optional ProductId", + "parameters" : [ { + "name" : "id", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "query", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserResponse" + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{id}/details" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "Retrieves user's information from pdv: name, familyName, email, fiscalCode and workContacts", + "parameters" : [ { + "name" : "id", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "field", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserDetailResponse" + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{id}/institution/{institutionId}/product/{productId}/status" : { + "put" : { + "tags" : [ "User Controller" ], + "summary" : "Service to update user product status", + "parameters" : [ { + "name" : "id", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "institutionId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "productRole", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "status", + "in" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/OnboardedProductState" + } + } ], + "responses" : { + "204" : { + "description" : "No Content" + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{id}/status" : { + "put" : { + "tags" : [ "User Controller" ], + "summary" : "Update user status with optional filter for institution, product, role and productRole", + "parameters" : [ { + "name" : "id", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "productRole", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "role", + "in" : "query", + "schema" : { + "$ref" : "#/components/schemas/PartyRole" + } + }, { + "name" : "status", + "in" : "query", + "schema" : { + "$ref" : "#/components/schemas/OnboardedProductState" + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{id}/user-registry" : { + "put" : { + "tags" : [ "User Controller" ], + "summary" : "Service to update user in user-registry and send notification when user data gets updated", + "parameters" : [ { + "name" : "id", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UpdateUserRequest" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{userId}" : { + "post" : { + "tags" : [ "User Controller" ], + "summary" : "The createOrUpdateByUserId function is used to update existing user adding userRole.", + "parameters" : [ { + "name" : "userId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/AddUserRoleDto" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{userId}/institution/{institutionId}" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "The retrieveUsers function is used to retrieve a list of users from the UserInstitution collection and userRegistry.\nAt first it try to retrieve a UserInstitution document associated with a logged user (admin)\nIf this userInstitution object is not null, so user has AdminRole, it try to retriew the userInstitutions filtered by given institutionId, roles, states, products and productRoles\nand optional given personId, otherwise it do the same query using the logged user id instead of personId.\nAfter that it retrieve personal user data, foreach userId retrieved, from userRegistry and return a stream of UserDataResponse objects containing the requested user data.", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "userId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "personId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "productRoles", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "products", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "roles", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, { + "name" : "states", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserDataResponse" + } + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{userId}/institutions" : { + "get" : { + "tags" : [ "User Controller" ], + "summary" : "Retrieves products info and role which the user is enabled", + "parameters" : [ { + "name" : "userId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "institutionId", + "in" : "query", + "schema" : { + "type" : "string" + } + }, { + "name" : "states", + "in" : "query", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserInfoResponse" + } + } + } + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + }, + "/users/{userId}/institutions/{institutionId}/products/{productId}" : { + "delete" : { + "tags" : [ "User Controller" ], + "summary" : "Delete logically the association institution and product", + "parameters" : [ { + "name" : "institutionId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "productId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "userId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "204" : { + "description" : "No Content" + }, + "403" : { + "description" : "Not Allowed" + }, + "401" : { + "description" : "Not Authorized" + } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] + } + } + }, + "components" : { + "schemas" : { + "AddUserRoleDto" : { + "required" : [ "institutionId", "product" ], + "type" : "object", + "properties" : { + "institutionId" : { + "minLength" : 1, + "type" : "string" + }, + "product" : { + "$ref" : "#/components/schemas/Product" + }, + "institutionDescription" : { + "type" : "string" + }, + "institutionRootName" : { + "type" : "string" + }, + "userMailUuid" : { + "type" : "string" + }, + "hasToSendEmail" : { + "type" : "boolean" + } + } + }, + "CertifiableFieldResponseString" : { + "type" : "object", + "properties" : { + "value" : { + "type" : "string" + }, + "certified" : { + "$ref" : "#/components/schemas/CertificationEnum" + } + } + }, + "CertificationEnum" : { + "enum" : [ "NONE", "SPID" ], + "type" : "string" + }, + "CreateUserDto" : { + "required" : [ "institutionId", "user", "product" ], + "type" : "object", + "properties" : { + "institutionId" : { + "minLength" : 1, + "type" : "string" + }, + "user" : { + "$ref" : "#/components/schemas/User" + }, + "product" : { + "$ref" : "#/components/schemas/Product1" + }, + "institutionDescription" : { + "type" : "string" + }, + "institutionRootName" : { + "type" : "string" + }, + "hasToSendEmail" : { + "type" : "boolean" + } + } + }, + "Env" : { + "enum" : [ "ROOT", "DEV", "COLL", "PROD" ], + "type" : "string" + }, + "LocalDateTime" : { + "format" : "date-time", + "type" : "string", + "example" : "2022-03-10T12:15:50" + }, + "OnboardedProductResponse" : { + "type" : "object", + "properties" : { + "productId" : { + "type" : "string" + }, + "tokenId" : { + "type" : "string" + }, + "status" : { + "$ref" : "#/components/schemas/OnboardedProductState" + }, + "productRole" : { + "type" : "string" + }, + "role" : { + "$ref" : "#/components/schemas/PartyRole" + }, + "env" : { + "$ref" : "#/components/schemas/Env" + }, + "createdAt" : { + "$ref" : "#/components/schemas/LocalDateTime" + }, + "updatedAt" : { + "$ref" : "#/components/schemas/LocalDateTime" + } + } + }, + "OnboardedProductState" : { + "enum" : [ "ACTIVE", "PENDING", "TOBEVALIDATED", "SUSPENDED", "DELETED", "REJECTED" ], + "type" : "string" + }, + "PartyRole" : { + "enum" : [ "MANAGER", "DELEGATE", "SUB_DELEGATE", "OPERATOR" ], + "type" : "string" + }, + "PermissionTypeEnum" : { + "enum" : [ "ADMIN", "ANY" ], + "type" : "string" + }, + "Product" : { + "required" : [ "productId", "role", "productRoles" ], + "type" : "object", + "properties" : { + "productId" : { + "minLength" : 1, + "type" : "string" + }, + "role" : { + "$ref" : "#/components/schemas/PartyRole" + }, + "tokenId" : { + "type" : "string" + }, + "productRoles" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "Product1" : { + "required" : [ "productId", "role", "productRoles" ], + "type" : "object", + "properties" : { + "productId" : { + "minLength" : 1, + "type" : "string" + }, + "role" : { + "$ref" : "#/components/schemas/PartyRole" + }, + "tokenId" : { + "type" : "string" + }, + "productRoles" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "QueueEvent" : { + "enum" : [ "ADD", "UPDATE" ], + "type" : "string" + }, + "SearchUserDto" : { + "required" : [ "fiscalCode" ], + "type" : "object", + "properties" : { + "fiscalCode" : { + "type" : "string" + } + } + }, + "UpdateDescriptionDto" : { + "required" : [ "institutionDescription" ], + "type" : "object", + "properties" : { + "institutionDescription" : { + "minLength" : 1, + "type" : "string" + }, + "institutionRootName" : { + "type" : "string" + } + } + }, + "UpdateUserRequest" : { + "required" : [ "email" ], + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + }, + "familyName" : { + "type" : "string" + }, + "email" : { + "type" : "string" + } + } + }, + "User" : { + "required" : [ "fiscalCode", "institutionEmail" ], + "type" : "object", + "properties" : { + "birthDate" : { + "type" : "string" + }, + "familyName" : { + "type" : "string" + }, + "name" : { + "type" : "string" + }, + "fiscalCode" : { + "minLength" : 1, + "type" : "string" + }, + "institutionEmail" : { + "minLength" : 1, + "type" : "string" + } + } + }, + "UserDataResponse" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "userId" : { + "type" : "string" + }, + "institutionId" : { + "type" : "string" + }, + "institutionDescription" : { + "type" : "string" + }, + "institutionRootName" : { + "type" : "string" + }, + "userMailUuid" : { + "type" : "string" + }, + "role" : { + "type" : "string" + }, + "status" : { + "type" : "string" + }, + "products" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/OnboardedProductResponse" + } + }, + "userResponse" : { + "$ref" : "#/components/schemas/UserResponse" + } + } + }, + "UserDetailResponse" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "fiscalCode" : { + "type" : "string" + }, + "name" : { + "$ref" : "#/components/schemas/CertifiableFieldResponseString" + }, + "familyName" : { + "$ref" : "#/components/schemas/CertifiableFieldResponseString" + }, + "email" : { + "$ref" : "#/components/schemas/CertifiableFieldResponseString" + }, + "workContacts" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/WorkContactResponse" + } + } + } + }, + "UserInfoResponse" : { + "type" : "object", + "properties" : { + "userId" : { + "type" : "string" + }, + "institutions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserInstitutionRoleResponse" + } + } + } + }, + "UserInstitutionResponse" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "userId" : { + "type" : "string" + }, + "institutionId" : { + "type" : "string" + }, + "institutionDescription" : { + "type" : "string" + }, + "institutionRootName" : { + "type" : "string" + }, + "userMailUuid" : { + "type" : "string" + }, + "products" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/OnboardedProductResponse" + } + } + } + }, + "UserInstitutionRoleResponse" : { + "type" : "object", + "properties" : { + "institutionId" : { + "type" : "string" + }, + "institutionName" : { + "type" : "string" + }, + "institutionRootName" : { + "type" : "string" + }, + "role" : { + "$ref" : "#/components/schemas/PartyRole" + }, + "status" : { + "$ref" : "#/components/schemas/OnboardedProductState" + } + } + }, + "UserNotificationResponse" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "institutionId" : { + "type" : "string" + }, + "productId" : { + "type" : "string" + }, + "onboardingTokenId" : { + "type" : "string" + }, + "createdAt" : { + "$ref" : "#/components/schemas/LocalDateTime" + }, + "updatedAt" : { + "$ref" : "#/components/schemas/LocalDateTime" + }, + "eventType" : { + "$ref" : "#/components/schemas/QueueEvent" + }, + "user" : { + "$ref" : "#/components/schemas/UserToNotify" + } + } + }, + "UserProductResponse" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "name" : { + "type" : "string" + }, + "surname" : { + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "products" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/OnboardedProductResponse" + } + } + } + }, + "UserResponse" : { + "required" : [ "id", "name", "surname" ], + "type" : "object", + "properties" : { + "id" : { + "minLength" : 1, + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "name" : { + "pattern" : "\\S", + "type" : "string" + }, + "surname" : { + "pattern" : "\\S", + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "workContacts" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + } + } + } + }, + "UserToNotify" : { + "type" : "object", + "properties" : { + "userId" : { + "type" : "string" + }, + "name" : { + "type" : "string" + }, + "familyName" : { + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "role" : { + "$ref" : "#/components/schemas/PartyRole" + }, + "productRole" : { + "type" : "string" + }, + "relationshipStatus" : { + "$ref" : "#/components/schemas/OnboardedProductState" + } + } + }, + "UsersNotificationResponse" : { + "type" : "object", + "properties" : { + "users" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/UserNotificationResponse" + } + } + } + }, + "WorkContactResponse" : { + "type" : "object", + "properties" : { + "email" : { + "$ref" : "#/components/schemas/CertifiableFieldResponseString" + } + } + } + }, + "securitySchemes" : { + "SecurityScheme" : { + "type" : "http", + "description" : "Authentication", + "scheme" : "bearer", + "bearerFormat" : "JWT" + } + } + } +} \ No newline at end of file diff --git a/apps/institution-ms/connector/rest/docs/openapi/user_registry.json b/apps/institution-ms/connector/rest/docs/openapi/user_registry.json new file mode 100644 index 0000000..c6ac022 --- /dev/null +++ b/apps/institution-ms/connector/rest/docs/openapi/user_registry.json @@ -0,0 +1,596 @@ +{ + "openapi" : "3.0.1", + "info" : { + "title" : "pdv-u-user-registry-api", + "description" : "User Registry API documentation", + "version" : "1.0-SNAPSHOT" + }, + "servers" : [ { + "url" : "https://api.uat.pdv.pagopa.it/{basePath}", + "variables" : { + "basePath" : { + "default" : "user-registry/v1" + } + } + } ], + "tags" : [ { + "name" : "user", + "description" : "User operations" + } ], + "paths" : { + "/users" : { + "patch" : { + "tags" : [ "user" ], + "summary" : "Upsert user", + "description" : "Update the given subset fields of an existing user by external id, if not present create a new one", + "operationId" : "saveUsingPATCH", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/SaveUserDto" + } + } + }, + "required" : true + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserId" + } + } + } + }, + "429" : { + "description" : "Too Many Requests", + "content" : { } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "403" : { + "description" : "Forbidden", + "content" : { } + } + }, + "security" : [ { + "api_key" : [ ] + } ] + } + }, + "/users/{id}" : { + "get" : { + "tags" : [ "user" ], + "summary" : "Find user", + "description" : "Retrieve the user by its internal id", + "operationId" : "findByIdUsingGET", + "parameters" : [ { + "name" : "fl", + "in" : "query", + "description" : "Field list. Subset of fields to be retrieved for the requested resource", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "name" : "id", + "in" : "path", + "description" : "User internal id", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserResource" + } + } + } + }, + "429" : { + "description" : "Too Many Requests", + "content" : { } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "403" : { + "description" : "Forbidden", + "content" : { } + } + }, + "security" : [ { + "api_key" : [ ] + } ] + }, + "delete" : { + "tags" : [ "user" ], + "summary" : "Delete user", + "description" : "Delete the user by its internal id", + "operationId" : "deleteByIdUsingDELETE", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "User internal id", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "429" : { + "description" : "Too Many Requests", + "content" : { } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "204" : { + "description" : "No Content", + "content" : { } + }, + "403" : { + "description" : "Forbidden", + "content" : { } + } + }, + "security" : [ { + "api_key" : [ ] + } ] + }, + "patch" : { + "tags" : [ "user" ], + "summary" : "Update user", + "description" : "Update the given subset fields of an existing user by its internal id, if not present an error is returned", + "operationId" : "updateUsingPATCH", + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "User internal id", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/MutableUserFieldsDto" + } + } + }, + "required" : true + }, + "responses" : { + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "204" : { + "description" : "No Content", + "content" : { } + }, + "403" : { + "description" : "Forbidden", + "content" : { } + }, + "404" : { + "description" : "Not Found", + "content" : { } + }, + "429" : { + "description" : "Too Many Requests", + "content" : { } + }, + "409" : { + "description" : "Conflict", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + } + }, + "security" : [ { + "api_key" : [ ] + } ] + } + }, + "/users/search" : { + "post" : { + "tags" : [ "user" ], + "summary" : "Search user", + "description" : "Search a user given its fiscal code", + "operationId" : "searchUsingPOST", + "parameters" : [ { + "name" : "fl", + "in" : "query", + "description" : "Field list. Subset of fields to be retrieved for the requested resource", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserSearchDto" + } + } + }, + "required" : true + }, + "responses" : { + "404" : { + "description" : "Not Found", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UserResource" + } + } + } + }, + "429" : { + "description" : "Too Many Requests", + "content" : { } + }, + "400" : { + "description" : "Bad Request", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "500" : { + "description" : "Internal Server Error", + "content" : { + "application/problem+json" : { + "schema" : { + "$ref" : "#/components/schemas/Problem" + } + } + } + }, + "403" : { + "description" : "Forbidden", + "content" : { } + } + }, + "security" : [ { + "api_key" : [ ] + } ] + } + } + }, + "components" : { + "schemas" : { + "UserSearchDto" : { + "title" : "UserSearchDto", + "required" : [ "fiscalCode" ], + "type" : "object", + "properties" : { + "fiscalCode" : { + "type" : "string", + "description" : "User fiscal code" + } + } + }, + "WorkContactResource" : { + "title" : "WorkContactResource", + "type" : "object", + "properties" : { + "email" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + } + } + }, + "CertifiableFieldResourceOfstring" : { + "title" : "CertifiableFieldResourceOfstring", + "required" : [ "certification", "value" ], + "type" : "object", + "properties" : { + "certification" : { + "type" : "string", + "description" : "Certified source of information", + "enum" : [ "NONE", "SPID" ] + }, + "value" : { + "type" : "string", + "description" : "Field value" + } + } + }, + "UserId" : { + "title" : "UserId", + "required" : [ "id" ], + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "User internal id", + "format" : "uuid" + } + } + }, + "MutableUserFieldsDto" : { + "title" : "MutableUserFieldsDto", + "type" : "object", + "properties" : { + "birthDate" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfLocalDate" + }, + "email" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "familyName" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "name" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "workContacts" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/WorkContactResource" + }, + "description" : "User work contacts" + } + } + }, + "CertifiableFieldResourceOfLocalDate" : { + "title" : "CertifiableFieldResourceOfLocalDate", + "required" : [ "certification", "value" ], + "type" : "object", + "properties" : { + "certification" : { + "type" : "string", + "description" : "Certified source of information", + "enum" : [ "NONE", "SPID" ] + }, + "value" : { + "type" : "string", + "description" : "Field value", + "format" : "date" + } + } + }, + "UserResource" : { + "title" : "UserResource", + "required" : [ "id" ], + "type" : "object", + "properties" : { + "birthDate" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfLocalDate" + }, + "email" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "familyName" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "fiscalCode" : { + "type" : "string", + "description" : "User fiscal code" + }, + "id" : { + "type" : "string", + "description" : "User internal id", + "format" : "uuid" + }, + "name" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "workContacts" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/WorkContactResource" + }, + "description" : "User work contacts" + } + } + }, + "SaveUserDto" : { + "title" : "SaveUserDto", + "required" : [ "fiscalCode" ], + "type" : "object", + "properties" : { + "birthDate" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfLocalDate" + }, + "email" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "familyName" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "fiscalCode" : { + "type" : "string", + "description" : "User fiscal code" + }, + "name" : { + "$ref" : "#/components/schemas/CertifiableFieldResourceOfstring" + }, + "workContacts" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/WorkContactResource" + }, + "description" : "User work contacts" + } + } + }, + "Problem" : { + "title" : "Problem", + "required" : [ "status", "title" ], + "type" : "object", + "properties" : { + "detail" : { + "type" : "string", + "description" : "Human-readable description of this specific problem." + }, + "instance" : { + "type" : "string", + "description" : "A URI that describes where the problem occurred." + }, + "invalidParams" : { + "type" : "array", + "description" : "A list of invalid parameters details.", + "items" : { + "$ref" : "#/components/schemas/InvalidParam" + } + }, + "status" : { + "type" : "integer", + "description" : "The HTTP status code.", + "format" : "int32" + }, + "title" : { + "type" : "string", + "description" : "Short human-readable summary of the problem." + }, + "type" : { + "type" : "string", + "description" : "A URL to a page with more details regarding the problem." + } + }, + "description" : "A \"problem detail\" as a way to carry machine-readable details of errors (https://datatracker.ietf.org/doc/html/rfc7807)" + }, + "InvalidParam" : { + "title" : "InvalidParam", + "required" : [ "name", "reason" ], + "type" : "object", + "properties" : { + "name" : { + "type" : "string", + "description" : "Invalid parameter name." + }, + "reason" : { + "type" : "string", + "description" : "Invalid parameter reason." + } + } + } + }, + "securitySchemes" : { + "api_key" : { + "type" : "apiKey", + "name" : "x-api-key", + "in" : "header" + } + } + } +} \ No newline at end of file diff --git a/apps/institution-ms/connector/rest/pom.xml b/apps/institution-ms/connector/rest/pom.xml new file mode 100644 index 0000000..dd13b27 --- /dev/null +++ b/apps/institution-ms/connector/rest/pom.xml @@ -0,0 +1,152 @@ + + + 4.0.0 + + selc-ms-core-connector + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-connector-rest + + + + it.pagopa.selfcare + selc-commons-connector-rest + + + it.pagopa.selfcare + selc-commons-connector-rest + test-jar + test + + + org.springframework.cloud + spring-cloud-contract-wiremock + test + + + io.github.openfeign + feign-okhttp + + + io.github.resilience4j + resilience4j-spring-boot2 + + + + + + + + org.openapitools + openapi-generator-maven-plugin + 6.3.0 + + + selfcare-user-registry + + generate + + process-resources + + ${project.basedir}/docs/openapi/user_registry.json + spring + spring-cloud + + false + false + + true + ${project.groupId}.user_registry.generated.openapi.v1 + ${project.groupId}.user_registry.generated.openapi.v1.dto + ${project.groupId}.user_registry.generated.openapi.v1.api + ${project.groupId}.user_registry.generated.openapi.v1.config + @lombok.Builder; @lombok.NoArgsConstructor; @lombok.AllArgsConstructor + java8 + true + true + none + source + false + false + true + + + + + selfcare-registry-proxy + + generate + + process-resources + + ${project.basedir}/docs/openapi/registry_proxy.json + spring + spring-cloud + + false + false + + true + ${project.groupId}.registry_proxy.generated.openapi.v1 + ${project.groupId}.registry_proxy.generated.openapi.v1.dto + ${project.groupId}.registry_proxy.generated.openapi.v1.api + ${project.groupId}.registry_proxy.generated.openapi.v1.config + @lombok.Builder; @lombok.NoArgsConstructor; @lombok.AllArgsConstructor + java8 + true + true + none + source + false + false + true + + + + + + + org.openapitools + openapi-generator-maven-plugin + 6.3.0 + + + user-ms + + generate + + process-resources + + ${project.basedir}/docs/openapi/selfcare-user-docs.json + spring + spring-cloud + + false + false + + true + ${project.groupId}.user.generated.openapi.v1 + ${project.groupId}.user.generated.openapi.v1.dto + ${project.groupId}.user.generated.openapi.v1.api + ${project.groupId}.user.generated.openapi.v1.config + @lombok.Builder; @lombok.NoArgsConstructor; @lombok.AllArgsConstructor + java8-localdatetime + true + true + none + source + false + false + true + + + + + + + + + diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImpl.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImpl.java new file mode 100644 index 0000000..0053c3c --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImpl.java @@ -0,0 +1,213 @@ +package it.pagopa.selfcare.mscore.connector.rest; + +import feign.FeignException; +import io.github.resilience4j.retry.annotation.Retry; +import it.pagopa.selfcare.commons.base.logging.LogUtils; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.connector.rest.client.PartyRegistryProxyRestClient; +import it.pagopa.selfcare.mscore.connector.rest.mapper.AooMapper; +import it.pagopa.selfcare.mscore.connector.rest.mapper.AsMapper; +import it.pagopa.selfcare.mscore.connector.rest.mapper.SaMapper; +import it.pagopa.selfcare.mscore.connector.rest.mapper.UoMapper; +import it.pagopa.selfcare.mscore.connector.rest.model.geotaxonomy.GeographicTaxonomiesResponse; +import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.*; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.registry_proxy.generated.openapi.v1.dto.InsuranceCompanyResource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import java.util.ArrayList; +import java.util.List; + +import static it.pagopa.selfcare.mscore.constant.CustomError.CREATE_INSTITUTION_NOT_FOUND; + +@Slf4j +@Service +public class PartyRegistryProxyConnectorImpl implements PartyRegistryProxyConnector { + + public static final String CODE_IS_REQUIRED = "Code is required"; + private final PartyRegistryProxyRestClient restClient; + private final AooMapper aooMapper; + private final UoMapper uoMapper; + + private final SaMapper saMapper; + private final AsMapper asMapper; + + public PartyRegistryProxyConnectorImpl(PartyRegistryProxyRestClient restClient, AooMapper aooMapper, UoMapper uoMapper, SaMapper saMapper, AsMapper asMapper) { + this.restClient = restClient; + this.aooMapper = aooMapper; + this.uoMapper = uoMapper; + this.saMapper = saMapper; + this.asMapper = asMapper; + } + + @Override + public InstitutionProxyInfo getInstitutionById(String id) { + try { + ProxyInstitutionResponse response = restClient.getInstitutionById(id); + if (response == null) { + throw new ResourceNotFoundException(String.format(CREATE_INSTITUTION_NOT_FOUND.getMessage(), id), CREATE_INSTITUTION_NOT_FOUND.getCode()); + } + return convertInstitutionProxyInfo(response); + } catch (FeignException e) { + throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); + } + } + + @Override + public CategoryProxyInfo getCategory(String origin, String code) { + try { + ProxyCategoryResponse response = restClient.getCategory(origin, code); + return convertCategoryProxyInfo(response); + } catch (FeignException e) { + throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); + } + } + + @Override + public List getInstitutionsByLegal(String taxId) { + try { + InstitutionsByLegalResponse response = restClient.getInstitutionsByLegal(toInstitutionsByLegalRequest(taxId)); + return toInstitutionsByLegalResponse(response); + } catch (FeignException e) { + throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); + } + } + + @Override + public NationalRegistriesProfessionalAddress getLegalAddress(String taxId) { + try { + return restClient.getLegalAddress(taxId); + } catch (FeignException e) { + log.error("LegalAddress not found for taxId {}", taxId); + throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); + } + } + + private List toInstitutionsByLegalResponse(InstitutionsByLegalResponse response) { + List list = new ArrayList<>(); + if (response.getBusinesses() != null && !response.getBusinesses().isEmpty()) { + response.getBusinesses().forEach(institutions -> { + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName(institutions.getBusinessName()); + institutionByLegal.setBusinessTaxId(institutions.getBusinessTaxId()); + list.add(institutionByLegal); + }); + } + return list; + } + + private InstitutionsByLegalRequest toInstitutionsByLegalRequest(String taxId) { + InstitutionsByLegalRequest institutions = new InstitutionsByLegalRequest(); + LegalFilter legalFilter = new LegalFilter(); + legalFilter.setLegalTaxId(taxId); + institutions.setFilter(legalFilter); + return institutions; + } + + private InstitutionProxyInfo convertInstitutionProxyInfo(ProxyInstitutionResponse response) { + InstitutionProxyInfo info = new InstitutionProxyInfo(); + info.setId(response.getId()); + info.setOriginId(response.getOriginId()); + info.setO(response.getO()); + info.setOu(response.getOu()); + info.setAoo(response.getAoo()); + info.setTaxCode(response.getTaxCode()); + info.setCategory(response.getCategory()); + info.setDescription(response.getDescription()); + info.setDigitalAddress(response.getDigitalAddress()); + info.setAddress(response.getAddress()); + info.setZipCode(response.getZipCode()); + info.setOrigin(response.getOrigin()); + info.setIstatCode(response.getIstatCode()); + return info; + } + + private CategoryProxyInfo convertCategoryProxyInfo(ProxyCategoryResponse response) { + CategoryProxyInfo info = new CategoryProxyInfo(); + info.setCode(response.getCode()); + info.setName(response.getName()); + info.setKind(response.getKind()); + info.setOrigin(response.getOrigin()); + return info; + } + + @Override + @Retry(name = "retryTimeout") + public GeographicTaxonomies getExtByCode(String code) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getExtByCode code = {}", code); + Assert.hasText(code, CODE_IS_REQUIRED); + GeographicTaxonomiesResponse result = restClient.getExtByCode(code); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getExtByCode result = {}", result); + return toGeoTaxonomies(result); + } + + @Override + public AreaOrganizzativaOmogenea getAooById(String aooId) { + log.debug("getAooById id = {}", aooId); + Assert.hasText(aooId, CODE_IS_REQUIRED); + AooResponse result = restClient.getAooById(aooId); + log.debug("getAooById id = {}", aooId); + return aooMapper.toEntity(result); + } + + @Override + public UnitaOrganizzativa getUoById(String uoId) { + log.debug("getUoById id = {}", uoId); + Assert.hasText(uoId, CODE_IS_REQUIRED); + UoResponse result = restClient.getUoById(uoId); + log.debug("getUoById id = {}", uoId); + return uoMapper.toEntity(result); + } + + @Override + public SaResource getSAFromAnac(String taxId) { + try { + log.debug("getSaByTaxId = {}", taxId); + Assert.hasText(taxId, "TaxId is required"); + PdndResponse result = restClient.getSaByTaxId(taxId); + log.debug("getSaByTaxId = {}", taxId); + if (result != null) { + return saMapper.toResource(result); + } + throw new ResourceNotFoundException(String.format(CREATE_INSTITUTION_NOT_FOUND.getMessage(), taxId), CREATE_INSTITUTION_NOT_FOUND.getCode()); + } catch (FeignException e) { + throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); + } + } + + @Override + public ASResource getASFromIvass(String ivassCode) { + try { + if (ivassCode.matches("\\w*")) { log.debug("getASFromIvass = {}", ivassCode); } + Assert.hasText(ivassCode, "IvassCode is required"); + ResponseEntity result = restClient._searchByOriginIdUsingGET(ivassCode); + if (result != null) { + return asMapper.toResource(result.getBody()); + } + throw new ResourceNotFoundException(String.format(CREATE_INSTITUTION_NOT_FOUND.getMessage(), ivassCode), CREATE_INSTITUTION_NOT_FOUND.getCode()); + } catch (FeignException e) { + throw new MsCoreException(e.getMessage(), String.valueOf(e.status())); + } + } + + private GeographicTaxonomies toGeoTaxonomies(GeographicTaxonomiesResponse result) { + GeographicTaxonomies geographicTaxonomies = new GeographicTaxonomies(); + geographicTaxonomies.setDescription(result.getDescription()); + geographicTaxonomies.setGeotaxId(result.getGeotaxId()); + geographicTaxonomies.setEnable(result.isEnable()); + geographicTaxonomies.setRegionId(result.getRegionId()); + geographicTaxonomies.setProvinceId(result.getProvinceId()); + geographicTaxonomies.setProvinceAbbreviation(result.getProvinceAbbreviation()); + geographicTaxonomies.setCountry(result.getCountry()); + geographicTaxonomies.setCountryAbbreviation(result.getCountryAbbreviation()); + geographicTaxonomies.setIstatCode(result.getIstatCode()); + return geographicTaxonomies; + } +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImpl.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImpl.java new file mode 100644 index 0000000..7f73630 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImpl.java @@ -0,0 +1,38 @@ +package it.pagopa.selfcare.mscore.connector.rest; + +import it.pagopa.selfcare.commons.base.logging.LogUtils; +import it.pagopa.selfcare.mscore.api.ProductConnector; +import it.pagopa.selfcare.product.entity.Product; +import it.pagopa.selfcare.product.service.ProductService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +@Slf4j +@Service +public class ProductConnectorImpl implements ProductConnector { + + private final ProductService productService; + + public ProductConnectorImpl(ProductService productService) { + this.productService = productService; + } + + @Override + public Product getProductById(String productId) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getProductById productId = {}", productId); + Assert.hasText(productId, "A productId is required"); + Product result = productService.getProduct(productId); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getProductById result = {}", result); + return result; + } + + @Override + public Product getProductValidById(String productId) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getProductValidById productId = {}", productId); + Assert.hasText(productId, "A productId is required"); + Product result = productService.getProductIsValid(productId); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getProductValidById result = {}", result); + return result; + } +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImpl.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImpl.java new file mode 100644 index 0000000..0abeec9 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImpl.java @@ -0,0 +1,41 @@ +package it.pagopa.selfcare.mscore.connector.rest; + +import it.pagopa.selfcare.mscore.api.UserApiConnector; +import it.pagopa.selfcare.mscore.connector.rest.client.UserApiRestClient; +import it.pagopa.selfcare.mscore.connector.rest.client.UserInstitutionApiRestClient; +import it.pagopa.selfcare.mscore.connector.rest.mapper.UserMapperClient; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@Slf4j +public class UserApiConnectorImpl implements UserApiConnector { + + private final UserApiRestClient userApiRestClient; + + private final UserInstitutionApiRestClient userInstitutionApiRestClient; + + private final UserMapperClient userMapper; + + public UserApiConnectorImpl(UserApiRestClient userApiRestClient, UserInstitutionApiRestClient userInstitutionApiRestClient, UserMapperClient userMapper) { + this.userApiRestClient = userApiRestClient; + this.userInstitutionApiRestClient = userInstitutionApiRestClient; + this.userMapper = userMapper; + } + + @Override + public List getUserEmails(String institutionId, String productId){ + ResponseEntity> userEmails = userApiRestClient._usersEmailsGet(institutionId, productId); + return userEmails.getBody(); + } + + @Override + public void updateUserInstitution(String institutionId, InstitutionUpdate institutionUpdate){ + userInstitutionApiRestClient._institutionsInstitutionIdPut(institutionId, userMapper.toUpdateDescriptionDto(institutionUpdate)); + } + +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImpl.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImpl.java new file mode 100644 index 0000000..8059bf1 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImpl.java @@ -0,0 +1,124 @@ +package it.pagopa.selfcare.mscore.connector.rest; + +import it.pagopa.selfcare.commons.base.logging.LogUtils; +import it.pagopa.selfcare.mscore.api.UserRegistryConnector; +import it.pagopa.selfcare.mscore.connector.rest.client.UserRegistryRestClient; +import it.pagopa.selfcare.mscore.connector.rest.mapper.UserMapperClient; +import it.pagopa.selfcare.mscore.model.user.User; +import it.pagopa.selfcare.user_registry.generated.openapi.v1.dto.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import java.util.Map; +import java.util.Optional; + + +@Slf4j +@Service +public class UserRegistryConnectorImpl implements UserRegistryConnector { + + private final UserRegistryRestClient restClient; + private final UserMapperClient userMapper; + public static final String USERS_FIELD_LIST = "fiscalCode,name,familyName,workContacts"; + public static final String USERS_FIELD_LIST_WITHOUT_FISCAL_CODE = "name,familyName,workContacts"; + + @Autowired + public UserRegistryConnectorImpl(UserRegistryRestClient restClient, UserMapperClient userMapper) { + this.restClient = restClient; + this.userMapper = userMapper; + } + + @Override + public User getUserByInternalIdWithFiscalCode(String userId) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalIdWithFiscalCode userId = {}", userId); + Assert.hasText(userId, "A userId is required"); + ResponseEntity result = restClient._findByIdUsingGET(USERS_FIELD_LIST, userId); + User user = userMapper.toUser(result.getBody()); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalIdWithFiscalCode result = {}", result); + return user; + } + + @Override + public User getUserByInternalId(String userId) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalId userId = {}", userId); + Assert.hasText(userId, "A userId is required"); + ResponseEntity result = restClient._findByIdUsingGET(USERS_FIELD_LIST_WITHOUT_FISCAL_CODE, userId); + User user = userMapper.toUser(result.getBody()); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalId result = {}", result); + return user; + } + + @Override + public User getUserByInternalIdWithCustomFields(String userId, String fieldList) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalId userId = {}", userId); + Assert.hasText(userId, "A userId is required"); + ResponseEntity result = restClient._findByIdUsingGET(fieldList, userId); + User user = userMapper.toUser(result.getBody()); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByInternalId result = {}", result); + return user; + } + + + @Override + public User getUserByFiscalCode(String fiscalCode) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByFiscalCode fiscalCode = {}", fiscalCode); + Assert.hasText(fiscalCode, "A userId is required"); + UserResource result = restClient._searchUsingPOST(USERS_FIELD_LIST, new UserSearchDto().fiscalCode(fiscalCode)) + .getBody(); + User user = userMapper.toUser(result); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserByFiscalCode result = {}", result); + return user; + } + + @Override + public User persistUserUsingPatch(String name, String familyName, String fiscalCode, String email, String institutionId) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "persistUserByFiscalCode fiscalCode = {}", fiscalCode); + Assert.hasText(fiscalCode, "A fiscalCode is required"); + + SaveUserDto.SaveUserDtoBuilder saveUserDtoBuilder = SaveUserDto.builder() + .name(CertifiableFieldResourceOfstring.builder() + .value(name) + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .familyName(CertifiableFieldResourceOfstring.builder() + .value(familyName) + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .fiscalCode(fiscalCode); + + Optional.ofNullable(email).ifPresent(emailValue -> saveUserDtoBuilder + .workContacts(Map.of(institutionId, WorkContactResource.builder() + .email(CertifiableFieldResourceOfstring.builder() + .value(emailValue) + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .build()))); + + UserId result = restClient._saveUsingPATCH(saveUserDtoBuilder.build()).getBody(); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "persistUserByFiscalCode result = {}", result); + return userMapper.fromUserId(result); + } + + @Override + public User persistUserWorksContractUsingPatch(String fiscalCode, String email, String institutionId) { + log.debug(LogUtils.CONFIDENTIAL_MARKER, "persistUserByFiscalCode fiscalCode = {}", fiscalCode); + Assert.hasText(fiscalCode, "A fiscalCode is required"); + UserId result = restClient._saveUsingPATCH(SaveUserDto.builder() + .fiscalCode(fiscalCode) + .workContacts(Map.of(institutionId, WorkContactResource.builder() + .email(CertifiableFieldResourceOfstring.builder() + .value(email) + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .build())) + .build()) + .getBody(); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "persistUserByFiscalCode result = {}", result); + return userMapper.fromUserId(result); + } + + +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/PartyRegistryProxyRestClient.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/PartyRegistryProxyRestClient.java new file mode 100644 index 0000000..2297aa7 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/PartyRegistryProxyRestClient.java @@ -0,0 +1,47 @@ +package it.pagopa.selfcare.mscore.connector.rest.client; + +import it.pagopa.selfcare.mscore.connector.rest.model.geotaxonomy.GeographicTaxonomiesResponse; +import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.*; +import it.pagopa.selfcare.mscore.model.institution.NationalRegistriesProfessionalAddress; +import it.pagopa.selfcare.registry_proxy.generated.openapi.v1.api.InsuranceCompaniesApi; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +@FeignClient(name = "${rest-client.party-registry-proxy.serviceCode}", url = "${rest-client.party-registry-proxy.base-url}") +public interface PartyRegistryProxyRestClient extends InsuranceCompaniesApi { + + @GetMapping(value = "${rest-client.party-registry-proxy.getInstitutionById.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + ProxyInstitutionResponse getInstitutionById(@PathVariable("institutionId") String id); + + @GetMapping(value = "${rest-client.party-registry-proxy.getCategory.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + ProxyCategoryResponse getCategory(@PathVariable("origin") String origin, @PathVariable("code") String code); + + @PostMapping(value = "${rest-client.party-registry-proxy.getInstitutionsByLegal.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + InstitutionsByLegalResponse getInstitutionsByLegal(@RequestBody InstitutionsByLegalRequest institutions); + + @GetMapping(value = "${rest-client.party-registry-proxy.getLegalAddress.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + NationalRegistriesProfessionalAddress getLegalAddress(@RequestParam(value = "taxId") String taxId); + + @GetMapping(value = "${rest-client.party-registry-proxy.geo-taxonomies.getByCode.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + GeographicTaxonomiesResponse getExtByCode(@PathVariable(value = "geotax_id") String code); + + @GetMapping(value = "${rest-client.party-registry-proxy.aoo.getByCode.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + AooResponse getAooById(@PathVariable(value = "aooId") String aooId); + + @GetMapping(value = "${rest-client.party-registry-proxy.uo.getByCode.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + UoResponse getUoById(@PathVariable(value = "uoId") String uoId); + + @GetMapping(value = "${rest-client.party-registry-proxy.sa.getByTaxId.path}", consumes = APPLICATION_JSON_VALUE) + @ResponseBody + PdndResponse getSaByTaxId(@PathVariable(value = "taxId") String taxId); + +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserApiRestClient.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserApiRestClient.java new file mode 100644 index 0000000..8e26874 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserApiRestClient.java @@ -0,0 +1,8 @@ +package it.pagopa.selfcare.mscore.connector.rest.client; + +import it.pagopa.selfcare.user.generated.openapi.v1.api.UserControllerApi; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "${rest-client.user-ms.serviceCode}", url = "${rest-client.user-ms.base-url}") +public interface UserApiRestClient extends UserControllerApi { +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserInstitutionApiRestClient.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserInstitutionApiRestClient.java new file mode 100644 index 0000000..e1608dd --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserInstitutionApiRestClient.java @@ -0,0 +1,8 @@ +package it.pagopa.selfcare.mscore.connector.rest.client; + +import it.pagopa.selfcare.user.generated.openapi.v1.api.InstitutionControllerApi; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "${rest-client.user-ms.institution.serviceCode}", url = "${rest-client.user-ms.base-url}") +public interface UserInstitutionApiRestClient extends InstitutionControllerApi { +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserRegistryRestClient.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserRegistryRestClient.java new file mode 100644 index 0000000..2fff4d2 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/client/UserRegistryRestClient.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.connector.rest.client; + + +import it.pagopa.selfcare.user_registry.generated.openapi.v1.api.UserApi; +import org.springframework.cloud.openfeign.FeignClient; + + +@FeignClient(name = "${rest-client.user-registry.serviceCode}", url = "${rest-client.user-registry.base-url}") +public interface UserRegistryRestClient extends UserApi { + +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/FeignClientConfig.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/FeignClientConfig.java new file mode 100644 index 0000000..6a5691d --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/FeignClientConfig.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.connector.rest.config; + + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@PropertySource("classpath:config/feign-client.properties") +public class FeignClientConfig { + +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/PartyRegistryProxyRestClientConfig.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/PartyRegistryProxyRestClientConfig.java new file mode 100644 index 0000000..8b7e6ce --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/PartyRegistryProxyRestClientConfig.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.connector.rest.config; + +import it.pagopa.selfcare.commons.connector.rest.config.RestClientBaseConfig; +import it.pagopa.selfcare.mscore.connector.rest.client.PartyRegistryProxyRestClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@Import(RestClientBaseConfig.class) +@EnableFeignClients(clients = PartyRegistryProxyRestClient.class) +@PropertySource("classpath:config/party-registry-proxy-rest-client.properties") +public class PartyRegistryProxyRestClientConfig { + +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserApiRestClientConfig.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserApiRestClientConfig.java new file mode 100644 index 0000000..c3aa77c --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserApiRestClientConfig.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.connector.rest.config; + +import it.pagopa.selfcare.commons.connector.rest.config.RestClientBaseConfig; +import it.pagopa.selfcare.mscore.connector.rest.client.UserApiRestClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@Import(RestClientBaseConfig.class) +@EnableFeignClients(clients = UserApiRestClient.class) +@PropertySource("classpath:config/user-rest-client.properties") +public class UserApiRestClientConfig { +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserInstitutionApiRestClientConfig.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserInstitutionApiRestClientConfig.java new file mode 100644 index 0000000..f07eac2 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserInstitutionApiRestClientConfig.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.connector.rest.config; + +import it.pagopa.selfcare.commons.connector.rest.config.RestClientBaseConfig; +import it.pagopa.selfcare.mscore.connector.rest.client.UserInstitutionApiRestClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@Import(RestClientBaseConfig.class) +@EnableFeignClients(clients = UserInstitutionApiRestClient.class) +@PropertySource("classpath:config/user-rest-client.properties") +public class UserInstitutionApiRestClientConfig { +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserRegistryRestClientConfig.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserRegistryRestClientConfig.java new file mode 100644 index 0000000..727a484 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/config/UserRegistryRestClientConfig.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.connector.rest.config; + +import it.pagopa.selfcare.commons.connector.rest.config.RestClientBaseConfig; +import it.pagopa.selfcare.mscore.connector.rest.client.UserRegistryRestClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@Import({RestClientBaseConfig.class}) +@EnableFeignClients(clients = UserRegistryRestClient.class) +@PropertySource("classpath:config/user-registry-rest-client.properties") +class UserRegistryRestClientConfig { +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoder.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoder.java new file mode 100644 index 0000000..00fb137 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoder.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.connector.rest.decoder; + +import feign.Response; +import feign.codec.ErrorDecoder; +import it.pagopa.selfcare.mscore.exception.BadGatewayException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.exception.ServiceUnavailableException; + +public class FeignErrorDecoder extends ErrorDecoder.Default { + + @Override + public Exception decode(String methodKey, Response response) { + if (response.status() == 503 || response.status() == 504) + throw new ServiceUnavailableException(); + if(response.status() >= 500 && response.status() <= 509) + throw new BadGatewayException(response.reason()); + if(response.status() == 404) + throw new ResourceNotFoundException(response.reason(), "0000"); + + return super.decode(methodKey, response); + } +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AooMapper.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AooMapper.java new file mode 100644 index 0000000..882107b --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AooMapper.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.connector.rest.mapper; + +import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.AooResponse; +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface AooMapper { + + AreaOrganizzativaOmogenea toEntity(AooResponse response); +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AsMapper.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AsMapper.java new file mode 100644 index 0000000..3be6ac2 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/AsMapper.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.connector.rest.mapper; + +import it.pagopa.selfcare.mscore.model.institution.ASResource; +import it.pagopa.selfcare.registry_proxy.generated.openapi.v1.dto.InsuranceCompanyResource; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@Mapper(componentModel = "spring") +public interface AsMapper { + @Mapping(target = "origin", source="origin.value") + ASResource toResource(InsuranceCompanyResource response); +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/SaMapper.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/SaMapper.java new file mode 100644 index 0000000..3bf756f --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/SaMapper.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.connector.rest.mapper; + +import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.PdndResponse; +import it.pagopa.selfcare.mscore.model.institution.SaResource; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface SaMapper { + + SaResource toResource(PdndResponse response); +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UoMapper.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UoMapper.java new file mode 100644 index 0000000..ebf2ef0 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UoMapper.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.connector.rest.mapper; + +import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.AooResponse; +import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.UoResponse; +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface UoMapper { + + UnitaOrganizzativa toEntity(UoResponse response); +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UserMapperClient.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UserMapperClient.java new file mode 100644 index 0000000..ea13619 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/mapper/UserMapperClient.java @@ -0,0 +1,26 @@ +package it.pagopa.selfcare.mscore.connector.rest.mapper; + +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import it.pagopa.selfcare.mscore.model.user.User; +import it.pagopa.selfcare.user.generated.openapi.v1.dto.UpdateDescriptionDto; +import it.pagopa.selfcare.user_registry.generated.openapi.v1.dto.UserId; +import it.pagopa.selfcare.user_registry.generated.openapi.v1.dto.UserResource; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + + + + +@Mapper(componentModel = "spring") +public interface UserMapperClient { + + User toUser (UserResource userResource); + + @Mapping(target = "id", source = "userId.id") + User fromUserId (UserId userId); + + @Mapping(target = "institutionDescription", source = "description") + @Mapping(target = "institutionRootName", source = "parentDescription") + UpdateDescriptionDto toUpdateDescriptionDto (InstitutionUpdate institutionUpdate); + +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/geotaxonomy/GeographicTaxonomiesResponse.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/geotaxonomy/GeographicTaxonomiesResponse.java new file mode 100644 index 0000000..1672eab --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/geotaxonomy/GeographicTaxonomiesResponse.java @@ -0,0 +1,24 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.geotaxonomy; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class GeographicTaxonomiesResponse { + @JsonProperty("code") + private String geotaxId; //REQUIRED + @JsonProperty("desc") + private String description; + @JsonProperty("istat_code")//REQUIRED + private String istatCode; + @JsonProperty("province_id") + private String provinceId; + @JsonProperty("province_abbreviation") + private String provinceAbbreviation; + @JsonProperty("region_id") + private String regionId; + private String country; + @JsonProperty("country_abbreviation") + private String countryAbbreviation; + private boolean enable; //REQUIRED +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AooResponse.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AooResponse.java new file mode 100644 index 0000000..84d8d44 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AooResponse.java @@ -0,0 +1,38 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import com.fasterxml.jackson.annotation.JsonProperty; +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class AooResponse { + + private String id; + private String codiceIpa; + private String denominazioneEnte; + private String codiceFiscaleEnte; + private String codiceUniAoo; + private String denominazioneAoo; + private String mail1; + private String codAoo; + private Origin origin; + + private String dataIstituzione; + private String nomeResponsabile; + private String cognomeResponsabile; + private String mailResponsabile; + private String telefonoResponsabile; + private String codiceComuneISTAT; + private String codiceCatastaleComune; + private String CAP; + private String indirizzo; + private String telefono; + private String fax; + private String tipoMail1; + private String protocolloInformatico; + private String URIProtocolloInformatico; + private String dataAggiornamento; +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AsResponse.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AsResponse.java new file mode 100644 index 0000000..ab04dfa --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/AsResponse.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; + +@Data +public class AsResponse { + private String id; + private String originId; + private String taxCode; + private String description; + private String digitalAddress; + private String workType; + private String registerType; + private String address; + private Origin origin; +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/Institutions.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/Institutions.java new file mode 100644 index 0000000..3a620d4 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/Institutions.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import lombok.Data; + +@Data +public class Institutions { + private String businessName; + private String businessTaxId; +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalRequest.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalRequest.java new file mode 100644 index 0000000..1339e17 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalRequest.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import lombok.Data; + +@Data +public class InstitutionsByLegalRequest { + + private LegalFilter filter; +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalResponse.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalResponse.java new file mode 100644 index 0000000..a02dee3 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/InstitutionsByLegalResponse.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import lombok.Data; + +import java.util.List; + +@Data +public class InstitutionsByLegalResponse { + + private List businesses; + private String legalTaxId; + private String requestDateTime; + +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/LegalFilter.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/LegalFilter.java new file mode 100644 index 0000000..77ffb46 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/LegalFilter.java @@ -0,0 +1,8 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import lombok.Data; + +@Data +public class LegalFilter { + private String legalTaxId; +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/PdndResponse.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/PdndResponse.java new file mode 100644 index 0000000..bc25aa1 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/PdndResponse.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import lombok.Data; + +@Data +public class PdndResponse { + private String id; + private String originId; + private boolean anacEngaged; + private boolean anacEnabled; + private String taxCode; + private String description; + private String digitalAddress; +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyCategoryResponse.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyCategoryResponse.java new file mode 100644 index 0000000..bb1802a --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyCategoryResponse.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import lombok.Data; + +@Data +public class ProxyCategoryResponse { + private String code; + private String name; + private String kind; + private String origin; +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyInstitutionResponse.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyInstitutionResponse.java new file mode 100644 index 0000000..d3245d4 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/ProxyInstitutionResponse.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import lombok.Data; + +@Data +public class ProxyInstitutionResponse { + private String id; + private String originId; + private String o; + private String ou; + private String aoo; + private String taxCode; + private String category; + private String description; + private String digitalAddress; + private String address; + private String zipCode; + private String origin; + private String istatCode; +} diff --git a/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/UoResponse.java b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/UoResponse.java new file mode 100644 index 0000000..27befd6 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/java/it/pagopa/selfcare/mscore/connector/rest/model/registryproxy/UoResponse.java @@ -0,0 +1,35 @@ +package it.pagopa.selfcare.mscore.connector.rest.model.registryproxy; + +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; + +@Data +public class UoResponse { + + private String id; + private String codiceIpa; + private String denominazioneEnte; + private String codiceFiscaleEnte; + private String codiceFiscaleSfe; + private String codiceUniUo; + private String codiceUniUoPadre; + private String codiceUniAoo; + private String descrizioneUo; + private String mail1; + private Origin origin; + + private String dataIstituzione; + private String nomeResponsabile; + private String cognomeResponsabile; + private String mailResponsabile; + private String telefonoResponsabile; + private String codiceComuneISTAT; + private String codiceCatastaleComune; + private String CAP; + private String indirizzo; + private String telefono; + private String fax; + private String tipoMail1; + private String url; + private String dataAggiornamento; +} diff --git a/apps/institution-ms/connector/rest/src/main/resources/config/feign-client.properties b/apps/institution-ms/connector/rest/src/main/resources/config/feign-client.properties new file mode 100644 index 0000000..cf0dfbb --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/resources/config/feign-client.properties @@ -0,0 +1,2 @@ +feign.okhttp.enabled=true +feign.autoconfiguration.jackson.enabled=true \ No newline at end of file diff --git a/apps/institution-ms/connector/rest/src/main/resources/config/party-registry-proxy-rest-client.properties b/apps/institution-ms/connector/rest/src/main/resources/config/party-registry-proxy-rest-client.properties new file mode 100644 index 0000000..e7f395d --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/resources/config/party-registry-proxy-rest-client.properties @@ -0,0 +1,21 @@ +rest-client.party-registry-proxy.serviceCode=party-registry-proxy +rest-client.party-registry-proxy.base-url=${USERVICE_PARTY_REGISTRY_PROXY_URL} +rest-client.party-registry-proxy.getInstitutionById.path=/institutions/{institutionId} +rest-client.party-registry-proxy.getCategory.path=/origins/{origin}/categories/{code} +rest-client.party-registry-proxy.getInstitutionsByLegal.path=/info-camere/institutions +rest-client.party-registry-proxy.getLegalAddress.path=/national-registries/legal-address +rest-client.party-registry-proxy.geo-taxonomies.getByCode.path=/geotaxonomies/{geotax_id} +rest-client.party-registry-proxy.aoo.getByCode.path=/aoo/{aooId} +rest-client.party-registry-proxy.uo.getByCode.path=/uo/{uoId} +rest-client.party-registry-proxy.sa.getByTaxId.path=/stations/{taxId} + +feign.client.config.party-registry-proxy.requestInterceptors[0]=it.pagopa.selfcare.commons.connector.rest.interceptor.AuthorizationHeaderInterceptor +feign.client.config.party-registry-proxy.requestInterceptors[1]=it.pagopa.selfcare.commons.connector.rest.interceptor.PartyTraceIdInterceptor +feign.client.config.party-registry-proxy.connectTimeout=${PARTY_REGISTRY_PROXY_CLIENT_CONNECT_TIMEOUT:${REST_CLIENT_CONNECT_TIMEOUT:5000}} +feign.client.config.party-registry-proxy.readTimeout=${PARTY_REGISTRY_PROXY_CLIENT_READ_TIMEOUT:${REST_CLIENT_READ_TIMEOUT:5000}} +feign.client.config.party-registry-proxy.loggerLevel=${PARTY_REGISTRY_PROXY_LOG_LEVEL:${REST_CLIENT_LOG_LEVEL:FULL}} + +feign.client.config.party-registry-proxy.errorDecoder=it.pagopa.selfcare.mscore.connector.rest.decoder.FeignErrorDecoder + + + diff --git a/apps/institution-ms/connector/rest/src/main/resources/config/user-registry-rest-client.properties b/apps/institution-ms/connector/rest/src/main/resources/config/user-registry-rest-client.properties new file mode 100644 index 0000000..5285e06 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/resources/config/user-registry-rest-client.properties @@ -0,0 +1,3 @@ +rest-client.user-registry.serviceCode=user-registry +rest-client.user-registry.base-url=${USERVICE_USER_REGISTRY_URL} +feign.client.config.user-registry.defaultRequestHeaders.x-api-key[0]=${USER_REGISTRY_API_KEY} diff --git a/apps/institution-ms/connector/rest/src/main/resources/config/user-rest-client.properties b/apps/institution-ms/connector/rest/src/main/resources/config/user-rest-client.properties new file mode 100644 index 0000000..b15e498 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/main/resources/config/user-rest-client.properties @@ -0,0 +1,14 @@ +rest-client.user-ms.base-url=${SELFCARE_USER_URL:http://localhost:8080} +rest-client.user-ms.serviceCode=user-ms +rest-client.user-ms.institution.serviceCode=user-institution-ms +rest-client.user-permission.serviceCode=user-permission +feign.client.config.user-ms.requestInterceptors[0]=it.pagopa.selfcare.commons.connector.rest.interceptor.AuthorizationHeaderInterceptor +feign.client.config.user-ms.connectTimeout=${SELFCARE_USER_REST_CLIENT_CONNECT_TIMEOUT:${REST_CLIENT_CONNECT_TIMEOUT:5000}} +feign.client.config.user-ms.readTimeout=${SELFCARE_USER_REST_CLIENT_READ_TIMEOUT:${REST_CLIENT_READ_TIMEOUT:5000}} +feign.client.config.user-ms.loggerLevel=${SELFCARE_USER_REST_CLIENT_LOGGER_LEVEL:${REST_CLIENT_LOGGER_LEVEL:FULL}} +feign.client.config.user-ms.errorDecoder=it.pagopa.selfcare.mscore.connector.rest.decoder.FeignErrorDecoder +feign.client.config.user-institution-ms.requestInterceptors[0]=it.pagopa.selfcare.commons.connector.rest.interceptor.AuthorizationHeaderInterceptor +feign.client.config.user-institution-ms.connectTimeout=${SELFCARE_USER_REST_CLIENT_CONNECT_TIMEOUT:${REST_CLIENT_CONNECT_TIMEOUT:5000}} +feign.client.config.user-institution-ms.readTimeout=${SELFCARE_USER_REST_CLIENT_READ_TIMEOUT:${REST_CLIENT_READ_TIMEOUT:5000}} +feign.client.config.user-institution-ms.loggerLevel=${SELFCARE_USER_REST_CLIENT_LOGGER_LEVEL:${REST_CLIENT_LOGGER_LEVEL:FULL}} +feign.client.config.user-institution-ms.errorDecoder=it.pagopa.selfcare.mscore.connector.rest.decoder.FeignErrorDecoder diff --git a/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImplTest.java b/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImplTest.java new file mode 100644 index 0000000..0c86b3b --- /dev/null +++ b/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/PartyRegistryProxyConnectorImplTest.java @@ -0,0 +1,591 @@ +package it.pagopa.selfcare.mscore.connector.rest; + +import feign.FeignException; +import it.pagopa.selfcare.mscore.connector.rest.client.PartyRegistryProxyRestClient; +import it.pagopa.selfcare.mscore.connector.rest.mapper.*; +import it.pagopa.selfcare.mscore.connector.rest.model.geotaxonomy.GeographicTaxonomiesResponse; +import it.pagopa.selfcare.mscore.connector.rest.model.registryproxy.*; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.registry_proxy.generated.openapi.v1.dto.InsuranceCompanyResource; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.function.Executable; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.ArrayList; +import java.util.List; + +import static it.pagopa.selfcare.commons.utils.TestUtils.checkNotNullFields; +import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(SpringExtension.class) +class PartyRegistryProxyConnectorImplTest { + @InjectMocks + private PartyRegistryProxyConnectorImpl partyRegistryProxyConnectorImpl; + + @Mock + private PartyRegistryProxyRestClient partyRegistryProxyRestClient; + + @Spy + private AooMapper aooMapper = new AooMapperImpl(); + + @Spy + private UoMapper uoMapper = new UoMapperImpl(); + + @Spy + private SaMapper saMapper = new SaMapperImpl(); + @Spy + private AsMapper asMapper = new AsMapperImpl(); + + private final static AooResponse aooResponse; + private final static UoResponse uoResponse; + private final static PdndResponse pdndResponse; + private final static InsuranceCompanyResource asResponse; + + static { + aooResponse = new AooResponse(); + aooResponse.setCodAoo("codAoo"); + aooResponse.setId("id"); + aooResponse.setOrigin(Origin.IPA); + + uoResponse = new UoResponse(); + uoResponse.setCodiceUniUo("codiceUniUo"); + uoResponse.setId("id"); + uoResponse.setOrigin(Origin.IPA); + pdndResponse = mockInstance(new PdndResponse()); + asResponse = mockInstance(new InsuranceCompanyResource()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionById(String)} + */ + @Test + void testGetInstitutionById() { + ProxyInstitutionResponse proxyInstitutionResponse = new ProxyInstitutionResponse(); + proxyInstitutionResponse.setAddress("42 Main St"); + proxyInstitutionResponse.setAoo("Aoo"); + proxyInstitutionResponse.setCategory("Category"); + proxyInstitutionResponse.setDescription("The characteristics of someone or something"); + proxyInstitutionResponse.setDigitalAddress("42 Main St"); + proxyInstitutionResponse.setId("42"); + proxyInstitutionResponse.setO("foo"); + proxyInstitutionResponse.setOrigin("Origin"); + proxyInstitutionResponse.setOriginId("42"); + proxyInstitutionResponse.setOu("Ou"); + proxyInstitutionResponse.setTaxCode("Tax Code"); + proxyInstitutionResponse.setZipCode("21654"); + when(partyRegistryProxyRestClient.getInstitutionById(any())).thenReturn(proxyInstitutionResponse); + InstitutionProxyInfo actualInstitutionById = partyRegistryProxyConnectorImpl.getInstitutionById("42"); + assertEquals("42 Main St", actualInstitutionById.getAddress()); + assertEquals("21654", actualInstitutionById.getZipCode()); + assertEquals("Tax Code", actualInstitutionById.getTaxCode()); + assertEquals("Ou", actualInstitutionById.getOu()); + assertEquals("42", actualInstitutionById.getOriginId()); + assertEquals("Origin", actualInstitutionById.getOrigin()); + assertEquals("foo", actualInstitutionById.getO()); + assertEquals("42", actualInstitutionById.getId()); + assertEquals("42 Main St", actualInstitutionById.getDigitalAddress()); + assertEquals("The characteristics of someone or something", actualInstitutionById.getDescription()); + assertEquals("Category", actualInstitutionById.getCategory()); + assertEquals("Aoo", actualInstitutionById.getAoo()); + verify(partyRegistryProxyRestClient).getInstitutionById(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionById(String)} + */ + @Test + void testGetInstitutionById2() { + when(partyRegistryProxyRestClient.getInstitutionById(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionById("42")); + verify(partyRegistryProxyRestClient).getInstitutionById(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionById(String)} + */ + @Test + void testGetInstitutionById3() { + ProxyInstitutionResponse proxyInstitutionResponse = new ProxyInstitutionResponse(); + proxyInstitutionResponse.setAddress("42 Main St"); + proxyInstitutionResponse.setAoo("Aoo"); + proxyInstitutionResponse.setCategory("Category"); + proxyInstitutionResponse.setDescription("The characteristics of someone or something"); + proxyInstitutionResponse.setDigitalAddress("42 Main St"); + proxyInstitutionResponse.setId("42"); + proxyInstitutionResponse.setO("foo"); + proxyInstitutionResponse.setOrigin("Origin"); + proxyInstitutionResponse.setOriginId("42"); + proxyInstitutionResponse.setOu("Ou"); + proxyInstitutionResponse.setTaxCode("Tax Code"); + proxyInstitutionResponse.setZipCode("21654"); + when(partyRegistryProxyRestClient.getInstitutionById(any())).thenReturn(proxyInstitutionResponse); + InstitutionProxyInfo actualInstitutionById = partyRegistryProxyConnectorImpl.getInstitutionById("42"); + assertEquals("42 Main St", actualInstitutionById.getAddress()); + assertEquals("21654", actualInstitutionById.getZipCode()); + assertEquals("Tax Code", actualInstitutionById.getTaxCode()); + assertEquals("Ou", actualInstitutionById.getOu()); + assertEquals("42", actualInstitutionById.getOriginId()); + assertEquals("Origin", actualInstitutionById.getOrigin()); + assertEquals("foo", actualInstitutionById.getO()); + assertEquals("42", actualInstitutionById.getId()); + assertEquals("42 Main St", actualInstitutionById.getDigitalAddress()); + assertEquals("The characteristics of someone or something", actualInstitutionById.getDescription()); + assertEquals("Category", actualInstitutionById.getCategory()); + assertEquals("Aoo", actualInstitutionById.getAoo()); + verify(partyRegistryProxyRestClient).getInstitutionById(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionById(String)} + */ + @Test + void testGetInstitutionById4() { + when(partyRegistryProxyRestClient.getInstitutionById(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionById("42")); + verify(partyRegistryProxyRestClient).getInstitutionById(any()); + } + + @Test + void testGetInstitutionById5() { + FeignException feignException = mock(FeignException.class); + when(partyRegistryProxyRestClient.getInstitutionById(any())) + .thenThrow(feignException); + assertThrows(MsCoreException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionById("42")); + verify(partyRegistryProxyRestClient).getInstitutionById(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getCategory(String, String)} + */ + @Test + void testGetCategory() { + ProxyCategoryResponse proxyCategoryResponse = new ProxyCategoryResponse(); + proxyCategoryResponse.setCode("Code"); + proxyCategoryResponse.setKind("Kind"); + proxyCategoryResponse.setName("Name"); + proxyCategoryResponse.setOrigin("Origin"); + when(partyRegistryProxyRestClient.getCategory(any(), any())).thenReturn(proxyCategoryResponse); + CategoryProxyInfo actualCategory = partyRegistryProxyConnectorImpl.getCategory("Origin", "Code"); + assertEquals("Code", actualCategory.getCode()); + assertEquals("Origin", actualCategory.getOrigin()); + assertEquals("Name", actualCategory.getName()); + assertEquals("Kind", actualCategory.getKind()); + verify(partyRegistryProxyRestClient).getCategory(any(), any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getCategory(String, String)} + */ + @Test + void testGetCategory2() { + when(partyRegistryProxyRestClient.getCategory(any(), any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, + () -> partyRegistryProxyConnectorImpl.getCategory("Origin", "Code")); + verify(partyRegistryProxyRestClient).getCategory(any(), any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getCategory(String, String)} + */ + @Test + void testGetCategory3() { + ProxyCategoryResponse proxyCategoryResponse = new ProxyCategoryResponse(); + proxyCategoryResponse.setCode("Code"); + proxyCategoryResponse.setKind("Kind"); + proxyCategoryResponse.setName("Name"); + proxyCategoryResponse.setOrigin("Origin"); + when(partyRegistryProxyRestClient.getCategory(any(), any())).thenReturn(proxyCategoryResponse); + CategoryProxyInfo actualCategory = partyRegistryProxyConnectorImpl.getCategory("Origin", "Code"); + assertEquals("Code", actualCategory.getCode()); + assertEquals("Origin", actualCategory.getOrigin()); + assertEquals("Name", actualCategory.getName()); + assertEquals("Kind", actualCategory.getKind()); + verify(partyRegistryProxyRestClient).getCategory(any(), any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getCategory(String, String)} + */ + @Test + void testGetCategory4() { + when(partyRegistryProxyRestClient.getCategory(any(), any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, + () -> partyRegistryProxyConnectorImpl.getCategory("Origin", "Code")); + verify(partyRegistryProxyRestClient).getCategory(any(), any()); + } + + @Test + void testGetCategory5() { + FeignException feignException = mock(FeignException.class); + when(partyRegistryProxyRestClient.getCategory(any(), any())) + .thenThrow(feignException); + assertThrows(MsCoreException.class, () -> partyRegistryProxyConnectorImpl.getCategory("origin", "code")); + verify(partyRegistryProxyRestClient).getCategory(any(), any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal() { + InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); + institutionsByLegalResponse.setBusinesses(new ArrayList<>()); + institutionsByLegalResponse.setLegalTaxId("42"); + institutionsByLegalResponse.setRequestDateTime("2020-03-01"); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenReturn(institutionsByLegalResponse); + assertTrue(partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42").isEmpty()); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal2() { + Institutions institutions = new Institutions(); + institutions.setBusinessName("Business Name"); + institutions.setBusinessTaxId("42"); + + ArrayList institutionsList = new ArrayList<>(); + institutionsList.add(institutions); + + InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); + institutionsByLegalResponse.setBusinesses(institutionsList); + institutionsByLegalResponse.setLegalTaxId("42"); + institutionsByLegalResponse.setRequestDateTime("2020-03-01"); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenReturn(institutionsByLegalResponse); + List actualInstitutionsByLegal = partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42"); + assertEquals(1, actualInstitutionsByLegal.size()); + InstitutionByLegal getResult = actualInstitutionsByLegal.get(0); + assertEquals("Business Name", getResult.getBusinessName()); + assertEquals("42", getResult.getBusinessTaxId()); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal3() { + Institutions institutions = new Institutions(); + institutions.setBusinessName("Business Name"); + institutions.setBusinessTaxId("42"); + + Institutions institutions1 = new Institutions(); + institutions1.setBusinessName("Business Name"); + institutions1.setBusinessTaxId("42"); + + ArrayList institutionsList = new ArrayList<>(); + institutionsList.add(institutions1); + institutionsList.add(institutions); + + InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); + institutionsByLegalResponse.setBusinesses(institutionsList); + institutionsByLegalResponse.setLegalTaxId("42"); + institutionsByLegalResponse.setRequestDateTime("2020-03-01"); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenReturn(institutionsByLegalResponse); + List actualInstitutionsByLegal = partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42"); + assertEquals(2, actualInstitutionsByLegal.size()); + InstitutionByLegal getResult = actualInstitutionsByLegal.get(0); + assertEquals("42", getResult.getBusinessTaxId()); + InstitutionByLegal getResult1 = actualInstitutionsByLegal.get(1); + assertEquals("42", getResult1.getBusinessTaxId()); + assertEquals("Business Name", getResult1.getBusinessName()); + assertEquals("Business Name", getResult.getBusinessName()); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal4() { + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42")); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal5() { + InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); + institutionsByLegalResponse.setBusinesses(new ArrayList<>()); + institutionsByLegalResponse.setLegalTaxId("42"); + institutionsByLegalResponse.setRequestDateTime("2020-03-01"); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenReturn(institutionsByLegalResponse); + assertTrue(partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42").isEmpty()); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal6() { + Institutions institutions = new Institutions(); + institutions.setBusinessName("Business Name"); + institutions.setBusinessTaxId("42"); + + ArrayList institutionsList = new ArrayList<>(); + institutionsList.add(institutions); + + InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); + institutionsByLegalResponse.setBusinesses(institutionsList); + institutionsByLegalResponse.setLegalTaxId("42"); + institutionsByLegalResponse.setRequestDateTime("2020-03-01"); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenReturn(institutionsByLegalResponse); + List actualInstitutionsByLegal = partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42"); + assertEquals(1, actualInstitutionsByLegal.size()); + InstitutionByLegal getResult = actualInstitutionsByLegal.get(0); + assertEquals("Business Name", getResult.getBusinessName()); + assertEquals("42", getResult.getBusinessTaxId()); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal7() { + Institutions institutions = new Institutions(); + institutions.setBusinessName("Business Name"); + institutions.setBusinessTaxId("42"); + + Institutions institutions1 = new Institutions(); + institutions1.setBusinessName("Business Name"); + institutions1.setBusinessTaxId("42"); + + ArrayList institutionsList = new ArrayList<>(); + institutionsList.add(institutions1); + institutionsList.add(institutions); + + InstitutionsByLegalResponse institutionsByLegalResponse = new InstitutionsByLegalResponse(); + institutionsByLegalResponse.setBusinesses(institutionsList); + institutionsByLegalResponse.setLegalTaxId("42"); + institutionsByLegalResponse.setRequestDateTime("2020-03-01"); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenReturn(institutionsByLegalResponse); + List actualInstitutionsByLegal = partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42"); + assertEquals(2, actualInstitutionsByLegal.size()); + InstitutionByLegal getResult = actualInstitutionsByLegal.get(0); + assertEquals("42", getResult.getBusinessTaxId()); + InstitutionByLegal getResult1 = actualInstitutionsByLegal.get(1); + assertEquals("42", getResult1.getBusinessTaxId()); + assertEquals("Business Name", getResult1.getBusinessName()); + assertEquals("Business Name", getResult.getBusinessName()); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getInstitutionsByLegal(String)} + */ + @Test + void testGetInstitutionsByLegal8() { + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42")); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + @Test + void testGetInstitutionsByLegal9() { + FeignException feignException = mock(FeignException.class); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())) + .thenThrow(feignException); + assertThrows(MsCoreException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42")); + verify(partyRegistryProxyRestClient).getInstitutionsByLegal(any()); + } + + @Test + void testGetInstitutionsByLegal10() { + InstitutionsByLegalResponse response = new InstitutionsByLegalResponse(); + when(partyRegistryProxyRestClient.getInstitutionsByLegal(any())).thenReturn(response); + assertNotNull(partyRegistryProxyConnectorImpl.getInstitutionsByLegal("42")); + } + + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getLegalAddress(String)} + */ + @Test + void testGetLegalAddress() { + NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); + nationalRegistriesProfessionalAddress.setAddress("42 Main St"); + nationalRegistriesProfessionalAddress.setZipCode("21654"); + when(partyRegistryProxyRestClient.getLegalAddress(any())) + .thenReturn(nationalRegistriesProfessionalAddress); + assertSame(nationalRegistriesProfessionalAddress, partyRegistryProxyConnectorImpl.getLegalAddress("42")); + verify(partyRegistryProxyRestClient).getLegalAddress(any()); + } + + /** + * Method under test: {@link PartyRegistryProxyConnectorImpl#getLegalAddress(String)} + */ + @Test + void testGetLegalAddress2() { + when(partyRegistryProxyRestClient.getLegalAddress(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getLegalAddress("id")); + } + + @Test + void testGetLegalAddress3() { + FeignException feignException = mock(FeignException.class); + when(partyRegistryProxyRestClient.getLegalAddress(any())) + .thenThrow(feignException); + assertThrows(MsCoreException.class, () -> partyRegistryProxyConnectorImpl.getLegalAddress("42")); + verify(partyRegistryProxyRestClient).getLegalAddress(any()); + } + + @Test + void testGetInstitutionByIdThrow() { + when(partyRegistryProxyRestClient.getInstitutionById(any())).thenReturn(null); + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getInstitutionById("id")); + verify(partyRegistryProxyRestClient).getInstitutionById(any()); + } + + + @Test + void getExtByCode() { + GeographicTaxonomiesResponse geographicTaxonomiesResponse = new GeographicTaxonomiesResponse(); + geographicTaxonomiesResponse.setGeotaxId("Code"); + geographicTaxonomiesResponse.setCountry("GB"); + geographicTaxonomiesResponse.setCountryAbbreviation("GB"); + geographicTaxonomiesResponse.setDescription("The characteristics of someone or something"); + geographicTaxonomiesResponse.setEnable(true); + geographicTaxonomiesResponse.setIstatCode(""); + geographicTaxonomiesResponse.setProvinceId("Province"); + geographicTaxonomiesResponse.setProvinceAbbreviation("Province Abbreviation"); + geographicTaxonomiesResponse.setRegionId("us-east-2"); + when(partyRegistryProxyRestClient.getExtByCode(any())).thenReturn(geographicTaxonomiesResponse); + GeographicTaxonomies actualExtByCode = partyRegistryProxyConnectorImpl.getExtByCode("Code"); + assertEquals("Code", actualExtByCode.getGeotaxId()); + assertTrue(actualExtByCode.isEnable()); + assertEquals("The characteristics of someone or something", actualExtByCode.getDescription()); + verify(partyRegistryProxyRestClient).getExtByCode(any()); + } + + @Test + void getExtByCode_notFound() { + when(partyRegistryProxyRestClient.getExtByCode(any())).thenThrow(new ResourceNotFoundException("", "")); + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getExtByCode("Code")); + } + + @Test + void shouldGetAoo() { + when(partyRegistryProxyRestClient.getAooById(anyString())) + .thenReturn(aooResponse); + + AreaOrganizzativaOmogenea aoo = partyRegistryProxyConnectorImpl.getAooById("example"); + assertEquals(aoo.getCodAoo(), aooResponse.getCodAoo()); + assertEquals(aoo.getId(), aooResponse.getId()); + assertEquals(aoo.getOrigin(), aooResponse.getOrigin()); + } + + @Test + void shouldGetUo() { + when(partyRegistryProxyRestClient.getUoById(anyString())) + .thenReturn(uoResponse); + + UnitaOrganizzativa uo = partyRegistryProxyConnectorImpl.getUoById("example"); + assertEquals(uo.getCodiceUniUo(), uoResponse.getCodiceUniUo()); + assertEquals(uo.getId(), uoResponse.getId()); + assertEquals(uo.getOrigin(), uoResponse.getOrigin()); + } + + @Test + void shouldGetSa() { + when(partyRegistryProxyRestClient.getUoById(anyString())) + .thenReturn(uoResponse); + + UnitaOrganizzativa uo = partyRegistryProxyConnectorImpl.getUoById("example"); + assertEquals(uo.getCodiceUniUo(), uoResponse.getCodiceUniUo()); + assertEquals(uo.getId(), uoResponse.getId()); + assertEquals(uo.getOrigin(), uoResponse.getOrigin()); + } + + @Test + void getSAFromAnac() { + //given + String taxId = "taxId"; + when(partyRegistryProxyRestClient.getSaByTaxId(anyString())).thenReturn(pdndResponse); + //when + SaResource result = partyRegistryProxyConnectorImpl.getSAFromAnac(taxId); + //then + checkNotNullFields(result); + verify(partyRegistryProxyRestClient, times(1)).getSaByTaxId(taxId); + } + + @Test + void getSAFromAnacNotFound() { + //given + String taxId = "taxId"; + when(partyRegistryProxyRestClient.getSaByTaxId(anyString())).thenThrow(ResourceNotFoundException.class); + //when + Executable executable = () -> partyRegistryProxyConnectorImpl.getSAFromAnac(taxId); + //then + assertThrows(ResourceNotFoundException.class, executable); + verify(partyRegistryProxyRestClient, times(1)).getSaByTaxId(taxId); + } + + @Test + void getASFromIvass() { + //given + ResponseEntity response = new ResponseEntity<>(asResponse, HttpStatus.FOUND); + String ivassCode = "ivassCode"; + when(partyRegistryProxyRestClient._searchByOriginIdUsingGET(anyString())).thenReturn(response); + //when + ASResource result = partyRegistryProxyConnectorImpl.getASFromIvass(ivassCode); + //then + checkNotNullFields(result); + verify(partyRegistryProxyRestClient, times(1))._searchByOriginIdUsingGET(ivassCode); + } + + @Test + void getASFromIvassNotFound() { + //given + String ivassCode = "ivassCode"; + when(partyRegistryProxyRestClient._searchByOriginIdUsingGET(anyString())).thenReturn(null); + + //when + Executable executable = () -> partyRegistryProxyConnectorImpl.getASFromIvass(ivassCode); + //then + assertThrows(ResourceNotFoundException.class, executable); + verify(partyRegistryProxyRestClient, times(1))._searchByOriginIdUsingGET(ivassCode); + } + + @Test + void shouldThrowResourceNotFoundExceptionWhenIvassCodeNotFound() { + String ivassCode = "12345"; + + when(partyRegistryProxyRestClient._searchByOriginIdUsingGET(ivassCode)).thenReturn(null); + + assertThrows(ResourceNotFoundException.class, () -> partyRegistryProxyConnectorImpl.getASFromIvass(ivassCode)); + } +} + diff --git a/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImplTest.java b/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImplTest.java new file mode 100644 index 0000000..a19eff0 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/ProductConnectorImplTest.java @@ -0,0 +1,56 @@ +package it.pagopa.selfcare.mscore.connector.rest; + +import it.pagopa.selfcare.product.entity.Product; +import it.pagopa.selfcare.product.entity.ProductStatus; +import it.pagopa.selfcare.product.service.ProductService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {ProductConnectorImpl.class}) +@ExtendWith(SpringExtension.class) +class ProductConnectorImplTest { + @Autowired + private ProductConnectorImpl productConnectorImpl; + + @MockBean + private ProductService productService; + + /** + * Method under test: {@link ProductConnectorImpl#getProductById(String)} + */ + @Test + void testGetProductById() { + Product product = dummyProduct(); + when(productService.getProduct(any())).thenReturn(product); + assertSame(product, productConnectorImpl.getProductById("42")); + verify(productService).getProduct(any()); + } + + @Test + void testGetProductValid() { + Product product = dummyProduct(); + when(productService.getProductIsValid(any())).thenReturn(product); + assertSame(product, productConnectorImpl.getProductValidById("42")); + verify(productService).getProductIsValid(any()); + } + + private Product dummyProduct(){ + Product product = new Product(); + product.setContractTemplatePath("Contract Template Path"); + product.setContractTemplateVersion("1.0.2"); + product.setId("42"); + product.setParentId("42"); + product.setRoleMappings(null); + product.setStatus(ProductStatus.ACTIVE); + product.setTitle("Dr"); + return product; + } +} + diff --git a/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImplTest.java b/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImplTest.java new file mode 100644 index 0000000..aba11a2 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserApiConnectorImplTest.java @@ -0,0 +1,85 @@ +package it.pagopa.selfcare.mscore.connector.rest; + +import it.pagopa.selfcare.mscore.connector.rest.client.UserApiRestClient; +import it.pagopa.selfcare.mscore.connector.rest.client.UserInstitutionApiRestClient; +import it.pagopa.selfcare.mscore.connector.rest.mapper.UserMapperClient; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import it.pagopa.selfcare.user.generated.openapi.v1.dto.UpdateDescriptionDto; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.function.Executable; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {UserApiConnectorImpl.class}) +@ExtendWith(SpringExtension.class) +class UserApiConnectorImplTest { + + @Autowired + private UserApiConnectorImpl userApiConnector; + + @MockBean + private UserApiRestClient userApiRestClient; + + @MockBean + private UserInstitutionApiRestClient userInstitutionApiRestClient; + + @MockBean + private UserMapperClient userMapperClient; + + @Test + void getUserEmailsByInstitutionAndProduct(){ + //given + final String institutionId = "institutionId"; + final String productId = "productId"; + ResponseEntity> emails = new ResponseEntity<>(List.of("email"), HttpStatus.OK); + + when(userApiRestClient._usersEmailsGet(anyString(), anyString())).thenReturn(emails); + + //when + List userEmails = userApiConnector.getUserEmails(institutionId, productId); + //then + assertFalse(userEmails.isEmpty()); + verify(userApiRestClient, times(1))._usersEmailsGet(institutionId, productId); + + } + + @Test + void updateUserInstitution(){ + //given + final String institutionId = "institutionId"; + final String description = "description"; + final String rootName = "rootName"; + + UpdateDescriptionDto descriptionDto = new UpdateDescriptionDto(); + descriptionDto.setInstitutionDescription(description); + descriptionDto.setInstitutionRootName(rootName); + + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDescription(description); + institutionUpdate.setParentDescription(rootName); + + when(userMapperClient.toUpdateDescriptionDto(any())).thenReturn(descriptionDto); + + //when + final Executable executable = () -> userApiConnector.updateUserInstitution(institutionId, institutionUpdate); + + //then + Assertions.assertDoesNotThrow(executable); + verify(userInstitutionApiRestClient)._institutionsInstitutionIdPut(institutionId, descriptionDto); + } + + + +} \ No newline at end of file diff --git a/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImplTest.java b/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImplTest.java new file mode 100644 index 0000000..f10640f --- /dev/null +++ b/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/UserRegistryConnectorImplTest.java @@ -0,0 +1,155 @@ +package it.pagopa.selfcare.mscore.connector.rest; + + +import it.pagopa.selfcare.mscore.connector.rest.client.UserRegistryRestClient; +import it.pagopa.selfcare.mscore.connector.rest.mapper.UserMapperClientImpl; +import it.pagopa.selfcare.mscore.model.user.User; +import it.pagopa.selfcare.user_registry.generated.openapi.v1.dto.*; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.Map; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {UserRegistryConnectorImpl.class, UserMapperClientImpl.class}) +@ExtendWith(SpringExtension.class) +class UserRegistryConnectorImplTest { + @Autowired + private UserRegistryConnectorImpl userRegistryConnector; + + @MockBean + private UserRegistryRestClient userRegistryRestClient; + + @Test + void getUserByInternalIdWithCustomFields(){ + UserResource userResource = new UserResource(); + userResource.setFiscalCode("42"); + ResponseEntity userIdResponseEntity = ResponseEntity.ok(userResource); + when(userRegistryRestClient._findByIdUsingGET(any(), any())).thenReturn(userIdResponseEntity); + User user = userRegistryConnector.getUserByInternalIdWithCustomFields("42","workContacts"); + assertEquals(user.getFiscalCode(), userResource.getFiscalCode()); + verify(userRegistryRestClient)._findByIdUsingGET("workContacts", "42"); + + } + + /** + * Method under test: {@link UserRegistryConnectorImpl#getUserByFiscalCode(String)} + */ + @Test + void testGetUserByFiscalCode() { + UserResource userResource = new UserResource(); + userResource.setFiscalCode("42"); + ResponseEntity userIdResponseEntity = ResponseEntity.ok(userResource); + when(userRegistryRestClient._searchUsingPOST(any(), any())).thenReturn(userIdResponseEntity); + User user = userRegistryConnector.getUserByFiscalCode("42"); + assertEquals(user.getFiscalCode(), userResource.getFiscalCode()); + verify(userRegistryRestClient)._searchUsingPOST("fiscalCode,name,familyName,workContacts", UserSearchDto.builder().fiscalCode("42").build()); + } + + @Test + void testGetUserByInternalIdWithFiscalCode() { + UUID id = UUID.randomUUID(); + UserResource userResource = new UserResource(); + userResource.setId(id); + ResponseEntity userIdResponseEntity = ResponseEntity.ok(userResource); + when(userRegistryRestClient._findByIdUsingGET(any(), any())).thenReturn(userIdResponseEntity); + User user = userRegistryConnector.getUserByInternalIdWithFiscalCode(id.toString()); + assertEquals(user.getId(), userResource.getId().toString()); + verify(userRegistryRestClient)._findByIdUsingGET("fiscalCode,name,familyName,workContacts", id.toString()); + } + + @Test + void testPersistUserUsingPatch() { + UUID id = UUID.randomUUID(); + UserId userId = new UserId(); + userId.setId(id); + ResponseEntity userIdResponseEntity = ResponseEntity.ok(userId); + when(userRegistryRestClient._saveUsingPATCH(any())).thenReturn(userIdResponseEntity); + User user = userRegistryConnector.persistUserUsingPatch("name", "familyName", "fiscalCode", "email","institutionId"); + assertEquals(user.getId(), id.toString()); + SaveUserDto saveUserDto = SaveUserDto.builder() + .name(CertifiableFieldResourceOfstring.builder() + .value("name") + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .familyName(CertifiableFieldResourceOfstring.builder() + .value("familyName") + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .fiscalCode("fiscalCode") + .workContacts(Map.of("institutionId", WorkContactResource.builder() + .email(CertifiableFieldResourceOfstring.builder() + .value("email") + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .build())) + .build(); + verify(userRegistryRestClient)._saveUsingPATCH(saveUserDto); + } + + @Test + void testPersistUserUsingPatchWithEmailNull() { + UUID id = UUID.randomUUID(); + UserId userId = new UserId(); + userId.setId(id); + ResponseEntity userIdResponseEntity = ResponseEntity.ok(userId); + when(userRegistryRestClient._saveUsingPATCH(any())).thenReturn(userIdResponseEntity); + User user = userRegistryConnector.persistUserUsingPatch("name", "familyName", "fiscalCode", null,"institutionId"); + assertEquals(user.getId(), id.toString()); + SaveUserDto saveUserDto = SaveUserDto.builder() + .name(CertifiableFieldResourceOfstring.builder() + .value("name") + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .familyName(CertifiableFieldResourceOfstring.builder() + .value("familyName") + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .fiscalCode("fiscalCode") + .build(); + verify(userRegistryRestClient)._saveUsingPATCH(saveUserDto); + } + + @Test + void persistUserWorksContractUsingPatch() { + UUID id = UUID.randomUUID(); + UserId userId = new UserId(); + userId.setId(id); + ResponseEntity userIdResponseEntity = ResponseEntity.ok(userId); + when(userRegistryRestClient._saveUsingPATCH(any())).thenReturn(userIdResponseEntity); + User user = userRegistryConnector.persistUserWorksContractUsingPatch( "fiscalCode", "email","institutionId"); + assertEquals(user.getId(), id.toString()); + SaveUserDto saveUserDto = SaveUserDto.builder() + .fiscalCode("fiscalCode") + .workContacts(Map.of("institutionId", WorkContactResource.builder() + .email(CertifiableFieldResourceOfstring.builder() + .value("email") + .certification(CertifiableFieldResourceOfstring.CertificationEnum.NONE) + .build()) + .build())) + .build(); + verify(userRegistryRestClient)._saveUsingPATCH(saveUserDto); + } + + @Test + void testGetUserById(){ + UUID id = UUID.randomUUID(); + UserResource userResource = new UserResource(); + userResource.setId(id); + ResponseEntity userIdResponseEntity = ResponseEntity.ok(userResource); + when(userRegistryRestClient._findByIdUsingGET(any(), any())).thenReturn(userIdResponseEntity); + User user = userRegistryConnector.getUserByInternalId(id.toString()); + assertEquals(user.getId(), userResource.getId().toString()); + verify(userRegistryRestClient)._findByIdUsingGET("name,familyName,workContacts", id.toString()); + } + +} + diff --git a/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoderTest.java b/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoderTest.java new file mode 100644 index 0000000..0c50989 --- /dev/null +++ b/apps/institution-ms/connector/rest/src/test/java/it/pagopa/selfcare/mscore/connector/rest/decoder/FeignErrorDecoderTest.java @@ -0,0 +1,90 @@ +package it.pagopa.selfcare.mscore.connector.rest.decoder; + +import feign.Request; +import feign.Response; +import it.pagopa.selfcare.mscore.exception.BadGatewayException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.function.Executable; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; + +import static feign.Util.UTF_8; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class FeignErrorDecoderTest { + FeignErrorDecoder feignDecoder = new FeignErrorDecoder(); + + private final Map> headers = new LinkedHashMap<>(); + + @Test + void testDecodeToResourceNotFound() { + //given + Response response = Response.builder() + .status(404) + .reason("ResourceNotFound") + .request(Request.create(Request.HttpMethod.GET, "/api", Collections.emptyMap(), null, UTF_8)) + .headers(headers) + .body("hello world", UTF_8) + .build(); + //when + Executable executable = () -> feignDecoder.decode("", response); + //then + assertThrows(ResourceNotFoundException.class, executable); + } + + @ParameterizedTest + @ValueSource(ints = {500,502,509}) + void testDecodeToBadGateway(int status) { + //given + Response response = Response.builder() + .status(status) + .reason("Bad Gateway") + .request(Request.create(Request.HttpMethod.GET, "/api", Collections.emptyMap(), null, UTF_8)) + .headers(headers) + .body("hello world", UTF_8) + .build(); + //when + Executable executable = () -> feignDecoder.decode("", response); + //then + assertThrows(BadGatewayException.class, executable); + } + + @ParameterizedTest + @ValueSource(ints = {504,503,509}) + void testDecodeServiceUnvailable() { + //given + Response response = Response.builder() + .status(504) + .reason("Service Unvailable") + .request(Request.create(Request.HttpMethod.GET, "/api", Collections.emptyMap(), null, UTF_8)) + .headers(headers) + .body("hello world", UTF_8) + .build(); + //when + Executable executable = () -> feignDecoder.decode("", response); + //then + } + + @Test + void testDecodeDefault() { + //given + Response response = Response.builder() + .status(200) + .reason("OK") + .request(Request.create(Request.HttpMethod.GET, "/api", Collections.emptyMap(), null, UTF_8)) + .headers(headers) + .body("hello world", UTF_8) + .build(); + //when + Executable executable = () -> feignDecoder.decode("", response); + //then + assertDoesNotThrow(executable); + } +} diff --git a/apps/institution-ms/core/pom.xml b/apps/institution-ms/core/pom.xml new file mode 100644 index 0000000..ff21c08 --- /dev/null +++ b/apps/institution-ms/core/pom.xml @@ -0,0 +1,88 @@ + + + 4.0.0 + + selc-ms-core + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-core + + + + it.pagopa.selfcare + selc-ms-core-connector-api + + + + + com.openhtmltopdf + openhtmltopdf-core + 1.0.10 + + + + + com.openhtmltopdf + openhtmltopdf-pdfbox + 1.0.10 + + + + com.openhtmltopdf + openhtmltopdf-svg-support + 1.0.10 + + + xalan + serializer + + + xalan + xalan + + + + + + org.springframework.boot + spring-boot-starter-freemarker + + + + + com.openhtmltopdf + openhtmltopdf-slf4j + 1.0.10 + + + org.jsoup + jsoup + 1.15.3 + + + org.apache.commons + commons-text + 1.10.0 + compile + + + + org.springframework.data + spring-data-commons + + + io.github.openfeign + feign-core + + + + software.amazon.awssdk + ses + 2.20.88 + + + + diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStream.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStream.java new file mode 100644 index 0000000..d09fae0 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStream.java @@ -0,0 +1,28 @@ +package it.pagopa.selfcare.mscore.core; + +import com.openhtmltopdf.extend.FSStream; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.util.Objects; + +public class ClassPathStream implements FSStream { + + private final String uri; + + public ClassPathStream(String path) { + this.uri = path; + } + + @Override + public InputStream getStream() { + return this.getClass().getResourceAsStream(uri); + } + + @Override + public Reader getReader() { + return new InputStreamReader(Objects.requireNonNull(this.getClass().getResourceAsStream(uri)), StandardCharsets.UTF_8); + } +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactory.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactory.java new file mode 100644 index 0000000..c3b1ef2 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactory.java @@ -0,0 +1,26 @@ +package it.pagopa.selfcare.mscore.core; + +import com.openhtmltopdf.extend.FSStream; +import com.openhtmltopdf.extend.FSStreamFactory; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import lombok.extern.slf4j.Slf4j; + +import java.net.URI; +import java.net.URISyntaxException; + +import static it.pagopa.selfcare.mscore.constant.GenericError.GENERIC_ERROR; + +@Slf4j +public class ClassPathStreamFactory implements FSStreamFactory { + @Override + public FSStream getUrl(String url) { + URI fullUri; + try { + fullUri = new URI(url); + return new ClassPathStream(fullUri.getPath()); + } catch (URISyntaxException e) { + log.error("URISintaxException in ClassPathStreamFactory: ",e); + throw new InvalidRequestException(GENERIC_ERROR.getMessage(), GENERIC_ERROR.getCode()); + } + } +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ContractService.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ContractService.java new file mode 100644 index 0000000..b698fc4 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ContractService.java @@ -0,0 +1,74 @@ +package it.pagopa.selfcare.mscore.core; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.module.SimpleModule; +import it.pagopa.selfcare.mscore.api.FileStorageConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.model.onboarding.ResourceResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.util.UUID; + +import static it.pagopa.selfcare.mscore.constant.GenericError.UNABLE_TO_DOWNLOAD_FILE; + +@Slf4j +@Service +public class ContractService { + private final FileStorageConnector fileStorageConnector; + private final CoreConfig coreConfig; + private final ObjectMapper mapper; + + public ContractService(FileStorageConnector fileStorageConnector, + CoreConfig coreConfig) { + this.fileStorageConnector = fileStorageConnector; + this.coreConfig = coreConfig; + this.mapper = new ObjectMapper(); + SimpleModule simpleModule = new SimpleModule(); + simpleModule.addSerializer(OffsetDateTime.class, new JsonSerializer<>() { + @Override + public void serialize(OffsetDateTime offsetDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeString(DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(offsetDateTime)); + } + }); + mapper.registerModule(simpleModule); + } + + public ResourceResponse getFile(String path) { + return fileStorageConnector.getFile(path); + } + + public File getLogoFile() { + StringBuilder stringBuilder = new StringBuilder(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + stringBuilder.append("_").append(UUID.randomUUID()).append("_logo"); + try { + Path path = Files.createTempFile(stringBuilder.toString(), ".png"); + Files.write(path, fileStorageConnector.getTemplateFile(coreConfig.getLogoPath()).getBytes(StandardCharsets.UTF_8)); + return path.toFile(); + } catch (IOException e) { + throw new InvalidRequestException(String.format(UNABLE_TO_DOWNLOAD_FILE.getMessage(), coreConfig.getLogoPath()), UNABLE_TO_DOWNLOAD_FILE.getCode()); + } + } + + public String uploadContract(String tokenId, MultipartFile contract) { + return fileStorageConnector.uploadContract(tokenId, contract); + + } + + public void deleteContract(String fileName, String tokenId) { + fileStorageConnector.removeContract(fileName, tokenId); + } +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationService.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationService.java new file mode 100644 index 0000000..304adec --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationService.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.Order; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; +import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; + +import java.util.List; +import java.util.Optional; + +public interface DelegationService { + + Delegation createDelegation(Delegation delegation); + boolean checkIfExistsWithStatus(Delegation delegation, DelegationState status); + List getDelegations(String from, String to, String productId, String search, String taxCode, Optional order, Optional page, Optional size); + Delegation createDelegationFromInstitutionsTaxCode(Delegation delegation); + void deleteDelegationByDelegationId(String delegationId); + DelegationWithPagination getDelegationsV2(GetDelegationParameters delegationParameters); + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java new file mode 100644 index 0000000..69e9b5c --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java @@ -0,0 +1,162 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.DelegationConnector; +import it.pagopa.selfcare.mscore.constant.CustomError; +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.Order; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; +import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Optional; + +import static it.pagopa.selfcare.mscore.constant.CustomError.INSTITUTION_TAX_CODE_NOT_FOUND; +import static it.pagopa.selfcare.mscore.constant.GenericError.*; +@Slf4j +@Service +public class DelegationServiceImpl implements DelegationService { + + private static final int DEFAULT_DELEGATIONS_PAGE_SIZE = 10000; + private final DelegationConnector delegationConnector; + private final MailNotificationService notificationService; + private final InstitutionService institutionService; + + public DelegationServiceImpl(DelegationConnector delegationConnector, + MailNotificationService notificationService, + InstitutionService institutionService) { + this.delegationConnector = delegationConnector; + this.notificationService = notificationService; + this.institutionService = institutionService; + } + + @Override + public Delegation createDelegation(Delegation delegation) { + + setTaxCodesByInstitutionIds(delegation); + + Delegation savedDelegation = checkIfExistsAndSaveDelegation(delegation); + + try { + notificationService.sendMailForDelegation(delegation.getInstitutionFromName(), delegation.getProductId(), delegation.getTo()); + } catch (Exception e) { + log.error(SEND_MAIL_FOR_DELEGATION_ERROR.getMessage() + ":", e.getMessage(), e); + } + return savedDelegation; + } + + private Delegation checkIfExistsAndSaveDelegation(Delegation delegation) { + if(checkIfExistsWithStatus(delegation, DelegationState.ACTIVE)) { + throw new ResourceConflictException(String.format(CustomError.CREATE_DELEGATION_CONFLICT.getMessage()), + CustomError.CREATE_DELEGATION_CONFLICT.getCode()); + } + + Delegation savedDelegation; + try { + if(checkIfExistsWithStatus(delegation, DelegationState.DELETED)){ + savedDelegation = delegationConnector.findAndActivate(delegation.getFrom(), delegation.getTo(), delegation.getProductId()); + } else { + delegation.setCreatedAt(OffsetDateTime.now()); + delegation.setUpdatedAt(OffsetDateTime.now()); + delegation.setStatus(DelegationState.ACTIVE); + savedDelegation = delegationConnector.save(delegation); + } + institutionService.updateInstitutionDelegation(delegation.getTo(), true); + } catch (Exception e) { + throw new MsCoreException(CREATE_DELEGATION_ERROR.getMessage(), CREATE_DELEGATION_ERROR.getCode()); + } + return savedDelegation; + } + + private void setTaxCodesByInstitutionIds(Delegation delegation){ + /* + Retrieve both delegator's and partner's institutions to set taxCodeFrom and taxCodeTo + */ + Institution institutionTo = institutionService.retrieveInstitutionById(delegation.getTo()); + Institution institutionFrom = institutionService.retrieveInstitutionById(delegation.getFrom()); + + delegation.setToTaxCode(institutionTo.getTaxCode()); + delegation.setBrokerType(institutionTo.getInstitutionType()); + + delegation.setFromTaxCode(institutionFrom.getTaxCode()); + delegation.setInstitutionType(institutionFrom.getInstitutionType()); + } + + @Override + public Delegation createDelegationFromInstitutionsTaxCode(Delegation delegation) { + + List institutionsTo = institutionService.getInstitutions(delegation.getToTaxCode(), delegation.getToSubunitCode()); + // TODO: remove filter when getInstitutions API will be fixed. + /* + If we call getInstitutions by empty subunitCode parameter, we have to filter retrieved list for institution + with blank subunitCode field, otherwise we take first element returned by api. + */ + Institution partner = institutionsTo.stream() + .filter(institution -> StringUtils.hasText(delegation.getToSubunitCode()) || !StringUtils.hasText(institution.getSubunitCode())) + .findFirst() + .orElseThrow(() -> new ResourceNotFoundException(String.format(INSTITUTION_TAX_CODE_NOT_FOUND.getMessage(), delegation.getTo()), + INSTITUTION_TAX_CODE_NOT_FOUND.getCode())); + delegation.setTo(partner.getId()); + delegation.setBrokerType(partner.getInstitutionType()); + + // TODO: remove filter when getInstitutions API will be fixed. + /* + If we call getInstitutions by empty subunitCode parameter, we have to filter retrieved list for institution + with blank subunitCode field, otherwise we take first element returned by api. + */ + List institutionsFrom = institutionService.getInstitutions(delegation.getFromTaxCode(), delegation.getFromSubunitCode()); + Institution from = institutionsFrom.stream() + .filter(institution -> StringUtils.hasText(delegation.getFromSubunitCode()) || !StringUtils.hasText(institution.getSubunitCode())) + .findFirst() + .orElseThrow(() -> new ResourceNotFoundException(String.format(INSTITUTION_TAX_CODE_NOT_FOUND.getMessage(), delegation.getTo()), + INSTITUTION_TAX_CODE_NOT_FOUND.getCode())); + delegation.setFrom(from.getId()); + delegation.setInstitutionType(from.getInstitutionType()); + + return checkIfExistsAndSaveDelegation(delegation); + } + + @Override + public void deleteDelegationByDelegationId(String delegationId) { + String institutionId; + try{ + Delegation delegation = delegationConnector.findByIdAndModifyStatus(delegationId, DelegationState.DELETED); + institutionId = delegation.getTo(); + } catch (Exception e) { + throw new MsCoreException(DELETE_DELEGATION_ERROR.getMessage(), DELETE_DELEGATION_ERROR.getCode()); + } + try{ + if(!delegationConnector.checkIfDelegationsAreActive(institutionId)) { + institutionService.updateInstitutionDelegation(institutionId, false); + } + } catch (Exception e) { + delegationConnector.findByIdAndModifyStatus(delegationId, DelegationState.ACTIVE); + throw new MsCoreException(DELETE_DELEGATION_ERROR.getMessage(), DELETE_DELEGATION_ERROR.getCode()); + } + } + + @Override + public boolean checkIfExistsWithStatus(Delegation delegation, DelegationState status) { + return delegationConnector.checkIfExistsWithStatus(delegation, status); + } + + @Override + public List getDelegations(String from, String to, String productId, String search, String taxCode, + Optional order, Optional page, Optional size) { + int pageSize = size.filter(s -> s > 0).filter(s -> s <= DEFAULT_DELEGATIONS_PAGE_SIZE).orElse(DEFAULT_DELEGATIONS_PAGE_SIZE); + return delegationConnector.find(from, to, productId, search, taxCode, order.orElse(Order.NONE), page.orElse(0), pageSize); + } + + @Override + public DelegationWithPagination getDelegationsV2(GetDelegationParameters delegationParameters) { + return delegationConnector.findAndCount(delegationParameters); + } +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalService.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalService.java new file mode 100644 index 0000000..1ae1408 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalService.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.institution.GeographicTaxonomies; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; + +import java.util.List; + +public interface ExternalService { + + Institution getInstitutionByExternalId(String externalId); + + Institution retrieveInstitutionProduct(String externalId, String productId); + + List retrieveInstitutionGeoTaxonomiesByExternalId(String externalId); + + List retrieveInstitutionProductsByExternalId(String externalId, List states); + + List retrieveInstitutionByIds(List ids); +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalServiceImpl.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalServiceImpl.java new file mode 100644 index 0000000..0e74f49 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/ExternalServiceImpl.java @@ -0,0 +1,49 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.institution.GeographicTaxonomies; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@Slf4j +public class ExternalServiceImpl implements ExternalService { + + private final InstitutionService institutionService; + + public ExternalServiceImpl(InstitutionService institutionService) { + this.institutionService = institutionService; + } + + @Override + public Institution getInstitutionByExternalId(String externalId) { + return institutionService.retrieveInstitutionByExternalId(externalId); + } + + @Override + public Institution retrieveInstitutionProduct(String externalId, String productId) { + return institutionService.retrieveInstitutionProduct(externalId, productId); + } + + @Override + public List retrieveInstitutionProductsByExternalId(String externalId, List states) { + Institution institution = institutionService.retrieveInstitutionByExternalId(externalId); + return institutionService.retrieveInstitutionProducts(institution, states); + } + + @Override + public List retrieveInstitutionByIds(List ids) { + return institutionService.retrieveInstitutionByIds(ids); + } + + @Override + public List retrieveInstitutionGeoTaxonomiesByExternalId(String externalId) { + log.info("Retrieving geographic taxonomies for institution having externalId {}", externalId); + Institution institution = institutionService.retrieveInstitutionByExternalId(externalId); + return institutionService.retrieveInstitutionGeoTaxonomies(institution); + } +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionService.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionService.java new file mode 100644 index 0000000..7a1e1fa --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionService.java @@ -0,0 +1,70 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.commons.base.security.SelfCareUser; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.SearchMode; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import it.pagopa.selfcare.mscore.model.institution.*; + +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Optional; + +public interface InstitutionService { + + List getOnboardingInstitutionByProductId(String institutionId, String productId); + + Institution retrieveInstitutionById(String id); + + Institution retrieveInstitutionByExternalId(String institutionExternalId); + + List getInstitutions(String taxCode, String subunitCode, String origin, String originId); + + List getInstitutions(String taxCode, String subunitCode); + + Institution createInstitutionFromIpa(String taxCode, InstitutionPaSubunitType subunitType, String subunitCode, List geographicTaxonomies, InstitutionType institutionType); + + Institution createInstitutionFromPda(Institution institution, String injectionInstitutionType); + + Institution createInstitutionByExternalId(String externalId); + + Institution createInstitutionFromAnac(Institution institution); + + Institution createInstitutionFromIvass(Institution institution); + + Institution createInstitutionFromInfocamere(Institution institution); + + Institution createPgInstitution(String taxId, String description, boolean existsInRegistry, SelfCareUser selfCareUser); + + Institution createInstitution(Institution institution); + + List retrieveInstitutionProducts(Institution institution, List states); + + Institution retrieveInstitutionProduct(String externalId, String productId); + + void retrieveInstitutionsWithFilter(String externalId, String productId, List validRelationshipStates); + + List retrieveInstitutionGeoTaxonomies(Institution institution); + + Optional retrieveGeoTaxonomies(String code); + + List findInstitutionsByGeoTaxonomies(String geoTaxonomies, SearchMode searchMode); + + List findInstitutionsByProductId(String productId); + + List retrieveInstitutionByIds(List ids); + + Institution updateInstitution(String institutionId, InstitutionUpdate institutionUpdate, String userId); + + void updateInstitutionDelegation(String institutionId, boolean delegation); + + List retrieveInstitutionByExternalIds(List validInstitutionList, String productId); + + void updateCreatedAt(String institutionId, String productId, OffsetDateTime createdAt, OffsetDateTime activatedAt); + + List getInstitutionsByProductId(String productId, Integer page, Integer size); + + List getInstitutionBrokers(String productId, InstitutionType type); + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImpl.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImpl.java new file mode 100644 index 0000000..bb24f19 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImpl.java @@ -0,0 +1,404 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.commons.base.security.SelfCareUser; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.api.DelegationConnector; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.api.UserApiConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.constant.*; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; +import it.pagopa.selfcare.mscore.core.strategy.CreateInstitutionStrategy; +import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.*; +import lombok.extern.slf4j.Slf4j; +import org.owasp.encoder.Encode; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + +import java.time.OffsetDateTime; +import java.util.*; + +import static it.pagopa.selfcare.mscore.constant.GenericError.*; + +@Slf4j +@Service +public class InstitutionServiceImpl implements InstitutionService { + + private final InstitutionConnector institutionConnector; + private final UserApiConnector userApiConnector; + private final DelegationConnector delegationConnector; + private final PartyRegistryProxyConnector partyRegistryProxyConnector; + private final CoreConfig coreConfig; + private final InstitutionMapper institutionMapper; + private final CreateInstitutionStrategyFactory createInstitutionStrategyFactory; + + public InstitutionServiceImpl(PartyRegistryProxyConnector partyRegistryProxyConnector, + InstitutionConnector institutionConnector, + UserApiConnector userApiConnector, DelegationConnector delegationConnector, + CoreConfig coreConfig, + InstitutionMapper institutionMapper, + CreateInstitutionStrategyFactory createInstitutionStrategyFactory) { + this.partyRegistryProxyConnector = partyRegistryProxyConnector; + this.institutionConnector = institutionConnector; + this.userApiConnector = userApiConnector; + this.delegationConnector = delegationConnector; + this.coreConfig = coreConfig; + this.institutionMapper = institutionMapper; + this.createInstitutionStrategyFactory = createInstitutionStrategyFactory; + } + + @Override + public List getOnboardingInstitutionByProductId(String institutionId, String productId) { + return institutionConnector.findOnboardingByIdAndProductId(institutionId, productId); + } + + @Override + public List getInstitutionsByProductId(String productId, Integer page, Integer size) { + return institutionConnector.findInstitutionsByProductId(productId, page, size); + } + + @Override + public Institution retrieveInstitutionById(String id) { + return institutionConnector.findById(id); + } + + @Override + public Institution retrieveInstitutionByExternalId(String institutionExternalId) { + Optional opt = institutionConnector.findByExternalId(institutionExternalId); + if (opt.isEmpty()) { + throw new ResourceNotFoundException(String.format(CustomError.INSTITUTION_NOT_FOUND.getMessage(), "UNDEFINED", institutionExternalId), CustomError.INSTITUTION_NOT_FOUND.getCode()); + } + log.info("founded institution having externalId: {}", institutionExternalId); + return opt.get(); + } + + @Override + public void retrieveInstitutionsWithFilter(String externalId, String productId, List validRelationshipStates) { + List list = institutionConnector.findWithFilter(externalId, productId, validRelationshipStates); + if (list == null || list.isEmpty()) { + throw new ResourceNotFoundException(String.format(CustomError.INSTITUTION_NOT_ONBOARDED.getMessage(), externalId, productId), + CustomError.INSTITUTION_NOT_ONBOARDED.getCode()); + } + } + + @Override + public List getInstitutions(String taxCode, String subunitCode, String origin, String originId) { + if (StringUtils.hasText(taxCode) && (StringUtils.hasText(origin) || StringUtils.hasText(originId))) { + throw new InvalidRequestException(GenericError.GET_INSTITUTIONS_REQUEST_ERROR.getMessage(), GenericError.GET_INSTITUTIONS_REQUEST_ERROR.getCode()); + } + + if (StringUtils.hasText(taxCode)) { + return institutionConnector.findByTaxCodeAndSubunitCode(taxCode, subunitCode); + } else { + return institutionConnector.findByOriginAndOriginId(origin, originId); + } + + } + + @Override + public Institution createInstitutionFromIpa(String taxCode, InstitutionPaSubunitType subunitType, String subunitCode, List geographicTaxonomies, InstitutionType institutionType) { + CreateInstitutionStrategy institutionStrategy = createInstitutionStrategyFactory.createInstitutionStrategyIpa(); + return institutionStrategy.createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(taxCode) + .subunitCode(subunitCode) + .subunitType(subunitType) + .geographicTaxonomies(geographicTaxonomies) + .institutionType(institutionType) + .build()); + } + + @Override + public List getInstitutions(String taxCode, String subunitCode) { + return institutionConnector.findByTaxCodeAndSubunitCode(taxCode, subunitCode); + } + + @Override + public Institution createInstitutionFromPda(Institution institution, String injectionInstitutionType) { + CreateInstitutionStrategy institutionStrategy = createInstitutionStrategyFactory.createInstitutionStrategyPda(injectionInstitutionType); + return institutionStrategy.createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .description(institution.getDescription()) + .build()); + } + + @Override + public Institution createInstitution(Institution institution) { + return createInstitutionStrategyFactory.createInstitutionStrategy(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .subunitCode(institution.getSubunitCode()) + .subunitType(Optional.ofNullable(institution.getSubunitType()) + .map(InstitutionPaSubunitType::valueOf) + .orElse(null)) + .build()); + } + + @Override + public Institution createInstitutionFromAnac(Institution institution) { + return createInstitutionStrategyFactory.createInstitutionStrategyAnac(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .subunitCode(institution.getSubunitCode()) + .subunitType(Optional.ofNullable(institution.getSubunitType()) + .map(InstitutionPaSubunitType::valueOf) + .orElse(null)) + .build()); + } + + @Override + public Institution createInstitutionFromIvass(Institution institution) { + return createInstitutionStrategyFactory.createInstitutionStrategyIvass(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .ivassCode(institution.getOriginId()) + .build()); + } + + @Override + public Institution createInstitutionFromInfocamere(Institution institution) { + CreateInstitutionStrategy institutionStrategy = createInstitutionStrategyFactory.createInstitutionStrategyInfocamere(institution); + return institutionStrategy.createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .description(institution.getDescription()) + .build()); + } + + @Override + public Institution createInstitutionByExternalId(String externalId) { + checkIfAlreadyExists(externalId); + + InstitutionProxyInfo institutionProxyInfo = partyRegistryProxyConnector.getInstitutionById(externalId); + + log.debug("institution from proxy: {}", institutionProxyInfo); + log.info("getInstitution {}", institutionProxyInfo.getId()); + CategoryProxyInfo categoryProxyInfo = partyRegistryProxyConnector.getCategory(institutionProxyInfo.getOrigin(), institutionProxyInfo.getCategory()); + log.info("category from proxy: {}", categoryProxyInfo); + + Institution newInstitution = institutionMapper.fromInstitutionProxyInfo(institutionProxyInfo); + + newInstitution.setExternalId(externalId); + newInstitution.setOrigin(Origin.IPA.getValue()); + newInstitution.setCreatedAt(OffsetDateTime.now()); + + Attributes attributes = new Attributes(); + attributes.setOrigin(categoryProxyInfo.getOrigin()); + attributes.setCode(categoryProxyInfo.getCode()); + attributes.setDescription(categoryProxyInfo.getName()); + newInstitution.setAttributes(List.of(attributes)); + try { + return institutionConnector.save(newInstitution); + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + } + + @Override + public Institution createPgInstitution(String taxId, String description, boolean existsInRegistry, SelfCareUser selfCareUser) { + return institutionConnector.findByExternalId(taxId) + .orElseGet(() -> createNewInstitution(taxId, description, existsInRegistry, selfCareUser)); + + } + + private Institution createNewInstitution(String taxId, String description, boolean existsInRegistry, SelfCareUser selfCareUser) { + Institution newInstitution = new Institution(); + newInstitution.setExternalId(taxId); + newInstitution.setDescription(description); + newInstitution.setInstitutionType(InstitutionType.PG); + newInstitution.setTaxCode(taxId); + newInstitution.setCreatedAt(OffsetDateTime.now()); + newInstitution.setOriginId(taxId); + + if (existsInRegistry) { + if (coreConfig.isInfoCamereEnable()) { + List institutionByLegal = partyRegistryProxyConnector.getInstitutionsByLegal(selfCareUser.getFiscalCode()); + institutionByLegal.stream() + .filter(i -> taxId.equalsIgnoreCase(i.getBusinessTaxId())) + .findFirst() + .ifPresentOrElse(institution -> newInstitution.setDescription(institution.getBusinessName()), + () -> { + throw new InvalidRequestException(String.format(CustomError.INSTITUTION_LEGAL_NOT_FOUND.getMessage(), taxId), CustomError.INSTITUTION_LEGAL_NOT_FOUND.getCode()); + }); + + NationalRegistriesProfessionalAddress professionalAddress = partyRegistryProxyConnector.getLegalAddress(taxId); + if (professionalAddress != null) { + newInstitution.setAddress(professionalAddress.getAddress()); + newInstitution.setZipCode(professionalAddress.getZipCode()); + } + } + newInstitution.setOrigin(Origin.INFOCAMERE.getValue()); + } else { + newInstitution.setOrigin(Origin.ADE.getValue()); + } + return institutionConnector.save(newInstitution); + } + + @Override + public List retrieveInstitutionProducts(Institution institution, List states) { + List onboardingList; + if (institution.getOnboarding() != null) { + if (states != null && !states.isEmpty()) { + onboardingList = institution.getOnboarding().stream() + .filter(onboarding -> states.contains(onboarding.getStatus())) + .toList(); + } else { + onboardingList = institution.getOnboarding(); + } + if (!onboardingList.isEmpty()) { + return onboardingList; + } + } + throw new ResourceNotFoundException(String.format(CustomError.PRODUCTS_NOT_FOUND_ERROR.getMessage(), institution.getId()), CustomError.PRODUCTS_NOT_FOUND_ERROR.getCode()); + } + + @Override + public Institution retrieveInstitutionProduct(String externalId, String productId) { + return institutionConnector.findByExternalIdAndProductId(externalId, productId); + } + + @Override + public List retrieveInstitutionGeoTaxonomies(Institution institution) { + log.info("Retrieving geographic taxonomies for institution {}", institution.getId()); + if (institution.getGeographicTaxonomies() != null) { + List geographicTaxonomies = institution.getGeographicTaxonomies().stream() + .map(institutionGeoTax -> retrieveGeoTaxonomies(institutionGeoTax.getCode()) + .orElseThrow(() -> new MsCoreException(String.format(CustomError.GEO_TAXONOMY_CODE_NOT_FOUND.getMessage(), institutionGeoTax.getCode()), CustomError.GEO_TAXONOMY_CODE_NOT_FOUND.getCode()))) + .toList(); + if (!geographicTaxonomies.isEmpty()) { + return geographicTaxonomies; + } + } + throw new MsCoreException(String.format("GeographicTaonomies for institution %s not found", institution.getId()), "0000"); + } + + @Override + public Optional retrieveGeoTaxonomies(String code) { + try { + return Optional.of(partyRegistryProxyConnector.getExtByCode(code)); + } catch (ResourceNotFoundException e) { + return Optional.empty(); + } + } + + @Override + public Institution updateInstitution(String institutionId, InstitutionUpdate institutionUpdate, String userId) { + Institution outdatedInstitution = institutionConnector.findById(institutionId); + + List geographicTaxonomies = retrieveGeographicTaxonomies(institutionUpdate); + Institution updatedInstitution = institutionConnector.findAndUpdate(institutionId, null, geographicTaxonomies, institutionUpdate); + + if(Objects.nonNull(institutionUpdate.getDescription())) { + try { + delegationConnector.updateDelegation(updatedInstitution); + } catch (Exception e) { + log.error(UPDATE_DELEGATION_ERROR.getMessage() + ":", e.getMessage(), e); + rollbackInstitution(outdatedInstitution); + throw new MsCoreException(PUT_INSTITUTION_ERROR.getMessage(), PUT_INSTITUTION_ERROR.getCode()); + } + try { + userApiConnector.updateUserInstitution(institutionId, institutionUpdate); + } catch (Exception e) { + log.error(String.format(UPDATE_USER_INSTITUTION_ERROR.getMessage(), Encode.forJava(institutionId)) + ":", e.getMessage(), e); + rollbackInstitution(outdatedInstitution); + delegationConnector.updateDelegation(outdatedInstitution); + throw new MsCoreException(PUT_INSTITUTION_ERROR.getMessage(), PUT_INSTITUTION_ERROR.getCode()); + } + } + return updatedInstitution; + } + + private void rollbackInstitution(Institution institution) { + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDescription(institution.getDescription()); + institutionUpdate.setParentDescription(institution.getParentDescription()); + institutionConnector.findAndUpdate(institution.getId(), null, null, institutionUpdate); + } + + + @Override + public void updateInstitutionDelegation(String institutionId, boolean delegation) { + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDelegation(delegation); + institutionConnector.findAndUpdate(institutionId, null, null, institutionUpdate); + } + + private List retrieveGeographicTaxonomies(InstitutionUpdate institutionUpdate) { + if (institutionUpdate.getGeographicTaxonomies() != null) { + return institutionUpdate.getGeographicTaxonomies() + .stream() + .map(geoTaxonomy -> retrieveGeoTaxonomies(geoTaxonomy.getCode()) + .orElseThrow(() -> new MsCoreException(String.format(CustomError.GEO_TAXONOMY_CODE_NOT_FOUND.getMessage(), geoTaxonomy.getCode()), geoTaxonomy.getCode()))) + .map(geo -> new InstitutionGeographicTaxonomies(geo.getGeotaxId(), geo.getDescription())) + .toList(); + } + return Collections.emptyList(); + } + + @Override + public List retrieveInstitutionByExternalIds(List validInstitutionList, String productId) { + List institutionsExternalId = institutionConnector.findByExternalIdsAndProductId(validInstitutionList, productId); + validInstitutionList.removeIf(validInstitution -> institutionsExternalId.contains(validInstitution.getId())); + return validInstitutionList; + } + + @Override + public List findInstitutionsByGeoTaxonomies(String geoTaxonomies, SearchMode searchMode) { + List geo = Arrays.stream(geoTaxonomies.split(",")) + .filter(StringUtils::hasText).toList(); + validateGeoTaxonomies(geo, searchMode); + return institutionConnector.findByGeotaxonomies(geo, searchMode); + } + + private void validateGeoTaxonomies(List geoTaxonomies, SearchMode searchMode) { + if (geoTaxonomies.isEmpty() && searchMode != SearchMode.EXACT) { + throw new InvalidRequestException("Empty geographic taxonomies filter is valid only when searchMode is exact", "0000"); + } + } + + @Override + public List findInstitutionsByProductId(String productId) { + List institutions = institutionConnector.findByProductId(productId); + if (institutions.isEmpty()) { + throw new ResourceNotFoundException(String.format("Institutions with productId %s not found", productId), "0000"); + } + return institutions; + } + + @Override + public List retrieveInstitutionByIds(List ids) { + return institutionConnector.findAllByIds(ids); + } + + @Override + public void updateCreatedAt(String institutionId, String productId, OffsetDateTime createdAt, OffsetDateTime activatedAt) { + log.trace("updateCreatedAt start"); + log.debug("updateCreatedAt institutionId = {}, productId = {}, createdAt = {}, activatedAt = {}", institutionId, productId, createdAt, activatedAt); + Assert.hasText(institutionId, "An institution ID is required."); + Assert.hasText(productId, "A product ID is required."); + Assert.notNull(createdAt, "A createdAt date is required."); + + institutionConnector.updateOnboardedProductCreatedAt(institutionId, productId, createdAt); + + log.trace("updateCreatedAt end"); + } + + public void checkIfAlreadyExists(String externalId) { + log.info("START - check institution {} already exists", externalId); + Optional opt = institutionConnector.findByExternalId(externalId); + if (opt.isPresent()) { + throw new ResourceConflictException(String.format(CustomError.CREATE_INSTITUTION_CONFLICT.getMessage(), externalId), CustomError.CREATE_INSTITUTION_CONFLICT.getCode()); + } + } + + @Override + public List getInstitutionBrokers(String productId, InstitutionType type) { + return institutionConnector.findBrokers(productId, type); + } +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationService.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationService.java new file mode 100644 index 0000000..bb5bd08 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationService.java @@ -0,0 +1,7 @@ +package it.pagopa.selfcare.mscore.core; + +public interface MailNotificationService { + + void sendMailForDelegation(String institutionName, String productId, String partnerId); + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImpl.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImpl.java new file mode 100644 index 0000000..e56534d --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImpl.java @@ -0,0 +1,76 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.EmailConnector; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.ProductConnector; +import it.pagopa.selfcare.mscore.api.UserApiConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.core.util.MailParametersMapper; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.product.entity.Product; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@Slf4j +@Service +@RequiredArgsConstructor +public class MailNotificationServiceImpl implements MailNotificationService { + + private static final String MAIL_PARAMETER_LOG = "mailParameters: {}"; + private static final String DESTINATION_MAIL_LOG = "destinationMails: {}"; + private final InstitutionConnector institutionConnector; + private final UserApiConnector userApiConnector; + private final ProductConnector productConnector; + private final UserNotificationService userNotificationService; + private final EmailConnector emailConnector; + private final MailParametersMapper mailParametersMapper; + private final CoreConfig coreConfig; + + public void sendMailForDelegation(String institutionName, String productId, String partnerId) { + try { + Map mailParameters; + Product product = productConnector.getProductById(productId); + Institution partnerInstitution = institutionConnector.findById(partnerId); + if(Objects.isNull(product) || Objects.isNull(partnerInstitution)) { + log.error("create-delegation-email-notification :: Impossible to send email. Error: partner institution or product is null"); + return; + } + mailParameters = mailParametersMapper.getDelegationNotificationParameter(institutionName, product.getTitle(), partnerInstitution.getDescription()); + log.debug(MAIL_PARAMETER_LOG, mailParameters); + List userDestinationMail = getUsersEmailByInstitutionAndProductV2(partnerInstitution.getId(), productId); + log.info(DESTINATION_MAIL_LOG, userDestinationMail); + userNotificationService.sendDelegationUserNotification(userDestinationMail, mailParametersMapper.getDelegationUserNotificationPath(), product.getTitle(), mailParameters); + log.info("create-delegation-user-email-notification :: Email successful sent"); + + if (coreConfig.isEnableSendDelegationMail()) { + List institutionDestinationMail = getDestinationMails(partnerInstitution); + log.info(DESTINATION_MAIL_LOG, institutionDestinationMail); + emailConnector.sendMail(mailParametersMapper.getDelegationNotificationPath(), institutionDestinationMail, null, product.getTitle(), mailParameters, null); + log.info("create-delegation-institution-email-notification :: Email successful sent"); + } + } catch (Exception e) { + log.error("create-delegation-email-notification :: Impossible to send email. Error: {}", e.getMessage(), e); + } + } + + private List getDestinationMails(Institution institution) { + if (coreConfig.isSendEmailToInstitution()) { + return List.of(institution.getDigitalAddress()); + } else { + return List.of(coreConfig.getInstitutionAlternativeEmail()); + } + } + + + private List getUsersEmailByInstitutionAndProductV2(String institutionId, String productId){ + if (coreConfig.isSendEmailToInstitution()) { + return userApiConnector.getUserEmails(institutionId, productId); + } + return List.of(coreConfig.getInstitutionAlternativeEmail()); + } +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingDao.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingDao.java new file mode 100644 index 0000000..21b1705 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingDao.java @@ -0,0 +1,27 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.user.UserToOnboard; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@Slf4j +public class OnboardingDao { + + private final InstitutionConnector institutionConnector; + + public OnboardingDao(InstitutionConnector institutionConnector) { + this.institutionConnector = institutionConnector; + } + + + + public void rollbackPersistOnboarding(String institutionId, Onboarding onboarding) { + institutionConnector.findAndRemoveOnboarding(institutionId, onboarding); + log.debug("rollback persistOnboarding"); + } +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingService.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingService.java new file mode 100644 index 0000000..5cd32a2 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingService.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; + +public interface OnboardingService { + + void verifyOnboardingInfo(String externalId, String productId); + + void verifyOnboardingInfoSubunit(String taxCode, String subunitCode, String productId); + + void verifyOnboardingInfoByFilters(VerifyOnboardingFilters filters); + + Institution persistOnboarding(String institutionId, String productId, Onboarding onboarding, StringBuilder httpStatus); + + void deleteOnboardedInstitution(String institutionId, String productId); +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java new file mode 100644 index 0000000..91e636f --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java @@ -0,0 +1,167 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PecNotificationConnector; +import it.pagopa.selfcare.mscore.constant.CustomError; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.core.util.UtilEnumList; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; +import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; +import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; + +import static it.pagopa.selfcare.mscore.constant.GenericError.*; + +@Slf4j +@Service +public class OnboardingServiceImpl implements OnboardingService { + private final OnboardingDao onboardingDao; + private final InstitutionService institutionService; + private final InstitutionConnector institutionConnector; + private final PecNotificationConnector pecNotificationConnector; + private Integer sendingFrequencyPecNotification; + private String epochDatePecNotification; + private LocalDate currentDate = LocalDate.now(); + + public OnboardingServiceImpl(OnboardingDao onboardingDao, + InstitutionService institutionService, + InstitutionConnector institutionConnector, + PecNotificationConnector pecNotificationConnector, + @Value("${mscore.sending-frequency-pec-notification}") Integer sendingFrequencyPecNotification, + @Value("${mscore.epoch-date-pec-notification}") String epochDatePecNotification) { + + this.onboardingDao = onboardingDao; + this.institutionService = institutionService; + this.institutionConnector = institutionConnector; + this.pecNotificationConnector = pecNotificationConnector; + this.sendingFrequencyPecNotification = sendingFrequencyPecNotification; + this.epochDatePecNotification = epochDatePecNotification; + } + + @Override + public void verifyOnboardingInfo(String externalId, String productId) { + institutionService.retrieveInstitutionsWithFilter(externalId, productId, UtilEnumList.VALID_RELATIONSHIP_STATES); + } + + @Override + public void verifyOnboardingInfoSubunit(String taxCode, String subunitCode, String productId) { + Boolean existsOnboardingValid = institutionConnector.existsByTaxCodeAndSubunitCodeAndProductAndStatusList(taxCode, + subunitCode, Optional.ofNullable(productId), UtilEnumList.VALID_RELATIONSHIP_STATES); + if (Boolean.FALSE.equals(existsOnboardingValid)) { + throw new ResourceNotFoundException(String.format(CustomError.INSTITUTION_NOT_ONBOARDED.getMessage(), taxCode, productId), + CustomError.INSTITUTION_NOT_ONBOARDED.getCode()); + } + } + + @Override + public void verifyOnboardingInfoByFilters(VerifyOnboardingFilters filters) { + filters.setValidRelationshipStates(UtilEnumList.VALID_RELATIONSHIP_STATES); + + Boolean existsOnboardingValid = institutionConnector.existsOnboardingByFilters(filters); + if (Boolean.FALSE.equals(existsOnboardingValid)) { + throw new ResourceNotFoundException(CustomError.INSTITUTION_NOT_ONBOARDED_BY_FILTERS.getMessage(), + CustomError.INSTITUTION_NOT_ONBOARDED_BY_FILTERS.getCode()); + } + } + + public void insertPecNotification(String institutionId, String productId, String digitalAddress) { + + PecNotification pecNotification = new PecNotification(); + pecNotification.setId(UUID.randomUUID().toString()); + pecNotification.setCreatedAt(OffsetDateTime.now()); + pecNotification.setProductId(productId); + pecNotification.setInstitutionId(institutionId); + pecNotification.setModuleDayOfTheEpoch(calculateModuleDayOfTheEpoch()); + pecNotification.setDigitalAddress(digitalAddress); + + if (!pecNotificationConnector.insertPecNotification(pecNotification)){ + throw new InvalidRequestException(INVALID_INSERT_PEC_NOTIFICATION_ERROR.getMessage(), INVALID_INSERT_PEC_NOTIFICATION_ERROR.getCode()); + } + + } + + public int calculateModuleDayOfTheEpoch() { + LocalDate epochStart = LocalDate.parse(this.epochDatePecNotification); + long daysDiff = ChronoUnit.DAYS.between(epochStart, this.currentDate); + int moduleDayOfTheEpoch = (int) (daysDiff % this.sendingFrequencyPecNotification); + return moduleDayOfTheEpoch; + } + + @Override + public Institution persistOnboarding(String institutionId, String + productId, Onboarding onboarding, StringBuilder httpStatus) { + + Institution institution = persistAndGetInstitution(institutionId, productId, onboarding, httpStatus); + this.insertPecNotification(institutionId, productId, institution.getDigitalAddress()); + return institution; + } + + private Institution persistAndGetInstitution(String institutionId, String productId, Onboarding onboarding, StringBuilder httpStatus) { + log.trace("persistForUpdate start"); + log.debug("persistForUpdate institutionId = {}, productId = {}", institutionId, productId); + onboarding.setStatus(RelationshipState.ACTIVE); + onboarding.setProductId(productId); + + if (Objects.isNull(onboarding.getCreatedAt())) { + onboarding.setCreatedAt(OffsetDateTime.now()); + } + + //Verify if onboarding exists, in case onboarding must fail + final Institution institution = institutionConnector.findById(institutionId); + + if (Optional.ofNullable(institution.getOnboarding()).flatMap(onboardings -> onboardings.stream() + .filter(item -> item.getProductId().equals(productId) && UtilEnumList.VALID_RELATIONSHIP_STATES.contains(item.getStatus())) + .findAny()).isPresent()) { + + httpStatus.append(HttpStatus.OK.value()); + return institution; + } + + try { + //If not exists, persist a new onboarding for product + final Institution institutionUpdated = institutionConnector.findAndUpdate(institutionId, onboarding, List.of(), null); + + log.trace("persistForUpdate end"); + httpStatus.append(HttpStatus.CREATED.value()); + return institutionUpdated; + } catch (Exception e) { + onboardingDao.rollbackPersistOnboarding(institutionId, onboarding); + log.info("rollbackPersistOnboarding completed for institution {} and product {}", institutionId, productId); + throw new InvalidRequestException(ONBOARDING_OPERATION_ERROR.getMessage() + " " + e.getMessage(), + ONBOARDING_OPERATION_ERROR.getCode()); + } + } + + @Override + public void deleteOnboardedInstitution(String institutionId, String productId) { + + log.trace("persist logic delete Onboarding - start"); + institutionConnector.findAndDeleteOnboarding(institutionId, productId); + log.trace("persist logic delete Onboarding - end"); + + log.trace("persist delete PecNotification - start"); + boolean isDeleted = pecNotificationConnector.findAndDeletePecNotification(institutionId, productId); + if (!isDeleted) { + throw new InvalidRequestException(DELETE_NOTIFICATION_OPERATION_ERROR.getMessage(), + ONBOARDING_OPERATION_ERROR.getCode()); + } + log.trace("persist delete PecNotification - end"); + + } + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationService.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationService.java new file mode 100644 index 0000000..a556224 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationService.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.core; + +import java.util.List; +import java.util.Map; + +public interface UserNotificationService { + + void sendDelegationUserNotification(List to, String templateName, String productName, Map mailParameters); + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImpl.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImpl.java new file mode 100644 index 0000000..13c212e --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImpl.java @@ -0,0 +1,70 @@ +package it.pagopa.selfcare.mscore.core; + +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.api.FileStorageConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.model.onboarding.MailTemplate; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.text.StringSubstitutor; +import org.springframework.mail.MailPreparationException; +import org.springframework.stereotype.Service; +import software.amazon.awssdk.services.ses.SesClient; +import software.amazon.awssdk.services.ses.model.*; + +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +@RequiredArgsConstructor +public class UserNotificationServiceImpl implements UserNotificationService { + + + private final CoreConfig coreConfig; + private final SesClient sesClient; + private final FileStorageConnector fileStorageConnector; + private final ObjectMapper mapper; + + @Override + public void sendDelegationUserNotification(List to, String templateName, String productName, Map mailParameters) { + try { + String template = fileStorageConnector.getTemplateFile(templateName); + MailTemplate mailTemplate = mapper.readValue(template, MailTemplate.class); + String html = StringSubstitutor.replace(mailTemplate.getBody(), mailParameters); + + Destination destination = Destination.builder() + .toAddresses(to) + .build(); + + Content content = Content.builder() + .data(html) + .build(); + + Content sub = Content.builder() + .data(productName + ": " + mailTemplate.getSubject()) + .build(); + + Body body = Body.builder() + .html(content) + .build(); + + Message msg = Message.builder() + .subject(sub) + .body(body) + .build(); + + SendEmailRequest emailRequest = SendEmailRequest.builder() + .destination(destination) + .message(msg) + .source(coreConfig.getSenderMail()) + .build(); + + sesClient.sendEmail(emailRequest); + } catch (Exception e) { + log.error("Error sending mail to: {} for product: {}", String.join(",", to), productName); + throw new MailPreparationException(e); + } + } + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/CloudTemplateLoader.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/CloudTemplateLoader.java new file mode 100644 index 0000000..3756d12 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/CloudTemplateLoader.java @@ -0,0 +1,28 @@ +package it.pagopa.selfcare.mscore.core.config; + +import freemarker.cache.URLTemplateLoader; +import lombok.extern.slf4j.Slf4j; + +import java.net.MalformedURLException; +import java.net.URISyntaxException; +import java.net.URL; + +@Slf4j +class CloudTemplateLoader extends URLTemplateLoader { + private final URL root; + + public CloudTemplateLoader(URL root) { + super(); + this.root = root; + } + + @Override + protected URL getURL(String template) { + try { + return root.toURI().resolve(template).toURL(); + } catch (MalformedURLException | URISyntaxException e) { + log.error(e.getMessage(), e); + } + return null; + } +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/FreeMarkerConfig.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/FreeMarkerConfig.java new file mode 100644 index 0000000..e57541d --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/FreeMarkerConfig.java @@ -0,0 +1,71 @@ +package it.pagopa.selfcare.mscore.core.config; + +import freemarker.template.TemplateException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; +import org.springframework.aop.interceptor.SimpleAsyncUncaughtExceptionHandler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration; +import org.springframework.boot.task.TaskExecutorBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.scheduling.annotation.AsyncConfigurer; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.security.task.DelegatingSecurityContextAsyncTaskExecutor; + +import java.net.URL; +import java.util.Properties; + +@Slf4j +@Configuration +@PropertySource("classpath:config/azure-storage-config.properties") +@EnableAsync +@EnableAutoConfiguration(exclude = FreeMarkerAutoConfiguration.class) +class FreeMarkerConfig implements AsyncConfigurer { + + private final URL rootTemplateUrl; + + + @Autowired + public FreeMarkerConfig(@Value("${blob-storage.checkout-template-container}") URL rootTemplateUrl) { + log.trace("Initializing {}", FreeMarkerConfig.class.getSimpleName()); + this.rootTemplateUrl = rootTemplateUrl; + } + + + @Bean + public freemarker.template.Configuration customFreeMarkerConfiguration() throws TemplateException { + Properties settings = new Properties(); + settings.put("recognize_standard_file_extensions", "true"); + settings.setProperty("localized_lookup", "false"); + freemarker.template.Configuration configuration = new freemarker.template.Configuration(freemarker.template.Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS); + configuration.setTemplateLoader(new CloudTemplateLoader(rootTemplateUrl)); + configuration.setSettings(settings); + return configuration; + } + + + @Bean + public SimpleAsyncUncaughtExceptionHandler simpleAsyncUncaughtExceptionHandler() { + return new SimpleAsyncUncaughtExceptionHandler(); + } + + + @Override + public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { + return simpleAsyncUncaughtExceptionHandler(); + } + + + @Bean + public DelegatingSecurityContextAsyncTaskExecutor taskExecutor(TaskExecutorBuilder taskExecutorBuilder) { + final ThreadPoolTaskExecutor delegate = taskExecutorBuilder.build(); + delegate.initialize(); + return new DelegatingSecurityContextAsyncTaskExecutor(delegate); + } + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MdcTaskDecorator.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MdcTaskDecorator.java new file mode 100644 index 0000000..26e8320 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MdcTaskDecorator.java @@ -0,0 +1,32 @@ +package it.pagopa.selfcare.mscore.core.config; + +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; +import org.springframework.core.task.TaskDecorator; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Slf4j +@Component +public class MdcTaskDecorator implements TaskDecorator { + + public MdcTaskDecorator() { + log.trace("Initializing {}", MdcTaskDecorator.class.getSimpleName()); + } + + + @Override + public Runnable decorate(Runnable runnable) { + Map contextMap = MDC.getCopyOfContextMap(); + return () -> { + try { + MDC.setContextMap(contextMap); + runnable.run(); + } finally { + MDC.clear(); + } + }; + } + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MsCoreConfig.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MsCoreConfig.java new file mode 100644 index 0000000..0481a4d --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/config/MsCoreConfig.java @@ -0,0 +1,44 @@ +package it.pagopa.selfcare.mscore.core.config; + +import it.pagopa.selfcare.azurestorage.AzureBlobClient; +import it.pagopa.selfcare.azurestorage.AzureBlobClientDefault; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.product.service.ProductService; +import it.pagopa.selfcare.product.service.ProductServiceCacheable; +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; +import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.ses.SesClient; + +@Configuration +@RequiredArgsConstructor +public class MsCoreConfig { + + private final CoreConfig config; + + @Bean + public ProductService productService(){ + AzureBlobClient azureBlobClient = new AzureBlobClientDefault(config.getBlobStorage().getConnectionStringProduct(), config.getBlobStorage().getContainerProduct()); + try{ + return new ProductServiceCacheable(azureBlobClient, config.getBlobStorage().getFilepathProduct()); + } catch(IllegalArgumentException e){ + throw new IllegalArgumentException("Found an issue when trying to serialize product json string!!"); + } + } + + @Bean + public SesClient sesClient() { + + StaticCredentialsProvider staticCredentials = StaticCredentialsProvider + .create(AwsBasicCredentials.create(config.getAwsSesSecretId(), config.getAwsSesSecretKey())); + + return SesClient.builder() + .region(Region.of(config.getAwsSesRegion())) + .credentialsProvider(staticCredentials) + .build(); + } + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/InstitutionMapper.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/InstitutionMapper.java new file mode 100644 index 0000000..0cae269 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/InstitutionMapper.java @@ -0,0 +1,17 @@ +package it.pagopa.selfcare.mscore.core.mapper; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.InstitutionProxyInfo; +import it.pagopa.selfcare.mscore.model.institution.NationalRegistriesProfessionalAddress; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@Mapper(componentModel = "spring") +public interface InstitutionMapper { + + @Mapping(target = "id", ignore = true) + @Mapping(target = "origin", ignore = true) + Institution fromInstitutionProxyInfo(InstitutionProxyInfo proxyInfo); + + Institution fromProfessionalAddress(NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress); +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/TokenMapper.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/TokenMapper.java new file mode 100644 index 0000000..495c7ba --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/mapper/TokenMapper.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.core.mapper; + +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.onboarding.Token; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@Mapper(componentModel = "spring") +public interface TokenMapper { + + @Mapping(target = "id" , source = "onboarding.tokenId") + @Mapping(target = "institutionId" , source = "institutionId") + @Mapping(target = "productId" , source = "productId") + @Mapping(target = "createdAt" , source = "onboarding.createdAt") + @Mapping(target = "updatedAt" , source = "onboarding.createdAt") + @Mapping(target = "status" , source = "onboarding.status") + @Mapping(target = "contractSigned" , source = "onboarding.contract") + Token toToken(Onboarding onboarding, String institutionId, String productId); + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategy.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategy.java new file mode 100644 index 0000000..f937ff7 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategy.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.model.institution.Institution; + +import java.util.Objects; + +public interface CreateInstitutionStrategy { + + String TYPE_MAIL_PEC = "Pec"; + + default String getExternalId(CreateInstitutionStrategyInput strategyInput) { + return Objects.isNull(strategyInput.getSubunitCode()) + ? strategyInput.getTaxCode() + : String.format("%s_%s", strategyInput.getTaxCode(), strategyInput.getSubunitCode()); + } + + Institution createInstitution(CreateInstitutionStrategyInput strategyInput); + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyAnac.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyAnac.java new file mode 100644 index 0000000..735eaba --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyAnac.java @@ -0,0 +1,59 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.SaResource; +import lombok.extern.slf4j.Slf4j; + +import java.time.OffsetDateTime; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; + +@Slf4j +public class CreateInstitutionStrategyAnac extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { + private final PartyRegistryProxyConnector partyRegistryProxyConnector; + + private Institution institution; + + public CreateInstitutionStrategyAnac(PartyRegistryProxyConnector partyRegistryProxyConnector, + InstitutionConnector institutionConnector) { + super(institutionConnector); + this.partyRegistryProxyConnector = partyRegistryProxyConnector; + } + + public void setInstitution(Institution institution) { + this.institution = institution; + } + + @Override + public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { + + checkIfAlreadyExistsByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), strategyInput.getSubunitCode()); + + SaResource saResource = partyRegistryProxyConnector.getSAFromAnac(strategyInput.getTaxCode()); + + institution = addFieldsToInstitution(saResource); + try { + return institutionConnector.save(institution); + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + } + + private Institution addFieldsToInstitution(SaResource saResource) { + + institution.setExternalId(institution.getTaxCode()); + institution.setOrigin(Origin.ANAC.getValue()); + institution.setOriginId(saResource.getTaxCode()); + institution.setCreatedAt(OffsetDateTime.now()); + institution.setDigitalAddress(saResource.getDigitalAddress()); + institution.setDescription(saResource.getDescription()); + + return institution; + } + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyCommon.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyCommon.java new file mode 100644 index 0000000..efbf858 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyCommon.java @@ -0,0 +1,38 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.constant.CustomError; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +import static it.pagopa.selfcare.mscore.constant.CustomError.CREATE_INSTITUTION_ORIGIN_CONFLICT; + +@Slf4j +@Component +public class CreateInstitutionStrategyCommon { + protected final InstitutionConnector institutionConnector; + + public CreateInstitutionStrategyCommon(InstitutionConnector institutionConnector) { + this.institutionConnector = institutionConnector; + } + + protected void checkIfAlreadyExistsByTaxCodeAndSubunitCode(String taxCode, String subunitCode) { + List institutions = institutionConnector.findByTaxCodeAndSubunitCode(taxCode, subunitCode); + if (!institutions.isEmpty()) + throw new ResourceConflictException(String + .format(CustomError.CREATE_INSTITUTION_IPA_CONFLICT.getMessage(), taxCode, subunitCode), + CustomError.CREATE_INSTITUTION_CONFLICT.getCode()); + } + + protected void checkIfAlreadyExistByOriginAndOriginId(String origin, String originId) { + List institutions = institutionConnector.findByOriginAndOriginId(origin, originId); + if (!institutions.isEmpty()) + throw new ResourceConflictException(String.format( + CREATE_INSTITUTION_ORIGIN_CONFLICT.getMessage(), origin, originId), + CREATE_INSTITUTION_ORIGIN_CONFLICT.getCode()); + } +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyInfocamere.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyInfocamere.java new file mode 100644 index 0000000..655e9b7 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyInfocamere.java @@ -0,0 +1,95 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.NationalRegistriesProfessionalAddress; +import it.pagopa.selfcare.mscore.utils.MaskDataUtils; +import lombok.extern.slf4j.Slf4j; +import org.owasp.encoder.Encode; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; + +import java.time.OffsetDateTime; +import java.util.List; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; +import static it.pagopa.selfcare.mscore.constant.GenericError.INSTITUTION_INFOCAMERE_NOTFOUND; + +@Slf4j +@Component +public class CreateInstitutionStrategyInfocamere extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { + + private final PartyRegistryProxyConnector partyRegistryProxyConnector; + + private Institution institution; + + public CreateInstitutionStrategyInfocamere(PartyRegistryProxyConnector partyRegistryProxyConnector, + InstitutionConnector institutionConnector) { + super(institutionConnector); + this.partyRegistryProxyConnector = partyRegistryProxyConnector; + } + + + @Override + public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { + Institution toSavedOrUpdate; + List institutions = institutionConnector.findByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), null); + if (institutions.isEmpty()) { + //Institution does not exists, it will be created + try { + NationalRegistriesProfessionalAddress professionalAddress = partyRegistryProxyConnector.getLegalAddress(strategyInput.getTaxCode()); + fillInstitutionFromInfocamereData(strategyInput.getTaxCode(), strategyInput.getDescription(), professionalAddress); + } catch (MsCoreException ex) { + if (ex.getCode().equalsIgnoreCase(String.valueOf(HttpStatus.NOT_FOUND.value()))) { + log.warn(String.format(INSTITUTION_INFOCAMERE_NOTFOUND.getMessage(), Encode.forJava(MaskDataUtils.maskString(strategyInput.getTaxCode())))); + fillInstitutionRawData(strategyInput); + } else { + throw ex; + } + } catch (ResourceNotFoundException ex) { + log.warn(String.format(INSTITUTION_INFOCAMERE_NOTFOUND.getMessage(), Encode.forJava(MaskDataUtils.maskString(strategyInput.getTaxCode())))); + fillInstitutionRawData(strategyInput); + } + + toSavedOrUpdate = institution; + } else { + //Institution exists but description could be updated + toSavedOrUpdate = institutions.get(0); + toSavedOrUpdate.setDescription(strategyInput.getDescription()); + toSavedOrUpdate.setUpdatedAt(OffsetDateTime.now()); + } + + try { + return institutionConnector.save(toSavedOrUpdate); + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + } + + private void fillInstitutionRawData(CreateInstitutionStrategyInput strategyInput) { + institution.setExternalId(getExternalId(strategyInput)); + institution.setOrigin(Origin.ADE.getValue()); + institution.setOriginId(strategyInput.getTaxCode()); + institution.setCreatedAt(OffsetDateTime.now()); + } + + private void fillInstitutionFromInfocamereData(String taxCode, String description, NationalRegistriesProfessionalAddress professionalAddress) { + institution.setAddress(professionalAddress.getAddress()); + institution.setZipCode(professionalAddress.getZipCode()); + institution.setTaxCode(taxCode); + institution.setDescription(description); + institution.setExternalId(taxCode); + institution.setOrigin(Origin.INFOCAMERE.getValue()); + institution.setOriginId(taxCode); + institution.setCreatedAt(OffsetDateTime.now()); + } + + public void setInstitution(Institution institution) { + this.institution = institution; + } +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIpa.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIpa.java new file mode 100644 index 0000000..974f58e --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIpa.java @@ -0,0 +1,200 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; +import it.pagopa.selfcare.mscore.model.institution.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; + +@Slf4j +@Component +public class CreateInstitutionStrategyIpa extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { + + private final PartyRegistryProxyConnector partyRegistryProxyConnector; + static final String DESCRIPTION_TO_REPLACE_REGEX = " - (COMUNE|PROVINCIA)"; + private final InstitutionMapper institutionMapper; + + public CreateInstitutionStrategyIpa(PartyRegistryProxyConnector partyRegistryProxyConnector, + InstitutionConnector institutionConnector, + InstitutionMapper institutionMapper) { + super(institutionConnector); + this.partyRegistryProxyConnector = partyRegistryProxyConnector; + this.institutionMapper = institutionMapper; + } + + + @Override + public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { + + checkIfAlreadyExistsByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), strategyInput.getSubunitCode()); + + final InstitutionPaSubunitType subunitType = strategyInput.getSubunitType(); + final InstitutionProxyInfo institutionProxyInfo = partyRegistryProxyConnector.getInstitutionById(strategyInput.getTaxCode()); + final CategoryProxyInfo categoryProxyInfo = partyRegistryProxyConnector.getCategory(institutionProxyInfo.getOrigin(), institutionProxyInfo.getCategory()); + + Institution institution; + if (InstitutionPaSubunitType.AOO.equals(subunitType)) { + Institution institutionEC = getOrSaveInstitutionEc(strategyInput, institutionProxyInfo, categoryProxyInfo); + institution = mappingToInstitutionIPAAoo(strategyInput, institutionEC.getId(), institutionProxyInfo, categoryProxyInfo); + } else if (InstitutionPaSubunitType.UO.equals(subunitType)) { + Institution institutionEC = getOrSaveInstitutionEc(strategyInput, institutionProxyInfo, categoryProxyInfo); + institution = mappingToInstitutionIPAUo(strategyInput, institutionEC.getId(), institutionProxyInfo, categoryProxyInfo); + } else { + log.info("createInstitution :: unsupported subunitType {}", subunitType); + institution = getInstitutionEC(strategyInput.getTaxCode(), institutionProxyInfo, categoryProxyInfo, strategyInput.getInstitutionType()); + } + + institution.setGeographicTaxonomies(strategyInput.getGeographicTaxonomies()); + + try { + return institutionConnector.save(institution); + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + } + + private Institution getOrSaveInstitutionEc(CreateInstitutionStrategyInput strategyInput, + InstitutionProxyInfo institutionProxyInfo, + CategoryProxyInfo categoryProxyInfo) { + try { + Optional opt = institutionConnector.findByExternalId(strategyInput.getTaxCode()); + if (opt.isEmpty()) { + Institution institutionEC = getInstitutionEC(strategyInput.getTaxCode(), institutionProxyInfo, categoryProxyInfo, InstitutionType.PA); + return institutionConnector.save(institutionEC); + } else { + return opt.get(); + } + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + } + + private Institution getInstitutionEC(String taxCode, InstitutionProxyInfo institutionProxyInfo, CategoryProxyInfo categoryProxyInfo, InstitutionType institutionType) { + + Institution newInstitution = institutionMapper.fromInstitutionProxyInfo(institutionProxyInfo); + GeographicTaxonomies geotax = partyRegistryProxyConnector.getExtByCode(institutionProxyInfo.getIstatCode()); + + newInstitution.setExternalId(taxCode); + newInstitution.setInstitutionType(Objects.requireNonNullElse(institutionType, InstitutionType.PA)); + newInstitution.setOrigin(Origin.IPA.getValue()); + newInstitution.setCreatedAt(OffsetDateTime.now()); + newInstitution.setCity(Optional.ofNullable(geotax.getDescription()) + .map(s -> s.replaceAll(DESCRIPTION_TO_REPLACE_REGEX, "")) + .orElse(null)); + newInstitution.setCounty(geotax.getProvinceAbbreviation()); + newInstitution.setCountry(geotax.getCountryAbbreviation()); + + Attributes attributes = new Attributes(); + attributes.setOrigin(categoryProxyInfo.getOrigin()); + attributes.setCode(categoryProxyInfo.getCode()); + attributes.setDescription(categoryProxyInfo.getName()); + newInstitution.setAttributes(List.of(attributes)); + + return newInstitution; + } + + + private Institution mappingToInstitutionIPAAoo(CreateInstitutionStrategyInput strategyInput, + String rootParentInstitutionId, + InstitutionProxyInfo institutionProxyInfo, + CategoryProxyInfo categoryProxyInfo) { + + AreaOrganizzativaOmogenea areaOrganizzativaOmogenea = partyRegistryProxyConnector.getAooById(strategyInput.getSubunitCode()); + GeographicTaxonomies geotax = partyRegistryProxyConnector.getExtByCode(areaOrganizzativaOmogenea.getCodiceComuneISTAT()); + Institution newInstitution = new Institution(); + newInstitution.setInstitutionType(InstitutionType.PA); + newInstitution.setOriginId(areaOrganizzativaOmogenea.getId()); + newInstitution.setDescription(areaOrganizzativaOmogenea.getDenominazioneAoo()); + newInstitution.setDigitalAddress(TYPE_MAIL_PEC.equals(areaOrganizzativaOmogenea.getTipoMail1()) + ? areaOrganizzativaOmogenea.getMail1() : institutionProxyInfo.getDigitalAddress()); + newInstitution.setAddress(areaOrganizzativaOmogenea.getIndirizzo()); + newInstitution.setZipCode(areaOrganizzativaOmogenea.getCAP()); + newInstitution.setTaxCode(areaOrganizzativaOmogenea.getCodiceFiscaleEnte()); + newInstitution.setSubunitCode(strategyInput.getSubunitCode()); + newInstitution.setSubunitType(InstitutionPaSubunitType.AOO.name()); + newInstitution.setParentDescription(institutionProxyInfo.getDescription()); + newInstitution.setRootParentId(rootParentInstitutionId); + newInstitution.setExternalId(getExternalId(strategyInput)); + newInstitution.setOrigin(Optional.ofNullable(areaOrganizzativaOmogenea.getOrigin()) + .map(Origin::name) + .orElse(null)); + newInstitution.setCreatedAt(OffsetDateTime.now()); + newInstitution.setCounty(geotax.getProvinceAbbreviation()); + newInstitution.setCountry(geotax.getCountryAbbreviation()); + newInstitution.setCity(Optional.ofNullable(geotax.getDescription()) + .map(s -> s.replaceAll(DESCRIPTION_TO_REPLACE_REGEX, "")) + .orElse(null)); + newInstitution.setIstatCode(areaOrganizzativaOmogenea.getCodiceComuneISTAT()); + Attributes attributes = new Attributes(); + attributes.setOrigin(categoryProxyInfo.getOrigin()); + attributes.setCode(categoryProxyInfo.getCode()); + attributes.setDescription(categoryProxyInfo.getName()); + newInstitution.setAttributes(List.of(attributes)); + + return newInstitution; + } + + private Institution mappingToInstitutionIPAUo(CreateInstitutionStrategyInput strategyInput, + String rootParentInstitutionId, + InstitutionProxyInfo institutionProxyInfo, + CategoryProxyInfo categoryProxyInfo) { + + UnitaOrganizzativa unitaOrganizzativa = partyRegistryProxyConnector.getUoById(strategyInput.getSubunitCode()); + GeographicTaxonomies geotax = partyRegistryProxyConnector.getExtByCode(unitaOrganizzativa.getCodiceComuneISTAT()); + Institution newInstitution = new Institution(); + newInstitution.setInstitutionType(InstitutionType.PA); + newInstitution.setOriginId(unitaOrganizzativa.getId()); + newInstitution.setDescription(unitaOrganizzativa.getDescrizioneUo()); + newInstitution.setDigitalAddress(TYPE_MAIL_PEC.equals(unitaOrganizzativa.getTipoMail1()) + ? unitaOrganizzativa.getMail1() : institutionProxyInfo.getDigitalAddress()); + newInstitution.setAddress(unitaOrganizzativa.getIndirizzo()); + newInstitution.setZipCode(unitaOrganizzativa.getCAP()); + newInstitution.setTaxCode(unitaOrganizzativa.getCodiceFiscaleEnte()); + newInstitution.setSubunitCode(strategyInput.getSubunitCode()); + newInstitution.setSubunitType(InstitutionPaSubunitType.UO.name()); + newInstitution.setParentDescription(institutionProxyInfo.getDescription()); + newInstitution.setRootParentId(rootParentInstitutionId); + newInstitution.setCity(Optional.ofNullable(geotax.getDescription()) + .map(s -> s.replaceAll(DESCRIPTION_TO_REPLACE_REGEX, "")) + .orElse(null)); + newInstitution.setCounty(geotax.getProvinceAbbreviation()); + newInstitution.setCountry(geotax.getCountryAbbreviation()); + newInstitution.setIstatCode(unitaOrganizzativa.getCodiceComuneISTAT()); + if (StringUtils.isNotBlank(unitaOrganizzativa.getCodiceUniAoo())) { + PaAttributes paAttributes = new PaAttributes(); + paAttributes.setAooParentCode(unitaOrganizzativa.getCodiceUniAoo()); + newInstitution.setPaAttributes(paAttributes); + } + + newInstitution.setExternalId(getExternalId(strategyInput)); + newInstitution.setOrigin(Optional.ofNullable(unitaOrganizzativa.getOrigin()) + .map(Origin::name) + .orElse(null)); + newInstitution.setCreatedAt(OffsetDateTime.now()); + + Attributes attributes = new Attributes(); + attributes.setOrigin(categoryProxyInfo.getOrigin()); + attributes.setCode(categoryProxyInfo.getCode()); + attributes.setDescription(categoryProxyInfo.getName()); + newInstitution.setAttributes(List.of(attributes)); + + return newInstitution; + } + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIvass.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIvass.java new file mode 100644 index 0000000..565d6da --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyIvass.java @@ -0,0 +1,58 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.model.institution.ASResource; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.extern.slf4j.Slf4j; + +import java.time.OffsetDateTime; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; + +@Slf4j +public class CreateInstitutionStrategyIvass extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { + private final PartyRegistryProxyConnector partyRegistryProxyConnector; + + private Institution institution; + + public CreateInstitutionStrategyIvass(PartyRegistryProxyConnector partyRegistryProxyConnector, + InstitutionConnector institutionConnector) { + super(institutionConnector); + this.partyRegistryProxyConnector = partyRegistryProxyConnector; + } + + public void setInstitution(Institution institution) { + this.institution = institution; + } + + @Override + public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { + checkIfAlreadyExistByOriginAndOriginId(Origin.IVASS.name(), strategyInput.getIvassCode()); + + ASResource asResource = partyRegistryProxyConnector.getASFromIvass(strategyInput.getIvassCode()); + + institution = addFieldsToInstitution(asResource); + try { + return institutionConnector.save(institution); + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + } + + private Institution addFieldsToInstitution(ASResource asResource) { + institution.setTaxCode(asResource.getTaxCode()); + institution.setExternalId(asResource.getOriginId()); + institution.setOrigin(Origin.IVASS.getValue()); + institution.setOriginId(asResource.getOriginId()); + institution.setCreatedAt(OffsetDateTime.now()); + institution.setDigitalAddress(asResource.getDigitalAddress()); + institution.setDescription(asResource.getDescription()); + + return institution; + } + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPda.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPda.java new file mode 100644 index 0000000..ffeb97f --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPda.java @@ -0,0 +1,136 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.constant.CustomError; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.utils.MaskDataUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; + +import java.time.OffsetDateTime; +import java.util.List; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; + +@Slf4j +@Component +public class CreateInstitutionStrategyPda extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { + + private final PartyRegistryProxyConnector partyRegistryProxyConnector; + + private final InstitutionMapper institutionMapper; + + private String injectionInstitutionType; + + public CreateInstitutionStrategyPda(PartyRegistryProxyConnector partyRegistryProxyConnector, + InstitutionConnector institutionConnector, + InstitutionMapper institutionMapper) { + super(institutionConnector); + this.partyRegistryProxyConnector = partyRegistryProxyConnector; + this.institutionMapper = institutionMapper; + } + + + @Override + public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { + checkIfAlreadyExistsByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), strategyInput.getSubunitCode()); + + Institution institution; + try { + institution = searchInstitutionOnIpa(strategyInput.getTaxCode()); + } catch (ResourceNotFoundException ex) { + institution = searchInstitutionOnInfocamere(strategyInput); + } + + try { + return institutionConnector.save(institution); + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + } + + private Institution searchInstitutionOnIpa(String taxCode) { + InstitutionProxyInfo institutionProxyInfo; + Institution institution = null; + try { + institutionProxyInfo = partyRegistryProxyConnector.getInstitutionById(taxCode); + if (institutionProxyInfo != null) { + final CategoryProxyInfo categoryProxyInfo = partyRegistryProxyConnector.getCategory(institutionProxyInfo.getOrigin(), institutionProxyInfo.getCategory()); + institution = mapInstitutionFromIpa(taxCode, institutionProxyInfo, categoryProxyInfo); + } + } catch (MsCoreException ex) { + if(ex.getCode().equalsIgnoreCase(String.valueOf(HttpStatus.NOT_FOUND.value()))) { + log.debug("Institution with taxCode: {} not found in IPA", MaskDataUtils.maskString(taxCode)); + throw new ResourceNotFoundException(CustomError.INSTITUTION_NOT_FOUND_IN_REGISTRY.getMessage(), CustomError.INSTITUTION_NOT_FOUND_IN_REGISTRY.getCode()); + } + + throw ex; + } catch (ResourceNotFoundException ex) { + log.debug("Institution with taxCode: {} not found in IPA", MaskDataUtils.maskString(taxCode)); + throw ex; + } + + return institution; + } + + private Institution searchInstitutionOnInfocamere(CreateInstitutionStrategyInput strategyInput){ + try { + NationalRegistriesProfessionalAddress professionalAddress = partyRegistryProxyConnector.getLegalAddress(strategyInput.getTaxCode()); + return getInstitutionFromInfocamere(strategyInput.getTaxCode(), strategyInput.getDescription(), professionalAddress); + } catch (MsCoreException ex) { + if(ex.getCode().equalsIgnoreCase(String.valueOf(HttpStatus.NOT_FOUND.value()))) { + log.warn("Institution with taxCode {} not found in registry INFOCAMERE", MaskDataUtils.maskString(strategyInput.getTaxCode())); + throw new ResourceNotFoundException(String.format(CustomError.INSTITUTION_NOT_FOUND_IN_REGISTRY.getMessage(), strategyInput.getDescription()), CustomError.INSTITUTION_NOT_FOUND_IN_REGISTRY.getCode()); + } + throw ex; + } + } + + private Institution getInstitutionFromInfocamere(String taxCode, String description, NationalRegistriesProfessionalAddress professionalAddress) { + Institution newInstitution = institutionMapper.fromProfessionalAddress(professionalAddress); + newInstitution.setTaxCode(taxCode); + newInstitution.setDescription(description); + newInstitution.setExternalId(taxCode); + newInstitution.setOrigin(Origin.INFOCAMERE.getValue()); + if(injectionInstitutionType.equalsIgnoreCase(InstitutionType.PT.name())) { + newInstitution.setInstitutionType(InstitutionType.PT); + }else{ + newInstitution.setInstitutionType(InstitutionType.PG); + } + newInstitution.setOriginId(taxCode); + newInstitution.setCreatedAt(OffsetDateTime.now()); + newInstitution.setImported(true); + + return newInstitution; + } + + private Institution mapInstitutionFromIpa(String taxCode, InstitutionProxyInfo institutionProxyInfo, CategoryProxyInfo categoryProxyInfo) { + + Institution newInstitution = institutionMapper.fromInstitutionProxyInfo(institutionProxyInfo); + newInstitution.setExternalId(taxCode); + newInstitution.setOrigin(Origin.IPA.getValue()); + newInstitution.setCreatedAt(OffsetDateTime.now()); + newInstitution.setImported(true); + newInstitution.setInstitutionType(InstitutionType.PA); + + Attributes attributes = new Attributes(); + attributes.setOrigin(categoryProxyInfo.getOrigin()); + attributes.setCode(categoryProxyInfo.getCode()); + attributes.setDescription(categoryProxyInfo.getName()); + newInstitution.setAttributes(List.of(attributes)); + + return newInstitution; + } + + public void setInjectionInstitutionType(String injectionInstitutionType) { + this.injectionInstitutionType = injectionInstitutionType; + } +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyRaw.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyRaw.java new file mode 100644 index 0000000..d59ab73 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyRaw.java @@ -0,0 +1,44 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import org.springframework.stereotype.Component; + +import java.time.OffsetDateTime; + +import static it.pagopa.selfcare.mscore.constant.GenericError.CREATE_INSTITUTION_ERROR; + +@Component +public class CreateInstitutionStrategyRaw extends CreateInstitutionStrategyCommon implements CreateInstitutionStrategy { + + private Institution institution; + + public CreateInstitutionStrategyRaw(InstitutionConnector institutionConnector) { + super(institutionConnector); + } + + @Override + public Institution createInstitution(CreateInstitutionStrategyInput strategyInput) { + + checkIfAlreadyExistsByTaxCodeAndSubunitCode(strategyInput.getTaxCode(), strategyInput.getSubunitCode()); + + institution.setExternalId(getExternalId(strategyInput)); + institution.setOrigin(Origin.SELC.getValue()); + institution.setOriginId("SELC_" + institution.getExternalId()); + institution.setCreatedAt(OffsetDateTime.now()); + + try { + return institutionConnector.save(institution); + } catch (Exception e) { + throw new MsCoreException(CREATE_INSTITUTION_ERROR.getMessage(), CREATE_INSTITUTION_ERROR.getCode()); + } + + } + + public void setInstitution(Institution institution) { + this.institution = institution; + } +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/factory/CreateInstitutionStrategyFactory.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/factory/CreateInstitutionStrategyFactory.java new file mode 100644 index 0000000..1481f00 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/factory/CreateInstitutionStrategyFactory.java @@ -0,0 +1,60 @@ +package it.pagopa.selfcare.mscore.core.strategy.factory; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; +import it.pagopa.selfcare.mscore.core.strategy.*; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +public class CreateInstitutionStrategyFactory { + + private final InstitutionConnector institutionConnector; + private final PartyRegistryProxyConnector partyRegistryProxyConnector; + private final InstitutionMapper institutionMapper; + + public CreateInstitutionStrategyFactory(InstitutionConnector institutionConnector, + PartyRegistryProxyConnector partyRegistryProxyConnector, + InstitutionMapper institutionMapper) { + this.institutionConnector = institutionConnector; + this.partyRegistryProxyConnector = partyRegistryProxyConnector; + this.institutionMapper = institutionMapper; + } + + public CreateInstitutionStrategy createInstitutionStrategy(Institution institution) { + CreateInstitutionStrategyRaw strategy = new CreateInstitutionStrategyRaw(institutionConnector); + strategy.setInstitution(institution); + return strategy; + } + + public CreateInstitutionStrategy createInstitutionStrategyIpa() { + return new CreateInstitutionStrategyIpa(partyRegistryProxyConnector, institutionConnector, institutionMapper); + } + + public CreateInstitutionStrategy createInstitutionStrategyAnac(Institution institution) { + CreateInstitutionStrategyAnac strategy = new CreateInstitutionStrategyAnac(partyRegistryProxyConnector, institutionConnector); + strategy.setInstitution(institution); + return strategy; + } + public CreateInstitutionStrategy createInstitutionStrategyIvass(Institution institution) { + CreateInstitutionStrategyIvass strategy = new CreateInstitutionStrategyIvass(partyRegistryProxyConnector, institutionConnector); + strategy.setInstitution(institution); + return strategy; + } + + public CreateInstitutionStrategy createInstitutionStrategyPda(String injectionInstitutionType) { + CreateInstitutionStrategyPda strategy = new CreateInstitutionStrategyPda(partyRegistryProxyConnector, institutionConnector, institutionMapper); + strategy.setInjectionInstitutionType(injectionInstitutionType); + return strategy; + } + + public CreateInstitutionStrategy createInstitutionStrategyInfocamere(Institution institution) { + CreateInstitutionStrategyInfocamere strategy = new CreateInstitutionStrategyInfocamere(partyRegistryProxyConnector, institutionConnector); + strategy.setInstitution(institution); + return strategy; + } + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/input/CreateInstitutionStrategyInput.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/input/CreateInstitutionStrategyInput.java new file mode 100644 index 0000000..2232202 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/strategy/input/CreateInstitutionStrategyInput.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.core.strategy.input; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Builder +@Data +public class CreateInstitutionStrategyInput { + + private String taxCode; + private String ivassCode; + private String description; + private InstitutionPaSubunitType subunitType; + private List geographicTaxonomies; + private String subunitCode; + private InstitutionType institutionType; +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/Constants.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/Constants.java new file mode 100644 index 0000000..bd6c2a5 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/Constants.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.core.util; + +public class Constants { + public static final String PRICING_PLAN_PREMIUM_CHECKBOX = "pricingPlanPremiumCheckbox"; + public static final String PRICING_PLAN_PREMIUM = "pricingPlanPremium"; + public static final String PRICING_PLAN_PREMIUM_BASE = "pricingPlanPremiumBase"; + public static final String PRICING_PLAN_PREMIUM_BASE_CHECKBOX = "pricingPlanPremiumBaseCheckbox"; + public static final String PRICING_PLAN_BASE_CHECKBOX = "pricingPlanBaseCheckbox"; + public static final String PRICING_PLAN_FAST_CHECKBOX = "pricingPlanFastCheckbox"; + public static final String PRICING_PLAN = "pricingPlan"; + public static final String INSTITUTION_REA = "institutionREA"; + public static final String INSTITUTION_SHARE_CAPITAL = "institutionShareCapital"; + public static final String INSTITUTION_BUSINESS_REGISTER_PLACE = "institutionBusinessRegisterPlace"; +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/InstitutionPaSubunitType.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/InstitutionPaSubunitType.java new file mode 100644 index 0000000..1145e7f --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/InstitutionPaSubunitType.java @@ -0,0 +1,5 @@ +package it.pagopa.selfcare.mscore.core.util; + +public enum InstitutionPaSubunitType { + AOO, UO +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapper.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapper.java new file mode 100644 index 0000000..0b84580 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapper.java @@ -0,0 +1,32 @@ +package it.pagopa.selfcare.mscore.core.util; + +import it.pagopa.selfcare.mscore.config.MailTemplateConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +public class MailParametersMapper { + + @Autowired + MailTemplateConfig mailTemplateConfig; + + public Map getDelegationNotificationParameter(String institutionName, String productName, String partnerName) { + Map map = new HashMap<>(); + map.put(mailTemplateConfig.getNotificationProductName(), productName); + map.put(mailTemplateConfig.getInstitutionDescription(), institutionName); + map.put(mailTemplateConfig.getDelegationPartnerName(), partnerName); + return map; + } + + public String getDelegationNotificationPath() { + return mailTemplateConfig.getDelegationNotificationPath(); + } + + public String getDelegationUserNotificationPath() { + return mailTemplateConfig.getDelegationUserNotificationPath(); + } + +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtils.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtils.java new file mode 100644 index 0000000..bae37c8 --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtils.java @@ -0,0 +1,65 @@ +package it.pagopa.selfcare.mscore.core.util; + +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.user.UserBinding; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import static it.pagopa.selfcare.mscore.constant.CustomError.ONBOARDING_INFO_INSTITUTION_NOT_FOUND; +import static it.pagopa.selfcare.mscore.core.util.UtilEnumList.ONBOARDING_INFO_DEFAULT_RELATIONSHIP_STATES; + +@Slf4j +@NoArgsConstructor(access = AccessLevel.NONE) +public class OnboardingInfoUtils { + + public static List convertStatesToRelationshipsState(String[] states) { + return Arrays.stream(states) + .map(RelationshipState::valueOf) + .collect(Collectors.toList()); + } + + public static List getUserInstitutionsWithProductStatusIn(List userInstitutionToBeFiltered, List relationshipStateList) { + List result = new ArrayList<>(); + for(UserBinding userBinding: userInstitutionToBeFiltered){ + List products = userBinding.getProducts().stream().filter(product -> relationshipStateList.contains(product.getStatus())).collect(Collectors.toList()); + if(!products.isEmpty()){ + userBinding.setProducts(products); + result.add(userBinding); + } + } + if (result.isEmpty()) { + throw new ResourceNotFoundException(String.format(ONBOARDING_INFO_INSTITUTION_NOT_FOUND.getMessage(), "states : " + StringUtils.join(relationshipStateList, ", ")), ONBOARDING_INFO_INSTITUTION_NOT_FOUND.getCode()); + } + return result; + } + + public static Institution findOnboardingLinkedToProductWithStateIn(UserBinding userBinding, Institution onboardedInstitution, List relationshipStateList) { + List onboardings = new ArrayList<>(); + for(OnboardedProduct product: userBinding.getProducts()){ + onboardings.addAll(onboardedInstitution.getOnboarding().stream().filter(onboarding -> product.getProductId().equalsIgnoreCase(onboarding.getProductId()) + && relationshipStateList.contains(onboarding.getStatus())) + .collect(Collectors.toList())); + } + onboardedInstitution.setOnboarding(onboardings); + return onboardedInstitution; + } + + public static List getRelationShipStateList(String[] states) { + if (states == null || states.length == 0) { + return ONBOARDING_INFO_DEFAULT_RELATIONSHIP_STATES; + } else { + return convertStatesToRelationshipsState(states); + } + } +} diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/UtilEnumList.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/UtilEnumList.java new file mode 100644 index 0000000..b3a619a --- /dev/null +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/util/UtilEnumList.java @@ -0,0 +1,32 @@ +package it.pagopa.selfcare.mscore.core.util; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.NONE) +public class UtilEnumList { + + public static final List PRODUCT_RELATIONSHIP_STATES = + List.of(RelationshipState.PENDING, + RelationshipState.REJECTED, + RelationshipState.TOBEVALIDATED); + public static final List VALID_RELATIONSHIP_STATES = + List.of(RelationshipState.ACTIVE, + RelationshipState.SUSPENDED); + public static final List ONBOARDING_INFO_DEFAULT_RELATIONSHIP_STATES = + List.of(RelationshipState.ACTIVE, + RelationshipState.PENDING); + + public static final List VERIFY_TOKEN_RELATIONSHIP_STATES = + List.of(RelationshipState.TOBEVALIDATED, + RelationshipState.PENDING); + + public static final List ADMIN_PARTY_ROLE = + List.of(PartyRole.MANAGER, + PartyRole.SUB_DELEGATE, + PartyRole.DELEGATE); +} diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactoryTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactoryTest.java new file mode 100644 index 0000000..3f74040 --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamFactoryTest.java @@ -0,0 +1,30 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +@ExtendWith(SpringExtension.class) +class ClassPathStreamFactoryTest { + + @InjectMocks + private ClassPathStreamFactory classPathStreamFactory; + + @Test + void getUrl() { + assertNotNull(classPathStreamFactory.getUrl("url")); + } + + + @Test + void getUrl2() { + assertThrows(InvalidRequestException.class, () -> classPathStreamFactory.getUrl("a b c")); + } + +} + diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamTest.java new file mode 100644 index 0000000..7434371 --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ClassPathStreamTest.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.core; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class ClassPathStreamTest { + + @Test + void testConstructor() { + assertNull((new ClassPathStream("Path")).getStream()); + } + + @Test + void testGetReader() { + assertThrows(NullPointerException.class, () ->(new ClassPathStream("Path")).getReader()); + } + + +} + diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ContractServiceTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ContractServiceTest.java new file mode 100644 index 0000000..e795845 --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ContractServiceTest.java @@ -0,0 +1,63 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.FileStorageConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.model.onboarding.ResourceResponse; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.web.multipart.MultipartFile; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class ContractServiceTest { + + @InjectMocks + private ContractService contractService; + + @Mock + private FileStorageConnector fileStorageConnector; + + @Mock + private CoreConfig coreConfig; + + @Test + void getLogoFile() { + when(coreConfig.getLogoPath()).thenReturn("42"); + when(fileStorageConnector.getTemplateFile(any())).thenReturn("42"); + assertNotNull(contractService.getLogoFile()); + } + + @Test + void getLogoFile1() { + when(coreConfig.getLogoPath()).thenReturn("42"); + InvalidRequestException ioException = mock(InvalidRequestException.class); + when(fileStorageConnector.getTemplateFile(any())).thenThrow(ioException); + assertThrows(InvalidRequestException.class, () -> contractService.getLogoFile()); + } + + @Test + void getFile() { + when(fileStorageConnector.getFile(any())).thenReturn(new ResourceResponse()); + assertNotNull(contractService.getFile("path")); + } + + @Test + void deleteContract() { + doNothing().when(fileStorageConnector).removeContract(any(), any()); + assertDoesNotThrow(() -> contractService.deleteContract("fileName", "tokenId")); + } + + @Test + void uploadContract() { + when(fileStorageConnector.uploadContract(any(), any())).thenReturn("fileName"); + MultipartFile file = mock(MultipartFile.class); + assertDoesNotThrow(() -> contractService.uploadContract("fileName", file)); + } +} + diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java new file mode 100644 index 0000000..8ab55f5 --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java @@ -0,0 +1,385 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.api.DelegationConnector; +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.Order; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; +import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; +import it.pagopa.selfcare.mscore.model.delegation.PageInfo; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.function.Executable; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.List; +import java.util.Optional; + +import static it.pagopa.selfcare.mscore.constant.GenericError.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class DelegationServiceImplTest { + @Mock + private DelegationConnector delegationConnector; + + @InjectMocks + private DelegationServiceImpl delegationServiceImpl; + + @Mock + private MailNotificationService mailNotificationService; + + @Mock + private InstitutionService institutionService; + + private static final Delegation dummyDelegationProdIo; + private static final Delegation dummyDelegationProdPagopa; + + private static final Delegation dummyDelegationTaxCode; + + static { + dummyDelegationProdIo = new Delegation(); + dummyDelegationProdIo.setId("id"); + dummyDelegationProdIo.setTo("to"); + dummyDelegationProdIo.setFrom("from"); + dummyDelegationProdIo.setProductId("prod-io"); + + dummyDelegationProdPagopa = new Delegation(); + dummyDelegationProdPagopa.setId("id"); + dummyDelegationProdPagopa.setProductId("prod-pagopa"); + dummyDelegationProdPagopa.setTo("taxCodeTo"); + dummyDelegationProdPagopa.setFrom("from"); + + dummyDelegationTaxCode = new Delegation(); + dummyDelegationTaxCode.setToTaxCode("taxCodeTo"); + dummyDelegationTaxCode.setFromTaxCode("taxCodeFrom"); + dummyDelegationTaxCode.setProductId("prod-pagopa"); + dummyDelegationTaxCode.setId("id"); + } + + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationWithProductProdIo() { + Institution institutionTo = new Institution(); + institutionTo.setId("idTo"); + institutionTo.setTaxCode("taxCodeTo"); + institutionTo.setInstitutionType(InstitutionType.PA); + Institution institutionFrom = new Institution(); + institutionTo.setId("idFrom"); + institutionTo.setTaxCode("taxCodeFrom"); + institutionTo.setInstitutionType(InstitutionType.PT); + when(delegationConnector.save(dummyDelegationProdIo)).thenAnswer(arg ->arg.getArguments()[0]); + when(institutionService.retrieveInstitutionById(dummyDelegationProdIo.getFrom())).thenReturn(institutionFrom); + when(institutionService.retrieveInstitutionById(dummyDelegationProdIo.getTo())).thenReturn(institutionTo); + doNothing().when(mailNotificationService).sendMailForDelegation(any(), any(), any()); + doNothing().when(institutionService).updateInstitutionDelegation(any(),anyBoolean()); + Delegation response = delegationServiceImpl.createDelegation(dummyDelegationProdIo); + verify(delegationConnector).save(dummyDelegationProdIo); + assertNotNull(response); + assertNotNull(response.getId()); + assertEquals(dummyDelegationProdIo.getId(), response.getId()); + assertEquals(institutionTo.getTaxCode(), response.getToTaxCode()); + assertEquals(institutionFrom.getTaxCode(), response.getFromTaxCode()); + assertEquals(institutionTo.getInstitutionType(), response.getBrokerType()); + assertEquals(institutionFrom.getInstitutionType(), response.getInstitutionType()); + } + + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationWithSendMailError() { + Institution institution = new Institution(); + institution.setId("id"); + when(institutionService.retrieveInstitutionById(any())).thenReturn(institution); + doThrow(new MsCoreException(SEND_MAIL_FOR_DELEGATION_ERROR.getMessage(), SEND_MAIL_FOR_DELEGATION_ERROR.getCode())) + .when(mailNotificationService) + .sendMailForDelegation(any(), any(), any()); + assertDoesNotThrow(() -> delegationServiceImpl.createDelegation(dummyDelegationProdPagopa)); + verify(mailNotificationService).sendMailForDelegation(any(), any(), any()); + } + + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationWithError() { + Institution institution = new Institution(); + institution.setId("id"); + when(institutionService.retrieveInstitutionById(any())).thenReturn(institution); + when(delegationConnector.save(any())).thenThrow(new MsCoreException(CREATE_DELEGATION_ERROR.getMessage(), CREATE_DELEGATION_ERROR.getCode())); + assertThrows(MsCoreException.class, () -> delegationServiceImpl.createDelegation(dummyDelegationProdIo)); + verify(delegationConnector).save(any()); + } + + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationWithConflict() { + Institution institution = new Institution(); + institution.setId("id"); + when(institutionService.retrieveInstitutionById(dummyDelegationProdIo.getTo())).thenReturn(institution); + when(institutionService.retrieveInstitutionById(dummyDelegationProdIo.getFrom())).thenReturn(institution); + when(delegationServiceImpl.checkIfExistsWithStatus(dummyDelegationProdIo, DelegationState.ACTIVE)).thenReturn(true); + assertThrows(ResourceConflictException.class, () -> delegationServiceImpl.createDelegation(dummyDelegationProdIo)); + verifyNoMoreInteractions(delegationConnector); + } + + /** + * Method under test: {@link DelegationService#checkIfExistsWithStatus(Delegation, DelegationState)} + */ + @Test + void testCheckIfExists() { + Delegation delegation = new Delegation(); + when(delegationConnector.checkIfExistsWithStatus(any(), any())).thenReturn(true); + boolean check = delegationServiceImpl.checkIfExistsWithStatus(delegation, DelegationState.ACTIVE); + assertTrue(check); + } + + /** + * Method under test: {@link DelegationServiceImpl#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} + */ + @Test + void find_shouldGetData() { + //Given + Delegation delegation = new Delegation(); + delegation.setId("id"); + when(delegationConnector.find(any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(List.of(delegation)); + //When + List response = delegationServiceImpl.getDelegations("from", "to", "productId", null, + null, Optional.empty(), Optional.of(0), Optional.of(100)); + //Then + verify(delegationConnector).find(any(), any(), any(), any(), any(), any(), any(), any()); + + assertNotNull(response); + assertFalse(response.isEmpty()); + assertEquals(delegation.getId(), response.get(0).getId()); + } + + /** + * Method under test: {@link DelegationServiceImpl#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} + */ + @Test + void find_shouldGetData_fullMode() { + //Given + Delegation delegation = new Delegation(); + delegation.setId("id"); + when(delegationConnector.find(any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(List.of(delegation)); + //When + List response = delegationServiceImpl.getDelegations("from", null, "productId", null, + null, Optional.of(Order.DESC), Optional.of(0), Optional.of(0)); + //Then + verify(delegationConnector).find(any(), any(), any(), any(), any(), any(), any(), any()); + + assertNotNull(response); + assertFalse(response.isEmpty()); + assertEquals(delegation.getId(), response.get(0).getId()); + } + + /** + * Method under test: {@link DelegationServiceImpl#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} + */ + @Test + void find_shouldGetData_fullMode_defaultPage() { + //Given + Delegation delegation = new Delegation(); + delegation.setId("id"); + when(delegationConnector.find(any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(List.of(delegation)); + //When + List response = delegationServiceImpl.getDelegations("from", null, "productId", null, + null, Optional.of(Order.DESC), Optional.empty(), Optional.empty()); + //Then + verify(delegationConnector).find(any(), any(), any(), any(), any(), any(), any(), any()); + + assertNotNull(response); + assertFalse(response.isEmpty()); + assertEquals(delegation.getId(), response.get(0).getId()); + } + + /** + * Method under test: {@link DelegationServiceImpl#getDelegationsV2(GetDelegationParameters)} + */ + @Test + void getDelegationsV2_shouldGetData() { + //Given + Delegation delegation = new Delegation(); + delegation.setId("id"); + DelegationWithPagination delegationWithPagination = new DelegationWithPagination(List.of(delegation), new PageInfo(10, 0, 10, 1)); + when(delegationConnector.findAndCount(any())).thenReturn(delegationWithPagination); + GetDelegationParameters delegationParameters = createDelegationParameters("from", "to", "productId", null, + null, null, 0, 100); + + //When + DelegationWithPagination response = delegationServiceImpl.getDelegationsV2(delegationParameters); + //Then + ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(GetDelegationParameters.class); + verify(delegationConnector).findAndCount(argumentCaptor.capture()); + assertNotNull(argumentCaptor); + assertEquals(argumentCaptor.getValue(), delegationParameters); + + assertNotNull(response); + assertNotNull(response.getDelegations()); + assertNotNull(response.getPageInfo()); + assertFalse(response.getDelegations().isEmpty()); + assertEquals(delegation.getId(), response.getDelegations().get(0).getId()); + } + + @Test + void testCreateDelegationFromTaxCode() { + Institution institutionTo = new Institution(); + institutionTo.setId("id"); + institutionTo.setTaxCode("taxCodeTo"); + when(delegationConnector.save(any())).thenReturn(dummyDelegationTaxCode); + Institution institutionFrom = new Institution(); + institutionFrom.setId("id"); + institutionFrom.setTaxCode("taxCodeFrom"); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getToTaxCode(), dummyDelegationTaxCode.getToSubunitCode())).thenReturn(List.of(institutionTo)); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getFromTaxCode(), dummyDelegationTaxCode.getFromSubunitCode())).thenReturn(List.of(institutionFrom)); + doNothing().when(institutionService).updateInstitutionDelegation(any(),anyBoolean()); + Delegation response = delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationTaxCode); + verify(delegationConnector).save(any()); + assertNotNull(response); + assertNotNull(response.getId()); + assertEquals(dummyDelegationTaxCode.getId(), response.getId()); + assertEquals(institutionTo.getTaxCode(), response.getToTaxCode()); + assertEquals(institutionFrom.getTaxCode(), response.getFromTaxCode()); + assertEquals(institutionTo.getInstitutionType(), response.getInstitutionType()); + assertEquals(institutionFrom.getInstitutionType(), response.getBrokerType()); + } + + @Test + void testCreateDelegationFromTaxCodeWithSubunitCode() { + Institution institutionTo = new Institution(); + institutionTo.setId("id"); + institutionTo.setTaxCode("taxCodeTo"); + Institution institutionFrom = new Institution(); + institutionFrom.setId("id"); + institutionFrom.setTaxCode("taxCodeFrom"); + when(delegationConnector.findAndActivate(anyString(), anyString(), anyString())).thenReturn(dummyDelegationTaxCode); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getToTaxCode(), dummyDelegationTaxCode.getToSubunitCode())).thenReturn(List.of(institutionTo)); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getFromTaxCode(), dummyDelegationTaxCode.getFromSubunitCode())).thenReturn(List.of(institutionFrom)); + doNothing().when(institutionService).updateInstitutionDelegation(any(),anyBoolean()); + when(delegationConnector.checkIfExistsWithStatus(dummyDelegationTaxCode, DelegationState.ACTIVE)).thenReturn(false); + when(delegationConnector.checkIfExistsWithStatus(dummyDelegationTaxCode, DelegationState.DELETED)).thenReturn(true); + Delegation response = delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationTaxCode); + verify(delegationConnector).findAndActivate(anyString(), anyString(), anyString()); + assertNotNull(response); + assertNotNull(response.getId()); + assertEquals(dummyDelegationTaxCode.getId(), response.getId()); + assertEquals(dummyDelegationTaxCode.getFromTaxCode(), response.getFromTaxCode()); + assertEquals(dummyDelegationTaxCode.getToTaxCode(), response.getToTaxCode()); + } + + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationFromTaxCodeWithError() { + Institution institution = new Institution(); + institution.setId("id"); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getToTaxCode(), null)).thenReturn(List.of(institution)); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getFromTaxCode(), null)).thenReturn(List.of(institution)); + when(delegationConnector.save(any())).thenThrow(new MsCoreException(CREATE_DELEGATION_ERROR.getMessage(), CREATE_DELEGATION_ERROR.getCode())); + assertThrows(MsCoreException.class, () -> delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationTaxCode)); + verify(delegationConnector).save(any()); + } + + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationFromTaxCodeWithResourceNotFoundException() { + when(institutionService.getInstitutions(any(), any())).thenReturn(List.of()); + assertThrows(ResourceNotFoundException.class, () -> delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationProdPagopa)); + } + + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationFromTaxCodeConflict() { + Institution institution = new Institution(); + institution.setId("id"); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getToTaxCode(), dummyDelegationProdPagopa.getToSubunitCode())).thenReturn(List.of(institution)); + when(institutionService.getInstitutions(dummyDelegationTaxCode.getFromTaxCode(), dummyDelegationProdPagopa.getFromSubunitCode())).thenReturn(List.of(institution)); + when(delegationConnector.checkIfExistsWithStatus(dummyDelegationTaxCode, DelegationState.ACTIVE)).thenReturn(true); + assertThrows(ResourceConflictException.class, () -> delegationServiceImpl.createDelegationFromInstitutionsTaxCode(dummyDelegationTaxCode)); + } + + @Test + void testDeleteDelegationByDelegationId_whenDelegationisNotActive() { + Delegation delegation = new Delegation(); + delegation.setTo("id"); + delegation.setStatus(DelegationState.DELETED); + when(delegationConnector.findByIdAndModifyStatus("id", DelegationState.DELETED)).thenReturn(delegation); + when(delegationConnector.checkIfDelegationsAreActive("id")).thenReturn(false); + Executable executable = () -> delegationServiceImpl.deleteDelegationByDelegationId("id"); + assertDoesNotThrow(executable); + verify(institutionService).updateInstitutionDelegation("id", false); + } + + @Test + void testDeleteDelegationByDelegationId_whenDelegationisActive() { + Delegation delegation = new Delegation(); + delegation.setTo("id"); + delegation.setStatus(DelegationState.DELETED); + when(delegationConnector.findByIdAndModifyStatus("id", DelegationState.DELETED)).thenReturn(delegation); + when(delegationConnector.checkIfDelegationsAreActive("id")).thenReturn(true); + Executable executable = () -> delegationServiceImpl.deleteDelegationByDelegationId("id"); + assertDoesNotThrow(executable); + verify(institutionService, times(0)).updateInstitutionDelegation("id", false); + } + + @Test + void testDeleteDelegationByDelegationId_whenFindAndModifyStatusThrowsException() { + Delegation delegation = new Delegation(); + delegation.setTo("id"); + delegation.setStatus(DelegationState.DELETED); + when(delegationConnector.findByIdAndModifyStatus("id", DelegationState.DELETED)) + .thenThrow(new MsCoreException(DELETE_DELEGATION_ERROR.getMessage(), DELETE_DELEGATION_ERROR.getCode())); + assertThrows(MsCoreException.class, () -> delegationServiceImpl.deleteDelegationByDelegationId("id")); + verify(delegationConnector, times(0)).checkIfDelegationsAreActive(any()); + } + + @Test + void testDeleteDelegationByDelegationId_whenUpdateInstitutionDelegationThrowsException() { + Delegation delegation = new Delegation(); + delegation.setTo("id"); + delegation.setStatus(DelegationState.DELETED); + when(delegationConnector.findByIdAndModifyStatus("id", DelegationState.DELETED)).thenReturn(delegation); + when(delegationConnector.checkIfDelegationsAreActive("id")).thenReturn(false); + doThrow(new MsCoreException(DELETE_DELEGATION_ERROR.getMessage(), DELETE_DELEGATION_ERROR.getCode())) + .when(institutionService).updateInstitutionDelegation("id", false); + assertThrows(MsCoreException.class, () -> delegationServiceImpl.deleteDelegationByDelegationId("id")); + verify(delegationConnector, times(1)).findByIdAndModifyStatus("id", DelegationState.ACTIVE); + } + + + private GetDelegationParameters createDelegationParameters(String from, String to, String productId, + String search, String taxCode, Order order, + Integer page, Integer size) { + return GetDelegationParameters.builder() + .from(from) + .to(to) + .productId(productId) + .search(search) + .taxCode(taxCode) + .order(order) + .page(page) + .size(size) + .build(); + } + +} \ No newline at end of file diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ExternalServiceImplTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ExternalServiceImplTest.java new file mode 100644 index 0000000..fe5732c --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/ExternalServiceImplTest.java @@ -0,0 +1,170 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.model.institution.GeographicTaxonomies; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class ExternalServiceImplTest { + + @InjectMocks + private ExternalServiceImpl externalServiceImpl; + + @Mock + private InstitutionService institutionService; + + + /** + * Method under test: {@link ExternalServiceImpl#getInstitutionByExternalId(String)} + */ + @Test + void testGetInstitutionByExternalId() { + Institution institution = new Institution(); + when(institutionService.retrieveInstitutionByExternalId(any())).thenReturn(institution); + assertSame(institution, externalServiceImpl.getInstitutionByExternalId("42")); + verify(institutionService).retrieveInstitutionByExternalId(any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#getInstitutionByExternalId(String)} + */ + @Test + void testGetInstitutionByExternalId2() { + Institution institution = new Institution(); + when(institutionService.retrieveInstitutionByExternalId(any())).thenReturn(institution); + assertSame(institution, externalServiceImpl.getInstitutionByExternalId("42")); + verify(institutionService).retrieveInstitutionByExternalId(any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#getInstitutionByExternalId(String)} + */ + @Test + void testGetInstitutionByExternalId3() { + when(institutionService.retrieveInstitutionByExternalId(any())) + .thenThrow(new InvalidRequestException("An error occurred", "Code")); + assertThrows(InvalidRequestException.class, () -> externalServiceImpl.getInstitutionByExternalId("42")); + verify(institutionService).retrieveInstitutionByExternalId(any()); + } + + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProduct(String, String)} + */ + @Test + void testRetrieveInstitutionProduct() { + Institution institution = new Institution(); + when(institutionService.retrieveInstitutionProduct(any(), any())).thenReturn(institution); + assertSame(institution, externalServiceImpl.retrieveInstitutionProduct("42", "42")); + verify(institutionService).retrieveInstitutionProduct(any(), any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProduct(String, String)} + */ + @Test + void testRetrieveInstitutionProduct2() { + Institution institution = new Institution(); + when(institutionService.retrieveInstitutionProduct(any(), any())).thenReturn(institution); + assertSame(institution, externalServiceImpl.retrieveInstitutionProduct("42", "42")); + verify(institutionService).retrieveInstitutionProduct(any(), any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProduct(String, String)} + */ + @Test + void testRetrieveInstitutionProduct3() { + when(institutionService.retrieveInstitutionProduct(any(), any())) + .thenThrow(new InvalidRequestException("An error occurred", "Code")); + assertThrows(InvalidRequestException.class, () -> externalServiceImpl.retrieveInstitutionProduct("42", "42")); + verify(institutionService).retrieveInstitutionProduct(any(), any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProductsByExternalId(String, List)} + */ + @Test + void testRetrieveInstitutionProductsByExternalId() { + when(institutionService.retrieveInstitutionByExternalId(any())).thenReturn(new Institution()); + ArrayList onboardingList = new ArrayList<>(); + when(institutionService.retrieveInstitutionProducts(any(), any())) + .thenReturn(onboardingList); + List actualRetrieveInstitutionProductsByExternalIdResult = externalServiceImpl + .retrieveInstitutionProductsByExternalId("42", new ArrayList<>()); + assertSame(onboardingList, actualRetrieveInstitutionProductsByExternalIdResult); + assertTrue(actualRetrieveInstitutionProductsByExternalIdResult.isEmpty()); + verify(institutionService).retrieveInstitutionByExternalId(any()); + verify(institutionService).retrieveInstitutionProducts(any(), any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionProductsByExternalId(String, List)} + */ + @Test + void testRetrieveInstitutionProductsByExternalId2() { + when(institutionService.retrieveInstitutionByExternalId(any())) + .thenThrow(new InvalidRequestException("An error occurred", "Code")); + List list = new ArrayList<>(); + assertThrows(InvalidRequestException.class, + () -> externalServiceImpl.retrieveInstitutionProductsByExternalId("42", list)); + verify(institutionService).retrieveInstitutionByExternalId(any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionByIds(List)} + */ + @Test + void testRetrieveInstitutionByIds() { + ArrayList institutionList = new ArrayList<>(); + when(institutionService.retrieveInstitutionByIds(any())).thenReturn(institutionList); + List actualRetrieveInstitutionByIdsResult = externalServiceImpl + .retrieveInstitutionByIds(new ArrayList<>()); + assertSame(institutionList, actualRetrieveInstitutionByIdsResult); + assertTrue(actualRetrieveInstitutionByIdsResult.isEmpty()); + verify(institutionService).retrieveInstitutionByIds(any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionByIds(List)} + */ + @Test + void testRetrieveInstitutionByIds2() { + when(institutionService.retrieveInstitutionByIds(any())) + .thenThrow(new InvalidRequestException("An error occurred", "Code")); + List ids = new ArrayList<>(); + assertThrows(InvalidRequestException.class, + () -> externalServiceImpl.retrieveInstitutionByIds(ids)); + verify(institutionService).retrieveInstitutionByIds(any()); + } + + /** + * Method under test: {@link ExternalServiceImpl#retrieveInstitutionGeoTaxonomiesByExternalId(String)} + */ + @Test + void testRetrieveInstitutionGeoTaxonomiesByExternalId() { + when(institutionService.retrieveInstitutionByExternalId(any())).thenReturn(new Institution()); + ArrayList geographicTaxonomiesList = new ArrayList<>(); + when(institutionService.retrieveInstitutionGeoTaxonomies(any())) + .thenReturn(geographicTaxonomiesList); + List actualRetrieveInstitutionGeoTaxonomiesByExternalIdResult = externalServiceImpl + .retrieveInstitutionGeoTaxonomiesByExternalId("42"); + assertSame(geographicTaxonomiesList, actualRetrieveInstitutionGeoTaxonomiesByExternalIdResult); + assertTrue(actualRetrieveInstitutionGeoTaxonomiesByExternalIdResult.isEmpty()); + verify(institutionService).retrieveInstitutionByExternalId(any()); + verify(institutionService).retrieveInstitutionGeoTaxonomies(any()); + } +} diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplPdaTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplPdaTest.java new file mode 100644 index 0000000..f0ede7e --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplPdaTest.java @@ -0,0 +1,33 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.core.strategy.CreateInstitutionStrategy; +import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +public class InstitutionServiceImplPdaTest { + @InjectMocks + private InstitutionServiceImpl institutionServiceImpl; + @Mock + private CreateInstitutionStrategyFactory createInstitutionStrategyFactory; + + @Mock + private CreateInstitutionStrategy createInstitutionStrategy; + + @Test + void testCreateInstitutionFromPda() { + when(createInstitutionStrategyFactory.createInstitutionStrategyPda(any())).thenReturn(createInstitutionStrategy); + when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); + Institution institution = institutionServiceImpl.createInstitutionFromPda(new Institution(), "EC"); + assertNotNull(institution); + } +} diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplTest.java new file mode 100644 index 0000000..0fc09af --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/InstitutionServiceImplTest.java @@ -0,0 +1,1102 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.commons.base.security.SelfCareUser; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.api.DelegationConnector; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.api.UserApiConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.SearchMode; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapperImpl; +import it.pagopa.selfcare.mscore.core.mapper.TokenMapper; +import it.pagopa.selfcare.mscore.core.mapper.TokenMapperImpl; +import it.pagopa.selfcare.mscore.core.strategy.CreateInstitutionStrategy; +import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.TokenUser; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.function.Executable; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import static it.pagopa.selfcare.commons.utils.TestUtils.mockInstance; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class InstitutionServiceImplTest { + @Mock + private InstitutionConnector institutionConnector; + + @Mock + private DelegationConnector delegationConnector; + + @Mock + private UserApiConnector userApiConnector; + + @InjectMocks + private InstitutionServiceImpl institutionServiceImpl; + + @Mock + private PartyRegistryProxyConnector partyRegistryProxyConnector; + + @Mock + private CoreConfig coreConfig; + + @Mock + private CreateInstitutionStrategyFactory createInstitutionStrategyFactory; + + @Mock + private CreateInstitutionStrategy createInstitutionStrategy; + + @Spy + private InstitutionMapper institutionMapper = new InstitutionMapperImpl(); + + @Spy + private TokenMapper tokenMapper = new TokenMapperImpl(); + + + private static final InstitutionProxyInfo dummyInstitutionProxyInfo; + private static final CategoryProxyInfo dummyCategoryProxyInfo; + + static { + dummyInstitutionProxyInfo = new InstitutionProxyInfo(); + dummyInstitutionProxyInfo.setAddress("42 Main St"); + dummyInstitutionProxyInfo.setAoo("Aoo"); + dummyInstitutionProxyInfo.setCategory("Category"); + dummyInstitutionProxyInfo.setDescription("The characteristics of someone or something"); + dummyInstitutionProxyInfo.setDigitalAddress("42 Main St"); + dummyInstitutionProxyInfo.setId("42"); + dummyInstitutionProxyInfo.setO("foo"); + dummyInstitutionProxyInfo.setOrigin("Origin"); + dummyInstitutionProxyInfo.setOriginId("42"); + dummyInstitutionProxyInfo.setOu("Ou"); + dummyInstitutionProxyInfo.setTaxCode("Tax Code"); + dummyInstitutionProxyInfo.setZipCode("21654"); + + dummyCategoryProxyInfo = new CategoryProxyInfo(); + dummyCategoryProxyInfo.setCode("Code"); + dummyCategoryProxyInfo.setKind("Kind"); + dummyCategoryProxyInfo.setName("Name"); + dummyCategoryProxyInfo.setOrigin("Origin"); + } + + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionById(String)} + */ + @Test + void testRetrieveInstitutionById() { + Institution institution = new Institution(); + when(institutionConnector.findById(any())).thenReturn(institution); + assertSame(institution, institutionServiceImpl.retrieveInstitutionById("42")); + verify(institutionConnector).findById(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionById(String)} + */ + @Test + void testRetrieveInstitutionById2() { + when(institutionConnector.findById(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.retrieveInstitutionById("42")); + verify(institutionConnector).findById(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalId(String)} + */ + @Test + void testRetrieveInstitutionByExternalId() { + Institution institution = new Institution(); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.of(institution)); + assertSame(institution, institutionServiceImpl.retrieveInstitutionByExternalId("42")); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalId(String)} + */ + @Test + void testRetrieveInstitutionByExternalId2() { + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.retrieveInstitutionByExternalId("42")); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalId(String)} + */ + @Test + void testRetrieveInstitutionByExternalId3() { + when(institutionConnector.findByExternalId(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.retrieveInstitutionByExternalId("42")); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} + */ + @Test + void shouldThrowExceptionOnCreateInstitutionByExternalIdWhenInstitutionFounded() { + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.of(new Institution())); + assertThrows(ResourceConflictException.class, () -> institutionServiceImpl.createInstitutionByExternalId("42")); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} + */ + @Test + void testCreateInstitutionByExternalId2() { + Institution institution = new Institution(); + when(institutionConnector.save(any())).thenReturn(institution); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + assertSame(institution, institutionServiceImpl.createInstitutionByExternalId("42")); + verify(institutionConnector).save(any()); + verify(institutionConnector).findByExternalId(any()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} + */ + @Test + void shouldThrowExceptionOnCreationInstitutionByExternalIdWhenSaveAlreadyExists() { + when(institutionConnector.save(any())) + .thenThrow(new ResourceConflictException("An error occurred", "START - check institution {} already exists")); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + assertThrows(MsCoreException.class, () -> institutionServiceImpl.createInstitutionByExternalId("42")); + verify(institutionConnector).save(any()); + verify(institutionConnector).findByExternalId(any()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + } + + + /** + * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} + */ + @Test + void shouldThrowExceptionOnCreationInstitutionByExternalIdIfAlreadyExists() { + when(institutionConnector.findByExternalId(any())) + .thenThrow(new InvalidRequestException("An error occurred", "START - check institution {} already exists")); + assertThrows(InvalidRequestException.class, () -> institutionServiceImpl.createInstitutionByExternalId("42")); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createInstitutionByExternalId(String)} + */ + @Test + void testCreateInstitutionByExternalId6() { + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + Institution institution = new Institution(); + when(institutionConnector.save(any())).thenReturn(institution); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + assertSame(institution, institutionServiceImpl.createInstitutionByExternalId("42")); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(institutionConnector).save(any()); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitutionNotFoundInstitution() { + String taxId = "taxId"; + Institution institution = new Institution(); + institution.setTaxCode(taxId); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName("test name"); + institutionByLegal.setBusinessTaxId(taxId); + when(partyRegistryProxyConnector.getInstitutionsByLegal(any())).thenReturn(List.of(institutionByLegal)); + NationalRegistriesProfessionalAddress professionalAddress = new NationalRegistriesProfessionalAddress(); + professionalAddress.setAddress("via di prova"); + professionalAddress.setZipCode("00100"); + when(partyRegistryProxyConnector.getLegalAddress(taxId)).thenReturn(professionalAddress); + when(institutionConnector.save(any())).thenReturn(institution); + when(coreConfig.isInfoCamereEnable()).thenReturn(true); + Institution response = institutionServiceImpl.createPgInstitution(taxId, "42", true, mock(SelfCareUser.class)); + assertEquals(response.getTaxCode(), taxId); + verify(institutionConnector).findByExternalId(any()); + verify(institutionConnector).save(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitutionFoundedInstitution() { + String taxId = "taxId"; + Institution institution = new Institution(); + institution.setId("institutionId"); + institution.setTaxCode(taxId); + institution.setExternalId(taxId); + when(institutionConnector.findByExternalId(taxId)).thenReturn(Optional.of(institution)); + Institution response = institutionServiceImpl.createPgInstitution(taxId, "42", true, mock(SelfCareUser.class)); + assertEquals(response.getId(), institution.getId()); + assertEquals(response.getTaxCode(), taxId); + assertEquals(response.getExternalId(), taxId); + verify(institutionConnector).findByExternalId(any()); + verify(institutionConnector, never()).save(any()); + } + + @Test + void testGetOnboardingInstitutionByProductId() { + List onboardings = new ArrayList<>(); + when(institutionConnector.findOnboardingByIdAndProductId(any(), any())).thenReturn(onboardings); + List onboardingList = institutionServiceImpl.getOnboardingInstitutionByProductId("id", "id"); + assertTrue(onboardingList.isEmpty()); + } + + @Test + void testGetInstitutionsWithTaxCodeSubunitCode() { + List institutionList = new ArrayList<>(); + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())).thenReturn(institutionList); + List institutions = institutionServiceImpl.getInstitutions("id", "id", null, null); + assertTrue(institutions.isEmpty()); + Mockito.verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); + } + + @Test + void testGetInstitutionsWithOriginOriginId() { + List institutionList = new ArrayList<>(); + when(institutionConnector.findByOriginAndOriginId(any(), any())).thenReturn(institutionList); + List institutions = institutionServiceImpl.getInstitutions(null, null, "id", "id"); + assertTrue(institutions.isEmpty()); + Mockito.verify(institutionConnector).findByOriginAndOriginId(any(), any()); + } + + @Test + void testGetInstitutionsFails() { + assertThrows(InvalidRequestException.class, () -> institutionServiceImpl.getInstitutions("id", "id", "id", "id")); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createInstitutionFromIpa(String, InstitutionPaSubunitType, String, List, InstitutionType)} + */ + @Test + void testCreateInstitutionFromIpa() { + when(createInstitutionStrategyFactory.createInstitutionStrategyIpa()).thenReturn(createInstitutionStrategy); + when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); + Institution institution = institutionServiceImpl.createInstitutionFromIpa("id", InstitutionPaSubunitType.AOO,"id", List.of(), InstitutionType.PA); + assertNotNull(institution); + } + + @Test + void testCreateInstitution() { + when(createInstitutionStrategyFactory.createInstitutionStrategy(any())).thenReturn(createInstitutionStrategy); + when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); + Institution institution = institutionServiceImpl.createInstitution(new Institution()); + assertNotNull(institution); + } + + @Test + void testCreateInstitutionFromAnac() { + when(createInstitutionStrategyFactory.createInstitutionStrategyAnac(any())).thenReturn(createInstitutionStrategy); + when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); + Institution institution = institutionServiceImpl.createInstitutionFromAnac(new Institution()); + assertNotNull(institution); + } + + @Test + void testCreateInstitutionFromIvass() { + when(createInstitutionStrategyFactory.createInstitutionStrategyIvass(any())).thenReturn(createInstitutionStrategy); + when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); + Institution institution = institutionServiceImpl.createInstitutionFromIvass(new Institution()); + assertNotNull(institution); + } + + + @Test + void testCreateInstitutionFromInfocamere() { + when(createInstitutionStrategyFactory.createInstitutionStrategyInfocamere(any())).thenReturn(createInstitutionStrategy); + when(createInstitutionStrategy.createInstitution(any())).thenReturn(new Institution()); + Institution institution = institutionServiceImpl.createInstitutionFromInfocamere(new Institution()); + assertNotNull(institution); + } + + /** + * Method under test: {@link InstitutionServiceImpl#getInstitutionsByProductId(String, Integer, Integer)} + */ + @Test + void testInstitutionsInstitutionsByProductId() { + List institutions = new ArrayList<>(); + when(institutionConnector.findInstitutionsByProductId(any(), any(), any())).thenReturn(institutions); + List institutionsResult = institutionServiceImpl.getInstitutionsByProductId("id", 0, 1); + assertTrue(institutionsResult.isEmpty()); + } + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitution4() { + Institution institution = new Institution(); + when(institutionConnector.save(any())).thenReturn(institution); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName("START - check institution {} already exists"); + institutionByLegal.setBusinessTaxId("42"); + + SelfCareUser selfCareUser = mock(SelfCareUser.class); + Institution institutionResult = institutionServiceImpl.createPgInstitution("42", "42", false, selfCareUser); + assertSame(institution, institutionResult); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitution2() { + Institution institution = new Institution(); + when(coreConfig.isInfoCamereEnable()).thenReturn(true); + List list = new ArrayList<>(); + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName("START - check institution {} already exists"); + institutionByLegal.setBusinessTaxId("42"); + list.add(institutionByLegal); + when(partyRegistryProxyConnector.getInstitutionsByLegal(any())).thenReturn(list); + when(institutionConnector.save(any())).thenReturn(institution); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + + SelfCareUser selfCareUser = mock(SelfCareUser.class); + assertSame(institution, institutionServiceImpl.createPgInstitution("42", "42", true, selfCareUser)); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitution5() { + when(institutionConnector.findByExternalId(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "START - check institution {} already exists")); + assertThrows(ResourceNotFoundException.class, + () -> institutionServiceImpl.createPgInstitution("42", "42", true, mock(SelfCareUser.class))); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitution6() { + Institution institution = new Institution(); + when(institutionConnector.save(any())).thenReturn(institution); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName("START - check institution {} already exists"); + institutionByLegal.setBusinessTaxId("42"); + + SelfCareUser selfCareUser = mock(SelfCareUser.class); + assertSame(institution, institutionServiceImpl.createPgInstitution("42", "42", false, selfCareUser)); + verify(institutionConnector).save(any()); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitution7() { + when(institutionConnector.save(any())) + .thenThrow(new ResourceConflictException("An error occurred", "START - check institution {} already exists")); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName("START - check institution {} already exists"); + institutionByLegal.setBusinessTaxId("42"); + + SelfCareUser selfCareUser = mock(SelfCareUser.class); + assertThrows(ResourceConflictException.class, + () -> institutionServiceImpl.createPgInstitution("42", "42", true, selfCareUser)); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitution9() { + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName("START - check institution {} already exists"); + institutionByLegal.setBusinessTaxId("42"); + + NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); + nationalRegistriesProfessionalAddress.setAddress("42 Main St"); + nationalRegistriesProfessionalAddress.setZipCode("21654"); + Institution institution = new Institution(); + when(institutionConnector.save(any())).thenReturn(institution); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + SelfCareUser selfCareUser = mock(SelfCareUser.class); + assertSame(institution, institutionServiceImpl.createPgInstitution("42", "42", true, selfCareUser)); + } + + /** + * Method under test: {@link InstitutionServiceImpl#createPgInstitution(String, String, boolean, SelfCareUser)} + */ + @Test + void testCreatePgInstitution14() { + InstitutionByLegal institutionByLegal = new InstitutionByLegal(); + institutionByLegal.setBusinessName("START - check institution {} already exists"); + institutionByLegal.setBusinessTaxId("42"); + + NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); + nationalRegistriesProfessionalAddress.setAddress("42 Main St"); + nationalRegistriesProfessionalAddress.setZipCode("21654"); + Institution institution = new Institution(); + when(institutionConnector.save(any())).thenReturn(institution); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.empty()); + SelfCareUser selfCareUser = mock(SelfCareUser.class); + assertSame(institution, institutionServiceImpl.createPgInstitution("42", "42", false, selfCareUser)); + verify(institutionConnector).save(any()); + verify(institutionConnector).findByExternalId(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionProducts(Institution, List)} + */ + @Test + void testRetrieveInstitutionProducts() { + Institution institution = new Institution(); + Onboarding onboarding = new Onboarding(); + onboarding.setStatus(RelationshipState.PENDING); + List list = new ArrayList<>(); + list.add(RelationshipState.PENDING); + institution.setOnboarding(List.of(onboarding)); + assertEquals(1, institutionServiceImpl.retrieveInstitutionProducts(institution, list).size()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionProducts(Institution, List)} + */ + @Test + void testRetrieveInstitutionProducts3() { + Institution institution = new Institution(); + Onboarding onboarding = new Onboarding(); + onboarding.setStatus(RelationshipState.PENDING); + institution.setOnboarding(List.of(onboarding)); + List list = new ArrayList<>(); + assertEquals(1, institutionServiceImpl.retrieveInstitutionProducts(institution, list).size()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionProduct(String, String)} + */ + @Test + void testRetrieveInstitutionProduct2() { + + Institution institution = new Institution(); + when(institutionConnector.findByExternalIdAndProductId(any(), any())).thenReturn(institution); + + + assertSame(institution, institutionServiceImpl.retrieveInstitutionProduct("42", "42")); + verify(institutionConnector).findByExternalIdAndProductId(any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionGeoTaxonomies(Institution)} + */ + @Test + void testRetrieveInstitutionGeoTaxonomies2() { + + Institution institution = new Institution(); + institution.setGeographicTaxonomies(new ArrayList<>()); + Assertions.assertThrows(MsCoreException.class, () -> institutionServiceImpl.retrieveInstitutionGeoTaxonomies(institution)); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionGeoTaxonomies(Institution)} + */ + @Test + void testRetrieveInstitutionGeoTaxonomies4() { + GeographicTaxonomies geographicTaxonomies = new GeographicTaxonomies(); + geographicTaxonomies.setGeotaxId("Code"); + geographicTaxonomies.setCountry("GB"); + geographicTaxonomies.setCountryAbbreviation("GB"); + geographicTaxonomies.setDescription("The characteristics of someone or something"); + geographicTaxonomies.setEnable(true); + geographicTaxonomies.setIstatCode(""); + geographicTaxonomies.setProvinceId("Province"); + geographicTaxonomies.setProvinceAbbreviation("Province Abbreviation"); + geographicTaxonomies.setRegionId("us-east-2"); + + when(partyRegistryProxyConnector.getExtByCode(any())).thenReturn(geographicTaxonomies); + + ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); + institutionGeographicTaxonomiesList.add(new InstitutionGeographicTaxonomies( + "Retrieving geographic taxonomies for institution {}", "The characteristics of someone or something")); + + Institution institution = new Institution(); + institution.setGeographicTaxonomies(institutionGeographicTaxonomiesList); + assertEquals(1, institutionServiceImpl.retrieveInstitutionGeoTaxonomies(institution).size()); + verify(partyRegistryProxyConnector).getExtByCode(any()); + } + + /** + * Method under test: {@link InstitutionService#updateInstitution(String, InstitutionUpdate, String)} + */ + @Test + void updateInstitution_shouldThrowExceptionIfGeotaxNotFound() { + + when(partyRegistryProxyConnector.getExtByCode(any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + + ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); + institutionGeographicTaxonomiesList + .add(new InstitutionGeographicTaxonomies("Code", "The characteristics of someone or something")); + + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setAddress("42 Main St"); + institutionUpdate.setBusinessRegisterPlace("Business Register Place"); + institutionUpdate + .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); + institutionUpdate.setDescription("The characteristics of someone or something"); + institutionUpdate.setDigitalAddress("42 Main St"); + institutionUpdate.setGeographicTaxonomies(institutionGeographicTaxonomiesList); + institutionUpdate.setImported(true); + institutionUpdate.setInstitutionType(InstitutionType.PA); + institutionUpdate + .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); + institutionUpdate.setRea("Rea"); + institutionUpdate.setShareCapital("Share Capital"); + institutionUpdate.setSupportEmail("jane.doe@example.org"); + institutionUpdate.setSupportPhone("6625550144"); + institutionUpdate.setTaxCode("Tax Code"); + institutionUpdate.setZipCode("21654"); + assertThrows(MsCoreException.class, + () -> institutionServiceImpl.updateInstitution("42", institutionUpdate, "42")); + verify(partyRegistryProxyConnector).getExtByCode(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#updateInstitutionDelegation(String, boolean)} (String, InstitutionUpdate, String)} + */ + @Test + void testUpdateInstitutionDelegation() { + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDelegation(true); + assertDoesNotThrow( + () -> institutionServiceImpl.updateInstitutionDelegation("42", true)); + verify(institutionConnector).findAndUpdate("42", null, null, institutionUpdate); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalIds(List, String)} + */ + @Test + void testRetrieveInstitutionByExternalIds2() { + + when(institutionConnector.findByExternalIdsAndProductId(any(), any())).thenReturn(List.of()); + + ArrayList validInstitutionList = new ArrayList<>(); + List actualRetrieveInstitutionByExternalIdsResult = institutionServiceImpl + .retrieveInstitutionByExternalIds(validInstitutionList, "42"); + + assertSame(validInstitutionList, actualRetrieveInstitutionByExternalIdsResult); + assertTrue(actualRetrieveInstitutionByExternalIdsResult.isEmpty()); + verify(institutionConnector).findByExternalIdsAndProductId(any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalIds(List, String)} + */ + @Test + void testRetrieveInstitutionByExternalIds3() { + + when(institutionConnector.findByExternalIdsAndProductId(any(), any())).thenReturn(List.of()); + + ArrayList validInstitutionList = new ArrayList<>(); + validInstitutionList.add(new ValidInstitution("42", "The characteristics of someone or something")); + List actualRetrieveInstitutionByExternalIdsResult = institutionServiceImpl + .retrieveInstitutionByExternalIds(validInstitutionList, "42"); + assertSame(validInstitutionList, actualRetrieveInstitutionByExternalIdsResult); + assertEquals(1, actualRetrieveInstitutionByExternalIdsResult.size()); + verify(institutionConnector).findByExternalIdsAndProductId(any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalIds(List, String)} + */ + @Test + void testRetrieveInstitutionByExternalIds4() { + + + when(institutionConnector.findByExternalIdsAndProductId(any(), any())).thenReturn(new ArrayList<>()); + + ArrayList validInstitutionList = new ArrayList<>(); + validInstitutionList.add(new ValidInstitution("42", "The characteristics of someone or something")); + validInstitutionList.add(new ValidInstitution("42", "The characteristics of someone or something")); + List actualRetrieveInstitutionByExternalIdsResult = institutionServiceImpl + .retrieveInstitutionByExternalIds(validInstitutionList, "42"); + assertSame(validInstitutionList, actualRetrieveInstitutionByExternalIdsResult); + assertEquals(2, actualRetrieveInstitutionByExternalIdsResult.size()); + verify(institutionConnector).findByExternalIdsAndProductId(any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByExternalIds(List, String)} + */ + @Test + void testRetrieveInstitutionByExternalIds5() { + + ArrayList stringList = new ArrayList<>(); + stringList.add("42"); + + when(institutionConnector.findByExternalIdsAndProductId(any(), any())).thenReturn(stringList); + + ArrayList validInstitutionList = new ArrayList<>(); + validInstitutionList.add(new ValidInstitution("42", "The characteristics of someone or something")); + List actualRetrieveInstitutionByExternalIdsResult = institutionServiceImpl + .retrieveInstitutionByExternalIds(validInstitutionList, "42"); + assertSame(validInstitutionList, actualRetrieveInstitutionByExternalIdsResult); + assertTrue(actualRetrieveInstitutionByExternalIdsResult.isEmpty()); + verify(institutionConnector).findByExternalIdsAndProductId(any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#findInstitutionsByGeoTaxonomies(String, SearchMode)} + */ + @Test + void testFindInstitutionsByGeoTaxonomies3() { + + ArrayList institutionList = new ArrayList<>(); + when(institutionConnector.findByGeotaxonomies(any(), any())) + .thenReturn(institutionList); + List actualFindInstitutionsByGeoTaxonomiesResult = institutionServiceImpl + .findInstitutionsByGeoTaxonomies("Geo Taxonomies", SearchMode.ALL); + assertSame(institutionList, actualFindInstitutionsByGeoTaxonomiesResult); + assertTrue(actualFindInstitutionsByGeoTaxonomiesResult.isEmpty()); + verify(institutionConnector).findByGeotaxonomies(any(), any()); + } + + @Test + void testFindInstitutionsByGeoTaxonomies1() { + assertThrows(InvalidRequestException.class, () -> institutionServiceImpl.findInstitutionsByGeoTaxonomies("", SearchMode.ALL)); + } + + /** + * Method under test: {@link InstitutionServiceImpl#findInstitutionsByProductId(String)} + */ + @Test + void testFindInstitutionsByProductId2() { + when(institutionConnector.findByProductId(any())).thenReturn(new ArrayList<>()); + assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.findInstitutionsByProductId("42")); + } + + + /** + * Method under test: {@link InstitutionServiceImpl#findInstitutionsByProductId(String)} + */ + @Test + void testFindInstitutionsByProductId3() { + when(institutionConnector.findByProductId(any())).thenReturn(List.of(new Institution())); + assertDoesNotThrow(() -> institutionServiceImpl.findInstitutionsByProductId("42")); + } + + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionByIds(List)} + */ + @Test + void testRetrieveInstitutionByIds2() { + + ArrayList institutionList = new ArrayList<>(); + when(institutionConnector.findAllByIds(any())).thenReturn(institutionList); + + List actualRetrieveInstitutionByIdsResult = institutionServiceImpl + .retrieveInstitutionByIds(new ArrayList<>()); + assertSame(institutionList, actualRetrieveInstitutionByIdsResult); + assertTrue(actualRetrieveInstitutionByIdsResult.isEmpty()); + verify(institutionConnector).findAllByIds(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionProduct(String, String)} + */ + @Test + void testGetInstitutionProduct2() { + when(institutionConnector.findByExternalIdAndProductId(any(), any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + assertThrows(ResourceNotFoundException.class, () -> institutionServiceImpl.retrieveInstitutionProduct("42", "42")); + verify(institutionConnector).findByExternalIdAndProductId(any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveGeoTaxonomies(String)} + */ + @Test + void testGetGeoTaxonomies() { + GeographicTaxonomies geographicTaxonomies = new GeographicTaxonomies(); + geographicTaxonomies.setGeotaxId("Code"); + geographicTaxonomies.setCountry("GB"); + geographicTaxonomies.setCountryAbbreviation("GB"); + geographicTaxonomies.setDescription("The characteristics of someone or something"); + geographicTaxonomies.setEnable(true); + geographicTaxonomies.setIstatCode(""); + geographicTaxonomies.setProvinceId("Province"); + geographicTaxonomies.setProvinceAbbreviation("Province Abbreviation"); + geographicTaxonomies.setRegionId("us-east-2"); + when(partyRegistryProxyConnector.getExtByCode(any())).thenReturn(geographicTaxonomies); + Optional optionalGeographicTaxonomies = institutionServiceImpl.retrieveGeoTaxonomies("Code"); + assertTrue(optionalGeographicTaxonomies.isPresent()); + assertSame(geographicTaxonomies,optionalGeographicTaxonomies.get()); + verify(partyRegistryProxyConnector).getExtByCode(any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveGeoTaxonomies(String)} + */ + @Test + void getGeoTaxonomies_whenGeoTaxIsEmpty() { + when(partyRegistryProxyConnector.getExtByCode(any())) + .thenThrow(new ResourceNotFoundException("","")); + assertTrue(institutionServiceImpl.retrieveGeoTaxonomies("Code").isEmpty()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionsWithFilter(String, String, List)} + */ + @Test + void testRetrieveInstitutionsWithFilter() { + when(institutionConnector.findWithFilter(any(), any(), any())) + .thenReturn(new ArrayList<>()); + List list = List.of(RelationshipState.ACTIVE); + assertThrows(ResourceNotFoundException.class, + () -> institutionServiceImpl.retrieveInstitutionsWithFilter("42", "42", list)); + verify(institutionConnector).findWithFilter(any(), any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionsWithFilter(String, String, List)} + */ + @Test + void testRetrieveInstitutionsWithFilter2() { + ArrayList institutionList = new ArrayList<>(); + institutionList.add(new Institution()); + when(institutionConnector.findWithFilter(any(), any(), any())) + .thenReturn(institutionList); + institutionServiceImpl.retrieveInstitutionsWithFilter("42", "42", new ArrayList<>()); + verify(institutionConnector).findWithFilter(any(), any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionsWithFilter(String, String, List)} + */ + @Test + void testRetrieveInstitutionsWithFilter3() { + when(institutionConnector.findWithFilter(any(), any(), any())) + .thenThrow(new ResourceNotFoundException("An error occurred", "Code")); + List list = List.of(RelationshipState.ACTIVE); + assertThrows(ResourceNotFoundException.class, + () -> institutionServiceImpl.retrieveInstitutionsWithFilter("42", "42", list)); + verify(institutionConnector).findWithFilter(any(), any(), any()); + } + + /** + * Method under test: {@link InstitutionServiceImpl#retrieveInstitutionsWithFilter(String, String, List)} + */ + @Test + void testRetrieveInstitutionsWithFilter6() { + + when(institutionConnector.findWithFilter(any(), any(), any())) + .thenReturn(List.of(new Institution())); + + institutionServiceImpl.retrieveInstitutionsWithFilter("42", "42", new ArrayList<>()); + verify(institutionConnector).findWithFilter(any(), any(), any()); + } + + @Test + void testUpdateInstitutionDescription() { + //given + final String institutionId = "id"; + + Institution updatedInstitution = new Institution(); + updatedInstitution.setId(institutionId); + updatedInstitution.setDescription("newDesc"); + updatedInstitution.setParentDescription("newRootName"); + + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDescription("newDesc"); + institutionUpdate.setParentDescription("newRootName"); + + //when + when(institutionConnector.findById(institutionId)).thenReturn(new Institution()); + when(institutionConnector.findAndUpdate(institutionId, null, Collections.emptyList(), institutionUpdate)).thenReturn(updatedInstitution); + + //then + Institution result = institutionServiceImpl.updateInstitution(institutionId, institutionUpdate, "userId"); + verify(delegationConnector).updateDelegation(updatedInstitution); + verify(userApiConnector).updateUserInstitution(institutionId, institutionUpdate); + assertEquals(result, updatedInstitution); + } + + @Test + void testUpdateInstitutionDescription_updateDelegationsFails() { + //given + final String institutionId = "id"; + + Institution outdatedInstitution = new Institution(); + outdatedInstitution.setId(institutionId); + outdatedInstitution.setDescription("oldDesc"); + outdatedInstitution.setParentDescription("oldRootName"); + + Institution updatedInstitution = new Institution(); + updatedInstitution.setId(institutionId); + updatedInstitution.setDescription("newDesc"); + updatedInstitution.setParentDescription("newRootName"); + + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDescription("newDesc"); + institutionUpdate.setParentDescription("newRootName"); + + InstitutionUpdate institutionRollback = new InstitutionUpdate(); + institutionRollback.setDescription("oldDesc"); + institutionRollback.setParentDescription("oldRootName"); + + //when + when(institutionConnector.findById(institutionId)).thenReturn(outdatedInstitution); + when(institutionConnector.findAndUpdate(institutionId, null, Collections.emptyList(), institutionUpdate)).thenReturn(updatedInstitution); + doThrow(new RuntimeException()).when(delegationConnector).updateDelegation(updatedInstitution); + + Executable executable = () -> institutionServiceImpl.updateInstitution(institutionId, institutionUpdate, "userId"); + // Then + assertThrows(MsCoreException.class, executable); + verify(institutionConnector).findAndUpdate(institutionId,null, null, institutionRollback); + verifyNoInteractions(userApiConnector); + } + + @Test + void testUpdateInstitutionDescription_updateUserInstitutionFails() { + //given + final String institutionId = "id"; + + Institution outdatedInstitution = new Institution(); + outdatedInstitution.setId(institutionId); + outdatedInstitution.setDescription("oldDesc"); + outdatedInstitution.setParentDescription("oldRootName"); + + Institution updatedInstitution = new Institution(); + updatedInstitution.setId(institutionId); + updatedInstitution.setDescription("newDesc"); + updatedInstitution.setParentDescription("newRootName"); + + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDescription("newDesc"); + institutionUpdate.setParentDescription("newRootName"); + + InstitutionUpdate institutionRollback = new InstitutionUpdate(); + institutionRollback.setDescription("oldDesc"); + institutionRollback.setParentDescription("oldRootName"); + + //when + when(institutionConnector.findById(institutionId)).thenReturn(outdatedInstitution); + when(institutionConnector.findAndUpdate(institutionId, null, Collections.emptyList(), institutionUpdate)).thenReturn(updatedInstitution); + doThrow(new RuntimeException()).when(userApiConnector).updateUserInstitution(institutionId, institutionUpdate); + + Executable executable = () -> institutionServiceImpl.updateInstitution(institutionId, institutionUpdate, "userId"); + + //then + assertThrows(MsCoreException.class, executable); + verify(institutionConnector).findAndUpdate(institutionId,null, null, institutionRollback); + verify(delegationConnector).updateDelegation(outdatedInstitution); + } + + @Test + void updateInstitution_noDescription(){ + //when + when(institutionConnector.findById(any())).thenReturn(new Institution()); + when(institutionConnector.findAndUpdate(any(), any(), any(), any())).thenReturn(new Institution()); + + institutionServiceImpl.updateInstitution("id", new InstitutionUpdate(), "userId"); + + // Then + verifyNoInteractions(delegationConnector); + verifyNoInteractions(userApiConnector); + } + + @Test + void updateCreatedAt() { + // Given + String institutionIdMock = "institutionIdMock"; + String productIdMock = "productId"; + OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); + OffsetDateTime activatedAtMock = OffsetDateTime.parse("2020-11-02T02:15:30+01:00"); + + Onboarding onboardingMock1 = mockInstance(new Onboarding()); + onboardingMock1.setStatus(RelationshipState.ACTIVE); + onboardingMock1.setClosedAt(null); + onboardingMock1.setCreatedAt(OffsetDateTime.parse("2023-11-01T02:15:30+01:00")); + Onboarding onboardingMock2 = mockInstance(new Onboarding()); + onboardingMock2.setProductId(productIdMock); + onboardingMock2.setTokenId("222e4444-e99b-11d3-a446-422114890100"); + onboardingMock2.setStatus(RelationshipState.ACTIVE); + onboardingMock2.setClosedAt(null); + onboardingMock1.setCreatedAt(OffsetDateTime.parse("2020-11-01T02:15:30+01:00")); + Onboarding onboardingMock3 = mockInstance(new Onboarding()); + onboardingMock3.setStatus(RelationshipState.ACTIVE); + onboardingMock3.setClosedAt(null); + onboardingMock1.setCreatedAt(OffsetDateTime.parse("2022-12-11T02:15:30+01:00")); + + Institution updatedInstitutionMock = mockInstance(new Institution()); + updatedInstitutionMock.setId("123e4567-e89b-12d3-a456-426614174000"); + updatedInstitutionMock.setExternalId("00099991238"); + updatedInstitutionMock.setDigitalAddress("DigitalAddress@example.com"); + updatedInstitutionMock.setInstitutionType(InstitutionType.PA); + updatedInstitutionMock.setTaxCode(updatedInstitutionMock.getExternalId()); + updatedInstitutionMock.setOnboarding(List.of(onboardingMock1, onboardingMock2, onboardingMock3)); + updatedInstitutionMock.setGeographicTaxonomies(Collections.emptyList()); + updatedInstitutionMock.setPaymentServiceProvider(null); + updatedInstitutionMock.setDataProtectionOfficer(null); + updatedInstitutionMock.setImported(false); + updatedInstitutionMock.setCreatedAt(OffsetDateTime.parse("2019-11-01T02:15:30+01:00")); + updatedInstitutionMock.setUpdatedAt(OffsetDateTime.now()); + + TokenUser tokenUserMock1 = mockInstance(new TokenUser()); + tokenUserMock1.setUserId("999e9999-e89b-12d3-a456-426614174000"); + TokenUser tokenUserMock2 = mockInstance(new TokenUser()); + tokenUserMock2.setUserId("321e9876-e89b-12d3-a456-426614174000"); + tokenUserMock2.setRole(PartyRole.DELEGATE); + + when(institutionConnector.updateOnboardedProductCreatedAt(institutionIdMock, productIdMock, createdAtMock)) + .thenReturn(updatedInstitutionMock); + + // When + institutionServiceImpl.updateCreatedAt(institutionIdMock, productIdMock, createdAtMock, activatedAtMock); + // Then + verify(institutionConnector, times(1)) + .updateOnboardedProductCreatedAt(institutionIdMock, productIdMock, createdAtMock); + verifyNoMoreInteractions(institutionConnector); + } + + @Test + void updateCreatedAt_nullInstitutionId() { + // Given + String productIdMock = "productId"; + OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); + // When + Executable executable = () -> institutionServiceImpl.updateCreatedAt(null, productIdMock, createdAtMock, null); + // Then + IllegalArgumentException illegalArgumentException = assertThrows(IllegalArgumentException.class, executable); + assertEquals("An institution ID is required.", illegalArgumentException.getMessage()); + verifyNoInteractions(institutionConnector); + } + + @Test + void updateCreatedAt_nullProductId() { + // Given + String institutionIdMock = "institutionId"; + OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); + // When + Executable executable = () -> institutionServiceImpl.updateCreatedAt(institutionIdMock, null, createdAtMock, null); + // Then + IllegalArgumentException illegalArgumentException = assertThrows(IllegalArgumentException.class, executable); + assertEquals("A product ID is required.", illegalArgumentException.getMessage()); + verifyNoInteractions(institutionConnector); + } + + @Test + void updateCreatedAt_nullCreatedAt() { + // Given + String institutionIdMock = "institutionId"; + String productIdMock = "producttId"; + // When + Executable executable = () -> institutionServiceImpl.updateCreatedAt(institutionIdMock, productIdMock, null, null); + // Then + IllegalArgumentException illegalArgumentException = assertThrows(IllegalArgumentException.class, executable); + assertEquals("A createdAt date is required.", illegalArgumentException.getMessage()); + verifyNoInteractions(institutionConnector); + + } + + @Test + void updateCreatedAt_onboardingNotFound() { + // Given + String institutionIdMock = "institutionId"; + String productIdMock = "producttId"; + OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); + OffsetDateTime activatedAtMock = OffsetDateTime.parse("2020-11-02T02:15:30+01:00"); + + Institution institutionMock = mockInstance(new Institution()); + institutionMock.setOnboarding(Collections.emptyList()); + when(institutionConnector.updateOnboardedProductCreatedAt(institutionIdMock, productIdMock, createdAtMock)) + .thenThrow(ResourceNotFoundException.class); + // When + Executable executable = () -> institutionServiceImpl.updateCreatedAt(institutionIdMock, productIdMock, createdAtMock, activatedAtMock); + // Then + assertThrows(ResourceNotFoundException.class, executable); + } + + /** + * Method under test: {@link InstitutionServiceImpl#getInstitutionBrokers(String, InstitutionType)} + */ + @Test + void getInstitutionBrokers() { + + Institution institution = new Institution(); + institution.setId("id"); + when(institutionConnector.findBrokers(any(), any())).thenReturn(List.of(institution)); + List institutions = institutionServiceImpl.getInstitutionBrokers("42", InstitutionType.PT); + assertNotNull(institutions); + assertFalse(institutions.isEmpty()); + assertNotNull(institutions.get(0)); + assertEquals(institutions.get(0).getId(), institution.getId()); + verify(institutionConnector).findBrokers(any(), any()); + + } + + /** + * Method under test: {@link InstitutionServiceImpl#getInstitutions(String, String)} + */ + @Test + void getInstitutionsByTaxCode() { + + Institution institution = new Institution(); + institution.setId("id"); + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())).thenReturn(List.of(institution)); + List institutions = institutionServiceImpl.getInstitutions("1111111", null); + assertNotNull(institutions); + assertFalse(institutions.isEmpty()); + assertNotNull(institutions.get(0)); + assertEquals(institutions.get(0).getId(), institution.getId()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); + + } + +} + diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImplTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImplTest.java new file mode 100644 index 0000000..f5e82e3 --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/MailNotificationServiceImplTest.java @@ -0,0 +1,105 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.EmailConnector; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.ProductConnector; +import it.pagopa.selfcare.mscore.api.UserApiConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.config.MailTemplateConfig; +import it.pagopa.selfcare.mscore.core.util.MailParametersMapper; +import it.pagopa.selfcare.mscore.model.CertifiedField; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.WorkContact; +import it.pagopa.selfcare.mscore.model.user.User; +import it.pagopa.selfcare.product.entity.Product; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class MailNotificationServiceImplTest { + + @InjectMocks + private MailNotificationServiceImpl notificationService; + + @Mock + private InstitutionConnector institutionConnector; + + @Mock + private ProductConnector productConnector; + + @Mock + private MailTemplateConfig mailTemplateConfig; + + @Mock + private EmailConnector emailConnector; + + @Mock + private MailParametersMapper mailParametersMapper; + + @Mock + private CoreConfig coreConfig; + + + @Mock + private UserApiConnector userApiConnector; + @Mock + private UserNotificationService userNotificationService; + + private static final User user; + + static { + user = new User(); + user.setId("1"); + user.setFiscalCode("ABC123XYZ"); + user.setName(new CertifiedField<>()); + user.setFamilyName(new CertifiedField<>()); + user.setEmail(new CertifiedField<>()); + + Map workContacts1 = new HashMap<>(); + WorkContact workContact = new WorkContact(); + CertifiedField email = new CertifiedField<>(); + email.setValue("email"); + workContact.setEmail(email); + workContacts1.put("id",workContact); + + user.setWorkContacts(workContacts1); + } + + @Test + void sendNotificationDelegationMail() { + Product product = new Product(); + product.setId("productId"); + product.setTitle("test"); + Institution institution = new Institution(); + institution.setId("institutionID"); + institution.setDigitalAddress("test@test.com"); + List userEmails = List.of("userEmail"); + + when(productConnector.getProductById(anyString())).thenReturn(product); + when(institutionConnector.findById(anyString())).thenReturn(institution); + when(userApiConnector.getUserEmails(institution.getId(), product.getId())).thenReturn(userEmails); + when(coreConfig.isSendEmailToInstitution()).thenReturn(true); + when(coreConfig.isEnableSendDelegationMail()).thenReturn(true); + Assertions.assertDoesNotThrow(() -> notificationService.sendMailForDelegation("institutionName", "productId", "partnerId")); + } + + @Test + void sendNotificationDelegationMailWithEmptyProduct() { + Institution institution = new Institution(); + institution.setDigitalAddress("test@test.com"); + when(productConnector.getProductById(anyString())).thenReturn(null); + when(institutionConnector.findById(anyString())).thenReturn(institution); + Assertions.assertDoesNotThrow(() -> notificationService.sendMailForDelegation("institutionName", "productId", "partnerId")); + } +} diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingDaoTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingDaoTest.java new file mode 100644 index 0000000..b6283d2 --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingDaoTest.java @@ -0,0 +1,37 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +@ExtendWith(SpringExtension.class) +class OnboardingDaoTest { + + @Mock + private InstitutionConnector institutionConnector; + + @InjectMocks + private OnboardingDao onboardingDao; + + + @Test + void rollbackPersistOnboarding() { + + final String institutionId = "institutionId"; + final Onboarding onboarding = new Onboarding(); + onboarding.setProductId("productId"); + + onboardingDao.rollbackPersistOnboarding(institutionId, onboarding); + + verify(institutionConnector, times(1)) + .findAndRemoveOnboarding(institutionId, onboarding); + } + +} diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java new file mode 100644 index 0000000..6fda8ba --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java @@ -0,0 +1,325 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PecNotificationConnector; +import it.pagopa.selfcare.mscore.api.ProductConnector; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.core.mapper.TokenMapper; +import it.pagopa.selfcare.mscore.core.mapper.TokenMapperImpl; +import it.pagopa.selfcare.mscore.core.util.UtilEnumList; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.onboarding.*; +import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.*; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.HttpStatus; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.util.ReflectionTestUtils; + + +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.List; +import java.util.UUID; + +import static it.pagopa.selfcare.mscore.constant.GenericError.DELETE_NOTIFICATION_OPERATION_ERROR; +import static it.pagopa.selfcare.mscore.constant.GenericError.ONBOARDING_OPERATION_ERROR; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {OnboardingServiceImpl.class}) +@ExtendWith(MockitoExtension.class) +class OnboardingServiceImplTest { + + @Mock + private OnboardingDao onboardingDao; + + @InjectMocks + private OnboardingServiceImpl onboardingServiceImpl; + + @Mock + private InstitutionService institutionService; + + @Mock + private InstitutionConnector institutionConnector; + + @Mock + private ProductConnector productConnector; + + @Mock + private UserNotificationService userNotificationService; + + @Mock + private PecNotificationConnector pecNotificationConnector; + + @Spy + private TokenMapper tokenMapper = new TokenMapperImpl(); + + /** + * Method under test: {@link OnboardingServiceImpl#verifyOnboardingInfo(String, String)} + */ + @Test + void testVerifyOnboardingInfo() { + doNothing().when(institutionService) + .retrieveInstitutionsWithFilter(any(), any(), any()); + onboardingServiceImpl.verifyOnboardingInfo("42", "42"); + verify(institutionService).retrieveInstitutionsWithFilter(any(), any(), + any()); + } + + /** + * Method under test: {@link OnboardingServiceImpl#verifyOnboardingInfoSubunit(String, String, String)} + */ + @Test + void shouldNothingWhenVerifyOnboardingInfoSubunit() { + when(institutionConnector.existsByTaxCodeAndSubunitCodeAndProductAndStatusList(any(), any(), any(), any())) + .thenReturn(true); + onboardingServiceImpl.verifyOnboardingInfoSubunit("42", "42", "example"); + verify(institutionConnector).existsByTaxCodeAndSubunitCodeAndProductAndStatusList(any(), any(), any(), any()); + } + + @Test + void VerifyOnboardingInfoSubunitResourceNotFound() { + when(institutionConnector.existsByTaxCodeAndSubunitCodeAndProductAndStatusList(any(), any(), any(), any())) + .thenReturn(false); + assertThrows(ResourceNotFoundException.class, () -> onboardingServiceImpl.verifyOnboardingInfoSubunit("42", "42", "example")); + + } + + @Test + void testVerifyOnboardingInfoByFilter() { + // Arrange + when(institutionConnector.existsOnboardingByFilters(Mockito.any())).thenReturn(true); + + VerifyOnboardingFilters verifyOnboardingFilters = new VerifyOnboardingFilters("Product", "", "", "Origin", "OriginId", ""); + // Act + onboardingServiceImpl.verifyOnboardingInfoByFilters(verifyOnboardingFilters); + + // Assert that nothing has changed + verify(institutionConnector).existsOnboardingByFilters(Mockito.any()); + } + + @Test + void testVerifyOnboardingInfoByFilterNotFound() { + // Arrange + when(institutionConnector.existsOnboardingByFilters(Mockito.any())).thenReturn(false); + + VerifyOnboardingFilters verifyOnboardingFilters = new VerifyOnboardingFilters("Product", "", "", "Origin", "OriginId", ""); + // Act + Assertions.assertThrows(ResourceNotFoundException.class, () -> onboardingServiceImpl.verifyOnboardingInfoByFilters(verifyOnboardingFilters)); + + // Assert that nothing has changed + verify(institutionConnector).existsOnboardingByFilters(Mockito.any()); + } + + /** + * Method under test: {@link OnboardingServiceImpl#verifyOnboardingInfo(String, String)} + */ + @Test + void testVerifyOnboardingInfo5() { + doThrow(new InvalidRequestException("An error occurred", "Code")).when(institutionService) + .retrieveInstitutionsWithFilter(any(), any(), any()); + assertThrows(InvalidRequestException.class, () -> onboardingServiceImpl.verifyOnboardingInfo("42", "42")); + verify(institutionService).retrieveInstitutionsWithFilter(any(), any(), + any()); + } + + @Test + void persistOnboarding_whenUserExistsOnRegistry() { + + ReflectionTestUtils.setField(onboardingServiceImpl, "sendingFrequencyPecNotification", 30); + ReflectionTestUtils.setField(onboardingServiceImpl, "epochDatePecNotification", "2024-01-01"); + + Onboarding onboarding = dummyOnboarding(); + onboarding.setStatus(UtilEnumList.VALID_RELATIONSHIP_STATES.get(0)); + Institution institution = new Institution(); + institution.setId("institutionId"); + institution.setOnboarding(List.of(onboarding, dummyOnboarding())); + + when(pecNotificationConnector.insertPecNotification(any(PecNotification.class))).thenReturn(true); + when(institutionConnector.findById(institution.getId())).thenReturn(institution); + + String institutionId = institution.getId(); + + String productId = onboarding.getProductId(); + Onboarding onb = new Onboarding(); + + StringBuilder statusCode = new StringBuilder(); + + onboardingServiceImpl.persistOnboarding(institutionId, + productId, onb, statusCode); + + assertEquals(HttpStatus.OK.value(), Integer.parseInt(statusCode.toString())); + } + + + + /** + * Method under test: {@link OnboardingServiceImpl#persistOnboarding(String, String, Onboarding)} + */ + @Test + void persistOnboarding_shouldRollback() { + + String pricingPlan = "pricingPlan"; + String productId = "productId"; + Onboarding onboarding = dummyOnboarding(); + onboarding.setStatus(UtilEnumList.VALID_RELATIONSHIP_STATES.get(0)); + + Onboarding onboardingToPersist = new Onboarding(); + onboardingToPersist.setPricingPlan(pricingPlan); + onboardingToPersist.setProductId(productId); + onboardingToPersist.setBilling(new Billing()); + + Institution institution = new Institution(); + institution.setId("institutionId"); + institution.setOnboarding(List.of(onboarding)); + + + when(institutionConnector.findById(institution.getId())).thenReturn(institution); + when(institutionConnector.findAndUpdate(any(), any(), any(), any())).thenThrow(new RuntimeException()); + String institutionId = institution.getId(); + + Assertions.assertThrows(InvalidRequestException.class, () -> onboardingServiceImpl.persistOnboarding( + institutionId, productId, onboardingToPersist, new StringBuilder())); + + verify(onboardingDao, times(1)) + .rollbackPersistOnboarding(any(), any()); + } + + /** + * Method under test: {@link OnboardingServiceImpl#persistOnboarding(String, String, Onboarding)} + */ + @Test + void persistOnboarding_whenUserNotExistsOnRegistry() { + + ReflectionTestUtils.setField(onboardingServiceImpl, "sendingFrequencyPecNotification", 30); + ReflectionTestUtils.setField(onboardingServiceImpl, "epochDatePecNotification", "2024-01-01"); + + String pricingPlan = "pricingPlan"; + String productId = "productId"; + Billing billing = new Billing(); + billing.setVatNumber("vatNumber"); + billing.setPublicServices(false); + billing.setRecipientCode("recipientCode"); + billing.setTaxCodeInvoicing("taxCodeInvoicing"); + Onboarding onboarding = dummyOnboarding(); + onboarding.setStatus(UtilEnumList.VALID_RELATIONSHIP_STATES.get(0)); + + Onboarding onboardingToPersist = new Onboarding(); + onboardingToPersist.setPricingPlan(pricingPlan); + onboardingToPersist.setProductId(productId); + onboardingToPersist.setBilling(billing); + onboardingToPersist.setIsAggregator(true); + + Institution institution = new Institution(); + institution.setId("institutionId"); + institution.setOnboarding(List.of(onboarding)); + institution.setDigitalAddress("test@junit.pagopa"); + + Token token = new Token(); + token.setId(onboarding.getTokenId()); + token.setInstitutionId("institutionId"); + token.setProductId(productId); + token.setCreatedAt(onboarding.getCreatedAt()); + token.setUpdatedAt(onboarding.getUpdatedAt()); + token.setStatus(onboarding.getStatus()); + token.setContractSigned(onboarding.getContract()); + + when(pecNotificationConnector.insertPecNotification(any(PecNotification.class))).thenReturn(true); + when(institutionConnector.findById(institution.getId())).thenReturn(institution); + when(institutionConnector.findAndUpdate(any(), any(), any(), any())).thenReturn(institution); + + StringBuilder statusCode = new StringBuilder(); + + onboardingServiceImpl.persistOnboarding(institution.getId(), productId, onboardingToPersist, statusCode); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Onboarding.class); + verify(institutionConnector, times(1)) + .findAndUpdate(any(), captor.capture(), any(), any()); + Onboarding actual = captor.getValue(); + assertEquals(billing, actual.getBilling()); + assertEquals(actual.getCreatedAt().getDayOfYear(), LocalDate.now().getDayOfYear()); + assertEquals(HttpStatus.CREATED.value(), Integer.parseInt(statusCode.toString())); + + ArgumentCaptor< PecNotification > argCaptor = ArgumentCaptor.forClass(PecNotification.class); + verify(pecNotificationConnector, times(1)). insertPecNotification(argCaptor.capture()); + assertEquals(productId, argCaptor.getValue().getProductId()); + assertEquals("institutionId", argCaptor.getValue().getInstitutionId()); + assertEquals("test@junit.pagopa", argCaptor.getValue().getDigitalAddress()); + } + + private Onboarding dummyOnboarding() { + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(new Billing()); + onboarding.setTokenId("42"); + onboarding.setPricingPlan("C3"); + onboarding.setProductId("42"); + return onboarding; + } + + @Test + void deleteOnboardedInstitution_success() { + + String institutionId = UUID.randomUUID().toString(); + String productId = UUID.randomUUID().toString(); + + Onboarding onboarding = new Onboarding(); + onboarding.setProductId(productId); + onboarding.setStatus(RelationshipState.DELETED); + + when(pecNotificationConnector.findAndDeletePecNotification(institutionId, productId)).thenReturn(true); + + onboardingServiceImpl.deleteOnboardedInstitution(institutionId, productId); + + verify(institutionConnector, times(1)).findAndDeleteOnboarding(institutionId, productId); + verify(pecNotificationConnector, times(1)).findAndDeletePecNotification(institutionId, productId); + } + + @Test + void deleteOnboardedInstitution_deletePecNotificationFails() { + + String institutionId = UUID.randomUUID().toString(); + String productId = "prod-io"; + + Onboarding onboarding = new Onboarding(); + onboarding.setProductId(productId); + onboarding.setStatus(RelationshipState.DELETED); + + when(pecNotificationConnector.findAndDeletePecNotification(institutionId, productId)).thenReturn(false); + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> { + onboardingServiceImpl.deleteOnboardedInstitution(institutionId, productId); + }); + + assertEquals(DELETE_NOTIFICATION_OPERATION_ERROR.getMessage(), exception.getMessage()); + assertEquals(ONBOARDING_OPERATION_ERROR.getCode(), exception.getCode()); + + verify(institutionConnector, times(1)).findAndDeleteOnboarding(institutionId, productId); + verify(pecNotificationConnector, times(1)).findAndDeletePecNotification(institutionId, productId); + } + + @Test + public void testCalculateModuleDayOfTheEpoch() { + LocalDate mockCurrentDate = LocalDate.of(2024, 2, 1); // 31 days after epoch + + ReflectionTestUtils.setField(onboardingServiceImpl, "sendingFrequencyPecNotification", 30); + ReflectionTestUtils.setField(onboardingServiceImpl, "epochDatePecNotification", "2024-01-01"); + ReflectionTestUtils.setField(onboardingServiceImpl, "currentDate", mockCurrentDate); + + int result = onboardingServiceImpl.calculateModuleDayOfTheEpoch(); + + LocalDate epochStart = LocalDate.parse("2024-01-01"); + long daysDiff = ChronoUnit.DAYS.between(epochStart, mockCurrentDate); + int expected = (int) (daysDiff % 30); + + assertEquals(expected, result); + } +} + diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/TestUtils.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/TestUtils.java new file mode 100644 index 0000000..1a58b10 --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/TestUtils.java @@ -0,0 +1,331 @@ +package it.pagopa.selfcare.mscore.core; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.Env; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.constant.TokenType; +import it.pagopa.selfcare.mscore.model.CertifiedField; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.*; +import it.pagopa.selfcare.mscore.model.user.User; +import it.pagopa.selfcare.mscore.model.user.UserBinding; +import it.pagopa.selfcare.mscore.model.user.UserToOnboard; + +import java.util.ArrayList; +import java.util.List; + +public class TestUtils { + + public static ContractImported dummyContractImported() { + + ContractImported contractImported = new ContractImported(); + contractImported.setContractType("Contract Type"); + contractImported.setFileName("foo.txt"); + contractImported.setFilePath("/directory/foo.txt"); + return contractImported; + } + + public static Token dummyToken() { + Token token = new Token(); + token.setChecksum("Checksum"); + token.setDeletedAt(null); + token.setContractSigned("Contract Signed"); + token.setContractTemplate("Contract Template"); + token.setCreatedAt(null); + token.setExpiringDate(null); + token.setId("42"); + token.setInstitutionId("42"); + token.setInstitutionUpdate(new InstitutionUpdate()); + token.setProductId("42"); + token.setStatus(RelationshipState.PENDING); + token.setType(TokenType.INSTITUTION); + token.setUpdatedAt(null); + TokenUser user = new TokenUser(); + user.setUserId("id"); + user.setRole(PartyRole.MANAGER); + token.setUsers(List.of(user)); + return token; + } + + public static OnboardingRequest dummyOnboardingRequest() { + OnboardingRequest onboardingRequest = new OnboardingRequest(); + onboardingRequest.setInstitutionExternalId("42"); + onboardingRequest.setPricingPlan("Pricing Plan"); + onboardingRequest.setProductId("prod-io"); + onboardingRequest.setProductName("Product Name"); + onboardingRequest.setSignContract(true); + onboardingRequest.setTokenType(TokenType.INSTITUTION); + onboardingRequest.setBillingRequest(new Billing()); + onboardingRequest.setUsers(new ArrayList<>()); + return onboardingRequest; + } + + public static InstitutionUpdate createSimpleInstitutionUpdate() { + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setAddress("42 Main St"); + institutionUpdate.setBusinessRegisterPlace("Business Register Place"); + institutionUpdate + .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); + institutionUpdate.setDescription("The characteristics of someone or something"); + institutionUpdate.setDigitalAddress("42 Main St"); + institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); + institutionUpdate.setImported(true); + institutionUpdate.setInstitutionType(InstitutionType.PA); + institutionUpdate + .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); + institutionUpdate.setRea("Rea"); + institutionUpdate.setShareCapital("Share Capital"); + institutionUpdate.setSupportEmail("jane.doe@example.org"); + institutionUpdate.setSupportPhone("6625550144"); + institutionUpdate.setTaxCode("Tax Code"); + institutionUpdate.setZipCode("21654"); + return institutionUpdate; + } + + public static InstitutionUpdate createSimpleInstitutionUpdatePT() { + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setAddress("42 Main St"); + institutionUpdate.setBusinessRegisterPlace("Business Register Place"); + institutionUpdate + .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); + institutionUpdate.setDescription("The characteristics of someone or something"); + institutionUpdate.setDigitalAddress("42 Main St"); + institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); + institutionUpdate.setImported(true); + institutionUpdate.setInstitutionType(InstitutionType.PT); + institutionUpdate + .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); + institutionUpdate.setRea("Rea"); + institutionUpdate.setShareCapital("Share Capital"); + institutionUpdate.setSupportEmail("jane.doe@example.org"); + institutionUpdate.setSupportPhone("6625550144"); + institutionUpdate.setTaxCode("Tax Code"); + institutionUpdate.setZipCode("21654"); + return institutionUpdate; + } + public static InstitutionUpdate createSimpleInstitutionUpdateSA() { + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setAddress("42 Main St"); + institutionUpdate.setBusinessRegisterPlace("Business Register Place"); + institutionUpdate + .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); + institutionUpdate.setDescription("The characteristics of someone or something"); + institutionUpdate.setDigitalAddress("42 Main St"); + institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); + institutionUpdate.setImported(true); + institutionUpdate.setInstitutionType(InstitutionType.SA); + institutionUpdate + .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); + institutionUpdate.setRea("Rea"); + institutionUpdate.setShareCapital("Share Capital"); + institutionUpdate.setSupportEmail("jane.doe@example.org"); + institutionUpdate.setSupportPhone("6625550144"); + institutionUpdate.setTaxCode("Tax Code"); + institutionUpdate.setZipCode("21654"); + return institutionUpdate; + } + + public static AdditionalInformations createSimpleAdditionalInformations(String type) { + AdditionalInformations additionalInformations = new AdditionalInformations(); + switch (type) { + case "ipa": + additionalInformations.setIpa(true); + additionalInformations.setBelongRegulatedMarket(false); + additionalInformations.setEstablishedByRegulatoryProvision(false); + additionalInformations.setAgentOfPublicService(false); + break; + case "regulatedMarket": + additionalInformations.setIpa(false); + additionalInformations.setBelongRegulatedMarket(true); + additionalInformations.setEstablishedByRegulatoryProvision(false); + additionalInformations.setAgentOfPublicService(false); + break; + case "establishedByRegulatoryProvision": + additionalInformations.setIpa(false); + additionalInformations.setBelongRegulatedMarket(false); + additionalInformations.setEstablishedByRegulatoryProvision(true); + additionalInformations.setAgentOfPublicService(false); + break; + case "agentOfPublicService": + additionalInformations.setIpa(false); + additionalInformations.setBelongRegulatedMarket(false); + additionalInformations.setEstablishedByRegulatoryProvision(false); + additionalInformations.setAgentOfPublicService(true); + break; + default: + additionalInformations.setIpa(false); + additionalInformations.setBelongRegulatedMarket(false); + additionalInformations.setEstablishedByRegulatoryProvision(false); + additionalInformations.setAgentOfPublicService(false); + } + + return additionalInformations; + } + + public static DataProtectionOfficer createSimpleDataProtectionOfficer() { + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + return dataProtectionOfficer; + } + + public static PaymentServiceProvider createSimplePaymentServiceProvider() { + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + return paymentServiceProvider; + } + + public static Billing createSimpleBilling() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + return billing; + } + + public static Contract createSimpleContract() { + + Contract contract = new Contract(); + contract.setPath("Path"); + contract.setVersion("1.0.2"); + return contract; + } + + public static Institution dummyInstitution() { + Institution institution = new Institution(); + institution.setId("institutionId"); + institution.setDescription("description"); + institution.setParentDescription("parentDescription"); + institution.setAddress("42 Main St"); + institution.setBusinessRegisterPlace("Business Register Place"); + institution + .setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setImported(true); + institution.setInstitutionType(InstitutionType.PA); + institution + .setPaymentServiceProvider(new PaymentServiceProvider("Abi Code", "42", "Legal Register Name", "42", true)); + institution.setRea("Rea"); + institution.setShareCapital("Share Capital"); + institution.setSupportEmail("jane.doe@example.org"); + institution.setSupportPhone("6625550144"); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + return institution; + } + + public static User createSimpleUser() { + User user = new User(); + user.setId("1"); + user.setFiscalCode("ABC123XYZ"); + CertifiedField nome = new CertifiedField<>(); + nome.setValue("nome"); + user.setName(nome); + user.setFamilyName(nome); + user.setEmail(nome); + return user; + } + + public static InstitutionUpdate createDummyInstitutionUpdate(){ + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setAddress("42 Main St"); + institutionUpdate.setBusinessRegisterPlace("Business Register Place"); + institutionUpdate.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); + institutionUpdate.setDescription("The characteristics of someone or something"); + institutionUpdate.setDigitalAddress("42 Main St"); + institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); + institutionUpdate.setImported(true); + institutionUpdate.setInstitutionType(InstitutionType.PA); + institutionUpdate.setPaymentServiceProvider(createSimplePaymentServiceProvider()); + institutionUpdate.setRea("Rea"); + institutionUpdate.setShareCapital("Share Capital"); + institutionUpdate.setSupportEmail("jane.doe@example.org"); + institutionUpdate.setSupportPhone("4105551212"); + institutionUpdate.setTaxCode("Tax Code"); + institutionUpdate.setZipCode("21654"); + return institutionUpdate; + }public static InstitutionUpdate createDummyInstitutionUpdateGSP(){ + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setAddress("42 Main St"); + institutionUpdate.setBusinessRegisterPlace("Business Register Place"); + institutionUpdate.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); + institutionUpdate.setDescription("The characteristics of someone or something"); + institutionUpdate.setDigitalAddress("42 Main St"); + institutionUpdate.setGeographicTaxonomies(new ArrayList<>()); + institutionUpdate.setImported(true); + institutionUpdate.setInstitutionType(InstitutionType.GSP); + institutionUpdate.setPaymentServiceProvider(createSimplePaymentServiceProvider()); + institutionUpdate.setRea("Rea"); + institutionUpdate.setShareCapital("Share Capital"); + institutionUpdate.setSupportEmail("jane.doe@example.org"); + institutionUpdate.setSupportPhone("4105551212"); + institutionUpdate.setTaxCode("Tax Code"); + institutionUpdate.setZipCode("21654"); + return institutionUpdate; + } + + public static OnboardingRequest createDummyOnboardingRequest(){ + OnboardingRequest onboardingRequest = new OnboardingRequest(); + onboardingRequest.setBillingRequest(createSimpleBilling()); + onboardingRequest.setContract(createSimpleContract()); + onboardingRequest.setInstitutionExternalId("42"); + onboardingRequest.setInstitutionUpdate(createDummyInstitutionUpdate()); + onboardingRequest.setPricingPlan("Pricing Plan"); + onboardingRequest.setProductId("42"); + onboardingRequest.setProductName("Product Name"); + onboardingRequest.setSignContract(true); + onboardingRequest.setContractFilePath("/example"); + + return onboardingRequest; + } + public static OnboardedUser dummyOnboardedUser(){ + OnboardedUser onboardedUser = new OnboardedUser(); + onboardedUser.setId("42"); + onboardedUser.setBindings(new ArrayList<>()); + return onboardedUser; + } + + public static UserBinding dummyUserBinding (){ + UserBinding userBinding = new UserBinding(); + userBinding.setInstitutionId("42"); + userBinding.setInstitutionName("Name"); + userBinding.setInstitutionRootName("RootName"); + userBinding.setProducts(new ArrayList<>()); + return userBinding; + } + + public static OnboardedProduct dummyOnboardedProduct(){ + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setProductId("prod-interop"); + onboardedProduct.setProductRole("productRole"); + onboardedProduct.setRole(PartyRole.DELEGATE); + onboardedProduct.setStatus(RelationshipState.ACTIVE); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setRelationshipId("RelId"); + onboardedProduct.setTokenId("tokenId"); + return onboardedProduct; + } + + public static UserToOnboard dummyUserToOnboard(){ + UserToOnboard userToOnboard = new UserToOnboard(); + userToOnboard.setEmail("prof.einstein@example.org"); + userToOnboard.setEnv(Env.COLL); + userToOnboard.setId("it.pagopa.selfcare.mscore.model.user.UserToOnboard"); + userToOnboard.setName("42"); + userToOnboard.setProductRole("42"); + userToOnboard.setRole(PartyRole.SUB_DELEGATE); + userToOnboard.setSurname("it.pagopa.selfcare.mscore.model.user.UserToOnboard"); + userToOnboard.setTaxCode("42"); + return userToOnboard; + } +} diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImplTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImplTest.java new file mode 100644 index 0000000..f3619c3 --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/UserNotificationServiceImplTest.java @@ -0,0 +1,61 @@ +package it.pagopa.selfcare.mscore.core; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.api.FileStorageConnector; +import it.pagopa.selfcare.mscore.config.CoreConfig; +import it.pagopa.selfcare.mscore.model.onboarding.MailTemplate; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import software.amazon.awssdk.services.ses.SesClient; +import software.amazon.awssdk.services.ses.model.SendEmailRequest; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class UserNotificationServiceImplTest { + + @InjectMocks + private UserNotificationServiceImpl userNotificationService; + + @Mock + private FileStorageConnector fileStorageConnector; + + @Mock + private ObjectMapper objectMapper; + + @Mock + private CoreConfig coreConfig; + + @Mock + private SesClient sesClient; + + + @Test + void sendDelegationUserNotification() throws JsonProcessingException { + final String to = "id"; + when(fileStorageConnector.getTemplateFile(any())).thenReturn("template"); + MailTemplate mailTemplate = new MailTemplate(); + mailTemplate.setBody(Base64.getEncoder().encodeToString("test".getBytes(StandardCharsets.UTF_8))); + mailTemplate.setSubject(Base64.getEncoder().encodeToString("test".getBytes(StandardCharsets.UTF_8))); + when(objectMapper.readValue(anyString(),any(Class.class))).thenReturn(mailTemplate); + assertDoesNotThrow(() -> userNotificationService.sendDelegationUserNotification(List.of(to),"institution","product", new HashMap<>())); + + ArgumentCaptor actual = ArgumentCaptor.forClass(SendEmailRequest.class); + verify(sesClient, times(1)).sendEmail(actual.capture()); + assertEquals(to, actual.getValue().destination().toAddresses().get(0)); + } +} diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPdaTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPdaTest.java new file mode 100644 index 0000000..6db228d --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyPdaTest.java @@ -0,0 +1,236 @@ +package it.pagopa.selfcare.mscore.core.strategy; + +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapperImpl; +import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import it.pagopa.selfcare.mscore.model.institution.CategoryProxyInfo; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.InstitutionProxyInfo; +import it.pagopa.selfcare.mscore.model.institution.NationalRegistriesProfessionalAddress; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.List; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +public class CreateInstitutionStrategyPdaTest { + @InjectMocks + CreateInstitutionStrategyFactory strategyFactory; + @Mock + InstitutionConnector institutionConnector; + @Mock + PartyRegistryProxyConnector partyRegistryProxyConnector; + @Spy + InstitutionMapper institutionMapper = new InstitutionMapperImpl(); + + private static final InstitutionProxyInfo dummyInstitutionProxyInfo; + private static final CategoryProxyInfo dummyCategoryProxyInfo; + private static final AreaOrganizzativaOmogenea dummyAreaOrganizzativaOmogenea; + + static { + dummyInstitutionProxyInfo = new InstitutionProxyInfo(); + dummyInstitutionProxyInfo.setAddress("42 Main St"); + dummyInstitutionProxyInfo.setAoo("Aoo"); + dummyInstitutionProxyInfo.setCategory("Category"); + dummyInstitutionProxyInfo.setDescription("The characteristics of someone or something"); + dummyInstitutionProxyInfo.setDigitalAddress("42 Main St"); + dummyInstitutionProxyInfo.setId("42"); + dummyInstitutionProxyInfo.setO("foo"); + dummyInstitutionProxyInfo.setOrigin("Origin"); + dummyInstitutionProxyInfo.setOriginId("42"); + dummyInstitutionProxyInfo.setOu("Ou"); + dummyInstitutionProxyInfo.setTaxCode("Tax Code"); + dummyInstitutionProxyInfo.setZipCode("21654"); + + dummyCategoryProxyInfo = new CategoryProxyInfo(); + dummyCategoryProxyInfo.setCode("Code"); + dummyCategoryProxyInfo.setKind("Kind"); + dummyCategoryProxyInfo.setName("Name"); + dummyCategoryProxyInfo.setOrigin("Origin"); + + dummyAreaOrganizzativaOmogenea = new AreaOrganizzativaOmogenea(); + dummyAreaOrganizzativaOmogenea.setOrigin(Origin.IPA); + dummyAreaOrganizzativaOmogenea.setDenominazioneAoo("Aoo"); + dummyAreaOrganizzativaOmogenea.setIndirizzo("Address"); + dummyAreaOrganizzativaOmogenea.setCAP("12345"); + dummyAreaOrganizzativaOmogenea.setCodiceFiscaleEnte(dummyInstitutionProxyInfo.getTaxCode()); + dummyAreaOrganizzativaOmogenea.setCodAoo("AOO"); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldThrowConflictCreateInstitutionForECFromIpaWithPda() { + + Institution institutionToReturn = new Institution(); + institutionToReturn.setId("id"); + institutionToReturn.setDescription("test"); + + //Given + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) + .thenReturn(List.of(new Institution())); + + + //When + assertThrows(ResourceConflictException.class, () -> strategyFactory.createInstitutionStrategyPda("EC") + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode("test") + .build())); + + verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionForECFromIpaWithPda() { + + Institution institutionToReturn = new Institution(); + institutionToReturn.setId("id"); + institutionToReturn.setDescription("test"); + + //Given + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(institutionConnector.save(any())).thenReturn(institutionToReturn); + + //When + Institution actual = strategyFactory.createInstitutionStrategyPda("EC") + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode("test") + .build()); + + assertThat(actual.getId()).isEqualTo(institutionToReturn.getId()); + assertThat(actual.getDescription()).isEqualTo(institutionToReturn.getDescription()); + + verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionForECFromInfocamereWithPda() { + + Institution institutionToReturn = new Institution(); + institutionToReturn.setId("id"); + institutionToReturn.setDescription("test"); + + NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); + nationalRegistriesProfessionalAddress.setZipCode("test"); + nationalRegistriesProfessionalAddress.setAddress("test"); + + //Given + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getInstitutionById(any())).thenThrow(new MsCoreException("NOT_FOUND", "404")); + when(partyRegistryProxyConnector.getLegalAddress(any())).thenReturn(nationalRegistriesProfessionalAddress); + when(institutionConnector.save(any())).thenReturn(institutionToReturn); + + //When + Institution actual = strategyFactory.createInstitutionStrategyPda("EC") + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode("test") + .build()); + + assertThat(actual.getId()).isEqualTo(institutionToReturn.getId()); + assertThat(actual.getDescription()).isEqualTo(institutionToReturn.getDescription()); + + verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(partyRegistryProxyConnector).getLegalAddress(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionForECFromInfocamereWithPda2() { + + Institution institutionToReturn = new Institution(); + institutionToReturn.setId("id"); + institutionToReturn.setDescription("test"); + + NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); + nationalRegistriesProfessionalAddress.setZipCode("test"); + nationalRegistriesProfessionalAddress.setAddress("test"); + + //Given + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getInstitutionById(any())).thenThrow(new ResourceNotFoundException("NOT_FOUND", "404")); + when(partyRegistryProxyConnector.getLegalAddress(any())).thenReturn(nationalRegistriesProfessionalAddress); + when(institutionConnector.save(any())).thenReturn(institutionToReturn); + + //When + Institution actual = strategyFactory.createInstitutionStrategyPda("EC") + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode("test") + .build()); + + assertThat(actual.getId()).isEqualTo(institutionToReturn.getId()); + assertThat(actual.getDescription()).isEqualTo(institutionToReturn.getDescription()); + + verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(partyRegistryProxyConnector).getLegalAddress(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldThrowErrorWhenInstitutionDoesNotExistsOnIpaAndInfocamere() { + + Institution institutionToReturn = new Institution(); + institutionToReturn.setId("id"); + institutionToReturn.setDescription("test"); + + NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); + nationalRegistriesProfessionalAddress.setZipCode("test"); + nationalRegistriesProfessionalAddress.setAddress("test"); + + //Given + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getInstitutionById(any())).thenThrow(new MsCoreException("NOT_FOUND", "404")); + when(partyRegistryProxyConnector.getLegalAddress(any())).thenThrow(new MsCoreException("NOT_FOUND", "404")); + + //When + assertThrows(ResourceNotFoundException.class, () -> strategyFactory.createInstitutionStrategyPda("EC") + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode("test") + .build())); + verify(institutionConnector).findByTaxCodeAndSubunitCode(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(partyRegistryProxyConnector).getLegalAddress(any()); + } +} diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyTest.java new file mode 100644 index 0000000..366f238 --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/strategy/CreateInstitutionStrategyTest.java @@ -0,0 +1,643 @@ +package it.pagopa.selfcare.mscore.core.strategy; + + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.api.InstitutionConnector; +import it.pagopa.selfcare.mscore.api.PartyRegistryProxyConnector; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapper; +import it.pagopa.selfcare.mscore.core.mapper.InstitutionMapperImpl; +import it.pagopa.selfcare.mscore.core.strategy.factory.CreateInstitutionStrategyFactory; +import it.pagopa.selfcare.mscore.core.strategy.input.CreateInstitutionStrategyInput; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import it.pagopa.selfcare.mscore.core.util.TestUtils; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.AreaOrganizzativaOmogenea; +import it.pagopa.selfcare.mscore.model.UnitaOrganizzativa; +import it.pagopa.selfcare.mscore.model.institution.*; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class CreateInstitutionStrategyTest { + + @InjectMocks + CreateInstitutionStrategyFactory strategyFactory; + + @Mock + InstitutionConnector institutionConnector; + @Mock + PartyRegistryProxyConnector partyRegistryProxyConnector; + @Spy + InstitutionMapper institutionMapper = new InstitutionMapperImpl(); + + @InjectMocks + CreateInstitutionStrategyIvass createInstitutionStrategyIvass; + + + private static final InstitutionProxyInfo dummyInstitutionProxyInfo; + private static final CategoryProxyInfo dummyCategoryProxyInfo; + + private static final AreaOrganizzativaOmogenea dummyAreaOrganizzativaOmogenea; + private static final GeographicTaxonomies dummyGeotaxonomies; + private static final InstitutionGeographicTaxonomies dummyInstitutionGeotaxonomies; + + static { + dummyInstitutionProxyInfo = new InstitutionProxyInfo(); + dummyInstitutionProxyInfo.setAddress("42 Main St"); + dummyInstitutionProxyInfo.setAoo("Aoo"); + dummyInstitutionProxyInfo.setCategory("Category"); + dummyInstitutionProxyInfo.setDescription("The characteristics of someone or something"); + dummyInstitutionProxyInfo.setDigitalAddress("42 Main St"); + dummyInstitutionProxyInfo.setId("42"); + dummyInstitutionProxyInfo.setO("foo"); + dummyInstitutionProxyInfo.setOrigin("Origin"); + dummyInstitutionProxyInfo.setOriginId("42"); + dummyInstitutionProxyInfo.setOu("Ou"); + dummyInstitutionProxyInfo.setTaxCode("Tax Code"); + dummyInstitutionProxyInfo.setZipCode("21654"); + dummyInstitutionProxyInfo.setIstatCode("ecIstatCode"); + + dummyCategoryProxyInfo = new CategoryProxyInfo(); + dummyCategoryProxyInfo.setCode("Code"); + dummyCategoryProxyInfo.setKind("Kind"); + dummyCategoryProxyInfo.setName("Name"); + dummyCategoryProxyInfo.setOrigin("Origin"); + + dummyAreaOrganizzativaOmogenea = new AreaOrganizzativaOmogenea(); + dummyAreaOrganizzativaOmogenea.setOrigin(Origin.IPA); + dummyAreaOrganizzativaOmogenea.setDenominazioneAoo("Aoo"); + dummyAreaOrganizzativaOmogenea.setIndirizzo("Address"); + dummyAreaOrganizzativaOmogenea.setCAP("12345"); + dummyAreaOrganizzativaOmogenea.setCodiceFiscaleEnte(dummyInstitutionProxyInfo.getTaxCode()); + dummyAreaOrganizzativaOmogenea.setCodAoo("AOO"); + dummyAreaOrganizzativaOmogenea.setCodiceComuneISTAT("codIstatAOO"); + + dummyGeotaxonomies = new GeographicTaxonomies(); + dummyGeotaxonomies.setDescription("nomeCittΓ  - COMUNE"); + dummyGeotaxonomies.setProvinceAbbreviation("proAbbrv"); + dummyGeotaxonomies.setCountryAbbreviation("countryAbbrv"); + + dummyInstitutionGeotaxonomies = new InstitutionGeographicTaxonomies(); + dummyInstitutionGeotaxonomies.setCode("code"); + dummyInstitutionGeotaxonomies.setDesc("desc"); + } + + private UnitaOrganizzativa dummyUnitaOrganizzativa() { + + UnitaOrganizzativa dummyUnitaOrganizzativa = new UnitaOrganizzativa(); + dummyUnitaOrganizzativa.setOrigin(Origin.IPA); + dummyUnitaOrganizzativa.setDescrizioneUo("Uo"); + dummyUnitaOrganizzativa.setIndirizzo("Address"); + dummyUnitaOrganizzativa.setCAP("12345"); + dummyUnitaOrganizzativa.setCodiceFiscaleEnte(dummyInstitutionProxyInfo.getTaxCode()); + dummyUnitaOrganizzativa.setCodiceUniUo("UO"); + dummyUnitaOrganizzativa.setCodiceUniAoo("AOO"); + dummyUnitaOrganizzativa.setCodiceComuneISTAT("codIstatUO"); + return dummyUnitaOrganizzativa; + } + + @Test + void shouldThrowExceptionOnCreateInstitutionFromIpaIfAlreadyExists() { + + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) + .thenReturn(List.of(new Institution())); + assertThrows(ResourceConflictException.class, () -> strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder().subunitType(InstitutionPaSubunitType.AOO) + .build())); + + } + + @Test + void shouldThrowMsCoreExceptionWhenInstitutionAlreadyExists() { + String origin = "IVASS"; + String originId = "12345"; + + when(institutionConnector.findByOriginAndOriginId(origin, originId)).thenReturn(List.of(new Institution())); + + assertThrows(ResourceConflictException.class, () -> strategyFactory.createInstitutionStrategyIvass(new Institution()) + .createInstitution(CreateInstitutionStrategyInput.builder() + .ivassCode(originId) + .build())); + } + + @Test + void shouldThrowExceptionOnCreateInstitutionIfAlreadyExists() { + + when(institutionConnector.findByTaxCodeAndSubunitCode(any(), any())) + .thenReturn(List.of(new Institution())); + assertThrows(ResourceConflictException.class, () -> strategyFactory.createInstitutionStrategy(new Institution()) + .createInstitution(CreateInstitutionStrategyInput.builder() + .build())); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionFromAnac() { + + Institution institution = TestUtils.dummyInstitutionSa(); + SaResource saResource = new SaResource(); + saResource.setOriginId("originId"); + saResource.setTaxCode("taxCode"); + saResource.setDescription("desc"); + saResource.setDigitalAddress("test@test.it"); + when(partyRegistryProxyConnector.getSAFromAnac(any())).thenReturn(saResource); + when(institutionConnector.save(any())).thenReturn(institution); + //When + Institution actual = strategyFactory.createInstitutionStrategyAnac(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .build()); + + //Then + assertThat(actual.getDescription()).isEqualTo(institution.getDescription()); + assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(institution.getAddress()); + assertThat(actual.getZipCode()).isEqualTo(institution.getZipCode()); + assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); + assertThat(actual.getSubunitCode()).isNull(); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.SA); + assertThat(actual.getSubunitType()).isNull(); + + verify(institutionConnector).save(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionFromIvass() { + + Institution institution = TestUtils.dummyInstitutionAs(); + ASResource asResource = new ASResource(); + asResource.setOriginId("originId"); + asResource.setTaxCode("taxCode"); + asResource.setDescription("desc"); + asResource.setDigitalAddress("test@test.it"); + when(partyRegistryProxyConnector.getASFromIvass(any())).thenReturn(asResource); + when(institutionConnector.save(any())).thenReturn(institution); + //When + Institution actual = strategyFactory.createInstitutionStrategyIvass(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .build()); + + //Then + assertThat(actual.getDescription()).isEqualTo(institution.getDescription()); + assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(institution.getAddress()); + assertThat(actual.getZipCode()).isEqualTo(institution.getZipCode()); + assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); + assertThat(actual.getSubunitCode()).isNull(); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.AS); + assertThat(actual.getSubunitType()).isNull(); + + verify(institutionConnector).save(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitution() { + //Given + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), any())) + .thenReturn(List.of()); + + Institution institution = TestUtils.dummyInstitutionGsp(); + + //When + Institution actual = strategyFactory.createInstitutionStrategy(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .build()); + + //Then + assertThat(actual.getDescription()).isEqualTo(institution.getDescription()); + assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(institution.getAddress()); + assertThat(actual.getZipCode()).isEqualTo(institution.getZipCode()); + assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); + assertThat(actual.getSubunitCode()).isNull(); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.GSP); + assertThat(actual.getSubunitType()).isNull(); + + verify(institutionConnector).save(any()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionFromIpaAoo() { + //Given + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(partyRegistryProxyConnector.getAooById(any())).thenReturn(dummyAreaOrganizzativaOmogenea); + when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies).thenReturn(dummyGeotaxonomies); + //When + Institution actual = strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(dummyAreaOrganizzativaOmogenea.getCodiceFiscaleEnte()) + .subunitType(InstitutionPaSubunitType.AOO) + .subunitCode(dummyAreaOrganizzativaOmogenea.getCodAoo()) + .geographicTaxonomies(List.of(dummyInstitutionGeotaxonomies)) + .build()); + + //Then + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PA); + assertThat(actual.getOriginId()).isEqualTo(dummyAreaOrganizzativaOmogenea.getId()); + assertThat(actual.getDescription()).isEqualTo(dummyAreaOrganizzativaOmogenea.getDenominazioneAoo()); + assertThat(actual.getDigitalAddress()).isEqualTo(dummyInstitutionProxyInfo.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(dummyAreaOrganizzativaOmogenea.getIndirizzo()); + assertThat(actual.getZipCode()).isEqualTo(dummyAreaOrganizzativaOmogenea.getCAP()); + assertThat(actual.getTaxCode()).isEqualTo(dummyAreaOrganizzativaOmogenea.getCodiceFiscaleEnte()); + assertThat(actual.getSubunitCode()).isEqualTo(dummyAreaOrganizzativaOmogenea.getCodAoo()); + assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.AOO.name()); + assertThat(actual.getParentDescription()).isEqualTo(dummyInstitutionProxyInfo.getDescription()); + assertThat(actual.getCity()).isEqualTo(dummyGeotaxonomies.getDescription().replace(" - COMUNE", "")); + assertThat(actual.getGeographicTaxonomies().size()).isEqualTo(1); + assertThat(actual.getGeographicTaxonomies().get(0).getCode()).isEqualTo(dummyInstitutionGeotaxonomies.getCode()); + + verify(institutionConnector, times(2)).save(any()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyInstitutionProxyInfo.getIstatCode()); + verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyAreaOrganizzativaOmogenea.getCodiceComuneISTAT()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionFromIpaUo() { + + UnitaOrganizzativa dummyUnitaOrganizzativa = dummyUnitaOrganizzativa(); + + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(partyRegistryProxyConnector.getUoById(any())).thenReturn(dummyUnitaOrganizzativa); + when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies).thenReturn(dummyGeotaxonomies); + + Institution actual = strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()) + .subunitType(InstitutionPaSubunitType.UO) + .subunitCode(dummyUnitaOrganizzativa.getCodiceUniUo()) + .build()); + + //Then + assertThat(actual.getOriginId()).isEqualTo(dummyUnitaOrganizzativa.getId()); + assertThat(actual.getDescription()).isEqualTo(dummyUnitaOrganizzativa.getDescrizioneUo()); + + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PA); + assertThat(actual.getDigitalAddress()).isEqualTo(dummyInstitutionProxyInfo.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(dummyUnitaOrganizzativa.getIndirizzo()); + assertThat(actual.getZipCode()).isEqualTo(dummyUnitaOrganizzativa.getCAP()); + assertThat(actual.getTaxCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()); + assertThat(actual.getSubunitCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniUo()); + assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.UO.name()); + assertThat(actual.getParentDescription()).isEqualTo(dummyInstitutionProxyInfo.getDescription()); + assertThat(actual.getPaAttributes().getAooParentCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniAoo()); + assertThat(actual.getCity()).isEqualTo(dummyGeotaxonomies.getDescription().replace(" - COMUNE", "")); + + verify(institutionConnector, times(2)).save(any()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyInstitutionProxyInfo.getIstatCode()); + verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyUnitaOrganizzativa.getCodiceComuneISTAT()); + + } + + @Test + void createAooFromIpa_nullGeotax() { + //Given + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(partyRegistryProxyConnector.getAooById(any())).thenReturn(dummyAreaOrganizzativaOmogenea); + when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies).thenReturn(new GeographicTaxonomies()); + //When + Institution actual = strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(dummyAreaOrganizzativaOmogenea.getCodiceFiscaleEnte()) + .subunitType(InstitutionPaSubunitType.AOO) + .subunitCode(dummyAreaOrganizzativaOmogenea.getCodAoo()) + .build()); + + //Then + assertThat(actual.getCity()).isEqualTo(null); + verify(institutionConnector, times(2)).save(any()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyInstitutionProxyInfo.getIstatCode()); + verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyAreaOrganizzativaOmogenea.getCodiceComuneISTAT()); + + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionFromIpaUoRetrievingExistingEc() { + + UnitaOrganizzativa dummyUnitaOrganizzativa = dummyUnitaOrganizzativa(); + + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(partyRegistryProxyConnector.getUoById(any())).thenReturn(dummyUnitaOrganizzativa); + when(institutionConnector.findByExternalId(any())).thenReturn(Optional.of(new Institution())); + when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies); + Institution actual = strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()) + .subunitType(InstitutionPaSubunitType.UO) + .subunitCode(dummyUnitaOrganizzativa.getCodiceUniUo()) + .build()); + + //Then + assertThat(actual.getOriginId()).isEqualTo(dummyUnitaOrganizzativa.getId()); + assertThat(actual.getDescription()).isEqualTo(dummyUnitaOrganizzativa.getDescrizioneUo()); + + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PA); + assertThat(actual.getDigitalAddress()).isEqualTo(dummyInstitutionProxyInfo.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(dummyUnitaOrganizzativa.getIndirizzo()); + assertThat(actual.getZipCode()).isEqualTo(dummyUnitaOrganizzativa.getCAP()); + assertThat(actual.getTaxCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()); + assertThat(actual.getSubunitCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniUo()); + assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.UO.name()); + assertThat(actual.getParentDescription()).isEqualTo(dummyInstitutionProxyInfo.getDescription()); + assertThat(actual.getPaAttributes().getAooParentCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniAoo()); + assertThat(actual.getCity()).isEqualTo(dummyGeotaxonomies.getDescription().replace(" - COMUNE", "")); + + verify(institutionConnector, times(1)).save(any()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionFromIpaUoWithoutTaxCodeSfe() { + + UnitaOrganizzativa dummyUnitaOrganizzativa = dummyUnitaOrganizzativa(); + + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(partyRegistryProxyConnector.getUoById(any())).thenReturn(dummyUnitaOrganizzativa); + when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies).thenReturn(dummyGeotaxonomies); + + Institution actual = strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()) + .subunitType(InstitutionPaSubunitType.UO) + .subunitCode(dummyUnitaOrganizzativa.getCodiceUniUo()) + .build()); + + //Then + assertThat(actual.getOriginId()).isEqualTo(dummyUnitaOrganizzativa.getId()); + assertThat(actual.getDescription()).isEqualTo(dummyUnitaOrganizzativa.getDescrizioneUo()); + + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PA); + assertThat(actual.getDigitalAddress()).isEqualTo(dummyInstitutionProxyInfo.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(dummyUnitaOrganizzativa.getIndirizzo()); + assertThat(actual.getZipCode()).isEqualTo(dummyUnitaOrganizzativa.getCAP()); + assertThat(actual.getTaxCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()); + assertThat(actual.getSubunitCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniUo()); + assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.UO.name()); + assertThat(actual.getParentDescription()).isEqualTo(dummyInstitutionProxyInfo.getDescription()); + assertThat(actual.getPaAttributes().getAooParentCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniAoo()); + + verify(institutionConnector, times(2)).save(any()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldGetExistingEC() { + + Institution institutionToReturn = new Institution(); + institutionToReturn.setId("id"); + institutionToReturn.setDescription("test"); + + //Given + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(institutionConnector.save(any())).thenReturn(institutionToReturn); + when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies); + + //When + Institution actual = strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(dummyAreaOrganizzativaOmogenea.getCodiceFiscaleEnte()) + .subunitCode(dummyAreaOrganizzativaOmogenea.getCodAoo()) + .build()); + + assertThat(actual.getId()).isEqualTo(institutionToReturn.getId()); + assertThat(actual.getDescription()).isEqualTo(institutionToReturn.getDescription()); + + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + verify(partyRegistryProxyConnector, times(1)).getExtByCode(dummyInstitutionProxyInfo.getIstatCode()); + } + + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionFromIpaUoWhenCodAooEmptyAndTipoMail() { + + UnitaOrganizzativa dummyUnitaOrganizzativa = dummyUnitaOrganizzativa(); + dummyUnitaOrganizzativa.setCodiceUniAoo(null); + dummyUnitaOrganizzativa.setTipoMail1("Pec"); + dummyUnitaOrganizzativa.setMail1("example@pec.it"); + + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + when(institutionConnector.findByTaxCodeAndSubunitCode(anyString(), anyString())) + .thenReturn(List.of()); + + when(partyRegistryProxyConnector.getCategory(any(), any())).thenReturn(dummyCategoryProxyInfo); + when(partyRegistryProxyConnector.getInstitutionById(any())).thenReturn(dummyInstitutionProxyInfo); + when(partyRegistryProxyConnector.getUoById(any())).thenReturn(dummyUnitaOrganizzativa); + when(partyRegistryProxyConnector.getExtByCode(anyString())).thenReturn(dummyGeotaxonomies); + Institution actual = strategyFactory.createInstitutionStrategyIpa() + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()) + .subunitType(InstitutionPaSubunitType.UO) + .subunitCode(dummyUnitaOrganizzativa.getCodiceUniUo()) + .build()); + + //Then + assertThat(actual.getOriginId()).isEqualTo(dummyUnitaOrganizzativa.getId()); + assertThat(actual.getDescription()).isEqualTo(dummyUnitaOrganizzativa.getDescrizioneUo()); + + assertThat(actual.getDigitalAddress()).isEqualTo(dummyUnitaOrganizzativa.getMail1()); + assertThat(actual.getAddress()).isEqualTo(dummyUnitaOrganizzativa.getIndirizzo()); + assertThat(actual.getZipCode()).isEqualTo(dummyUnitaOrganizzativa.getCAP()); + assertThat(actual.getTaxCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceFiscaleEnte()); + assertThat(actual.getSubunitCode()).isEqualTo(dummyUnitaOrganizzativa.getCodiceUniUo()); + assertThat(actual.getSubunitType()).isEqualTo(InstitutionPaSubunitType.UO.name()); + assertThat(actual.getPaAttributes()).isNull(); + + verify(institutionConnector, times(2)).save(any()); + verify(institutionConnector).findByTaxCodeAndSubunitCode(anyString(), anyString()); + verify(partyRegistryProxyConnector).getCategory(any(), any()); + verify(partyRegistryProxyConnector).getInstitutionById(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionWithOriginInfocamereWhenLegalAddressIsFound() { + + Institution institution = TestUtils.dummyInstitutionPg(); + + NationalRegistriesProfessionalAddress nationalRegistriesProfessionalAddress = new NationalRegistriesProfessionalAddress(); + nationalRegistriesProfessionalAddress.setAddress("test address"); + nationalRegistriesProfessionalAddress.setZipCode("00000"); + when(partyRegistryProxyConnector.getLegalAddress(any())).thenReturn(nationalRegistriesProfessionalAddress); + + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + //When + Institution actual = strategyFactory.createInstitutionStrategyInfocamere(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .description(institution.getDescription()) + .build()); + + //Then + assertThat(actual.getDescription()).isEqualTo(institution.getDescription()); + assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(nationalRegistriesProfessionalAddress.getAddress()); + assertThat(actual.getZipCode()).isEqualTo(nationalRegistriesProfessionalAddress.getZipCode()); + assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); + assertThat(actual.getSubunitCode()).isNull(); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PG); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getOrigin()).isEqualTo(Origin.INFOCAMERE.getValue()); + + verify(institutionConnector).save(any()); + } + + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void createInstitutionWithOriginInfocamere_WhenInstitutionExists() { + + Institution institution = TestUtils.dummyInstitutionPg(); + final String description = "UPDATE DESCRIPTION"; + + when(institutionConnector.findByTaxCodeAndSubunitCode(institution.getTaxCode(), null)) + .thenReturn(List.of(institution)); + + when(institutionConnector.save(any())).thenAnswer(args -> args.getArguments()[0]); + //When + Institution actual = strategyFactory.createInstitutionStrategyInfocamere(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .description(description) + .build()); + + //Then + assertThat(actual.getDescription()).isEqualTo(description); + assertThat(actual.getDigitalAddress()).isEqualTo(institution.getDigitalAddress()); + assertThat(actual.getAddress()).isEqualTo(institution.getAddress()); + assertThat(actual.getZipCode()).isEqualTo(institution.getZipCode()); + assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); + assertThat(actual.getSubunitCode()).isNull(); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getInstitutionType()).isEqualTo(institution.getInstitutionType()); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getOrigin()).isEqualTo(institution.getOrigin()); + + verify(institutionConnector).save(any()); + } + + /** + * Method under test: {@link CreateInstitutionStrategy#createInstitution(CreateInstitutionStrategyInput)} + */ + @Test + void shouldCreateInstitutionWithOriginSelcWhenLegalAddressIsNotFound() { + + Institution institution = TestUtils.dummyInstitutionPg(); + + when(partyRegistryProxyConnector.getLegalAddress(any())).thenThrow(ResourceNotFoundException.class); + + when(institutionConnector.save(any())).thenReturn(institution); + //When + Institution actual = strategyFactory.createInstitutionStrategyInfocamere(institution) + .createInstitution(CreateInstitutionStrategyInput.builder() + .taxCode(institution.getTaxCode()) + .description(institution.getDescription()) + .build()); + + //Then + assertThat(actual.getTaxCode()).isEqualTo(institution.getTaxCode()); + assertThat(actual.getSubunitCode()).isNull(); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getInstitutionType()).isEqualTo(InstitutionType.PG); + assertThat(actual.getSubunitType()).isNull(); + assertThat(actual.getOriginId()).isEqualTo(institution.getTaxCode()); + + verify(institutionConnector).save(any()); + } + +} diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapperTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapperTest.java new file mode 100644 index 0000000..e31ef9c --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/MailParametersMapperTest.java @@ -0,0 +1,34 @@ +package it.pagopa.selfcare.mscore.core.util; + +import it.pagopa.selfcare.mscore.config.MailTemplateConfig; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.mockito.Mockito.when; + +@ExtendWith(SpringExtension.class) +class MailParametersMapperTest { + + @InjectMocks + private MailParametersMapper mailParametersMapper; + + @Mock + private MailTemplateConfig mailTemplateConfig; + + @Test + void getNotificationDelegationPath(){ + when(mailTemplateConfig.getDelegationNotificationPath()).thenReturn("path"); + Assertions.assertNotNull(mailParametersMapper.getDelegationNotificationPath()); + } + + @Test + void getNotificationDelegationParameters(){ + Assertions.assertNotNull(mailParametersMapper.getDelegationNotificationParameter("productName","productId", "partnerName")); + } + +} + diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtilsTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtilsTest.java new file mode 100644 index 0000000..62805a1 --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/OnboardingInfoUtilsTest.java @@ -0,0 +1,471 @@ +package it.pagopa.selfcare.mscore.core.util; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.Env; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.institution.Premium; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.user.UserBinding; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class OnboardingInfoUtilsTest { + + /** + * Method under test: {@link OnboardingInfoUtils#convertStatesToRelationshipsState(String[])} + */ + @Test + void testConvertStatesToRelationshipsState2() { + assertTrue(OnboardingInfoUtils.convertStatesToRelationshipsState(new String[]{}).isEmpty()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} + */ + @Test + void testGetUserInstitutionsWithProductStatusIn() { + ArrayList userInstitutionToBeFiltered = new ArrayList<>(); + assertThrows(ResourceNotFoundException.class, () -> OnboardingInfoUtils + .getUserInstitutionsWithProductStatusIn(userInstitutionToBeFiltered, new ArrayList<>())); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} + */ + @Test + void testGetUserInstitutionsWithProductStatusIn2() { + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(new ArrayList<>()); + + ArrayList userBindingList = new ArrayList<>(); + userBindingList.add(userBinding); + assertThrows(ResourceNotFoundException.class, + () -> OnboardingInfoUtils.getUserInstitutionsWithProductStatusIn(userBindingList, new ArrayList<>())); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} + */ + @Test + void testGetUserInstitutionsWithProductStatusIn3() { + ArrayList userInstitutionToBeFiltered = new ArrayList<>(); + + ArrayList relationshipStateList = new ArrayList<>(); + relationshipStateList.add(RelationshipState.PENDING); + assertThrows(ResourceNotFoundException.class, () -> OnboardingInfoUtils + .getUserInstitutionsWithProductStatusIn(userInstitutionToBeFiltered, relationshipStateList)); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} + */ + @Test + void testGetUserInstitutionsWithProductStatusIn4() { + ArrayList userInstitutionToBeFiltered = new ArrayList<>(); + + ArrayList relationshipStateList = new ArrayList<>(); + relationshipStateList.add(RelationshipState.PENDING); + relationshipStateList.add(RelationshipState.PENDING); + assertThrows(ResourceNotFoundException.class, () -> OnboardingInfoUtils + .getUserInstitutionsWithProductStatusIn(userInstitutionToBeFiltered, relationshipStateList)); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} + */ + @Test + void testGetUserInstitutionsWithProductStatusIn5() { + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract(", "); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole(""); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(onboardedProductList); + + ArrayList userBindingList = new ArrayList<>(); + userBindingList.add(userBinding); + assertThrows(ResourceNotFoundException.class, + () -> OnboardingInfoUtils.getUserInstitutionsWithProductStatusIn(userBindingList, new ArrayList<>())); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} + */ + @Test + void testGetUserInstitutionsWithProductStatusIn6() { + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract(", "); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole(""); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setUpdatedAt(null); + + OnboardedProduct onboardedProduct1 = new OnboardedProduct(); + onboardedProduct1.setContract(", "); + onboardedProduct1.setCreatedAt(null); + onboardedProduct1.setEnv(Env.ROOT); + onboardedProduct1.setProductId("42"); + onboardedProduct1.setProductRole(""); + onboardedProduct1.setRole(PartyRole.MANAGER); + onboardedProduct1.setStatus(RelationshipState.PENDING); + onboardedProduct1.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct1); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(onboardedProductList); + + ArrayList userBindingList = new ArrayList<>(); + userBindingList.add(userBinding); + assertThrows(ResourceNotFoundException.class, + () -> OnboardingInfoUtils.getUserInstitutionsWithProductStatusIn(userBindingList, new ArrayList<>())); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getUserInstitutionsWithProductStatusIn(List, List)} + */ + @Test + void testGetUserInstitutionsWithProductStatusIn7() { + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract(", "); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole(""); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(onboardedProductList); + + ArrayList userBindingList = new ArrayList<>(); + userBindingList.add(userBinding); + + ArrayList relationshipStateList = new ArrayList<>(); + relationshipStateList.add(RelationshipState.PENDING); + List actualUserInstitutionsWithProductStatusIn = OnboardingInfoUtils + .getUserInstitutionsWithProductStatusIn(userBindingList, relationshipStateList); + assertEquals(1, actualUserInstitutionsWithProductStatusIn.size()); + assertEquals(onboardedProductList, actualUserInstitutionsWithProductStatusIn.get(0).getProducts()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} + */ + @Test + void testFindOnboardingLinkedToProductWithStateIn() { + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + ArrayList onboardedProductList = new ArrayList<>(); + userBinding.setProducts(onboardedProductList); + Institution onboardedInstitution = new Institution(); + assertNotNull( + OnboardingInfoUtils + .findOnboardingLinkedToProductWithStateIn(userBinding, onboardedInstitution, new ArrayList<>()) + .getOnboarding()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} + */ + @Test + void testFindOnboardingLinkedToProductWithStateIn6() { + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract("Contract"); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole(""); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(onboardedProductList); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + ArrayList relationshipStateList = new ArrayList<>(); + List onboarding1 = OnboardingInfoUtils + .findOnboardingLinkedToProductWithStateIn(userBinding, institution, relationshipStateList) + .getOnboarding(); + assertNotNull(onboarding1); + assertTrue(onboarding1.isEmpty()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} + */ + @Test + void testFindOnboardingLinkedToProductWithStateIn7() { + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract("Contract"); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole(""); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(onboardedProductList); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + Billing billing1 = new Billing(); + billing1.setPublicServices(true); + billing1.setRecipientCode("Recipient Code"); + billing1.setVatNumber("42"); + + Premium premium1 = new Premium(); + premium1.setContract("Contract"); + premium1.setStatus(RelationshipState.PENDING); + + Onboarding onboarding1 = new Onboarding(); + onboarding1.setBilling(billing1); + onboarding1.setContract("Contract"); + onboarding1.setCreatedAt(null); + onboarding1.setPricingPlan("Pricing Plan"); + onboarding1.setProductId("42"); + onboarding1.setStatus(RelationshipState.PENDING); + onboarding1.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding1); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + ArrayList relationshipStateList = new ArrayList<>(); + List onboarding2 = OnboardingInfoUtils + .findOnboardingLinkedToProductWithStateIn(userBinding, institution, relationshipStateList) + .getOnboarding(); + assertTrue(onboarding2.isEmpty()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} + */ + @Test + void testFindOnboardingLinkedToProductWithStateIn8() { + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract("Contract"); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole(""); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(onboardedProductList); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("Product Id"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + ArrayList relationshipStateList = new ArrayList<>(); + List onboarding1 = OnboardingInfoUtils + .findOnboardingLinkedToProductWithStateIn(userBinding, institution, relationshipStateList) + .getOnboarding(); + assertTrue(onboarding1.isEmpty()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#findOnboardingLinkedToProductWithStateIn(UserBinding, Institution, List)} + */ + @Test + void testFindOnboardingLinkedToProductWithStateIn9() { + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract("Contract"); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole(""); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + UserBinding userBinding = new UserBinding(); + + userBinding.setInstitutionId("42"); + userBinding.setProducts(onboardedProductList); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + + ArrayList relationshipStateList = new ArrayList<>(); + relationshipStateList.add(RelationshipState.PENDING); + List onboarding1 = OnboardingInfoUtils + .findOnboardingLinkedToProductWithStateIn(userBinding, institution, relationshipStateList) + .getOnboarding(); + assertEquals(onboardingList, onboarding1); + assertEquals(1, onboarding1.size()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getRelationShipStateList(String[])} + */ + @Test + void testGetRelationShipStateList() { + String[] states = {"ACTIVE"}; + List actualRelationShipStateList = OnboardingInfoUtils.getRelationShipStateList(states); + assertEquals(1, actualRelationShipStateList.size()); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getRelationShipStateList(String[])} + */ + @Test + void testGetRelationShipStateList2() { + List actualRelationShipStateList = OnboardingInfoUtils.getRelationShipStateList(null); + assertEquals(2, actualRelationShipStateList.size()); + assertEquals(RelationshipState.ACTIVE, actualRelationShipStateList.get(0)); + assertEquals(RelationshipState.PENDING, actualRelationShipStateList.get(1)); + } + + /** + * Method under test: {@link OnboardingInfoUtils#getRelationShipStateList(String[])} + */ + @Test + void testGetRelationShipStateList3() { + List actualRelationShipStateList = OnboardingInfoUtils + .getRelationShipStateList(new String[]{}); + assertEquals(2, actualRelationShipStateList.size()); + assertEquals(RelationshipState.ACTIVE, actualRelationShipStateList.get(0)); + assertEquals(RelationshipState.PENDING, actualRelationShipStateList.get(1)); + } +} + diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/TestUtils.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/TestUtils.java new file mode 100644 index 0000000..b99a593 --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/TestUtils.java @@ -0,0 +1,65 @@ +package it.pagopa.selfcare.mscore.core.util; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.Contract; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardingRequest; + +import java.time.OffsetDateTime; +import java.util.ArrayList; + +public class TestUtils { + + + public static Institution dummyInstitutionPa() { + return dummyInstitution(InstitutionType.PA); + } + public static Institution dummyInstitutionGsp() { + return dummyInstitution(InstitutionType.GSP); + } + + public static Institution dummyInstitutionSa() { + return dummyInstitution(InstitutionType.SA); + } + + public static Institution dummyInstitutionAs() { + return dummyInstitution(InstitutionType.AS); + } + public static Institution dummyInstitutionPt() { + return dummyInstitution(InstitutionType.PT); + } + + public static Institution dummyInstitutionPg() { + return dummyInstitution(InstitutionType.PG); + } + + private static Institution dummyInstitution(InstitutionType institutionType) { + + Billing billing = new Billing(); + ArrayList onboarding = new ArrayList<>(); + ArrayList geographicTaxonomies = new ArrayList<>(); + ArrayList attributes = new ArrayList<>(); + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + + return new Institution("42", "42", Origin.SELC.name(), "START - setupCommonData", + "The characteristics of someone or something", institutionType, "42 Main St", "42 Main St", "21654", + "TaxCode","ivass", "city", "county", "country", "istatCode", billing, onboarding, geographicTaxonomies, attributes, paymentServiceProvider, + new DataProtectionOfficer(), null, null, "START - setupCommonData", "START - setupCommonData", + "START - setupCommonData", true, OffsetDateTime.now(), OffsetDateTime.now(), null, null, null, null, new PaAttributes(),false); + } + + public static OnboardingRequest dummyOnboardingRequest(Billing billing, Contract contract, InstitutionUpdate institutionUpdate){ + OnboardingRequest onboardingRequest = new OnboardingRequest(); + onboardingRequest.setBillingRequest(billing); + onboardingRequest.setContract(contract); + onboardingRequest.setInstitutionExternalId("42"); + onboardingRequest.setInstitutionUpdate(institutionUpdate); + onboardingRequest.setPricingPlan("Pricing Plan"); + onboardingRequest.setProductId("42"); + onboardingRequest.setProductName("Product Name"); + onboardingRequest.setSignContract(true); + onboardingRequest.setUsers(new ArrayList<>()); + return onboardingRequest; + } +} diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/model/DummyUser.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/model/DummyUser.java new file mode 100644 index 0000000..14bec6b --- /dev/null +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/util/model/DummyUser.java @@ -0,0 +1,38 @@ +package it.pagopa.selfcare.mscore.core.util.model; + +import it.pagopa.selfcare.mscore.model.CertifiedField; +import it.pagopa.selfcare.mscore.model.institution.WorkContact; +import it.pagopa.selfcare.mscore.model.user.User; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class DummyUser extends User { + + public DummyUser(String institutionId){ + this.setId(UUID.randomUUID().toString()); + this.setFiscalCode("fiscalCode"); + this.setName(setValue("name")); + this.setFamilyName(setValue("familyName")); + this.setWorkContacts(setContact(institutionId, setWorkContact("email"))); + } + + private CertifiedField setValue(String value){ + CertifiedField certifiedField = new CertifiedField<>(); + certifiedField.setValue(value); + return certifiedField; + } + + private Map setContact(String institutionId, WorkContact workContact){ + Map contactMap = new HashMap<>(); + contactMap.put(institutionId, workContact); + return contactMap; + } + + private WorkContact setWorkContact(String value){ + WorkContact contact = new WorkContact(); + contact.setEmail(setValue(value)); + return contact; + } +} diff --git a/apps/institution-ms/lombok.config b/apps/institution-ms/lombok.config new file mode 100644 index 0000000..8f7e8aa --- /dev/null +++ b/apps/institution-ms/lombok.config @@ -0,0 +1 @@ +lombok.addLombokGeneratedAnnotation = true \ No newline at end of file diff --git a/apps/institution-ms/mvnw b/apps/institution-ms/mvnw new file mode 100644 index 0000000..a16b543 --- /dev/null +++ b/apps/institution-ms/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/apps/institution-ms/mvnw.cmd b/apps/institution-ms/mvnw.cmd new file mode 100644 index 0000000..c8d4337 --- /dev/null +++ b/apps/institution-ms/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/apps/institution-ms/pom.xml b/apps/institution-ms/pom.xml new file mode 100644 index 0000000..8c0314a --- /dev/null +++ b/apps/institution-ms/pom.xml @@ -0,0 +1,220 @@ + + + 4.0.0 + + it.pagopa.selfcare + selc-starter-parent + 0.0.3-SNAPSHOT + + + selc-ms-core + 1.0-SNAPSHOT + pom + selc-ms-core + Selface ms-core + + + connector-api + connector + core + web + app + + + + 2.5.1 + 5.2.1 + 5.2.1 + https://sonarcloud.io/ + + + + + + it.pagopa.selfcare + selc-commons-base + ${selc-commons.version} + + + it.pagopa.selfcare + selc-commons-base + ${selc-commons.version} + test-jar + + + it.pagopa.selfcare + selc-commons-web + ${selc-commons.version} + + + it.pagopa.selfcare + selc-commons-web + ${selc-commons.version} + test-jar + + + it.pagopa.selfcare.utils + selc-commons-crypto + ${selc-commons.version} + compile + + + it.pagopa.selfcare + selc-common-utils + ${selc-commons.version} + + + it.pagopa.selfcare + selc-commons-connector-rest + ${selc-commons.version} + + + it.pagopa.selfcare + selc-commons-connector-rest + ${selc-commons.version} + test-jar + test + + + it.pagopa.selfcare + selc-ms-core-connector-api + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-core + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-web + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-connector-rest + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-connector-dao + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-connector-email + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-connector-azure-storage + 1.0-SNAPSHOT + + + + + + + + jakarta.xml.soap + jakarta.xml.soap-api + 3.0.0 + + + jakarta.xml.ws + jakarta.xml.ws-api + 4.0.0 + + + com.sun.xml.ws + jaxws-rt + 4.0.0 + + + jakarta.activation + jakarta.activation-api + 2.1.0 + + + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.0 + + + com.sun.xml.bind + jaxb-impl + 4.0.1 + + + com.sun.xml.messaging.saaj + saaj-impl + 3.0.0 + + + it.pagopa.selfcare.soap + selc-commons-connector-soap-aruba-sign + ${selc-commons.version} + + + + javax.xml.bind + jaxb-api + 2.3.1 + + + javax.annotation + javax.annotation-api + 1.3.2 + + + org.bouncycastle + bcpkix-jdk15on + 1.70 + + + org.bouncycastle + bcprov-ext-jdk15on + 1.70 + + + org.bouncycastle + bcprov-jdk15on + 1.70 + + + + org.owasp.encoder + encoder + 1.2.3 + + + + + + it.pagopa.selfcare + selc-commons-base + + + it.pagopa.selfcare + selc-commons-base + test-jar + test + + + + + selfcare-platform + + https://pkgs.dev.azure.com/pagopaspa/selfcare-platform-app-projects/_packaging/selfcare-platform/maven/v1 + + + + + selfcare-onboarding + Selfcare Onboarding SDK + https://maven.pkg.github.com/pagopa/selfcare-onboarding + + + + \ No newline at end of file diff --git a/apps/institution-ms/web/pom.xml b/apps/institution-ms/web/pom.xml new file mode 100644 index 0000000..46f4c57 --- /dev/null +++ b/apps/institution-ms/web/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + selc-ms-core + it.pagopa.selfcare + 1.0-SNAPSHOT + + + selc-ms-core-web + + + + it.pagopa.selfcare + selc-commons-web + + + it.pagopa.selfcare + selc-commons-base + + + it.pagopa.selfcare + selc-commons-web + test-jar + test + + + it.pagopa.selfcare + selc-ms-core-core + + + io.springfox + springfox-boot-starter + + + + diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/config/CoreSecurityConfig.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/config/CoreSecurityConfig.java new file mode 100644 index 0000000..859d3b5 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/config/CoreSecurityConfig.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.web.config; + +import it.pagopa.selfcare.commons.web.config.SecurityConfig; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; + +@Slf4j +@Configuration +@EnableWebSecurity +@Import(SecurityConfig.class) +class CoreSecurityConfig { +} \ No newline at end of file diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfig.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfig.java new file mode 100644 index 0000000..f727991 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfig.java @@ -0,0 +1,156 @@ +package it.pagopa.selfcare.mscore.web.config; + +import com.fasterxml.classmate.TypeResolver; + +import it.pagopa.selfcare.commons.web.swagger.EmailAnnotationSwaggerPluginConfig; +import it.pagopa.selfcare.commons.web.swagger.ServerSwaggerConfig; +import it.pagopa.selfcare.mscore.model.error.Problem; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.*; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.security.core.Authentication; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.builders.ResponseBuilder; +import springfox.documentation.service.*; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; +import springfox.documentation.spring.web.plugins.Docket; + +import java.time.LocalTime; +import java.util.Collections; +import java.util.List; + +/** + * The Class SwaggerConfig. + */ +@Configuration +public class SwaggerConfig { + + private static final String AUTH_SCHEMA_NAME = "bearerAuth"; + + private static final Response BAD_REQUEST_RESPONSE = new ResponseBuilder() + .code(String.valueOf(HttpStatus.BAD_REQUEST.value())) + .description(HttpStatus.BAD_REQUEST.getReasonPhrase()) + .representation(MediaType.APPLICATION_PROBLEM_JSON).apply(repBuilder -> + repBuilder.model(modelSpecBuilder -> + modelSpecBuilder.referenceModel(refModelSpecBuilder -> + refModelSpecBuilder.key(modelKeyBuilder -> + modelKeyBuilder.qualifiedModelName(qualifiedModelNameBuilder -> + qualifiedModelNameBuilder.namespace(Problem.class.getPackageName()) + .name(Problem.class.getSimpleName())))))) + .build(); + private static final Response NOT_FOUND_RESPONSE = new ResponseBuilder() + .code(String.valueOf(HttpStatus.NOT_FOUND.value())) + .description(HttpStatus.NOT_FOUND.getReasonPhrase()) + .representation(MediaType.APPLICATION_PROBLEM_JSON).apply(repBuilder -> + repBuilder.model(modelSpecBuilder -> + modelSpecBuilder.referenceModel(refModelSpecBuilder -> + refModelSpecBuilder.key(modelKeyBuilder -> + modelKeyBuilder.qualifiedModelName(qualifiedModelNameBuilder -> + qualifiedModelNameBuilder.namespace(Problem.class.getPackageName()) + .name(Problem.class.getSimpleName())))))) + .build(); + + private static final Response CONFLICT_RESPONSE = new ResponseBuilder() + .code(String.valueOf(HttpStatus.CONFLICT.value())) + .description(HttpStatus.CONFLICT.getReasonPhrase()) + .representation(MediaType.APPLICATION_PROBLEM_JSON).apply(repBuilder -> + repBuilder.model(modelSpecBuilder -> + modelSpecBuilder.referenceModel(refModelSpecBuilder -> + refModelSpecBuilder.key(modelKeyBuilder -> + modelKeyBuilder.qualifiedModelName(qualifiedModelNameBuilder -> + qualifiedModelNameBuilder.namespace(Problem.class.getPackageName()) + .name(Problem.class.getSimpleName())))))) + .build(); + + private static final Response FORBIDDEN_RESPONSE = new ResponseBuilder() + .code(String.valueOf(HttpStatus.FORBIDDEN.value())) + .description(HttpStatus.FORBIDDEN.getReasonPhrase()) + .representation(MediaType.APPLICATION_PROBLEM_JSON).apply(repBuilder -> + repBuilder.model(modelSpecBuilder -> + modelSpecBuilder.referenceModel(refModelSpecBuilder -> + refModelSpecBuilder.key(modelKeyBuilder -> + modelKeyBuilder.qualifiedModelName(qualifiedModelNameBuilder -> + qualifiedModelNameBuilder.namespace(Problem.class.getPackageName()) + .name(Problem.class.getSimpleName())))))) + .build(); + + @Configuration + @Profile("swaggerIT") + @PropertySource("classpath:/swagger/swagger_it.properties") + public static class itConfig { + } + + @Configuration + @Profile("swaggerEN") + @PropertySource("classpath:/swagger/swagger_en.properties") + public static class enConfig { + } + + private final Environment environment; + + + @Autowired + SwaggerConfig(Environment environment) { + this.environment = environment; + } + + + @Bean + public Docket swaggerSpringPlugin(@Autowired TypeResolver typeResolver) { + return (new Docket(DocumentationType.OAS_30)) + .apiInfo(new ApiInfoBuilder() + .title(environment.getProperty("swagger.title", environment.getProperty("spring.application.name"))) + .description(environment.getProperty("swagger.description", "Api and Models")) + .version(environment.getProperty("swagger.version", environment.getProperty("spring.application.version"))) + .build()) + .select().apis(RequestHandlerSelectors.basePackage("it.pagopa.selfcare.mscore.web.controller")).build() + .tags(new Tag("External", environment.getProperty("swagger.name.api.external.description"))) + .tags(new Tag("Institution", environment.getProperty("swagger.name.api.institution.description"))) + .tags(new Tag("Onboarding", environment.getProperty("swagger.name.api.onboarding.description"))) + .tags(new Tag("Management", environment.getProperty("swagger.name.api.management.description"))) + .tags(new Tag("Delegation", environment.getProperty("swagger.name.api.delegation.description"))) + .directModelSubstitute(LocalTime.class, String.class) + .ignoredParameterTypes(Authentication.class) + .forCodeGeneration(true) + .useDefaultResponseMessages(false) + .globalResponses(HttpMethod.GET, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE)) + .globalResponses(HttpMethod.DELETE, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE, CONFLICT_RESPONSE)) + .globalResponses(HttpMethod.POST, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE, CONFLICT_RESPONSE)) + .globalResponses(HttpMethod.PUT, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE, FORBIDDEN_RESPONSE)) + .globalResponses(HttpMethod.HEAD, List.of(BAD_REQUEST_RESPONSE, NOT_FOUND_RESPONSE)) + .additionalModels(typeResolver.resolve(Problem.class)) + .securityContexts(Collections.singletonList(SecurityContext.builder() + .securityReferences(defaultAuth()) + .build())) + .securitySchemes(Collections.singletonList(HttpAuthenticationScheme.JWT_BEARER_BUILDER + .name(AUTH_SCHEMA_NAME) + .description(environment.getProperty("swagger.security.schema.bearer.description")) + .build())); + } + + + private List defaultAuth() { + AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; + authorizationScopes[0] = authorizationScope; + return Collections.singletonList(new SecurityReference(AUTH_SCHEMA_NAME, authorizationScopes)); + } + + + @Bean + public EmailAnnotationSwaggerPluginConfig emailAnnotationPlugin() { + return new EmailAnnotationSwaggerPluginConfig(); + } + + + @Bean + public ServerSwaggerConfig serverSwaggerConfiguration() { + return new ServerSwaggerConfig(); + } + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/config/WebConfig.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/config/WebConfig.java new file mode 100644 index 0000000..4eed5a4 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/config/WebConfig.java @@ -0,0 +1,24 @@ +package it.pagopa.selfcare.mscore.web.config; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.commons.web.config.BaseWebConfig; +import lombok.NonNull; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +@Configuration +@Import(BaseWebConfig.class) +public class WebConfig implements BeanPostProcessor { + + @Override + public Object postProcessAfterInitialization(@NonNull Object bean, @NonNull String beanName) throws BeansException { + if (bean instanceof ObjectMapper) { + ((ObjectMapper) bean).configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true); + } + return bean; + } + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationController.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationController.java new file mode 100644 index 0000000..6afa7b4 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationController.java @@ -0,0 +1,136 @@ + package it.pagopa.selfcare.mscore.web.controller; + + import io.swagger.annotations.Api; + import io.swagger.annotations.ApiOperation; + import io.swagger.annotations.ApiParam; + import io.swagger.v3.oas.annotations.tags.Tag; + import io.swagger.v3.oas.annotations.tags.Tags; + import it.pagopa.selfcare.mscore.constant.GenericError; + import it.pagopa.selfcare.mscore.constant.Order; + import it.pagopa.selfcare.mscore.core.DelegationService; + import it.pagopa.selfcare.mscore.exception.InvalidRequestException; + import it.pagopa.selfcare.mscore.model.delegation.Delegation; + import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequest; + import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequestFromTaxcode; + import it.pagopa.selfcare.mscore.web.model.delegation.DelegationResponse; + import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapper; + import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; + import lombok.extern.slf4j.Slf4j; + import org.springframework.http.HttpStatus; + import org.springframework.http.MediaType; + import org.springframework.http.ResponseEntity; + import org.springframework.web.bind.annotation.*; + + import javax.validation.Valid; + import java.util.List; + import java.util.Objects; + import java.util.Optional; + +@RestController +@RequestMapping(value = "/delegations", produces = MediaType.APPLICATION_JSON_VALUE) +@Api(tags = "Delegation") +@Slf4j +public class DelegationController { + + private final DelegationService delegationService; + private final DelegationMapper delegationMapper; + + public DelegationController(DelegationService delegationService, + DelegationMapper delegationMapper) { + this.delegationService = delegationService; + this.delegationMapper = delegationMapper; + } + + /** + * The function persist delegation + * + * @param delegation DelegationRequest + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: DelegationResponse + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.delegation.create}", notes = "${swagger.mscore.delegation.create}") + @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createDelegation(@RequestBody @Valid DelegationRequest delegation) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_DELEGATION_ERROR); + Delegation saved = delegationService.createDelegation(delegationMapper.toDelegation(delegation)); + return ResponseEntity.status(HttpStatus.CREATED).body(delegationMapper.toDelegationResponse(saved)); + } + + + /** + * The function persist delegation + * + * @param delegation DelegationRequest + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: DelegationResponse + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.delegation.createFromTaxCode}", notes = "${swagger.mscore.delegation.createFromTaxCode}") + @PostMapping(value = "/from-taxcode", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createDelegationFromInstitutionsTaxCode(@RequestBody @Valid DelegationRequestFromTaxcode delegation) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_DELEGATION_ERROR); + Delegation saved = delegationService.createDelegationFromInstitutionsTaxCode(delegationMapper.toDelegation(delegation)); + return ResponseEntity.status(HttpStatus.CREATED).body(delegationMapper.toDelegationResponse(saved)); + } + + + + /** + * The function get delegations + * + * @param institutionId String + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: List + * * Code: 404, Message: Institution data not found, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + */ + @Tags({@Tag(name = "external-v2"), @Tag(name = "support"), @Tag(name = "Delegation")}) + @ApiOperation(value = "${swagger.mscore.institutions.delegations}", notes = "${swagger.mscore.institutions.delegations}") + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> getDelegations(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @RequestParam(name = "institutionId", required = false) String institutionId, + @ApiParam("${swagger.mscore.institutions.model.institutionId}") + @RequestParam(name = "brokerId", required = false) String brokerId, + @ApiParam("${swagger.mscore.product.model.id}") + @RequestParam(name = "productId", required = false) String productId, + @ApiParam("${swagger.mscore.institutions.model.description}") + @RequestParam(name = "search", required = false) String search, + @ApiParam("${swagger.mscore.institutions.model.taxCode}") + @RequestParam(name = "taxCode", required = false) String taxCode, + @ApiParam("${swagger.mscore.institutions.delegations.order}") + @RequestParam(name = "order", required = false) Optional order, + @RequestParam(name = "page", required = false) Optional page, + @RequestParam(name = "size", required = false) Optional size) { + + if(Objects.isNull(institutionId) && Objects.isNull(brokerId)) + throw new InvalidRequestException("institutionId or brokerId must not be null!!", GenericError.GENERIC_ERROR.getCode()); + + return ResponseEntity.status(HttpStatus.OK).body(delegationService.getDelegations(institutionId, brokerId, productId, search, taxCode, order, page, size).stream() + .map(delegationMapper::toDelegationResponseGet) + .toList()); + } + + /** + * The function delete a delegation setting its status to DELETED and setting delegation to false on institution if it has no more delegations + * + * @param delegationId DelegationId + * @return InstitutionResponse + * * Code: 204, Message: successful operation, DataType: NoContent + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.NO_CONTENT) + @ApiOperation(value = "${swagger.mscore.delegation.delete}", notes = "${swagger.mscore.delegation.delete}") + @DeleteMapping(value = "/{delegationId}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity deleteDelegation(@ApiParam("${swagger.mscore.delegation.model.delegationId}") + @PathVariable("delegationId") String delegationId) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_DELEGATION_ERROR); + delegationService.deleteDelegationByDelegationId(delegationId); + return ResponseEntity.noContent().build(); + } +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2Controller.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2Controller.java new file mode 100644 index 0000000..c5d72ee --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2Controller.java @@ -0,0 +1,90 @@ + package it.pagopa.selfcare.mscore.web.controller; + + import io.swagger.annotations.Api; + import io.swagger.annotations.ApiOperation; + import io.swagger.annotations.ApiParam; + import it.pagopa.selfcare.mscore.constant.GenericError; + import it.pagopa.selfcare.mscore.constant.Order; + import it.pagopa.selfcare.mscore.core.DelegationService; + import it.pagopa.selfcare.mscore.exception.InvalidRequestException; + import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; + import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; + import it.pagopa.selfcare.mscore.web.model.delegation.DelegationWithPaginationResponse; + import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapper; + import lombok.extern.slf4j.Slf4j; + import org.springframework.http.HttpStatus; + import org.springframework.http.MediaType; + import org.springframework.http.ResponseEntity; + import org.springframework.web.bind.annotation.GetMapping; + import org.springframework.web.bind.annotation.RequestMapping; + import org.springframework.web.bind.annotation.RequestParam; + import org.springframework.web.bind.annotation.RestController; + + import javax.validation.constraints.Min; + import java.util.Objects; + + @RestController + @RequestMapping(value = "/v2/delegations", produces = MediaType.APPLICATION_JSON_VALUE) + @Api(tags = "Delegation") + @Slf4j + public class DelegationV2Controller { + + private final DelegationService delegationService; + private final DelegationMapper delegationMapper; + + public DelegationV2Controller(DelegationService delegationService, + DelegationMapper delegationMapper) { + this.delegationService = delegationService; + this.delegationMapper = delegationMapper; + } + + /** + * The function get delegations + * + * @param institutionId String + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: List + * * Code: 404, Message: Institution data not found, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + */ + @ApiOperation(value = "${swagger.mscore.institutions.delegationsV2}", notes = "${swagger.mscore.institutions.delegationsv2}") + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getDelegations(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @RequestParam(name = "institutionId", required = false) String institutionId, + @ApiParam("${swagger.mscore.institutions.model.institutionId}") + @RequestParam(name = "brokerId", required = false) String brokerId, + @ApiParam("${swagger.mscore.product.model.id}") + @RequestParam(name = "productId", required = false) String productId, + @ApiParam("${swagger.mscore.institutions.model.description}") + @RequestParam(name = "search", required = false) String search, + @ApiParam("${swagger.mscore.institutions.model.taxCode}") + @RequestParam(name = "taxCode", required = false) String taxCode, + @ApiParam("${swagger.mscore.institutions.delegations.order}") + @RequestParam(name = "order", required = false, defaultValue = "NONE") Order order, + @RequestParam (name = "page", required = false, defaultValue = "0") @Min(0) Integer page, + @RequestParam(name = "size", required = false, defaultValue = "10000") @Min(1) Integer size) { + + if(Objects.isNull(institutionId) && Objects.isNull(brokerId)) + throw new InvalidRequestException("institutionId or brokerId must not be null!!", GenericError.GENERIC_ERROR.getCode()); + + GetDelegationParameters delegationParameters = GetDelegationParameters.builder() + .from(institutionId) + .to(brokerId) + .productId(productId) + .search(search) + .taxCode(taxCode) + .order(order) + .page(page) + .size(size) + .build(); + + DelegationWithPagination delegationWithPagination = delegationService.getDelegationsV2(delegationParameters); + + DelegationWithPaginationResponse response = new DelegationWithPaginationResponse( + delegationWithPagination.getDelegations().stream().map( + delegationMapper::toDelegationResponseGet) + .toList(), delegationWithPagination.getPageInfo()); + + return ResponseEntity.status(HttpStatus.OK).body(response); + } + } diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ExternalController.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ExternalController.java new file mode 100644 index 0000000..0dfc5ce --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ExternalController.java @@ -0,0 +1,148 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.core.ExternalService; +import it.pagopa.selfcare.mscore.model.institution.GeographicTaxonomies; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionBillingResponse; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionResponse; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionMapperCustom; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapper; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardedProducts; +import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.stream.Collectors; + +import static it.pagopa.selfcare.mscore.constant.GenericError.*; + +@Slf4j +@RestController +@RequestMapping(value = "/external/institutions", produces = MediaType.APPLICATION_JSON_VALUE) +@Api(tags = "External") +public class ExternalController { + + private final ExternalService externalService; + private final InstitutionResourceMapper institutionResourceMapper; + + public ExternalController(ExternalService externalService, InstitutionResourceMapper institutionResourceMapper) { + this.externalService = externalService; + this.institutionResourceMapper = institutionResourceMapper; + } + + /** + * The function returns institution Data from its externalId + * + * @param externalId externalId + * + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: InstitutionResponse + * * Code: 400, Message: Invalid ID supplied, DataType: Problem + * * Code: 404, Message: Institution not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value ="${swagger.mscore.external.institution}", notes = "${swagger.mscore.external.institution}") + @GetMapping(value = "/{externalId}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") + @PathVariable("externalId") String externalId) { + CustomExceptionMessage.setCustomMessage(GET_INSTITUTION_BY_EXTERNAL_ID_ERROR); + Institution institution = externalService.getInstitutionByExternalId(externalId); + return ResponseEntity.ok().body(institutionResourceMapper.toInstitutionResponse(institution)); + } + + + /** + * The function returns billing institution Data from its externalId + * + * @param externalId String + * @param productId String + * + * @return InstitutionBillingResponse + * * Code: 200, Message: successful operation, DataType: InstitutionBillingResponse + * * Code: 400, Message: Invalid ID supplied, DataType: Problem + * * Code: 404, Message: Institution Billing not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.external.institution.billing}", notes = "${swagger.mscore.external.institution.billing}") + @GetMapping(value = "/{externalId}/products/{productId}/billing", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getBillingInstitutionByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") + @PathVariable("externalId") String externalId, + @ApiParam("${swagger.mscore.institutions.model.productId}") + @PathVariable("productId") String productId) { + CustomExceptionMessage.setCustomMessage(INSTITUTION_BILLING_ERROR); + Institution institution = externalService.retrieveInstitutionProduct(externalId, productId); + return ResponseEntity.ok().body(InstitutionMapperCustom.toInstitutionBillingResponse(institution, productId)); + } + + + /** + * The function returns institution related products given externalId + * + * @param externalId String + * @param states List + * + * @return OnboardedProducts + * * Code: 200, Message: successful operation, DataType: OnboardedProducts + * * Code: 400, Message: Invalid ID supplied, DataType: Problem + * * Code: 404, Message: Institution Billing not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.external.institution.products}", notes = "${swagger.mscore.external.institution.products}") + @GetMapping(value = "/{externalId}/products", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity retrieveInstitutionProductsByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") + @PathVariable("externalId") String externalId, + @RequestParam(value = "states", required = false) List states) { + CustomExceptionMessage.setCustomMessage(GET_PRODUCTS_ERROR); + List page = externalService.retrieveInstitutionProductsByExternalId(externalId, states); + return ResponseEntity.ok(InstitutionMapperCustom.toOnboardedProducts(page)); + } + + /** + * The function returns geographic taxonomies related to institution + * + * @param externalId String + * + * @return List + * * Code: 200, Message: successful operation, DataType: List + * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.external.geotaxonomies}", notes = "${swagger.mscore.external.geotaxonomies}") + @GetMapping(value = "/{externalId}/geotaxonomies", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> retrieveInstitutionGeoTaxonomiesByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") + @PathVariable("externalId") String externalId) { + CustomExceptionMessage.setCustomMessage(RETRIEVE_GEO_TAXONOMIES_ERROR); + List list = externalService.retrieveInstitutionGeoTaxonomiesByExternalId(externalId); + return ResponseEntity.ok(list); + } + + /** + * The function return an institution given institution internal id + * + * @param ids List + * @return List + * + * * Code: 200, Message: successful operation, DataType: List + * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution}", notes = "${swagger.mscore.institution}") + @GetMapping(value = "", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> retrieveInstitutionByIds(@ApiParam("${swagger.mscore.institutions.model.internalIds}") + @RequestParam("ids") List ids) { + CustomExceptionMessage.setCustomMessage(GET_INSTITUTION_BY_ID_ERROR); + List institutions = externalService.retrieveInstitutionByIds(ids); + return ResponseEntity.ok().body(institutions.stream() + .map(institutionResourceMapper::toInstitutionResponse) + .collect(Collectors.toList())); + } +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java new file mode 100644 index 0000000..efe28e0 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java @@ -0,0 +1,540 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import io.swagger.annotations.*; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.tags.Tags; +import it.pagopa.selfcare.commons.base.security.SelfCareUser; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.GenericError; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.core.InstitutionService; +import it.pagopa.selfcare.mscore.core.OnboardingService; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.web.model.institution.*; +import it.pagopa.selfcare.mscore.web.model.mapper.BrokerMapper; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionMapperCustom; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapper; +import it.pagopa.selfcare.mscore.web.model.mapper.OnboardingResourceMapper; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardedProducts; +import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import javax.validation.ValidationException; +import java.time.OffsetDateTime; +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +@RestController +@RequestMapping(value = "/institutions", produces = MediaType.APPLICATION_JSON_VALUE) +@Api(tags = "Institution") +@Slf4j +public class InstitutionController { + + private final InstitutionService institutionService; + private final OnboardingService onboardingService; + private final OnboardingResourceMapper onboardingResourceMapper; + private final InstitutionResourceMapper institutionResourceMapper; + private final BrokerMapper brokerMapper; + + public InstitutionController(InstitutionService institutionService, + OnboardingService onboardingService, OnboardingResourceMapper onboardingResourceMapper, + InstitutionResourceMapper institutionResourceMapper, + BrokerMapper brokerMapper) { + this.institutionService = institutionService; + this.onboardingService = onboardingService; + this.onboardingResourceMapper = onboardingResourceMapper; + this.institutionResourceMapper = institutionResourceMapper; + this.brokerMapper = brokerMapper; + } + + /** + * Gets institutions filtering by taxCode and/or subunitCode and/or origin and/or originId + * + * @param taxCode String + * @param subunitCode String + * @param origin String + * @param originId originId + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: OnboardedProducts + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 404, Message: Products not found, DataType: Problem + */ + @Tag(name = "support") + @Tag(name = "support-pnpg") + @Tag(name = "external-v2") + @Tag(name = "Institution") + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institutions}", notes = "${swagger.mscore.institutions}") + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getInstitutions(@ApiParam("${swagger.mscore.institutions.model.taxCode}") + @RequestParam(value = "taxCode", required = false) String taxCode, + @ApiParam("${swagger.mscore.institutions.model.subunitCode}") + @RequestParam(value = "subunitCode", required = false) String subunitCode, + @RequestParam(value = "origin", required = false) String origin, + @RequestParam(value = "originId", required = false) String originId) { + + + if (!StringUtils.hasText(taxCode) && !StringUtils.hasText(originId) && !StringUtils.hasText(origin)) { + throw new ValidationException("At least one of taxCode, origin or originId must be present"); + } else if (StringUtils.hasText(subunitCode) && !StringUtils.hasText(taxCode)) { + throw new ValidationException("TaxCode is required if subunitCode is present"); + } + + CustomExceptionMessage.setCustomMessage(GenericError.GET_INSTITUTION_BY_ID_ERROR); + + List institutions = institutionService.getInstitutions(taxCode, subunitCode, origin, originId); + InstitutionsResponse institutionsResponse = new InstitutionsResponse(); + institutionsResponse.setInstitutions(institutions.stream() + .map(institutionResourceMapper::toInstitutionResponse) + .toList()); + return ResponseEntity.ok(institutionsResponse); + } + + /** + * The function create an institution retriving values from IPA + * + * @param institutionFromIpaPost InstitutionPost + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: InstitutionResponse + * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.create.from-ipa}", notes = "${swagger.mscore.institution.create.from-ipa}") + @PostMapping(value = "/from-ipa", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitutionFromIpa(@RequestBody @Valid InstitutionFromIpaPost institutionFromIpaPost) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + + if (Objects.isNull(institutionFromIpaPost.getSubunitType()) && Objects.nonNull(institutionFromIpaPost.getSubunitCode())) { + throw new ValidationException("subunitCode and subunitType must both be evaluated."); + } + + List geographicTaxonomies = Optional.ofNullable(institutionFromIpaPost.getGeographicTaxonomies()) + .map(geoTaxonomies -> geoTaxonomies.stream().map(institutionResourceMapper::toInstitutionGeographicTaxonomies).toList()) + .orElse(List.of()); + + Institution saved = institutionService.createInstitutionFromIpa(institutionFromIpaPost.getTaxCode(), + institutionFromIpaPost.getSubunitType(), institutionFromIpaPost.getSubunitCode(), geographicTaxonomies, institutionFromIpaPost.getInstitutionType()); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function create an institution retriving values from ANAC + * + * @param institution InstitutionRequest + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: InstitutionResponse + * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.create.from-anac}", notes = "${swagger.mscore.institution.create.from-anac}") + @PostMapping(value = "/from-anac", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitutionFromAnac(@RequestBody @Valid InstitutionRequest institution) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + Institution saved = institutionService.createInstitutionFromAnac(InstitutionMapperCustom.toInstitution(institution, null)); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function create an institution retriving values from IVASS + * + * @param institution InstitutionRequest + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: InstitutionResponse + * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.create.from-ivass}", notes = "${swagger.mscore.institution.create.from-ivass}") + @PostMapping(value = "/from-ivass", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitutionFromIvass(@RequestBody @Valid InstitutionRequest institution) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + Institution saved = institutionService.createInstitutionFromIvass(InstitutionMapperCustom.toInstitution(institution, null)); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function create an institution retriving values from IPA + * + * @param institutionRequest InstitutionRequest + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: InstitutionResponse + * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.create.from-pda}", notes = "${swagger.mscore.institution.create.from-ipa}") + @PostMapping(value = "/from-pda", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitutionFromPda(@RequestBody @Valid PdaInstitutionRequest institutionRequest) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + + Institution saved = institutionService.createInstitutionFromPda(InstitutionMapperCustom.toInstitution(institutionRequest, null), institutionRequest.getInjectionInstitutionType()); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function create an institution retriving values from INFOCAMERE + * + * @param institutionRequest InstitutionRequest + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: InstitutionResponse + * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.create.from-infocamere}", notes = "${swagger.mscore.institution.create.from-infocamere}") + @PostMapping(value = "/from-infocamere", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitutionFromInfocamere(@RequestBody @Valid InstitutionRequest institutionRequest) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + + Institution saved = institutionService.createInstitutionFromInfocamere(InstitutionMapperCustom.toInstitution(institutionRequest, null)); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function persist PA institution + * + * @param externalId String + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: InstitutionResponse + * * Code: 404, Message: Institution data not found on Ipa, DataType: Problem + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @Deprecated + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.PA.create}", notes = "${swagger.mscore.institution.PA.create}") + @PostMapping(value = "/{externalId}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitutionByExternalId(@ApiParam("${swagger.mscore.institutions.model.externalId}") + @PathVariable("externalId") String externalId) { + + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + Institution saved = institutionService.createInstitutionByExternalId(externalId); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function persist institution + * + * @param institution InstitutionRequest + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: InstitutionResponse + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.create}", notes = "${swagger.mscore.institution.create}") + @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitution(@RequestBody @Valid InstitutionRequest institution) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + Institution saved = institutionService.createInstitution(InstitutionMapperCustom.toInstitution(institution, null)); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function persist institution manually + * + * @param externalId String + * @param institution InstitutionRequest + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: InstitutionResponse + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @Deprecated + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution.create}", notes = "${swagger.mscore.institution.create}") + @PostMapping(value = "/insert/{externalId}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createInstitutionRaw(@ApiParam("${swagger.mscore.institutions.model.externalId}") + @PathVariable("externalId") String externalId, + @RequestBody @Valid InstitutionRequest institution) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + Institution saved = institutionService.createInstitution(InstitutionMapperCustom.toInstitution(institution, null)); + return ResponseEntity.ok(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function persist PG institution + * + * @param request CreatePgInstitutionRequest + * @return InstitutionResponse + * * Code: 201, Message: successful operation, DataType: InstitutionResponse + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 404, Message: Institution data not found on InfoCamere, DataType: Problem + * * Code: 409, Message: Institution conflict, DataType: Problem + */ + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.institution.PG.create}", notes = "${swagger.mscore.institution.PG.create}") + @PostMapping(value = "/pg", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createPgInstitution(@RequestBody @Valid CreatePgInstitutionRequest request, + Authentication authentication) { + CustomExceptionMessage.setCustomMessage(GenericError.CREATE_INSTITUTION_ERROR); + Institution saved = institutionService.createPgInstitution(request.getTaxId(), request.getDescription(), request.isExistsInRegistry(), (SelfCareUser) authentication.getPrincipal()); + return ResponseEntity.status(HttpStatus.CREATED).body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function return products related to institution + * + * @param institutionId String + * @param states List + * @return OnboardedProducts + * * Code: 200, Message: successful operation, DataType: OnboardedProducts + * * Code: 400, Message: Bad Request, DataType: Problem + * * Code: 404, Message: Products not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution.products}", notes = "${swagger.mscore.institution.products}") + @GetMapping(value = "/{id}/products", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity retrieveInstitutionProducts(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @PathVariable("id") String institutionId, + @ApiParam("${swagger.mscore.institutions.model.relationshipState}") + @RequestParam(value = "states", required = false) List states) { + + CustomExceptionMessage.setCustomMessage(GenericError.GET_PRODUCTS_ERROR); + Institution institution = institutionService.retrieveInstitutionById(institutionId); + List page = institutionService.retrieveInstitutionProducts(institution, states); + return ResponseEntity.ok(InstitutionMapperCustom.toOnboardedProducts(page)); + } + + /** + * The function Update the corresponding institution given internal institution id + * + * @param institutionId String + * @param institutionPut InstitutionPut + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: InstitutionResponse + * * Code: 400, Message: bad request, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution.update}", notes = "${swagger.mscore.institution.update}") + @PutMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity updateInstitution(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @PathVariable("id") String institutionId, + @RequestBody InstitutionPut institutionPut, + Authentication authentication + ) { + + CustomExceptionMessage.setCustomMessage(GenericError.PUT_INSTITUTION_ERROR); + SelfCareUser selfCareUser = (SelfCareUser) authentication.getPrincipal(); + Institution saved = institutionService.updateInstitution(institutionId, InstitutionMapperCustom.toInstitutionUpdate(institutionPut), selfCareUser.getId()); + return ResponseEntity.ok().body(institutionResourceMapper.toInstitutionResponse(saved)); + } + + /** + * The function persist user on registry if not exists and add relation with institution-product + * + * @param request OnboardingInstitutionUsersRequest + * @return no content + * * Code: 200, Message: Ok + * * Code: 201, Message: Created + * * Code: 404, Message: Not found, DataType: Problem + * * Code: 400, Message: Invalid request, DataType: Problem + */ + @ApiResponses(value = { + @ApiResponse(code = 200, message = "User already exists an onboarding in status ACTIVE or SUSPENDED with that productId"), + @ApiResponse(code = 201, message = "Created"), + @ApiResponse(code = 400, message = "Bad Request"), + @ApiResponse(code = 404, message = "Not Found") + }) + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation(value = "${swagger.mscore.onboarding.users}", notes = "${swagger.mscore.onboarding.users}") + @PostMapping(value = "/{id}/onboarding", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity onboardingInstitution(@RequestBody @Valid InstitutionOnboardingRequest request, + @PathVariable("id") String id) { + CustomExceptionMessage.setCustomMessage(GenericError.ONBOARDING_OPERATION_ERROR); + + StringBuilder httpStatus = new StringBuilder(); + + Institution institution = onboardingService.persistOnboarding(id, request.getProductId(), onboardingResourceMapper.toOnboarding(request), httpStatus); + + return ResponseEntity + .status(HttpStatus.valueOf(Integer.parseInt(httpStatus.toString()))) + .body(institutionResourceMapper.toInstitutionResponse(institution)); + } + + @ResponseStatus(HttpStatus.NO_CONTENT) + @ApiOperation(value = "${swagger.mscore.onboarding.users.delete}", notes = "${swagger.mscore.onboarding.users.delete}") + @DeleteMapping(value = "/{id}/products/{productId}", produces = MediaType.APPLICATION_JSON_VALUE) + public void deleteOnboardedInstitution(@PathVariable("productId") String productId, + @PathVariable("id") String institutionId) { + + CustomExceptionMessage.setCustomMessage(GenericError.DELETE_ONBOARDED_OPERATION_ERROR); + onboardingService.deleteOnboardedInstitution(institutionId, productId); + + } + + + /** + * The function return geographic taxonomies related to institution + * + * @param id String + * @return List + * * Code: 200, Message: successful operation, DataType: List + * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution.geotaxonomies}", notes = "${swagger.mscore.institution.geotaxonomies}") + @GetMapping(value = "/{id}/geotaxonomies", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> retrieveInstitutionGeoTaxonomies(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @PathVariable("id") String id) { + + CustomExceptionMessage.setCustomMessage(GenericError.RETRIEVE_GEO_TAXONOMIES_ERROR); + Institution institution = institutionService.retrieveInstitutionById(id); + List geo = institutionService.retrieveInstitutionGeoTaxonomies(institution); + return ResponseEntity.ok(geo); + } + + /** + * The function return an institution given institution internal id + * + * @param id String + * @return InstitutionResponse + * * Code: 200, Message: successful operation, DataType: InstitutionResponse + * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem + */ + @Tags({@Tag(name = "external-v2"), @Tag(name = "Institution")}) + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution}", notes = "${swagger.mscore.institution}") + @GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity retrieveInstitutionById(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @PathVariable("id") String id) { + CustomExceptionMessage.setCustomMessage(GenericError.GET_INSTITUTION_BY_ID_ERROR); + Institution institution = institutionService.retrieveInstitutionById(id); + return ResponseEntity.ok().body(institutionResourceMapper.toInstitutionResponse(institution)); + } + + + /** + * Get list of onboarding for a certain productId + * + * @param institutionId String + * @param productId String + * @return List + * * Code: 200, Message: successful operation, DataType: List + * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem + */ + @Tags({@Tag(name = "external-v2"), @Tag(name = "Institution")}) + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution.info}", notes = "${swagger.mscore.institution.info}") + @GetMapping(value = "/{institutionId}/onboardings", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getOnboardingsInstitution(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @PathVariable("institutionId") String institutionId, + @RequestParam(value = "productId", required = false) String productId) { + CustomExceptionMessage.setCustomMessage(GenericError.GETTING_ONBOARDING_INFO_ERROR); + List onboardings = institutionService.getOnboardingInstitutionByProductId(institutionId, productId); + OnboardingsResponse onboardingsResponse = new OnboardingsResponse(); + onboardingsResponse.setOnboardings(onboardings.stream() + .map(onboardingResourceMapper::toResponse) + .toList()); + return ResponseEntity.ok().body(onboardingsResponse); + } + + /** + * The function return a List of Institution that user can onboard + * + * @param institutions List + * @return List + * * Code: 200, Message: successful operation, DataType: List + * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institutions.valid}", notes = "${swagger.mscore.institutions.valid}") + @PostMapping(value = "/onboarded/{productId}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> getValidInstitutionToOnboard(@RequestBody List institutions, + @PathVariable(value = "productId") String productId) { + List validInstitutions = institutionService.retrieveInstitutionByExternalIds(InstitutionMapperCustom.toValidInstitutions(institutions), productId); + return ResponseEntity.ok().body(InstitutionMapperCustom.toInstitutionToOnboardList(validInstitutions)); + } + + /** + * The function updates the field createdAt of the OnboardedProduct, the related Token and UserBindings for the given institution-product pair + * + * @param institutionId String + * @param createdAtRequest CreatedAtRequest + * @return no content + * * Code: 200, Message: successful operation + * * Code: 404, Message: Institution or Token or UserBinding not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institutions.updateCreatedAt}", notes = "${swagger.mscore.institutions.updateCreatedAt}") + @PutMapping(value = "/{institutionId}/createdAt", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity updateCreatedAt(@ApiParam("${swagger.mscore.institutions.model.institutionId}") + @PathVariable("institutionId") String institutionId, + @Valid @RequestBody CreatedAtRequest createdAtRequest) { + log.trace("updateCreatedAt start"); + log.debug("updateCreatedAt institutionId = {}, productId = {}, createdAt = {}", institutionId, createdAtRequest.getProductId(), createdAtRequest.getCreatedAt()); + if (createdAtRequest.getCreatedAt().isAfter(OffsetDateTime.now())) { + throw new ValidationException("Invalid createdAt date: the createdAt date must be prior to the current date."); + } + institutionService.updateCreatedAt(institutionId, createdAtRequest.getProductId(), createdAtRequest.getCreatedAt(), createdAtRequest.getActivatedAt()); + log.trace("updateCreatedAt end"); + return ResponseEntity.status(HttpStatus.OK).build(); + } + + /** + * Retrieve institutions with productId onboarded + * + * @param productId String + * @param page Integer + * @param size Integer + * @return List + * * Code: 200, Message: successful operation + * * Code: 404, Message: product not found + */ + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institutions.findFromProduct}", notes = "${swagger.mscore.institutions.findFromProduct}") + @GetMapping(value = "/products/{productId}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity findFromProduct(@ApiParam("${swagger.mscore.institutions.model.productId}") + @PathVariable(value = "productId") String productId, + @ApiParam("${swagger.mscore.page.number}") + @RequestParam(name = "page", defaultValue = "0") Integer page, + @ApiParam("${swagger.mscore.page.size}") + @RequestParam(name = "size", defaultValue = "100") Integer size) { + log.trace("findFromProduct start"); + log.debug("findFromProduct productId = {}", productId); + List institutions = institutionService.getInstitutionsByProductId(productId, page, size); + + InstitutionOnboardingListResponse institutionListResponse = new InstitutionOnboardingListResponse( + institutions.stream() + .map(InstitutionMapperCustom::toInstitutionOnboardingResponse) + .toList()); + + log.trace("findFromProduct end"); + return ResponseEntity.ok().body(institutionListResponse); + } + + @GetMapping(value = "/{productId}/brokers/{institutionType}", produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institutions.brokers}", notes = "${swagger.mscore.institutions.getInstitutionBrokers}") + public Collection getInstitutionBrokers(@ApiParam("${swagger.mscore.institutions.model.productId}") + @PathVariable("productId") + String productId, + @ApiParam("${swagger.mscore.institutions.model.type}") + @PathVariable("institutionType") + InstitutionType institutionType) { + log.trace("getInstitutionBrokers start"); + log.debug("productId = {}, institutionType = {}", productId, institutionType); + List institutions = institutionService.getInstitutionBrokers(productId, institutionType); + List result = brokerMapper.toBrokers(institutions); + log.debug("getInstitutionBrokers result = {}", result); + log.trace("getInstitutionBrokers end"); + return result; + } + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ManagementController.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ManagementController.java new file mode 100644 index 0000000..7f8706b --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/ManagementController.java @@ -0,0 +1,48 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import it.pagopa.selfcare.mscore.core.InstitutionService; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.web.model.institution.BulkInstitutions; +import it.pagopa.selfcare.mscore.web.model.institution.BulkPartiesSeed; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionMapperCustom; +import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; +import java.util.ArrayList; +import java.util.List; + +import static it.pagopa.selfcare.mscore.constant.GenericError.GET_INSTITUTION_BY_ID_ERROR; + +@Slf4j +@RestController +@Api(tags = "Management") +public class ManagementController { + + private final InstitutionService institutionService; + + public ManagementController(InstitutionService institutionService) { + this.institutionService = institutionService; + } + + @ResponseStatus(HttpStatus.OK) + @ApiOperation(value = "${swagger.mscore.institution}", notes = "${swagger.mscore.institution}") + @PostMapping(value = "/bulk/institutions", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity retrieveInstitutionByIds(@ApiParam("${swagger.mscore.institutions.model.internalIds}") + @RequestBody @Valid BulkPartiesSeed bulkPartiesSeed) { + CustomExceptionMessage.setCustomMessage(GET_INSTITUTION_BY_ID_ERROR); + List ids = new ArrayList<>(bulkPartiesSeed.getPartyIdentifiers()); + List institution = institutionService.retrieveInstitutionByIds(ids); + return ResponseEntity.ok().body(InstitutionMapperCustom.toBulkInstitutions(institution, ids)); + } +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/OnboardingController.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/OnboardingController.java new file mode 100644 index 0000000..f1ff8e2 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/OnboardingController.java @@ -0,0 +1,95 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import it.pagopa.selfcare.mscore.constant.GenericError; +import it.pagopa.selfcare.mscore.core.OnboardingService; +import it.pagopa.selfcare.mscore.model.onboarding.VerifyOnboardingFilters; +import it.pagopa.selfcare.mscore.web.util.CustomExceptionMessage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@Slf4j +@RestController +@RequestMapping(value = "/onboarding") +@Api(tags = "Onboarding") +public class OnboardingController { + + private final OnboardingService onboardingService; + + public OnboardingController(OnboardingService onboardingService) { + this.onboardingService = onboardingService; + } + + /** + * The function verify onboarding status of given product and institution + * + * @param externalId String + * @param productId String + * @return no content + * * Code: 204, Message: successful operation, DataType: TokenId + * * Code: 400, Message: Invalid ID supplied, DataType: Problem + * * Code: 404, Message: Not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.NO_CONTENT) + @ApiOperation(value = "${swagger.mscore.onboarding.verify}", notes = "${swagger.mscore.onboarding.verify}") + @RequestMapping(method = {RequestMethod.HEAD}, value = "/institution/{externalId}/products/{productId}") + public ResponseEntity verifyOnboardingInfo(@ApiParam("${swagger.mscore.institutions.model.externalId}") + @PathVariable(value = "externalId") String externalId, + @ApiParam("${swagger.mscore.institutions.model.productId}") + @PathVariable(value = "productId") String productId) { + CustomExceptionMessage.setCustomMessage(GenericError.ONBOARDING_VERIFICATION_ERROR); + onboardingService.verifyOnboardingInfo(externalId, productId); + return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); + } + + + /** + * The function verify onboarding status of given product and subunit of institution + * + * @param taxCode String + * @param subunitCode String + * @param productId String + * @return no content + * * Code: 204, Message: successful operation, DataType: TokenId + * * Code: 400, Message: Invalid ID supplied, DataType: Problem + * * Code: 404, Message: Not found, DataType: Problem + */ + @ResponseStatus(HttpStatus.NO_CONTENT) + @ApiOperation(value = "${swagger.mscore.onboarding.verify}", notes = "${swagger.mscore.onboarding.verify}") + @RequestMapping(method = {RequestMethod.HEAD}, value = "") + public ResponseEntity verifyOnboardingInfo(@ApiParam("${swagger.mscore.institutions.model.taxCode}") + @RequestParam(value = "taxCode") String taxCode, + @ApiParam("${swagger.mscore.institutions.model.subunitCode}") + @RequestParam(value = "subunitCode", required = false) String subunitCode, + @ApiParam("${swagger.mscore.institutions.model.productId}") + @RequestParam(value = "productId") String productId) { + CustomExceptionMessage.setCustomMessage(GenericError.ONBOARDING_VERIFICATION_ERROR); + onboardingService.verifyOnboardingInfoSubunit(taxCode, subunitCode, productId); + return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); + } + + @ResponseStatus(HttpStatus.NO_CONTENT) + @ApiOperation(value = "${swagger.mscore.onboarding.verify}", notes = "${swagger.mscore.onboarding.verify}") + @RequestMapping(method = {RequestMethod.HEAD}, value = "/verify") + public ResponseEntity verifyOnboardingInfoByFilters(@ApiParam("${swagger.mscore.institutions.model.productId}") + @RequestParam(value = "productId") String productId, + @ApiParam("${swagger.mscore.institutions.model.externalId}") + @RequestParam(value = "externalId", required = false) String externalId, + @ApiParam("${swagger.mscore.institutions.model.taxCode}") + @RequestParam(value = "taxCode", required = false) String taxCode, + @ApiParam("${swagger.mscore.institutions.model.origin}") + @RequestParam(value = "origin", required = false) String origin, + @ApiParam("${swagger.mscore.institutions.model.originId}") + @RequestParam(value = "originId", required = false) String originId, + @ApiParam("${swagger.mscore.institutions.model.subunitCode}") + @RequestParam(value = "subunitCode", required = false) String subunitCode) { + CustomExceptionMessage.setCustomMessage(GenericError.ONBOARDING_VERIFICATION_ERROR); + onboardingService.verifyOnboardingInfoByFilters(new VerifyOnboardingFilters(productId, externalId, taxCode, origin, originId, subunitCode)); + return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); + } + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandler.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandler.java new file mode 100644 index 0000000..b6a2545 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandler.java @@ -0,0 +1,115 @@ +package it.pagopa.selfcare.mscore.web.exception; + +import it.pagopa.selfcare.mscore.constant.GenericError; +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.error.Problem; +import it.pagopa.selfcare.mscore.model.error.ProblemError; +import lombok.NonNull; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; + +@ControllerAdvice +@Slf4j +public class CustomExceptionHandler extends ResponseEntityExceptionHandler { + + @Override + protected ResponseEntity handleMissingServletRequestParameter(@NonNull MissingServletRequestParameterException ex, @NonNull HttpHeaders headers, @NonNull HttpStatus status, @NonNull WebRequest request) { + log.error("InvalidRequestException Occured --> MESSAGE:{}, STATUS: {}",ex.getMessage(), HttpStatus.BAD_REQUEST, ex); + headers.setContentType(MediaType.APPLICATION_JSON); + Problem problem = createProblem("MISSING PARAMETER", HttpStatus.BAD_REQUEST.value(), "0000"); + return new ResponseEntity<>(problem, headers, HttpStatus.BAD_REQUEST); + } + + @Override + protected ResponseEntity handleMethodArgumentNotValid(@NonNull MethodArgumentNotValidException ex, HttpHeaders headers, @NonNull HttpStatus status, @NonNull WebRequest request) { + log.error("InvalidRequestException Occured --> MESSAGE:{}, STATUS: {}",ex.getMessage(), HttpStatus.BAD_REQUEST, ex); + headers.setContentType(MediaType.APPLICATION_JSON); + Problem problem = createProblem("INVALID ARGUMENT", HttpStatus.BAD_REQUEST.value(), "0000"); + return new ResponseEntity<>(problem, headers, HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(ResourceNotFoundException.class) + public ResponseEntity handleResourceNotFoundException(HttpServletRequest request, ResourceNotFoundException ex) { + log.error("ResourceNotFoundException Occured --> URL:{}, MESSAGE:{}, STATUS: {}",request.getRequestURL(), ex.getMessage(), HttpStatus.NOT_FOUND, ex); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + Problem problem = createProblem(ex.getMessage(), HttpStatus.NOT_FOUND.value(), ex.getCode()); + return new ResponseEntity<>(problem, headers, HttpStatus.NOT_FOUND); + } + + @ExceptionHandler(ResourceConflictException.class) + public ResponseEntity handleResourceConflictException(HttpServletRequest request, ResourceConflictException ex) { + log.error("ResourceConflictException Occured --> URL:{}, MESSAGE:{}, STATUS: {}",request.getRequestURL(), ex.getMessage(), HttpStatus.CONFLICT, ex); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + Problem problem = createProblem(ex.getMessage(), HttpStatus.CONFLICT.value(), ex.getCode()); + return new ResponseEntity<>(problem, headers, HttpStatus.CONFLICT); + } + + @ExceptionHandler(InvalidRequestException.class) + public ResponseEntity handleInvalidRequestException(HttpServletRequest request, InvalidRequestException ex) { + log.error("InvalidRequestException Occured --> URL:{}, MESSAGE:{}, STATUS:{}",request.getRequestURL(), ex.getMessage(), HttpStatus.BAD_REQUEST, ex); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + Problem problem = createProblem(ex.getMessage(), HttpStatus.BAD_REQUEST.value(), ex.getCode()); + return new ResponseEntity<>(problem, headers, HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(MsCoreException.class) + public ResponseEntity handleMsCoreException(HttpServletRequest request, MsCoreException ex) { + log.error("Exception Occured --> URL:{}, MESSAGE:{}, STATUS:{}",request.getRequestURL(), ex.getMessage(), INTERNAL_SERVER_ERROR, ex); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + Problem problem = createProblem(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value(), ex.getCode()); + return new ResponseEntity<>(problem, headers, INTERNAL_SERVER_ERROR); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity handleException(HttpServletRequest request, Exception ex) { + log.error("{} Occured --> URL:{}, MESSAGE:{}, STATUS:{}",ex.getCause(), request.getRequestURL(), ex.getMessage(), HttpStatus.BAD_REQUEST, ex); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(createProblem(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value(), "")); + } + + private Problem createProblem(String errorMessage, Integer status, String code) { + Problem problem = new Problem(); + problem.setStatus(status); + problem.setErrors(createProblemError(errorMessage,code)); + return problem; + } + + private List createProblemError(String message, String code) { + List list = new ArrayList<>(); + list.add(ProblemError.builder() + .code(code) + .detail(message) + .build()); + return list; + } + + private GenericError retrieveGenericError(HttpServletRequest request){ + GenericError genericError = (GenericError) request.getAttribute("errorEnum"); + if(genericError == null){ + genericError = GenericError.GENERIC_ERROR; + } + return genericError; + } +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/filter/LogFilter.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/filter/LogFilter.java new file mode 100644 index 0000000..40be142 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/filter/LogFilter.java @@ -0,0 +1,70 @@ +package it.pagopa.selfcare.mscore.web.filter; + +import it.pagopa.selfcare.mscore.utils.MaskDataUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.util.ContentCachingRequestWrapper; +import org.springframework.web.util.ContentCachingResponseWrapper; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.UnsupportedEncodingException; + +@Slf4j +@Component +public class LogFilter implements Filter { + + private static final int MAX_LENGTH_CONTENT = 500; + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + + final String httpUri = httpServletRequest.getRequestURI(); + + if (httpUri.startsWith("/actuator/health")) { + log.trace("request to health-check actuator"); + chain.doFilter(httpServletRequest, httpServletResponse); + return; + } + + final String httpMethod = httpServletRequest.getMethod(); + long startTime = System.currentTimeMillis(); + + ContentCachingRequestWrapper requestCacheWrapperObject = new ContentCachingRequestWrapper(httpServletRequest); + ContentCachingResponseWrapper responseCacheWrapperObject = new ContentCachingResponseWrapper(httpServletResponse); + + chain.doFilter(requestCacheWrapperObject, responseCacheWrapperObject); + String requestBody = getContentAsString(requestCacheWrapperObject.getContentAsByteArray(), request.getCharacterEncoding(), false); + log.info("Request from URI : {} - method: {} - Request body: {}", httpUri, httpMethod, requestBody); + + Long endTime = System.currentTimeMillis() - startTime; + String responseBody = getContentAsString(responseCacheWrapperObject.getContentAsByteArray(), response.getCharacterEncoding(), true); + log.info("Response from URI : {} - method: {} - status: {} - timelapse: {}ms - Response body: {}", httpUri, httpMethod, httpServletResponse.getStatus(), endTime, responseBody); + responseCacheWrapperObject.copyBodyToResponse(); + } + + private String getContentAsString(byte[] buf, String charsetName, boolean isResponse) { + if (buf == null || buf.length == 0) { + return "empty"; + } + try { + String content = new String(buf, charsetName); + String maskedContent = MaskDataUtils.maskInformation(content); + if(isResponse) { + return maskedContent.substring(0, Math.min(MAX_LENGTH_CONTENT, maskedContent.length())); + } + return maskedContent; + } catch (UnsupportedEncodingException ex) { + return "Unsupported Encoding"; + } + } + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequest.java new file mode 100644 index 0000000..a27965b --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequest.java @@ -0,0 +1,25 @@ +package it.pagopa.selfcare.mscore.web.model.delegation; + +import it.pagopa.selfcare.mscore.constant.DelegationType; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class DelegationRequest { + + @NotBlank + private String from; + @NotBlank + private String to; + @NotBlank + private String institutionFromName; + @NotBlank + private String institutionToName; + @NotBlank + private String productId; + @NotNull + private DelegationType type; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequestFromTaxcode.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequestFromTaxcode.java new file mode 100644 index 0000000..e033dfe --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationRequestFromTaxcode.java @@ -0,0 +1,27 @@ +package it.pagopa.selfcare.mscore.web.model.delegation; + +import it.pagopa.selfcare.mscore.constant.DelegationType; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class DelegationRequestFromTaxcode { + + @NotBlank + private String fromTaxCode; + @NotBlank + private String toTaxCode; + @NotBlank + private String institutionFromName; + @NotBlank + private String institutionToName; + @NotBlank + private String productId; + @NotNull + private DelegationType type; + private String fromSubunitCode; + private String toSubunitCode; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationResponse.java new file mode 100644 index 0000000..acf7a78 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationResponse.java @@ -0,0 +1,38 @@ +package it.pagopa.selfcare.mscore.web.model.delegation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.time.OffsetDateTime; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class DelegationResponse { + + @NotBlank + private String id; + @NotBlank + private String institutionId; + @NotBlank + private String institutionName; + private String institutionRootName; + @NotBlank + private DelegationType type; + @NotBlank + private String productId; + private String taxCode; + private InstitutionType institutionType; + @NotBlank + private String brokerId; + private String brokerTaxCode; + private String brokerType; + private String brokerName; + private DelegationState status; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationWithPaginationResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationWithPaginationResponse.java new file mode 100644 index 0000000..fead1ee --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/delegation/DelegationWithPaginationResponse.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.web.model.delegation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.mscore.model.delegation.PageInfo; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class DelegationWithPaginationResponse { + + private List delegations; + private PageInfo pageInfo; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AdditionalInformationsRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AdditionalInformationsRequest.java new file mode 100644 index 0000000..c5e626f --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AdditionalInformationsRequest.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class AdditionalInformationsRequest { + private boolean belongRegulatedMarket; + private String regulatedMarketNote; + private boolean ipa; + private String ipaCode; + private boolean establishedByRegulatoryProvision; + private String establishedByRegulatoryProvisionNote; + private boolean agentOfPublicService; + private String agentOfPublicServiceNote; + private String otherNote; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesRequest.java new file mode 100644 index 0000000..facf4bc --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesRequest.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class AttributesRequest { + private String origin; + private String code; + private String description; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesResponse.java new file mode 100644 index 0000000..03b7471 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/AttributesResponse.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class AttributesResponse { + private String origin; + private String code; + private String description; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingRequest.java new file mode 100644 index 0000000..37e70b3 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingRequest.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class BillingRequest { + private String vatNumber; + private String taxCodeInvoicing; + private String recipientCode; + private boolean publicServices; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingResponse.java new file mode 100644 index 0000000..757e21b --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BillingResponse.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class BillingResponse { + private String vatNumber; + private String taxCodeInvoicing; + private String recipientCode; + private boolean publicServices; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BrokerResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BrokerResponse.java new file mode 100644 index 0000000..95009fd --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BrokerResponse.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class BrokerResponse { + + private String id; + private String taxCode; + private String description; + private int numberOfDelegations; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitution.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitution.java new file mode 100644 index 0000000..49a1881 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitution.java @@ -0,0 +1,48 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; +import java.util.Map; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class BulkInstitution { + + @NotNull + private String id; + + @NotNull + private String externalId; + + @NotNull + private String origin; + + @NotNull + private String originId; + + @NotNull + private String description; + + private InstitutionType institutionType; + + @NotNull + private String digitalAddress; + + @NotNull + private String address; + + @NotNull + private String zipCode; + + @NotNull + private String taxCode; + + private List attributes; + + @NotNull + private Map products; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitutions.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitutions.java new file mode 100644 index 0000000..dbedf39 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkInstitutions.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import java.util.List; + +@Data +public class BulkInstitutions { + private List found; + private List notFound; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkPartiesSeed.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkPartiesSeed.java new file mode 100644 index 0000000..3e53442 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkPartiesSeed.java @@ -0,0 +1,15 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +@Valid +public class BulkPartiesSeed { + + @NotNull + private List partyIdentifiers; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkProduct.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkProduct.java new file mode 100644 index 0000000..4330086 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/BulkProduct.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class BulkProduct { + + @NotNull + private String product; + @NotNull + private BillingResponse billing; + private String pricingPlan; + private RelationshipState status; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatePgInstitutionRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatePgInstitutionRequest.java new file mode 100644 index 0000000..ba5d4e3 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatePgInstitutionRequest.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@Data +public class CreatePgInstitutionRequest { + + @NotEmpty(message = "taxId is required") + private String taxId; + + private String description; + + @NotNull + private boolean existsInRegistry; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatedAtRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatedAtRequest.java new file mode 100644 index 0000000..e22952e --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/CreatedAtRequest.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.time.OffsetDateTime; + +@Data +public class CreatedAtRequest { + @NotBlank(message = "productId is mandatory") + private String productId; + @NotNull(message = "createdAt is mandatory") + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) + private OffsetDateTime createdAt; + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) + private OffsetDateTime activatedAt; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerRequest.java new file mode 100644 index 0000000..fcdf462 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerRequest.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class DataProtectionOfficerRequest { + private String address; + private String email; + private String pec; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerResponse.java new file mode 100644 index 0000000..a7a9304 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/DataProtectionOfficerResponse.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class DataProtectionOfficerResponse { + private String address; + private String email; + private String pec; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/GeoTaxonomies.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/GeoTaxonomies.java new file mode 100644 index 0000000..35a9421 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/GeoTaxonomies.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class GeoTaxonomies { + private String code; + private String desc; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionBillingResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionBillingResponse.java new file mode 100644 index 0000000..e0e75fe --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionBillingResponse.java @@ -0,0 +1,25 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.Origin; +import lombok.Data; + +@Data +public class InstitutionBillingResponse { + private String institutionId; + private String externalId; + private Origin origin; + private String originId; + private String description; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String taxCode; + private String pricingPlan; + private BillingResponse billing; + + private String subunitCode; + private String subunitType; + private String aooParentCode; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionFromIpaPost.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionFromIpaPost.java new file mode 100644 index 0000000..fc5e073 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionFromIpaPost.java @@ -0,0 +1,19 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class InstitutionFromIpaPost { + + @NotNull + private String taxCode; + private String subunitCode; + private InstitutionPaSubunitType subunitType; + private List geographicTaxonomies; + private InstitutionType institutionType; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionListResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionListResponse.java new file mode 100644 index 0000000..5bf4f5c --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionListResponse.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class InstitutionListResponse { + + List items; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagementResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagementResponse.java new file mode 100644 index 0000000..f0eafa7 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagementResponse.java @@ -0,0 +1,40 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Map; + +@Data +public class InstitutionManagementResponse { + + private String id; + private String externalId; + private String origin; + private String originId; + private String description; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String taxCode; + private Map products; + private List geographicTaxonomies; + private List attributes; + private PaymentServiceProviderResponse paymentServiceProvider; + private DataProtectionOfficerResponse dataProtectionOfficer; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + + private String subunitCode; + private String subunitType; + private String aooParentCode; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagerResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagerResponse.java new file mode 100644 index 0000000..145d5be --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionManagerResponse.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; +import lombok.Data; + +import java.time.OffsetDateTime; + +@Data +public class InstitutionManagerResponse { + private String id; + private String from; + private String to; + private String role; + private ProductInfo product; + private RelationshipState state; + private String pricingPlan; + private InstitutionUpdateResponse institutionUpdate; + private BillingResponse billing; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardedRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardedRequest.java new file mode 100644 index 0000000..cfe406b --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardedRequest.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +@Data +public class InstitutionOnboardedRequest { + + @NotEmpty(message = "productId is required") + private String productId; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingListResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingListResponse.java new file mode 100644 index 0000000..ad35063 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingListResponse.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class InstitutionOnboardingListResponse { + + List items; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingRequest.java new file mode 100644 index 0000000..1249774 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingRequest.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.time.OffsetDateTime; + +@Data +public class InstitutionOnboardingRequest { + + @NotEmpty(message = "productId is required") + private String productId; + + private String tokenId; + private String contractPath; + private String pricingPlan; + private BillingRequest billing; + private OffsetDateTime activatedAt; + private Boolean isAggregator; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingResponse.java new file mode 100644 index 0000000..fcf62bb --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionOnboardingResponse.java @@ -0,0 +1,39 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Map; + +@Data +public class InstitutionOnboardingResponse { + + private String id; + private String externalId; + private String origin; + private String originId; + private String description; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String taxCode; + private Map onboardings; + private List geographicTaxonomies; + private List attributes; + private PaymentServiceProviderResponse paymentServiceProvider; + private DataProtectionOfficerResponse dataProtectionOfficer; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private String subunitCode; + private String subunitType; + private String aooParentCode; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionProduct.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionProduct.java new file mode 100644 index 0000000..1e60e88 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionProduct.java @@ -0,0 +1,10 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; + +@Data +public class InstitutionProduct { + private String id; + private RelationshipState state; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionPut.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionPut.java new file mode 100644 index 0000000..31d9c1e --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionPut.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; +import lombok.ToString; + +import java.util.List; + +@Data +@ToString +public class InstitutionPut { + + List geographicTaxonomyCodes; + private String digitalAddress; + private String description; + private String parentDescription; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionRequest.java new file mode 100644 index 0000000..3e66e47 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionRequest.java @@ -0,0 +1,42 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardingRequest; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +public class InstitutionRequest { + + private String id; + private String externalId; + private String origin; + private String originId; + private String description; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String city; + private String county; + private String country; + private String taxCode; + private BillingRequest billing; + private List onboarding; + private List geographicTaxonomies; + private List attributes; + private PaymentServiceProviderRequest paymentServiceProvider; + private DataProtectionOfficerRequest dataProtectionOfficer; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private boolean delegation; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionResponse.java new file mode 100644 index 0000000..a6d0906 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionResponse.java @@ -0,0 +1,52 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardedProductResponse; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class InstitutionResponse { + + @NotBlank + private String id; + private String externalId; + @NotBlank + private String origin; + @NotBlank + private String originId; + private String description; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String taxCode; + private String city; + private String county; + private String country; + private String istatCode; + private List geographicTaxonomies; + private List attributes; + private List onboarding; + private PaymentServiceProviderResponse paymentServiceProvider; + private DataProtectionOfficerResponse dataProtectionOfficer; + private RootParentResponse rootParent; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private String subunitCode; + private String subunitType; + private String aooParentCode; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private boolean delegation; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionToOnboard.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionToOnboard.java new file mode 100644 index 0000000..ab6233d --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionToOnboard.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class InstitutionToOnboard { + + @JsonProperty("cfImpresa") + private String id; + + @JsonProperty("denominazione") + private String description; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateRequest.java new file mode 100644 index 0000000..a02d878 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateRequest.java @@ -0,0 +1,38 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class InstitutionUpdateRequest { + + @NotNull(message = "institutionType is required") + private InstitutionType institutionType; + + private String description; + private String digitalAddress; + private String address; + private String city; + private String county; + private String country; + @NotEmpty(message = "taxCode is required") + private String taxCode; + + private String zipCode; + private PaymentServiceProviderRequest paymentServiceProvider; + private DataProtectionOfficerRequest dataProtectionOfficer; + private List geographicTaxonomyCodes; + + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private String ivassCode; + private boolean imported; + private AdditionalInformationsRequest additionalInformations; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateResponse.java new file mode 100644 index 0000000..f34b02c --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionUpdateResponse.java @@ -0,0 +1,34 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import lombok.Data; + +import java.util.List; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class InstitutionUpdateResponse { + private InstitutionType institutionType; + private String description; + private String digitalAddress; + private String address; + private String taxCode; + private String zipCode; + private PaymentServiceProviderResponse paymentServiceProvider; + private DataProtectionOfficerResponse dataProtectionOfficer; + private List geographicTaxonomyCodes; + private String rea; + private String shareCapital; + private String businessRegisterPlace; + private String supportEmail; + private String supportPhone; + private boolean imported; + private String city; + private String county; + private String country; + private String subunitCode; + private String subunitType; + private String aooParentCode; +} + diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionsResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionsResponse.java new file mode 100644 index 0000000..f22ae7e --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/InstitutionsResponse.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import java.util.List; + +@Data +public class InstitutionsResponse { + + private List institutions; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingResponse.java new file mode 100644 index 0000000..301c2df --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingResponse.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; + +import java.time.OffsetDateTime; + +@Data +public class OnboardingResponse { + + private String productId; + private String tokenId; + private RelationshipState status; + private String contract; + private String pricingPlan; + private BillingResponse billing; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private OffsetDateTime closedAt; + private Boolean isAggregator; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingsResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingsResponse.java new file mode 100644 index 0000000..48c3b9b --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/OnboardingsResponse.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +public class OnboardingsResponse { + + private List onboardings; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderRequest.java new file mode 100644 index 0000000..14a8053 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderRequest.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class PaymentServiceProviderRequest { + private String abiCode; + private String businessRegisterNumber; + private String legalRegisterNumber; + private String legalRegisterName; + private boolean vatNumberGroup; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderResponse.java new file mode 100644 index 0000000..7d40dd9 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PaymentServiceProviderResponse.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +@Data +public class PaymentServiceProviderResponse { + private String abiCode; + private String businessRegisterNumber; + private String legalRegisterNumber; + private String legalRegisterName; + private boolean vatNumberGroup; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PdaInstitutionRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PdaInstitutionRequest.java new file mode 100644 index 0000000..6463f6c --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/PdaInstitutionRequest.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +@Data +public class PdaInstitutionRequest { + + @NotEmpty(message = "InjectionInstitutionType is required") + private String injectionInstitutionType; + + @NotEmpty(message = "TaxCode is required") + private String taxCode; + + private String description; + private BillingRequest billing; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/ProductsManagement.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/ProductsManagement.java new file mode 100644 index 0000000..d12a43e --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/ProductsManagement.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProductsManagement { + private String product; + private String pricingPlan; + private BillingResponse billing; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResponse.java new file mode 100644 index 0000000..52fe24f --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResponse.java @@ -0,0 +1,22 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +public class RelationshipResponse { + private String id; + private List from; + private String to; + private String role; + private String product; + private RelationshipState state; + private String pricingPlan; + private InstitutionUpdateResponse institutionUpdate; + private BillingResponse billingResponse; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResult.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResult.java new file mode 100644 index 0000000..35af6db --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipResult.java @@ -0,0 +1,28 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; +import lombok.Data; + +import java.time.OffsetDateTime; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class RelationshipResult { + + private String id; + private String to; + private String from; + private PartyRole role; + private String tokenId; + private ProductInfo product; + private RelationshipState state; + private String pricingPlan; + private InstitutionUpdateResponse institutionUpdate; + private BillingResponse billing; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipsManagement.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipsManagement.java new file mode 100644 index 0000000..17fd472 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RelationshipsManagement.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RelationshipsManagement { + private List items; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RootParentResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RootParentResponse.java new file mode 100644 index 0000000..a7c57cc --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/RootParentResponse.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class RootParentResponse { + private String description; + private String id; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/UserInfoResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/UserInfoResponse.java new file mode 100644 index 0000000..9ccf53a --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/institution/UserInfoResponse.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.web.model.institution; + +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import lombok.Data; + +import java.util.List; + +@Data +public class UserInfoResponse { + + private String id; + private String taxCode; + private String name; + private String surname; + private String email; + private List products; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/BrokerMapper.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/BrokerMapper.java new file mode 100644 index 0000000..99992e2 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/BrokerMapper.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.web.model.institution.BrokerResponse; +import org.mapstruct.Mapper; + +import java.util.List; + +@Mapper(componentModel = "spring") +public interface BrokerMapper { + + BrokerResponse toBroker(Institution institution); + List toBrokers(List institutions); +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/DelegationMapper.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/DelegationMapper.java new file mode 100644 index 0000000..2754ba2 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/DelegationMapper.java @@ -0,0 +1,33 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequest; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequestFromTaxcode; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationResponse; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@Mapper(componentModel = "spring") +public interface DelegationMapper { + + Delegation toDelegation(DelegationRequest delegation); + + Delegation toDelegation(DelegationRequestFromTaxcode delegation); + + @Mapping(source = "from", target = "institutionId") + @Mapping(source = "to", target = "brokerId") + @Mapping(source = "institutionFromName", target = "institutionName") + @Mapping(source = "institutionToName", target = "brokerName") + @Mapping(source = "institutionFromRootName", target = "institutionRootName") + DelegationResponse toDelegationResponse(Delegation delegation); + + @Mapping(source = "from", target = "institutionId") + @Mapping(source = "to", target = "brokerId") + @Mapping(source = "toTaxCode", target = "brokerTaxCode") + @Mapping(source = "fromTaxCode", target = "taxCode") + @Mapping(source = "institutionFromName", target = "institutionName") + @Mapping(source = "institutionToName", target = "brokerName") + @Mapping(source = "institutionFromRootName", target = "institutionRootName") + DelegationResponse toDelegationResponseGet(Delegation delegation); + +} \ No newline at end of file diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustom.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustom.java new file mode 100644 index 0000000..6bec85f --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustom.java @@ -0,0 +1,562 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.model.user.ProductManagerInfo; +import it.pagopa.selfcare.mscore.web.model.institution.*; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardedProducts; +import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.*; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.stream.Collectors; + +@NoArgsConstructor(access = AccessLevel.NONE) +public class InstitutionMapperCustom { + + protected static final BinaryOperator MERGE_FUNCTION = (inst1, inst2) -> inst1.getStatus().compareTo(inst2.getStatus()) < 0 ? inst1 : inst2; + + public static InstitutionManagerResponse toInstitutionManagerResponse(ProductManagerInfo manager, String productId) { + InstitutionManagerResponse institutionManagerResponse = new InstitutionManagerResponse(); + institutionManagerResponse.setFrom(manager.getUserId()); + institutionManagerResponse.setTo(manager.getInstitution().getId()); + + addBillingData(institutionManagerResponse, manager, productId); + addUserManagerData(institutionManagerResponse, manager, productId); + addInstitutionUpdate(institutionManagerResponse, manager.getInstitution()); + + return institutionManagerResponse; + } + + public static InstitutionBillingResponse toInstitutionBillingResponse(Institution institution, String productId) { + if (institution == null) { + return null; + } + InstitutionBillingResponse response = new InstitutionBillingResponse(); + + response.setInstitutionId(institution.getId()); + response.setExternalId(institution.getExternalId()); + response.setDescription(institution.getDescription()); + response.setInstitutionType(institution.getInstitutionType()); + response.setDigitalAddress(institution.getDigitalAddress()); + response.setAddress(institution.getAddress()); + response.setZipCode(institution.getZipCode()); + response.setTaxCode(institution.getTaxCode()); + + response.setSubunitCode(institution.getSubunitCode()); + response.setSubunitType(institution.getSubunitType()); + response.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); + + for (Onboarding onboarding : institution.getOnboarding()) { + if (productId.equalsIgnoreCase(onboarding.getProductId())) { + response.setBilling(toBillingResponse(onboarding.getBilling(), institution)); + response.setPricingPlan(onboarding.getPricingPlan()); + } + } + + return response; + } + + public static InstitutionUpdateResponse toInstitutionUpdateResponse(Institution institution) { + InstitutionUpdateResponse institutionUpdate = new InstitutionUpdateResponse(); + institutionUpdate.setAddress(institution.getAddress()); + institutionUpdate.setInstitutionType(institution.getInstitutionType()); + institutionUpdate.setDescription(institution.getDescription()); + institutionUpdate.setDigitalAddress(institution.getDigitalAddress()); + institutionUpdate.setTaxCode(institution.getTaxCode()); + institutionUpdate.setZipCode(institution.getZipCode()); + institutionUpdate.setPaymentServiceProvider(toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); + institutionUpdate.setDataProtectionOfficer(toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); + if (institution.getGeographicTaxonomies() != null) { + var geoCodes = institution.getGeographicTaxonomies().stream() + .map(InstitutionGeographicTaxonomies::getCode) + .toList(); + institutionUpdate.setGeographicTaxonomyCodes(geoCodes); + } + institutionUpdate.setRea(institution.getRea()); + institutionUpdate.setShareCapital(institution.getShareCapital()); + institutionUpdate.setBusinessRegisterPlace(institution.getBusinessRegisterPlace()); + institutionUpdate.setSupportEmail(institution.getSupportEmail()); + institutionUpdate.setSupportPhone(institution.getSupportPhone()); + institutionUpdate.setImported(institution.isImported()); + + institutionUpdate.setSubunitCode(institution.getSubunitCode()); + institutionUpdate.setSubunitType(institution.getSubunitType()); + institutionUpdate.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); + + return institutionUpdate; + } + + private static void addUserManagerData(InstitutionManagerResponse institutionManagerResponse, ProductManagerInfo manager, String productId) { + for (OnboardedProduct product : manager.getProducts()) { + if (productId.equalsIgnoreCase(product.getProductId())) { + ProductInfo productInfo = new ProductInfo(); + productInfo.setId(productId); + productInfo.setCreatedAt(product.getCreatedAt()); + productInfo.setRole(product.getProductRole()); + if (product.getRole() != null) { + institutionManagerResponse.setRole(product.getRole().name()); + } + institutionManagerResponse.setProduct(productInfo); + institutionManagerResponse.setState(product.getStatus()); + institutionManagerResponse.setCreatedAt(product.getCreatedAt()); + institutionManagerResponse.setUpdatedAt(product.getUpdatedAt()); + institutionManagerResponse.setId(product.getRelationshipId()); + } + } + } + + private static void addInstitutionUpdate(InstitutionManagerResponse institutionManagerResponse, Institution institution) { + InstitutionUpdateResponse institutionUpdate = new InstitutionUpdateResponse(); + institutionUpdate.setInstitutionType(institution.getInstitutionType()); + institutionUpdate.setDescription(institution.getDescription()); + institutionUpdate.setDigitalAddress(institution.getDigitalAddress()); + institutionUpdate.setAddress(institution.getAddress()); + institutionUpdate.setZipCode(institution.getZipCode()); + institutionUpdate.setTaxCode(institution.getTaxCode()); + institutionUpdate.setPaymentServiceProvider(toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); + institutionUpdate.setDataProtectionOfficer(toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); + institutionUpdate.setRea(institution.getRea()); + institutionUpdate.setShareCapital(institution.getShareCapital()); + institutionUpdate.setBusinessRegisterPlace(institution.getBusinessRegisterPlace()); + institutionUpdate.setSupportEmail(institution.getSupportEmail()); + institutionUpdate.setSupportPhone(institution.getSupportPhone()); + institutionUpdate.setImported(institution.isImported()); + institutionUpdate.setSubunitCode(institution.getSubunitCode()); + institutionUpdate.setSubunitType(institution.getSubunitType()); + institutionUpdate.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); + if (institution.getGeographicTaxonomies() != null) { + institutionUpdate.setGeographicTaxonomyCodes(convertToGeoString(institution.getGeographicTaxonomies())); + } + institutionManagerResponse.setInstitutionUpdate(institutionUpdate); + } + + public static InstitutionUpdate toInstitutionUpdate(InstitutionPut institutionPut) { + InstitutionUpdate institutionUpdate = new InstitutionUpdate(); + institutionUpdate.setDescription(institutionPut.getDescription()); + institutionUpdate.setDigitalAddress(institutionPut.getDigitalAddress()); + institutionUpdate.setParentDescription(institutionPut.getParentDescription()); + institutionUpdate.setGeographicTaxonomies(Optional.ofNullable(institutionPut.getGeographicTaxonomyCodes()) + .map(geoTaxonomiesCodes -> geoTaxonomiesCodes.stream() + .map(code -> new InstitutionGeographicTaxonomies(code, null)) + .toList()) + .orElse(null) + ); + + return institutionUpdate; + } + + public static Institution toInstitution(InstitutionRequest request, String externalId) { + Institution institution = new Institution(); + institution.setExternalId(externalId); + institution.setOrigin(request.getOrigin()); + institution.setOriginId(request.getOriginId()); + institution.setInstitutionType(request.getInstitutionType()); + institution.setDescription(request.getDescription()); + institution.setAddress(request.getAddress()); + institution.setDigitalAddress(request.getDigitalAddress()); + institution.setCity(request.getCity()); + institution.setCounty(request.getCounty()); + institution.setCountry(request.getCountry()); + institution.setTaxCode(request.getTaxCode()); + institution.setZipCode(request.getZipCode()); + institution.setGeographicTaxonomies(toGeographicTaxonomies(request.getGeographicTaxonomies())); + institution.setAttributes(toAttributes(request.getAttributes())); + institution.setRea(request.getRea()); + institution.setShareCapital(request.getShareCapital()); + institution.setBusinessRegisterPlace(request.getBusinessRegisterPlace()); + institution.setSupportEmail(request.getSupportEmail()); + institution.setSupportPhone(request.getSupportPhone()); + if (request.getPaymentServiceProvider() != null) + institution.setPaymentServiceProvider(toPaymentServiceProvider(request.getPaymentServiceProvider())); + if (request.getDataProtectionOfficer() != null) + institution.setDataProtectionOfficer(toDataProtectionOfficer(request.getDataProtectionOfficer())); + return institution; + } + + public static Institution toInstitution(PdaInstitutionRequest request, String externalId) { + Institution institution = new Institution(); + institution.setExternalId(externalId); + institution.setDescription(request.getDescription()); + institution.setTaxCode(request.getTaxCode()); + return institution; + } + + private static BillingResponse toBillingResponse(Billing billing, Institution institution) { + BillingResponse billingResponse = new BillingResponse(); + if (billing != null) { + billingResponse.setVatNumber(billing.getVatNumber()); + billingResponse.setTaxCodeInvoicing(billing.getTaxCodeInvoicing()); + billingResponse.setRecipientCode(billing.getRecipientCode()); + billingResponse.setPublicServices(billing.isPublicServices()); + } else if (institution.getBilling() != null) { + billingResponse.setVatNumber(institution.getBilling().getVatNumber()); + billingResponse.setTaxCodeInvoicing(institution.getBilling().getTaxCodeInvoicing()); + billingResponse.setRecipientCode(institution.getBilling().getRecipientCode()); + billingResponse.setPublicServices(institution.getBilling().isPublicServices()); + } + return billingResponse; + } + + public static BillingResponse toBillingResponse(Onboarding onboarding, Institution institution) { + BillingResponse billingResponse = new BillingResponse(); + if (onboarding.getBilling() != null) { + billingResponse.setVatNumber(onboarding.getBilling().getVatNumber()); + billingResponse.setTaxCodeInvoicing(onboarding.getBilling().getTaxCodeInvoicing()); + billingResponse.setRecipientCode(onboarding.getBilling().getRecipientCode()); + billingResponse.setPublicServices(onboarding.getBilling().isPublicServices()); + } else if (institution.getBilling() != null) { + billingResponse.setVatNumber(institution.getBilling().getVatNumber()); + billingResponse.setTaxCodeInvoicing(institution.getBilling().getTaxCodeInvoicing()); + billingResponse.setRecipientCode(institution.getBilling().getRecipientCode()); + billingResponse.setPublicServices(institution.getBilling().isPublicServices()); + } + return billingResponse; + } + + public static Billing getBillingFromOnboarding(Onboarding onboarding, Institution institution) { + return onboarding.getBilling() != null ? onboarding.getBilling() : institution.getBilling(); + } + + public static Billing toBilling(BillingRequest billingRequest) { + Billing billing = new Billing(); + billing.setRecipientCode(billingRequest.getRecipientCode()); + billing.setTaxCodeInvoicing(billingRequest.getTaxCodeInvoicing()); + billing.setVatNumber(billingRequest.getVatNumber()); + billing.setPublicServices(billing.isPublicServices()); + return billing; + } + + private static void addBillingData(InstitutionManagerResponse institutionManagerResponse, ProductManagerInfo manager, String productId) { + for (Onboarding onboarding : manager.getInstitution().getOnboarding()) { + if (productId.equalsIgnoreCase(onboarding.getProductId())) { + institutionManagerResponse.setPricingPlan(onboarding.getPricingPlan()); + if (onboarding.getBilling() != null) + institutionManagerResponse.setBilling(toBillingResponse(onboarding.getBilling(), manager.getInstitution())); + } + } + } + + public static DataProtectionOfficer toDataProtectionOfficer(DataProtectionOfficerRequest request) { + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + if (request != null) { + dataProtectionOfficer.setAddress(request.getAddress()); + dataProtectionOfficer.setEmail(request.getEmail()); + dataProtectionOfficer.setPec(request.getPec()); + } + return dataProtectionOfficer; + } + + public static DataProtectionOfficerResponse toDataProtectionOfficerResponse(DataProtectionOfficer dataProtectionOfficer) { + DataProtectionOfficerResponse response = null; + if (dataProtectionOfficer != null) { + response = new DataProtectionOfficerResponse(); + response.setPec(dataProtectionOfficer.getPec()); + response.setEmail(dataProtectionOfficer.getEmail()); + response.setAddress(dataProtectionOfficer.getAddress()); + } + return response; + } + + public static PaymentServiceProvider toPaymentServiceProvider(PaymentServiceProviderRequest request) { + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + if (request != null) { + paymentServiceProvider.setAbiCode(request.getAbiCode()); + paymentServiceProvider.setVatNumberGroup(request.isVatNumberGroup()); + paymentServiceProvider.setBusinessRegisterNumber(request.getBusinessRegisterNumber()); + paymentServiceProvider.setLegalRegisterNumber(request.getLegalRegisterNumber()); + paymentServiceProvider.setLegalRegisterName(request.getLegalRegisterName()); + } + return paymentServiceProvider; + } + + public static PaymentServiceProviderResponse toPaymentServiceProviderResponse(PaymentServiceProvider paymentServiceProvider) { + PaymentServiceProviderResponse response = null; + if (paymentServiceProvider != null) { + response = new PaymentServiceProviderResponse(); + response.setAbiCode(paymentServiceProvider.getAbiCode()); + response.setLegalRegisterName(paymentServiceProvider.getLegalRegisterName()); + response.setBusinessRegisterNumber(paymentServiceProvider.getBusinessRegisterNumber()); + response.setVatNumberGroup(paymentServiceProvider.isVatNumberGroup()); + response.setLegalRegisterNumber(paymentServiceProvider.getLegalRegisterNumber()); + } + return response; + } + + public static List toAttributes(List attributes) { + List response = new ArrayList<>(); + if (attributes != null) { + for (AttributesRequest a : attributes) { + Attributes attribute = new Attributes(); + attribute.setCode(a.getCode()); + attribute.setDescription(a.getDescription()); + attribute.setOrigin(a.getOrigin()); + response.add(attribute); + } + } + return response; + } + + public static List toAttributeResponse(List attributes) { + List list = new ArrayList<>(); + if (attributes != null && !attributes.isEmpty()) { + for (Attributes a : attributes) { + AttributesResponse response = new AttributesResponse(); + response.setCode(a.getCode()); + response.setOrigin(a.getOrigin()); + response.setDescription(a.getDescription()); + list.add(response); + } + } + return list; + } + + + private static List toGeographicTaxonomies(List request) { + List response = new ArrayList<>(); + if (request != null && !request.isEmpty()) { + for (GeoTaxonomies g : request) { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(g.getCode(), g.getDesc()); + response.add(geographicTaxonomies); + } + } + return response; + } + + public static List toGeoTaxonomies(List geographicTaxonomies) { + List list = new ArrayList<>(); + if (geographicTaxonomies != null) { + for (InstitutionGeographicTaxonomies g : geographicTaxonomies) { + GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); + geoTaxonomies.setCode(g.getCode()); + geoTaxonomies.setDesc(g.getDesc()); + list.add(geoTaxonomies); + } + } + return list; + } + + private static List convertToGeoString(List geographicTaxonomies) { + List list = new ArrayList<>(); + geographicTaxonomies.forEach(g -> list.add(g.getCode())); + return list; + } + + public static OnboardedProducts toOnboardedProducts(List page) { + OnboardedProducts onboardedProducts = new OnboardedProducts(); + onboardedProducts.setProducts(toInstitutionProduct(page)); + return onboardedProducts; + } + + public static List toInstitutionProduct(List onboardings) { + if (onboardings == null) { + return Collections.emptyList(); + } + return onboardings.stream().map(onboarding -> { + InstitutionProduct product = new InstitutionProduct(); + product.setId(onboarding.getProductId()); + product.setState(onboarding.getStatus()); + return product; + }).toList(); + } + + public static InstitutionManagementResponse toInstitutionManagementResponse(Institution institution) { + InstitutionManagementResponse response = new InstitutionManagementResponse(); + response.setId(institution.getId()); + response.setExternalId(institution.getExternalId()); + response.setOrigin(institution.getOrigin()); + response.setOriginId(institution.getOriginId()); + response.setDescription(institution.getDescription()); + response.setInstitutionType(institution.getInstitutionType()); + response.setDigitalAddress(institution.getDigitalAddress()); + response.setAddress(institution.getAddress()); + response.setZipCode(institution.getZipCode()); + response.setTaxCode(institution.getTaxCode()); + if (institution.getOnboarding() != null) { + response.setProducts(toProductsMap(institution.getOnboarding(), institution)); + } + if (institution.getGeographicTaxonomies() != null) { + response.setGeographicTaxonomies(toGeoTaxonomies(institution.getGeographicTaxonomies())); + } + if (institution.getAttributes() != null) { + response.setAttributes(toAttributeResponse(institution.getAttributes())); + } + if (institution.getPaymentServiceProvider() != null) { + response.setPaymentServiceProvider(toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); + } + if (institution.getDataProtectionOfficer() != null) { + response.setDataProtectionOfficer(toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); + } + response.setRea(institution.getRea()); + response.setShareCapital(institution.getShareCapital()); + response.setBusinessRegisterPlace(institution.getBusinessRegisterPlace()); + response.setSupportEmail(institution.getSupportEmail()); + response.setSupportPhone(institution.getSupportPhone()); + response.setImported(institution.isImported()); + response.setCreatedAt(institution.getCreatedAt()); + response.setUpdatedAt(institution.getUpdatedAt()); + return response; + } + + public static InstitutionOnboardingResponse toInstitutionOnboardingResponse(Institution institution) { + InstitutionOnboardingResponse response = new InstitutionOnboardingResponse(); + response.setId(institution.getId()); + response.setExternalId(institution.getExternalId()); + response.setOrigin(institution.getOrigin()); + response.setOriginId(institution.getOriginId()); + response.setDescription(institution.getDescription()); + response.setInstitutionType(institution.getInstitutionType()); + response.setDigitalAddress(institution.getDigitalAddress()); + response.setAddress(institution.getAddress()); + response.setZipCode(institution.getZipCode()); + response.setTaxCode(institution.getTaxCode()); + if (institution.getOnboarding() != null) { + response.setOnboardings(toOnboardingMap(institution.getOnboarding(), institution)); + } + if (institution.getGeographicTaxonomies() != null) { + response.setGeographicTaxonomies(toGeoTaxonomies(institution.getGeographicTaxonomies())); + } + if (institution.getAttributes() != null) { + response.setAttributes(toAttributeResponse(institution.getAttributes())); + } + if (institution.getPaymentServiceProvider() != null) { + response.setPaymentServiceProvider(toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); + } + if (institution.getDataProtectionOfficer() != null) { + response.setDataProtectionOfficer(toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); + } + response.setRea(institution.getRea()); + response.setShareCapital(institution.getShareCapital()); + response.setBusinessRegisterPlace(institution.getBusinessRegisterPlace()); + response.setSupportEmail(institution.getSupportEmail()); + response.setSupportPhone(institution.getSupportPhone()); + response.setImported(institution.isImported()); + response.setCreatedAt(institution.getCreatedAt()); + response.setUpdatedAt(institution.getUpdatedAt()); + response.setSubunitCode(institution.getSubunitCode()); + response.setSubunitType(institution.getSubunitType()); + response.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); + return response; + } + + public static List toInstitutionListResponse(List institutions) { + List list = new ArrayList<>(); + for (Institution institution : institutions) { + InstitutionManagementResponse response = toInstitutionManagementResponse(institution); + list.add(response); + } + return list; + } + + private static Map toProductsMap(List onboarding, Institution institution) { + Map map = new HashMap<>(); + if (onboarding != null) { + for (Onboarding o : onboarding) { + ProductsManagement productsManagement = new ProductsManagement(); + productsManagement.setProduct(o.getProductId()); + productsManagement.setPricingPlan(o.getPricingPlan()); + productsManagement.setBilling(toBillingResponse(o.getBilling(), institution)); + map.put(o.getProductId(), productsManagement); + } + } + return map; + } + + private static Map toOnboardingMap(List onboarding, Institution institution) { + Map map = new HashMap<>(); + if (onboarding != null) { + for (Onboarding o : onboarding) { + OnboardingResponse onboardingResponse = new OnboardingResponse(); + onboardingResponse.setProductId(o.getProductId()); + onboardingResponse.setTokenId(o.getTokenId()); + onboardingResponse.setStatus(o.getStatus()); + onboardingResponse.setContract(o.getContract()); + onboardingResponse.setPricingPlan(o.getPricingPlan()); + onboardingResponse.setBilling(toBillingResponse(o.getBilling(), institution)); + onboardingResponse.setCreatedAt(o.getCreatedAt()); + onboardingResponse.setUpdatedAt(o.getUpdatedAt()); + onboardingResponse.setClosedAt(o.getClosedAt()); + onboardingResponse.setIsAggregator(o.getIsAggregator()); + if (!map.containsKey(o.getProductId()) || + map.containsKey(o.getProductId()) && map.get(o.getProductId()).getStatus() != RelationshipState.ACTIVE) { + map.put(o.getProductId(), onboardingResponse); + } + } + } + return map; + } + + public static List toInstitutionAttributeResponse(List attributes, String institutionId) { + List list = toAttributeResponse(attributes); + if (list.isEmpty()) { + throw new ResourceNotFoundException(String.format("Attributes for institution %s not found", institutionId), "0000"); + } + return list; + } + + public static List toInstitutionToOnboardList(List validInstitutions) { + return validInstitutions.stream() + .map(InstitutionMapperCustom::toInstitutionToOnboard) + .toList(); + } + + public static InstitutionToOnboard toInstitutionToOnboard(ValidInstitution validInstitutions) { + InstitutionToOnboard institution = new InstitutionToOnboard(); + institution.setDescription(validInstitutions.getDescription()); + institution.setId(validInstitutions.getId()); + return institution; + } + + public static List toValidInstitutions(List institutions) { + return institutions.stream() + .map(institutionToOnboard -> new ValidInstitution(institutionToOnboard.getId(), institutionToOnboard.getDescription())) + .toList(); + } + + public static BulkInstitutions toBulkInstitutions(List institution, List idsRequest) { + BulkInstitutions bulkInstitutions = new BulkInstitutions(); + bulkInstitutions.setFound(institution.stream() + .map(InstitutionMapperCustom::toBulkInstitution) + .toList()); + bulkInstitutions.setNotFound(idsRequest.stream() + .filter(s -> institution.stream().noneMatch(inst -> inst.getId().equalsIgnoreCase(s))) + .toList()); + return bulkInstitutions; + } + + private static BulkInstitution toBulkInstitution(Institution inst) { + BulkInstitution bulkInstitution = new BulkInstitution(); + bulkInstitution.setId(inst.getId()); + bulkInstitution.setExternalId(inst.getExternalId()); + bulkInstitution.setOrigin(inst.getOrigin()); + bulkInstitution.setOriginId(inst.getOriginId()); + bulkInstitution.setDescription(inst.getDescription()); + bulkInstitution.setInstitutionType(inst.getInstitutionType()); + bulkInstitution.setDigitalAddress(inst.getDigitalAddress()); + bulkInstitution.setAddress(inst.getAddress()); + bulkInstitution.setZipCode(inst.getZipCode()); + bulkInstitution.setTaxCode(inst.getTaxCode()); + bulkInstitution.setAttributes(toAttributeResponse(inst.getAttributes())); + bulkInstitution.setProducts(toBulkProductMap(inst.getOnboarding(), inst)); + return bulkInstitution; + } + + private static Map toBulkProductMap(List onboarding, Institution institution) { + if(onboarding != null && !onboarding.isEmpty()) { + return onboarding.stream().map(onb -> { + BulkProduct bulkProduct = new BulkProduct(); + bulkProduct.setProduct(onb.getProductId()); + bulkProduct.setPricingPlan(onb.getPricingPlan()); + bulkProduct.setBilling(toBillingResponse(onb.getBilling(), institution)); + bulkProduct.setStatus(onb.getStatus()); + return bulkProduct; + }).collect(Collectors.toMap(BulkProduct::getProduct, Function.identity(), MERGE_FUNCTION)); + } + return Collections.emptyMap(); + } +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionResourceMapper.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionResourceMapper.java new file mode 100644 index 0000000..7a75b61 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionResourceMapper.java @@ -0,0 +1,40 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + + +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; +import it.pagopa.selfcare.mscore.web.model.institution.BillingRequest; +import it.pagopa.selfcare.mscore.web.model.institution.GeoTaxonomies; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionResponse; +import it.pagopa.selfcare.mscore.web.model.institution.RootParentResponse; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; +import org.springframework.util.StringUtils; + +@Mapper(componentModel = "spring") +public interface InstitutionResourceMapper { + + @Mapping(target = "aooParentCode", source = "paAttributes.aooParentCode") + @Mapping(target = "rootParent", source = ".", qualifiedByName = "setRootParent") + InstitutionResponse toInstitutionResponse(Institution institution); + + @Named("setRootParent") + static RootParentResponse setRootParent(Institution institution) { + if(StringUtils.hasText(institution.getRootParentId())){ + RootParentResponse rootParentResponse = new RootParentResponse(); + rootParentResponse.setId(institution.getRootParentId()); + rootParentResponse.setDescription(institution.getParentDescription()); + return rootParentResponse; + } + return null; + } + + + Billing billingRequestToBilling(BillingRequest billingRequest); + + InstitutionGeographicTaxonomies toInstitutionGeographicTaxonomies(GeoTaxonomies geoTaxonomies); + + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionUpdateMapper.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionUpdateMapper.java new file mode 100644 index 0000000..bbd1b00 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionUpdateMapper.java @@ -0,0 +1,29 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + + +import it.pagopa.selfcare.mscore.model.institution.InstitutionGeographicTaxonomies; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionUpdateRequest; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@Mapper(componentModel = "spring") +public interface InstitutionUpdateMapper { + + @Mapping(target = "geographicTaxonomies", source = "geographicTaxonomyCodes", qualifiedByName = "toGeographicTaxonomies") + InstitutionUpdate toInstitutionUpdate(InstitutionUpdateRequest request); + + @Named("toGeographicTaxonomies") + default List toGeographicTaxonomies(List geographicTaxonomyCodes) { + return Optional.ofNullable(geographicTaxonomyCodes) + .map(item -> geographicTaxonomyCodes.stream() + .map(code -> new InstitutionGeographicTaxonomies(code,null)) + .collect(Collectors.toList())) + .orElse(null); + } +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapper.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapper.java new file mode 100644 index 0000000..df93cc3 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapper.java @@ -0,0 +1,145 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import it.pagopa.selfcare.mscore.constant.TokenType; +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.institution.PaAttributes; +import it.pagopa.selfcare.mscore.model.onboarding.*; +import it.pagopa.selfcare.mscore.web.model.onboarding.*; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +@NoArgsConstructor(access = AccessLevel.NONE) +public class OnboardingMapper { + + private static UserMapper userMapper = new UserMapperImpl(); + + private static Contract toContract(ContractRequest request) { + Contract contract = new Contract(); + if (request != null) { + contract.setPath(request.getPath()); + contract.setVersion(request.getVersion()); + } + return contract; + } + + public static OnboardingInfoResponse toUserInfoResponse(String userId, List onboardingInfos) { + OnboardingInfoResponse response = new OnboardingInfoResponse(); + response.setUserId(userId); + List institutionResponseList = new ArrayList<>(); + if(Objects.nonNull(onboardingInfos)) { + onboardingInfos.forEach(onboardingInfo -> { + institutionResponseList.add(constructOnboardedInstitutionResponse(onboardingInfo.getInstitution(), + onboardingInfo.getBinding().getProducts())); + }); + } + response.setInstitutions(institutionResponseList); + return response; + } + + public static OnboardingInfoResponse toOnboardingInfoResponse(String userId, List onboardingInfos) { + OnboardingInfoResponse response = new OnboardingInfoResponse(); + response.setUserId(userId); + List institutionResponseList = new ArrayList<>(); + if(Objects.nonNull(onboardingInfos)) { + onboardingInfos.stream() + .filter(item -> Objects.nonNull(item.getInstitution()) && Objects.nonNull(item.getInstitution().getOnboarding()) + && Objects.nonNull(item.getBinding())) + .forEach(onboardingInfo -> onboardingInfo.getInstitution().getOnboarding().stream() + .filter(onboarding -> onboarding.getProductId().equalsIgnoreCase(onboardingInfo.getBinding().getProducts().getProductId()) + && onboarding.getStatus().equals(onboardingInfo.getBinding().getProducts().getStatus())) + .findFirst() + .ifPresent(onboarding -> institutionResponseList.add(constructOnboardedInstitutionResponse(onboardingInfo.getInstitution(), + onboardingInfo.getBinding().getProducts(), + onboarding))) + ); + } + response.setInstitutions(institutionResponseList); + return response; + } + + private static OnboardedInstitutionResponse constructOnboardedInstitutionResponse(Institution institution, OnboardedProduct product, Onboarding onboarding) { + OnboardedInstitutionResponse institutionResponse = constructOnboardedInstitutionResponse(institution, product); + institutionResponse.setPricingPlan(onboarding.getPricingPlan()); + Billing billing = InstitutionMapperCustom.getBillingFromOnboarding(onboarding, institution); + institutionResponse.setBilling(billing); + return institutionResponse; + } + + private static OnboardedInstitutionResponse constructOnboardedInstitutionResponse(Institution institution, OnboardedProduct product) { + OnboardedInstitutionResponse institutionResponse = new OnboardedInstitutionResponse(); + institutionResponse.setId(institution.getId()); + institutionResponse.setExternalId(institution.getExternalId()); + institutionResponse.setOrigin(institution.getOrigin()); + institutionResponse.setOriginId(institution.getOriginId()); + institutionResponse.setDescription(institution.getDescription()); + institutionResponse.setInstitutionType(institution.getInstitutionType()); + institutionResponse.setDigitalAddress(institution.getDigitalAddress()); + institutionResponse.setAddress(institution.getAddress()); + institutionResponse.setZipCode(institution.getZipCode()); + institutionResponse.setTaxCode(institution.getTaxCode()); + if (institution.getGeographicTaxonomies() != null) { + institutionResponse.setGeographicTaxonomies(InstitutionMapperCustom.toGeoTaxonomies(institution.getGeographicTaxonomies())); + } + if (institution.getAttributes() != null) { + institutionResponse.setAttributes(InstitutionMapperCustom.toAttributeResponse(institution.getAttributes())); + } + ProductInfo productInfo = new ProductInfo(); + productInfo.setRole(product.getProductRole()); + productInfo.setId(product.getProductId()); + productInfo.setCreatedAt(product.getCreatedAt()); + if(Objects.nonNull(product.getStatus())){ + productInfo.setStatus(product.getStatus().name()); + } + institutionResponse.setState(product.getStatus().name()); + institutionResponse.setRole(product.getRole()); + institutionResponse.setProductInfo(productInfo); + institutionResponse.setBusinessData(new BusinessData(institution.getRea(), institution.getShareCapital(), institution.getBusinessRegisterPlace())); + institutionResponse.setSupportContact(new SupportContact(institution.getSupportEmail(), institution.getSupportPhone())); + institutionResponse.setPaymentServiceProvider(InstitutionMapperCustom.toPaymentServiceProviderResponse(institution.getPaymentServiceProvider())); + institutionResponse.setDataProtectionOfficer(InstitutionMapperCustom.toDataProtectionOfficerResponse(institution.getDataProtectionOfficer())); + institutionResponse.setParentDescription(institution.getParentDescription()); + institutionResponse.setRootParentId(institution.getRootParentId()); + institutionResponse.setSubunitCode(institution.getSubunitCode()); + institutionResponse.setSubunitType(institution.getSubunitType()); + institutionResponse.setAooParentCode(Optional.ofNullable(institution.getPaAttributes()).map(PaAttributes::getAooParentCode).orElse(null)); + + return institutionResponse; + } + + public static OnboardingOperatorsRequest toOnboardingOperatorRequest(OnboardingInstitutionOperatorsRequest onboardingInstitutionOperatorsRequest) { + OnboardingOperatorsRequest request = new OnboardingOperatorsRequest(); + request.setInstitutionId(onboardingInstitutionOperatorsRequest.getInstitutionId()); + request.setProductId(onboardingInstitutionOperatorsRequest.getProductId()); + request.setProductTitle(onboardingInstitutionOperatorsRequest.getProductTitle()); + request.setUsers(Optional.ofNullable(onboardingInstitutionOperatorsRequest.getUsers()) + .map(list -> list.stream().map(userMapper::toUserToOnboard).collect(Collectors.toList())) + .orElse(List.of()) + ); + return request; + } + + public static OnboardingLegalsRequest toOnboardingLegalsRequest(OnboardingInstitutionLegalsRequest onboardingInstitutionLegalsRequest) { + OnboardingLegalsRequest request = new OnboardingLegalsRequest(); + request.setTokenType(TokenType.LEGALS); + request.setProductId(onboardingInstitutionLegalsRequest.getProductId()); + request.setProductName(onboardingInstitutionLegalsRequest.getProductName()); + request.setUsers(Optional.ofNullable(onboardingInstitutionLegalsRequest.getUsers()) + .map(list -> list.stream().map(userMapper::toUserToOnboard).collect(Collectors.toList())) + .orElse(List.of()) + ); + request.setInstitutionExternalId(onboardingInstitutionLegalsRequest.getInstitutionExternalId()); + request.setInstitutionId(onboardingInstitutionLegalsRequest.getInstitutionId()); + request.setContract(toContract(onboardingInstitutionLegalsRequest.getContract())); + request.setSignContract(onboardingInstitutionLegalsRequest.isSignContract()); + return request; + } + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingResourceMapper.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingResourceMapper.java new file mode 100644 index 0000000..c6eb299 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingResourceMapper.java @@ -0,0 +1,49 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + + +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardingRequest; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardingUsersRequest; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionOnboardingRequest; +import it.pagopa.selfcare.mscore.web.model.institution.OnboardingResponse; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardingInstitutionRequest; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardingInstitutionUsersRequest; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; + +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.util.Optional; + +@Mapper(componentModel = "spring", uses = {InstitutionUpdateMapper.class}) +public interface OnboardingResourceMapper { + + OnboardingResponse toResponse(Onboarding onboarding); + + @Mapping(target = "contractFilePath", source = "contractImported.filePath") + @Mapping(target = "contractCreatedAt", source = "contractImported.createdAt") + @Mapping(target = "billingRequest", source = "billing") + @Mapping(target = "signContract", source = "signContract", qualifiedByName = "mapSignContract") + @Mapping(target = "contractActivatedAt", source = "contractImported.activatedAt") + OnboardingRequest toOnboardingRequest(OnboardingInstitutionRequest onboardingInstitutionRequest); + + OnboardingUsersRequest toOnboardingUsersRequest(OnboardingInstitutionUsersRequest request); + + @Named("mapSignContract") + default Boolean mapSignContract(Boolean signContract) { + return Optional.ofNullable(signContract).orElse(true); + } + + @Mapping(target = "contract", source = "contractPath") + @Mapping(target = "createdAt", source = "activatedAt") + Onboarding toOnboarding(InstitutionOnboardingRequest onboardingRequest); + + @Named("toOffsetDateTime") + default OffsetDateTime toOffsetDateTime(LocalDateTime date) { + return Optional.ofNullable(date) + .map(ld -> ld.atZone(ZoneOffset.systemDefault()).toOffsetDateTime()) + .orElse(null); + } +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapper.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapper.java new file mode 100644 index 0000000..2e2d48c --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapper.java @@ -0,0 +1,60 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import it.pagopa.selfcare.mscore.model.user.RelationshipInfo; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.web.model.institution.RelationshipResult; +import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.NONE) +public class RelationshipMapper { + + public static RelationshipResult toRelationshipResult(RelationshipInfo info) { + + RelationshipResult relationshipResult = new RelationshipResult(); + if (info.getOnboardedProduct() != null) { + relationshipResult.setId(info.getOnboardedProduct().getRelationshipId()); + relationshipResult.setState(info.getOnboardedProduct().getStatus()); + relationshipResult.setRole(info.getOnboardedProduct().getRole()); + + ProductInfo productInfo = new ProductInfo(); + productInfo.setId(info.getOnboardedProduct().getProductId()); + productInfo.setCreatedAt(info.getOnboardedProduct().getCreatedAt()); + productInfo.setRole(info.getOnboardedProduct().getProductRole()); + + relationshipResult.setProduct(productInfo); + } + relationshipResult.setFrom(info.getUserId()); + relationshipResult.setTo(info.getInstitution().getId()); + + if (info.getInstitution() != null) { + relationshipResult.setInstitutionUpdate(InstitutionMapperCustom.toInstitutionUpdateResponse(info.getInstitution())); + } + + addInstitutionOnboardingData(info, relationshipResult); + return relationshipResult; + } + + private static void addInstitutionOnboardingData(RelationshipInfo info, RelationshipResult relationshipResult) { + if (info.getInstitution().getOnboarding() != null) { + for (Onboarding onboarding : info.getInstitution().getOnboarding()) { + if (onboarding.getProductId().equalsIgnoreCase(info.getOnboardedProduct().getProductId())) { + relationshipResult.setPricingPlan(onboarding.getPricingPlan()); + relationshipResult.setBilling(InstitutionMapperCustom.toBillingResponse(onboarding, info.getInstitution())); + } + } + } + } + + public static List toRelationshipResultList(List relationshipInfoList) { + List relationshipResults = new ArrayList<>(); + for (RelationshipInfo info : relationshipInfoList) { + relationshipResults.add(toRelationshipResult(info)); + } + return relationshipResults; + } +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/UserMapper.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/UserMapper.java new file mode 100644 index 0000000..d5eddec --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/mapper/UserMapper.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + + +import it.pagopa.selfcare.mscore.model.user.UserToOnboard; +import it.pagopa.selfcare.mscore.web.model.user.Person; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface UserMapper { + + UserToOnboard toUserToOnboard(Person p); +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/BusinessData.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/BusinessData.java new file mode 100644 index 0000000..2666613 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/BusinessData.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BusinessData { + private String rea; + private String shareCapital; + private String businessRegisterPlace; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ContractRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ContractRequest.java new file mode 100644 index 0000000..92b9425 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ContractRequest.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +@Data +public class ContractRequest { + private String version; + + @NotEmpty(message = "contract path is required") + private String path; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/LegalsResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/LegalsResponse.java new file mode 100644 index 0000000..46d21bf --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/LegalsResponse.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.Env; +import lombok.Data; + +@Data +public class LegalsResponse { + private String partyId; + private String relationshipId; + private PartyRole role; + private Env env; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedInstitutionResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedInstitutionResponse.java new file mode 100644 index 0000000..5350b61 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedInstitutionResponse.java @@ -0,0 +1,46 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.web.model.institution.AttributesResponse; +import it.pagopa.selfcare.mscore.web.model.institution.DataProtectionOfficerResponse; +import it.pagopa.selfcare.mscore.web.model.institution.GeoTaxonomies; +import it.pagopa.selfcare.mscore.web.model.institution.PaymentServiceProviderResponse; +import lombok.Data; + +import java.util.List; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class OnboardedInstitutionResponse { + + private String id; + private String externalId; + private String originId; + private String description; + private String origin; + private InstitutionType institutionType; + private String digitalAddress; + private String address; + private String zipCode; + private String taxCode; + private String pricingPlan; + private Billing billing; + private List geographicTaxonomies; + private List attributes; + private String state; + private PartyRole role; + private ProductInfo productInfo; + private BusinessData businessData; + private SupportContact supportContact; + private PaymentServiceProviderResponse paymentServiceProvider; + private DataProtectionOfficerResponse dataProtectionOfficer; + private String parentDescription; + private String rootParentId; + private String subunitCode; + private String subunitType; + private String aooParentCode; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProductResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProductResponse.java new file mode 100644 index 0000000..f1e0828 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProductResponse.java @@ -0,0 +1,21 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.web.model.institution.BillingResponse; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OnboardedProductResponse { + private String productId; + private RelationshipState status; + private BillingResponse billing; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private Boolean isAggregator; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProducts.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProducts.java new file mode 100644 index 0000000..e484e37 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardedProducts.java @@ -0,0 +1,11 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionProduct; +import lombok.Data; + +import java.util.List; + +@Data +public class OnboardedProducts { + private List products; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingImportContract.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingImportContract.java new file mode 100644 index 0000000..7f4099f --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingImportContract.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.OffsetDateTime; + +@Data +public class OnboardingImportContract { + + private String fileName; + private String filePath; + private String contractType; + private OffsetDateTime createdAt; + private OffsetDateTime activatedAt; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInfoResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInfoResponse.java new file mode 100644 index 0000000..a56b704 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInfoResponse.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.util.List; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class OnboardingInfoResponse { + private String userId; + private List institutions; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionLegalsRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionLegalsRequest.java new file mode 100644 index 0000000..d106a10 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionLegalsRequest.java @@ -0,0 +1,33 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import it.pagopa.selfcare.mscore.web.model.user.Person; +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class OnboardingInstitutionLegalsRequest { + + @NotEmpty(message = "productId is required") + private String productId; + + private String productName; + + @NotEmpty(message = "at least one user is required") + private List users; + + private String institutionExternalId; + + @NotEmpty(message = "institutionId is required") + private String institutionId; + + @Valid + @NotNull(message = "contract is required") + private ContractRequest contract; + + private boolean signContract; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionOperatorsRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionOperatorsRequest.java new file mode 100644 index 0000000..5d5f1e5 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionOperatorsRequest.java @@ -0,0 +1,24 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import it.pagopa.selfcare.mscore.web.model.user.Person; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +@Data +public class OnboardingInstitutionOperatorsRequest { + + @NotEmpty(message = "productId is required") + private String productId; + + @NotEmpty(message = "productTitle is required") + private String productTitle; + + @NotEmpty(message = "at least one user is required") + private List users; + + @NotEmpty(message = "InstitutionId is required") + private String institutionId; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionRequest.java new file mode 100644 index 0000000..59352b7 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionRequest.java @@ -0,0 +1,40 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import io.swagger.annotations.ApiModelProperty; +import it.pagopa.selfcare.mscore.web.model.institution.BillingRequest; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionUpdateRequest; +import it.pagopa.selfcare.mscore.web.model.user.Person; +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class OnboardingInstitutionRequest { + + @NotEmpty(message = "productId is required") + private String productId; + + private String productName; + + @NotEmpty(message = "at least one user is required") + private List users; + + @NotEmpty(message = "Institution externalId is required") + private String institutionExternalId; + + @NotNull(message = "institutionData is required") + @Valid + private InstitutionUpdateRequest institutionUpdate; + + private String pricingPlan; + private BillingRequest billing; + private ContractRequest contract; + private OnboardingImportContract contractImported; + private Boolean signContract; + @ApiModelProperty(value = "${swagger.mscore.onboarding.complete.model.sendCompleteOnboardingEmail}") + private Boolean sendCompleteOnboardingEmail; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionUsersRequest.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionUsersRequest.java new file mode 100644 index 0000000..9904b7d --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/OnboardingInstitutionUsersRequest.java @@ -0,0 +1,24 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import it.pagopa.selfcare.mscore.web.model.user.Person; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +@Data +public class OnboardingInstitutionUsersRequest { + + @NotEmpty(message = "productId is required") + private String productId; + + @NotEmpty(message = "at least one user is required") + private List users; + + @NotEmpty(message = "InstitutionId is required") + private String institutionTaxCode; + + private String institutionSubunitCode; + private Boolean sendCreateUserNotificationEmail = Boolean.TRUE; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ProductInfo.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ProductInfo.java new file mode 100644 index 0000000..1ce4325 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/ProductInfo.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ProductInfo { + private String id; + private String role; + private OffsetDateTime createdAt; + private String status; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/SupportContact.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/SupportContact.java new file mode 100644 index 0000000..27a6497 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/SupportContact.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SupportContact { + private String supportEmail; + private String supportPhone; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenListResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenListResponse.java new file mode 100644 index 0000000..c9a2df4 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenListResponse.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import it.pagopa.selfcare.mscore.model.onboarding.TokenUser; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class TokenListResponse { + List items; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenResponse.java new file mode 100644 index 0000000..f705d60 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/onboarding/TokenResponse.java @@ -0,0 +1,40 @@ +package it.pagopa.selfcare.mscore.web.model.onboarding; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.institution.InstitutionUpdate; +import it.pagopa.selfcare.mscore.model.onboarding.TokenUser; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class TokenResponse { + private String id; + private String checksum; + private List legals = new ArrayList<>(); + private RelationshipState status; + private String institutionId; + private String productId; + private OffsetDateTime expiringDate; + private String contractVersion; + private String contractTemplate; + private String contractSigned; + private String contentType; + private List users; + private InstitutionUpdate institutionUpdate; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; + private OffsetDateTime closedAt; + + public TokenResponse(String id) { + this.id = id; + } +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/InstitutionToNotifyResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/InstitutionToNotifyResponse.java new file mode 100644 index 0000000..add171f --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/InstitutionToNotifyResponse.java @@ -0,0 +1,33 @@ +package it.pagopa.selfcare.mscore.web.model.token; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.model.RootParent; +import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class InstitutionToNotifyResponse { + + private InstitutionType institutionType; + private String description; + private String digitalAddress; + private String address; + private String taxCode; + private String origin; + private String originId; + private String zipCode; + private PaymentServiceProvider paymentServiceProvider; + private String istatCode; + private String city; + private String country; + private String county; + private String subUnitCode; + private String category; + private String subUnitType; + private RootParent rootParent; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/ScContractResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/ScContractResponse.java new file mode 100644 index 0000000..f2001ae --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/token/ScContractResponse.java @@ -0,0 +1,30 @@ +package it.pagopa.selfcare.mscore.web.model.token; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.mscore.model.QueueEvent; +import it.pagopa.selfcare.mscore.web.model.institution.BillingResponse; +import lombok.Data; + +import java.time.OffsetDateTime; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ScContractResponse { + + private String id; + private String internalIstitutionID; + private String product; + private String state; + private String filePath; + private String fileName; + private String contentType; + private String onboardingTokenId; + private String pricingPlan; + private InstitutionToNotifyResponse institution; + private BillingResponse billing; + private OffsetDateTime createdAt; + private OffsetDateTime closedAt; + private OffsetDateTime updatedAt; + private QueueEvent notificationType; + +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/InstitutionProducts.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/InstitutionProducts.java new file mode 100644 index 0000000..173ae8d --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/InstitutionProducts.java @@ -0,0 +1,14 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import lombok.Data; + +import java.util.List; + +@Data +public class InstitutionProducts { + + private String institutionId; + private String institutionName; + private String institutionRootName; + private List products; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/OnboardedUsersResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/OnboardedUsersResponse.java new file mode 100644 index 0000000..b98f48c --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/OnboardedUsersResponse.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Data +@Builder +public class OnboardedUsersResponse { + private List users; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Person.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Person.java new file mode 100644 index 0000000..f8c3410 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Person.java @@ -0,0 +1,34 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import com.fasterxml.jackson.annotation.JsonInclude; +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.Env; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; + +@Data +@Valid +@JsonInclude(JsonInclude.Include.NON_NULL) +@AllArgsConstructor +@NoArgsConstructor +public class Person { + + @NotEmpty(message = "User internal id is required") + private String id; + private String taxCode; + private String name; + private String surname; + private String email; + private PartyRole role; + private String productRole; + private Env env = Env.ROOT; + private String roleLabel; + + public Person(String id) { + this.id = id; + } +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/PersonId.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/PersonId.java new file mode 100644 index 0000000..af2a684 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/PersonId.java @@ -0,0 +1,13 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PersonId { + + private String id; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Product.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Product.java new file mode 100644 index 0000000..46e3589 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/Product.java @@ -0,0 +1,24 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.mscore.constant.Env; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import lombok.Data; + +import java.time.OffsetDateTime; + +import static it.pagopa.selfcare.mscore.constant.Env.ROOT; + +@Data +public class Product { + + private String productId; + private String tokenId; + private RelationshipState status; + private String contract; + private String productRole; + private PartyRole role; + private Env env = ROOT; + private OffsetDateTime createdAt; + private OffsetDateTime updatedAt; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCount.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCount.java new file mode 100644 index 0000000..feac00a --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCount.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import lombok.Data; + +@Data +public class ProductCount { + private String productId; + private Integer count; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCountResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCountResponse.java new file mode 100644 index 0000000..274dd99 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/ProductCountResponse.java @@ -0,0 +1,16 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ProductCountResponse { + List products; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserProductsResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserProductsResponse.java new file mode 100644 index 0000000..33706d8 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserProductsResponse.java @@ -0,0 +1,18 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UserProductsResponse { + + private String id; + private List bindings; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserResponse.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserResponse.java new file mode 100644 index 0000000..3a4a178 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/model/user/UserResponse.java @@ -0,0 +1,27 @@ +package it.pagopa.selfcare.mscore.web.model.user; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; + +@Data +@Valid +@JsonInclude(JsonInclude.Include.NON_NULL) +@AllArgsConstructor +@NoArgsConstructor +public class UserResponse { + + @NotEmpty(message = "User internal id is required") + private String id; + private String taxCode; + @NotBlank + private String name; + @NotBlank + private String surname; + private String email; +} diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/util/CustomExceptionMessage.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/util/CustomExceptionMessage.java new file mode 100644 index 0000000..19563c9 --- /dev/null +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/util/CustomExceptionMessage.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.mscore.web.util; + +import it.pagopa.selfcare.mscore.constant.GenericError; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; + +@NoArgsConstructor(access = AccessLevel.NONE) +public class CustomExceptionMessage { + + + public static void setCustomMessage(GenericError genericError){ + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()) + .getRequest(); + request.setAttribute("errorEnum", genericError); + } +} diff --git a/apps/institution-ms/web/src/main/resources/swagger/swagger_en.properties b/apps/institution-ms/web/src/main/resources/swagger/swagger_en.properties new file mode 100644 index 0000000..5cc48b0 --- /dev/null +++ b/apps/institution-ms/web/src/main/resources/swagger/swagger_en.properties @@ -0,0 +1,115 @@ +swagger.description= +swagger.security.schema.bearer.description=A bearer token in the format of a JWS and conformed to the specifications included in [RFC8725](https://tools.ietf.org/html/RFC8725) +swagger.mscore.external.institution=Gets institution using external institution id +swagger.mscore.external.institution.manager=retrieves the manager related to the institution even if the current user is not related to the institution/product +swagger.mscore.external.institution.billing=retrieves the billing data related to the institution even if the current user is not related to the institution/product +swagger.mscore.external.institution.products=retrieves the products related to Institution +swagger.mscore.external.geotaxonomies=retrieves the geographic taxonomies related to Institution. +swagger.mscore.external.institution.relationships=returns the relationships related to the institution +swagger.mscore.institutions=Gets institutions filtering by taxCode and/or subunitCode +swagger.mscore.institution.create.from-ipa=create an institution from ipa registry +swagger.mscore.institution.create.from-ivass=create an institution from ivass CSV +swagger.mscore.institution.create.from-infocamere=create an institution from infocamere registry +swagger.mscore.institutions.findFromProduct=Gets institutions filtering onboardings by product id +swagger.mscore.institution=Gets the corresponding institution using internal institution id +swagger.mscore.institution.PA.create=create an institution (PA) using external institution id fetching data from party-registry +swagger.mscore.institution.create=create an institution using external institution id without fetching data from party-registry or info-camere +swagger.mscore.institution.PG.create=create an institution (PG) using external institution id fetching data from info-camere +swagger.mscore.institution.products=retrieves the insistitution's related products. +swagger.mscore.institution.relationships=returns the relationships related to the institution +swagger.mscore.onboarding.operator=performs operators onboarding on an already existing institution +swagger.mscore.onboarding.subdelegates=performs subdelegates onboarding on an already existing institution +swagger.mscore.onboarding.users=The service adds users to the registry if they are not present and associates them with the institution and product contained in the body +swagger.mscore.onboarding.users.delete=The service set DELETE status on onboarding association with the product and institutionId +swagger.mscore.onboarding.legals=performs legals onboarding on an already existing institution +swagger.mscore.relationships=Gets the corresponding relationship +swagger.mscore.relationship.delete=Given a relationship identifier, it deletes the corresponding relationship +swagger.mscore.relationship.activate=Activate the relationship +swagger.mscore.relationship.suspend=Suspend the relationship +swagger.mscore.institutions.updateCreatedAt=The service updates the createdAt field for the institution-product pair +swagger.mscore.token.tokenId=contract's unique identifier +swagger.mscore.institutions.model.externalId=Institution's unique external identifier +swagger.mscore.institutions.model.description=Description ente +swagger.mscore.institutions.model.productId=Product's unique identifier +swagger.mscore.institutions.model.personId=User's unique identifier (uuid) +swagger.mscore.institutions.model.id=Institution's unique identifier +swagger.mscore.institutions.model.institutionId=The internal identifier of the institution +swagger.mscore.institutions.existsInRegistry=boolean for PG persistence (institution exists in Info Camere or AdE registry +swagger.mscore.institutions.model.relationshipState=List of Relationship state for filter products +swagger.mscore.institutions.valid=Retrieve list of institution which logged user can onboard +swagger.mscore.institutions.model.internalIds=List of Institution to onboard +swagger.mscore.institutions.model.createdAt=The createdAt date +swagger.mscore.institutions.model.type=Institution's type +swagger.mscore.institutions.model.taxCode=Institution's tax code +swagger.mscore.institutions.model.subunitCode=Institution's subunit code +swagger.mscore.institutions.model.origin=Institution's origin +swagger.mscore.institutions.model.originId=Institution's id in the relative origin open data +swagger.mscore.onboarding.institution.complete = update institution and users data without adding a new token +swagger.mscore.onboarding.institution.persist = Responsible for saving the association between an institution and a product. It also creates occurrences in the Users collection as part of this process. +swagger.mscore.onboarding.institution=create a new Token (contract), and update institution and users data +swagger.mscore.onboarding.complete=complete an onboarding request +swagger.mscore.onboarding.complete.model.sendCompleteOnboardingEmail = Parameter that allows you to specify whether following completion of onboarding you want to receive an email +swagger.mscore.onboarding.reject=invalidate an onboarding request by an operator review +swagger.mscore.onboarding.invalidate=invalidate an onboarding request +swagger.mscore.onboarding.approve=approve an onboarding reuqest by an operator review +swagger.mscore.token.verify=Verify if the token is already consumed +swagger.mscore.token.api.getToken=Retrieve token given the institution's and product ids +swagger.mscore.token=retrieve a token relationship +swagger.mscore.tokens.getAll=Retrieve all token relationships +swagger.mscore.tokens.findFromProduct=Retrieve all token from a product +swagger.mscore.token.model.states=Token relationship's status +swagger.mscore.onboarding.verify=verify if onboardedProduct is already onboarded for institution +swagger.mscore.onboarding.info=returns onboarding info +swagger.mscore.person.info=returns the identified person, if any. +swagger.mscore.person.create=create a new person +swagger.mscore.relationship.relationshipId=UserBinding's unique identifier +swagger.mscore.onboarding.relationship.document=retrieve the contractDocument related to a relationship +swagger.mscore.institution.update=update institution data of given institution +swagger.mscore.institution.geotaxonomies=retrieves the geographic taxonomies this institution is related to +swagger.mscore.person.get=Retrieves Person by ID +swagger.mscore.person.verify=verify if a Person exists for a given ID +swagger.mscore.institution.verify=verify if Institution exists for a given ID +swagger.mscore.institution.model.id=Institution's unique internal identifier +swagger.mscore.institution.attributes=returns the attributes of the identified institution, if any. +swagger.mscore.institution.bygeotaxonomies=Retrieves a collection of institutions having one or more geographic taxonomies +swagger.mscore.institution.byproductid=Retrieves Institutions by product ID +swagger.mscore.relationships.get=Return a list of relationships +swagger.mscore.institutions.geotaxonomy.searchMode=The search mode to perform, as default 'any' +swagger.mscore.institutions.geotaxonomy=Comma separated list of the geographic taxonomies to search +swagger.mscore.product.model.id=Product's unique identifier +swagger.mscore.token.consume=Consume token onboarding request without digest verification +swagger.mscore.delegation.create=Create an association between institution id and technical partner +swagger.mscore.delegation.createFromTaxCode=Create an association between institution and technical partner using taxCode for both instead of internal id. It is useful when we don't know institution's internal id. +swagger.mscore.institution.create.from-anac=Create an association between institution id and technical partner from anac +swagger.mscore.institution.create.from-pda=Create an association between institution id and technical partner from pda +swagger.mscore.institution.info=Retrieve institution information +swagger.mscore.delegation.delete=Delete an association between institution id and technical partner setting its status to DELETED and setting delegation to false on institution if it has no more delegations +swagger.mscore.delegation.model.delegationId=Delegation's unique internal identifier +swagger.mscore.users.products=Retrieves products info and role which the user is enabled +swagger.mscore.users=Retrieves user given userId and optional ProductId +swagger.mscore.users.delete.products=Delete logically the association institution and product +swagger.mscore.api.users.updateUserStatus=Update user status with optional filter for institution, product, role and productRole +swagger.mscore.api.users.getOnboardedUsers=Retrieve onboarded users according to identifiers in input +swagger.mscore.institutions.delegations=Retrieve institution's delegations +swagger.mscore.institutions.delegationsV2=Retrieve institution's delegations with pagination +swagger.mscore.institutions.delegations.order=Order to show response NONE, ASC, DESC +swagger.mscore.institutions.brokers=Retrieve institution brokers +swagger.mscore.institutions.getInstitutionBrokers=Retrieve institution brokers +swagger.mscore.users.userId=User's unique identifier +swagger.mscore.users.userIds=Users unique identifiers +swagger.mscore.api.users.updateUser=Service to send notification when user data get's updated +swagger.mscore.institutions.api.getInstitutionUsers=Retrieve institution's users +swagger.mscore.api.users.findAll=Retrieve all users according to optional params in input +swagger.mscore.migration.save.institution=Create an institution +swagger.mscore.migration.findbyid.institution=Find an institution by institution internal unique identifier +swagger.mscore.migration.find.institution=Find an institution +swagger.mscore.migration.delete.institution=Delete an institution +swagger.mscore.migration.save.token=Create a token +swagger.mscore.migration.findbyid.token=Find a token by its unique internal identifier +swagger.mscore.migration.delete.token=Delete a token +swagger.mscore.migration.save.user=Create a user +swagger.mscore.migration.findbyid.user=Find a user by its unique internal identifier +swagger.mscore.migration.delete.user=Delete a user +swagger.mscore.migration.find.token=Find a token +swagger.mscore.page.number=Page number +swagger.mscore.page.size=Page size diff --git a/apps/institution-ms/web/src/main/resources/swagger/swagger_it.properties b/apps/institution-ms/web/src/main/resources/swagger/swagger_it.properties new file mode 100644 index 0000000..e0419c3 --- /dev/null +++ b/apps/institution-ms/web/src/main/resources/swagger/swagger_it.properties @@ -0,0 +1,90 @@ +swagger.description= +swagger.security.schema.bearer.description=A bearer token in the format of a JWS and conformed to the specifications included in [RFC8725](https://tools.ietf.org/html/RFC8725) +swagger.mscore.external.institution=Il servizio restituisce i dati dell'institution dato l'externalId +swagger.mscore.internal.institution=Il servizio restituisce i dati dell'institution dato l'InstitutionInternalId +swagger.mscore.external.institution.manager=Il servizio restituisce il manager relativo all'institution anche se l'utente corrente non Γ―ΒΏΒ½ collegato all'institution o al prodotto +swagger.mscore.external.institution.billing=Il servizio restituisce i dati di billing relativi all'institution anche se l'utente corrente non Γ―ΒΏΒ½ collegato all'institution o al prodotto +swagger.mscore.institution.PA.create=Il servizio persiste i dati dell'institution (PA) prelevandoli dal party-registry +swagger.mscore.institution.create=Il servizio persiste i dati dell'institution inseriti manualmente +swagger.mscore.institution.PG.create=Il servizio persiste i dati dell'institution (PG) prelevandoli da info-camere +swagger.mscore.institution.products=Il servizio resituisce la lista dei prodotti relativi all'institution +swagger.mscore.external.institution.products=Il servizio restituisce i prodotti per cui l'insitution ha effettuato l'onboarding +swagger.mscore.external.geotaxonomies=Il servizio restituisce le tassonomie geografiche relative all'institution +swagger.mscore.external.institution.relationships=Il servizio restituisce le relationship relative all'institution +swagger.mscore.institution.relationships=Il servizio restituisce le relationship relative all'institution +swagger.mscore.onboarding.operator=Il servizio persiste nuovi operatori per un prodotto e un institution che hanno giΓ―ΒΏΒ½ effettuato l'onboarding +swagger.mscore.onboarding.subdelegates=Il servizio persiste nuovi subdelegati per un prodotto e un institution che hanno giΓ―ΒΏΒ½ effettuato l'onboarding +swagger.mscore.onboarding.users=Il servizio aggiunge gli utenti nel registry se questi non sono presenti e li associa all'institution e prodotto contenuti nel body +swagger.mscore.onboarding.legals=Il servizio persiste nuovi amministratori per un prodotto e un institution che hanno giΓ―ΒΏΒ½ effettuato l'onboarding +swagger.mscore.token.relationshipId=Il servizio restituisce una relationship dato il relationshipId +swagger.mscore.relationship.delete=Il servizio elimina una relationship dato il relationshipId +swagger.mscore.relationship.activate=Il servizio attiva una relationship in stato sospeso dato il relationshipId +swagger.mscore.relationship.suspend=Il servizio sospende una relationship in stato attivo dato il relationshipId +swagger.mscore.token.tokenId=identificativo univoco del contratto +swagger.mscore.institutions.model.externalId=Identificativo esterno univoco dell'institution +swagger.mscore.institutions.model.description=Descrizione ente +swagger.mscore.institutions.model.productId=Identificativo univoco del prodotto +swagger.mscore.institutions.model.personId=Identificativo univoco dell'utente (UUID) +swagger.mscore.institutions.model.institutionId=Identificativo interno dell'institution +swagger.mscore.institutions.model.origin=Identificativo del registro su cui effettuare la ricerca +swagger.mscore.institutions.model.originId=Identificativo dell'ente all'interno degli open data +swagger.mscore.institutions.existsInRegistry=boolean per la persistenza delle PG destinatarie (esiste in info camere o AdE) +swagger.mscore.institutions.model.relationshipState=Lista di stati per filtrare i prodotti +swagger.mscore.institutions.valid=Restituisce la lista di institution per le quali l'utente puΓ―ΒΏΒ½ ancora effettuare l'onboarding +swagger.mscore.institutions.model.internalIds=Lista di institution per cui si vuole effettuare l'onboarding +swagger.mscore.onboarding.institution.complete=Il servizio persiste i dati di onboarding senza l'aggiunta del contratto +swagger.mscore.onboarding.institution=Il servizio persiste i dati di onboarding +swagger.mscore.onboarding.complete=Il servizio permette il completametno della procedura di onboarding +swagger.mscore.onboarding.complete.model.sendCompleteOnboardingEmail=Parametro che permette di specificare se in seguito al completamento dell'onboarding si vuole ricevere una mail +swagger.mscore.onboarding.reject=Il servizio consente l'annullamento manuale della procedura di onboarding +swagger.mscore.onboarding.invalidate=Il servizio invalida una richiesta di onboarding +swagger.mscore.onboarding.approve=Il servizio consente l'approvazione manuale della procedura di onboarding +swagger.mscore.token.verify=Il servizio verifica lo stato di un token +swagger.mscore.token=Il servizio restituisce le relationship relative al token dato il tokenId +swagger.mscore.onboarding.verify=Il servizio verifica dati productId e institutionId se Γ―ΒΏΒ½ giΓ―ΒΏΒ½ stato effettuato l'onboarding +swagger.mscore.onboarding.info=Il servizio restituisce i dati di onboarding relativi all'utente loggato +swagger.mscore.person.verify=Il servizio verifica se uno user esiste dato l'id (uuid) +swagger.mscore.person.info=Il servizio restituisce la persona identificata tramite l'id (uuid), se esiste. +swagger.mscore.person.create=Il servizio persiste un nuovo user. +swagger.mscore.relationship.relationshipId=Identificativo univoco di uno UserBinding +swagger.mscore.onboarding.relationship.document=Il servizio restituisce il contratto relativo a una relationship +swagger.mscore.token.get=Il servizio recupera il contratto dato il tokenId +swagger.mscore.tokens.getAll=Il servizio recupera tutti i contratti +swagger.mscore.tokens.findFromProduct=Il servizio recupera tutti i contratti a partire da un prodotto +swagger.mscore.token.model.states=Stato del contratto +swagger.mscore.institution.update=Il servizio aggiorna i dati di un institution dato l'internalId +swagger.mscore.institution.geotaxonomies=Il servizio restituisce le tassonomie geografiche relative all'institution +swagger.mscore.person.get=Il servizio recupera un utente dato l'UUID +swagger.mscore.institution.verify=Il servizio verifica se un institution esiste dato l'identificativo interno. +swagger.mscore.institution.attributes=Il servizio restituisce gli attributi relativi ad un institution +swagger.mscore.institution.bygeotaxonomies=Il servizio restituisce la lista di institution che hanno una o piΓ―ΒΏΒ½ tassonomie geografiche. +swagger.mscore.institution.byproductid=Il servizio restituisce la lista di institution filtrate per productId +swagger.mscore.institutions.findFromProduct=Il servizio restituisce la lista di institution filtrate per productId +swagger.mscore.institution.info=Il servizio restituisce le informazioni relative all'ente +swagger.mscore.institutions.getInstitutionBrokers=Il servizio restitutisce i brokers dell'ente +swagger.mscore.relationships.get=Il servizio restituisce una lista di relationship con filtri opzionali +swagger.mscore.delegation.create=Il servizio crea un'associazione tra l'ente ed il partner tecnologico +swagger.mscore.institution.create.from-anac=Il servizio crea un'associazione tra l'ente ed il partner tecnologico dall'anac +swagger.mscore.institution.create.from-pda=Il servizio crea un'associazione tra l'ente ed il partner tecnologico da pda +swagger.mscore.delegation.createFromTaxCode=Il servizio crea un'associazione tra l'ente ed il partner tecnologico utilizzando per entrambi il codice fiscale invece dell'internalId. E' utile quando non conosciamo l'internalId delle institution. +swagger.mscore.delegation.delete=Il servizio elimina un'associazione tra l'ente ed il partner tecnologico +swagger.mscore.delegation.model.delegationId=Identificativo interno della delega +swagger.mscore.users.products=Il servizio restituisce la lista dei prodotti con rispettivo ruolo di cui l'utente Γ¨ abilitato +swagger.mscore.institutions.delegations=Il servizio recupera la lista delle deleghe di una institution +swagger.mscore.institutions.delegationsV2=Il servizio recupera la lista delle deleghe di una institution con paginazione +swagger.mscore.users=Il servizio restituisce i dati dell'utente dato lo userId e il productId (opzionale) +swagger.mscore.users.delete.products=Eliminazione logica dell'associazione product e institution con l'user +swagger.mscore.users.userId=Identificativo univoco dell'utente +swagger.mscore.migration.save.institution=Il servizio crea un ente +swagger.mscore.migration.delete.institution=Il servizio elimina un ente +swagger.mscore.migration.find.institution=Il servizio trova un ente +swagger.mscore.migration.findbyid.institution= Il servizio trova un ente per identificativo univoco interno +swagger.mscore.migration.save.token=Il servizio crea un contratto +swagger.mscore.migration.findbyid.token=Il servizio trova un contratto cercandolo per il suo identificativo univoco interno +swagger.mscore.migration.delete.token=Il servizio elimina un contratto +swagger.mscore.migration.save.user=Il servizio crea un utente +swagger.mscore.migration.findbyid.user=Il servizio trova un utente cercandolo per il suo identificativo univoco interno +swagger.mscore.migration.delete.user=Il servizio elimina un utente +swagger.mscore.migration.find.token=Il servizio trova un contratto +swagger.mscore.page.number=Numero di pagina +swagger.mscore.page.size=Dimensioni della pagina diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/TestUtils.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/TestUtils.java new file mode 100644 index 0000000..2a540ee --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/TestUtils.java @@ -0,0 +1,145 @@ +package it.pagopa.selfcare.mscore.web; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.model.institution.DataProtectionOfficer; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.PaymentServiceProvider; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionRequest; + +import java.util.ArrayList; + +public class TestUtils { + + public static Billing createSimpleBilling() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + return billing; + } + + public static DataProtectionOfficer createSimpleDataProtectionOfficer() { + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + return dataProtectionOfficer; + } + + + + public static PaymentServiceProvider createSimplePaymentServiceProvider() { + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + return paymentServiceProvider; + } + + public static Institution createSimpleInstitutionPA() { + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(createSimpleBilling()); + + institution.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOriginId("Ipa Code"); + institution.setOrigin(Origin.MOCK.name()); + institution.setOnboarding(new ArrayList<>()); + + institution.setPaymentServiceProvider(createSimplePaymentServiceProvider()); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + institution.setShareCapital("Share Capital"); + institution.setRea("Rea"); + + return institution; + } + + public static Institution createSimpleInstitutionSA() { + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(createSimpleBilling()); + + institution.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.SA); + institution.setOriginId("ANAC Code"); + institution.setOrigin(Origin.ANAC.name()); + institution.setOnboarding(new ArrayList<>()); + + institution.setPaymentServiceProvider(createSimplePaymentServiceProvider()); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + institution.setShareCapital("Share Capital"); + institution.setRea("Rea"); + + return institution; + } + + public static Institution createSimpleInstitutionAS() { + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(createSimpleBilling()); + + institution.setDataProtectionOfficer(createSimpleDataProtectionOfficer()); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.AS); + institution.setOriginId("IVASS Code"); + institution.setOrigin(Origin.IVASS.name()); + institution.setOnboarding(new ArrayList<>()); + + institution.setPaymentServiceProvider(createSimplePaymentServiceProvider()); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + institution.setShareCapital("Share Capital"); + institution.setRea("Rea"); + + return institution; + } + + public static InstitutionRequest createSimpleInstitutionRequest() { + InstitutionRequest institution = new InstitutionRequest(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOriginId("Ipa Code"); + institution.setOrigin(Origin.MOCK.name()); + institution.setOnboarding(new ArrayList<>()); + + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + institution.setShareCapital("Share Capital"); + institution.setRea("Rea"); + + return institution; + } +} diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java new file mode 100644 index 0000000..29edd94 --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java @@ -0,0 +1,116 @@ +package it.pagopa.selfcare.mscore.web.config; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.atLeast; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.fasterxml.classmate.TypeResolver; +import com.fasterxml.classmate.types.TypePlaceHolder; + +import java.lang.reflect.Type; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.boot.web.reactive.context.StandardReactiveWebEnvironment; +import org.springframework.core.env.Environment; +import org.springframework.core.env.StandardEnvironment; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; + +@ContextConfiguration(classes = {SwaggerConfig.class, TypeResolver.class}) +@ExtendWith(SpringExtension.class) +class SwaggerConfigTest { + @MockBean + private Environment environment; + + @Autowired + private SwaggerConfig swaggerConfig; + + /** + * Method under test: {@link SwaggerConfig#swaggerSpringPlugin(TypeResolver)} + */ + @Test + void testSwaggerSpringPlugin() { + + SwaggerConfig swaggerConfig = new SwaggerConfig(new StandardReactiveWebEnvironment()); + Docket actualSwaggerSpringPluginResult = swaggerConfig.swaggerSpringPlugin(new TypeResolver()); + assertTrue(actualSwaggerSpringPluginResult.isEnabled()); + assertEquals("default", actualSwaggerSpringPluginResult.getGroupName()); + } + + /** + * Method under test: {@link SwaggerConfig#swaggerSpringPlugin(TypeResolver)} + */ + @Test + void testSwaggerSpringPlugin3() { + + StandardEnvironment standardEnvironment = mock(StandardEnvironment.class); + when(standardEnvironment.getProperty(any())).thenReturn("Property"); + when(standardEnvironment.getProperty( any(), (String) any())).thenReturn("Property"); + SwaggerConfig swaggerConfig = new SwaggerConfig(standardEnvironment); + Docket actualSwaggerSpringPluginResult = swaggerConfig.swaggerSpringPlugin(new TypeResolver()); + assertTrue(actualSwaggerSpringPluginResult.isEnabled()); + assertEquals("default", actualSwaggerSpringPluginResult.getGroupName()); + verify(standardEnvironment, atLeast(1)).getProperty(any()); + verify(standardEnvironment, atLeast(1)).getProperty(any(), (String) any()); + } + + /** + * Method under test: {@link SwaggerConfig#swaggerSpringPlugin(TypeResolver)} + */ + @Test + void testSwaggerSpringPlugin5() { + + StandardEnvironment standardEnvironment = mock(StandardEnvironment.class); + when(standardEnvironment.getProperty(any())).thenReturn("Property"); + when(standardEnvironment.getProperty(any(), (String) any())).thenReturn("Property"); + SwaggerConfig swaggerConfig = new SwaggerConfig(standardEnvironment); + TypeResolver typeResolver = mock(TypeResolver.class); + when(typeResolver.resolve(any(), (Type[]) any())).thenReturn(new TypePlaceHolder(1)); + Docket actualSwaggerSpringPluginResult = swaggerConfig.swaggerSpringPlugin(typeResolver); + assertTrue(actualSwaggerSpringPluginResult.isEnabled()); + assertEquals("default", actualSwaggerSpringPluginResult.getGroupName()); + verify(standardEnvironment, atLeast(1)).getProperty(any()); + verify(standardEnvironment, atLeast(1)).getProperty(any(), (String) any()); + verify(typeResolver).resolve(any(), (Type[]) any()); + } + + /** + * Method under test: {@link SwaggerConfig#swaggerSpringPlugin(TypeResolver)} + */ + @Test + void testSwaggerSpringPlugin6() { + + StandardEnvironment standardEnvironment = mock(StandardEnvironment.class); + when(standardEnvironment.getProperty(any())).thenReturn("Property"); + when(standardEnvironment.getProperty(any(), (String) any())).thenReturn("Property"); + SwaggerConfig swaggerConfig = new SwaggerConfig(standardEnvironment); + TypeResolver typeResolver = mock(TypeResolver.class); + when(typeResolver.resolve(any(), (Type[]) any())).thenReturn(null); + Docket actualSwaggerSpringPluginResult = swaggerConfig.swaggerSpringPlugin(typeResolver); + assertTrue(actualSwaggerSpringPluginResult.isEnabled()); + assertEquals("default", actualSwaggerSpringPluginResult.getGroupName()); + verify(standardEnvironment, atLeast(1)).getProperty(any()); + verify(standardEnvironment, atLeast(1)).getProperty(any(), (String) any()); + verify(typeResolver).resolve(any(), (Type[]) any()); + } + + /** + * Method under test: {@link SwaggerConfig#emailAnnotationPlugin()} + */ + @Test + void testEmailAnnotationPlugin() { + + assertTrue((new SwaggerConfig(new StandardReactiveWebEnvironment())).emailAnnotationPlugin().supports(DocumentationType.SWAGGER_2)); + assertTrue((new SwaggerConfig(mock(StandardEnvironment.class))).emailAnnotationPlugin().supports(DocumentationType.SWAGGER_2)); + } +} + diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/config/WebTestConfig.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/config/WebTestConfig.java new file mode 100644 index 0000000..24fae54 --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/config/WebTestConfig.java @@ -0,0 +1,9 @@ +package it.pagopa.selfcare.mscore.web.config; + +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Import; + +@TestConfiguration +@Import(WebConfig.class) +public class WebTestConfig { +} diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationControllerTest.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationControllerTest.java new file mode 100644 index 0000000..7505c20 --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationControllerTest.java @@ -0,0 +1,296 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import it.pagopa.selfcare.mscore.core.DelegationService; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequest; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationRequestFromTaxcode; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationResponse; +import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapper; +import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapperImpl; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.util.NestedServletException; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {DelegationController.class}) +@ExtendWith(MockitoExtension.class) +class DelegationControllerTest { + + @InjectMocks + private DelegationController delegationController; + + @Mock + private DelegationService delegationService; + + @Spy + private DelegationMapper delegationResourceMapper = new DelegationMapperImpl(); + + private final ObjectMapper objectMapper = new ObjectMapper(); + + final String FROM1 = "from1"; + final String FROM2 = "from2"; + final String TO1 = "to1"; + + /** + * Method under test: {@link DelegationController#createDelegation(DelegationRequest)} + */ + @ParameterizedTest + @EnumSource(value = DelegationType.class) + void testCreateDelegation(DelegationType delegationType) throws Exception { + + Delegation delegation = new Delegation(); + delegation.setId("id"); + delegation.setFrom("from"); + when(delegationService.createDelegation(any())).thenReturn(delegation); + + DelegationRequest delegationRequest = new DelegationRequest(); + delegationRequest.setFrom("111111"); + delegationRequest.setTo("2222222"); + delegationRequest.setInstitutionFromName("Test name"); + delegationRequest.setInstitutionToName("Test to name"); + delegationRequest.setProductId("productId"); + delegationRequest.setType(delegationType); + String content = (new ObjectMapper()).writeValueAsString(delegationRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/delegations") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + DelegationResponse response = objectMapper.readValue( + result.getResponse().getContentAsString(), + new TypeReference<>() { + }); + + assertNotNull(response); + assertNotNull(response.getId()); + assertEquals(delegation.getId(), response.getId()); + } + + /** + * Method under test: {@link DelegationController#createDelegation(DelegationRequest)} + */ + @Test + void testCreateDelegationWithBadRequest() throws Exception { + + DelegationRequest delegationRequest = new DelegationRequest(); + String content = (new ObjectMapper()).writeValueAsString(delegationRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/delegations") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isBadRequest()); + } + + /** + * Method under test: {@link InstitutionController#findFromProduct(String, Integer, Integer)} + */ + @Test + void getDelegations_shouldInvalidRequest() { + + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/delegations?&productId={productId}", "productId"); + + assertThrows(NestedServletException.class, () -> + MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder)); + + } + + /** + * Method under test: {@link DelegationController#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} + */ + @Test + void getDelegations_shouldGetData() throws Exception { + // Given + Delegation expectedDelegation = dummyDelegation(); + + when(delegationService.getDelegations(expectedDelegation.getFrom(), expectedDelegation.getTo(), + expectedDelegation.getProductId(), null, null, Optional.empty(), Optional.empty(), Optional.empty())) + .thenReturn(List.of(expectedDelegation)); + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/delegations?institutionId={institutionId}&brokerId={brokerId}&productId={productId}", expectedDelegation.getFrom(), + expectedDelegation.getTo(), expectedDelegation.getProductId()); + MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + List response = objectMapper.readValue( + result.getResponse().getContentAsString(), new TypeReference<>() {}); + // Then + assertThat(response).isNotNull(); + assertThat(response.size()).isEqualTo(1); + DelegationResponse actual = response.get(0); + assertThat(actual.getId()).isEqualTo(expectedDelegation.getId()); + assertThat(actual.getInstitutionName()).isEqualTo(expectedDelegation.getInstitutionFromName()); + assertThat(actual.getBrokerId()).isEqualTo(expectedDelegation.getTo()); + assertThat(actual.getProductId()).isEqualTo(expectedDelegation.getProductId()); + assertThat(actual.getInstitutionId()).isEqualTo(expectedDelegation.getFrom()); + assertThat(actual.getInstitutionRootName()).isEqualTo(expectedDelegation.getInstitutionFromRootName()); + + verify(delegationService, times(1)) + .getDelegations(expectedDelegation.getFrom(), expectedDelegation.getTo(), + expectedDelegation.getProductId(), null, null, Optional.empty(), + Optional.empty(), Optional.empty()); + + verifyNoMoreInteractions(delegationService); + } + + @Test + void getDelegations_shouldGetDataCustom() throws Exception { + // Given + List expectedDelegations = new ArrayList<>(); + Delegation delegation1 = createDelegation("1", FROM1, TO1); + Delegation delegation2 = createDelegation("2", FROM2, TO1); + expectedDelegations.add(delegation1); + expectedDelegations.add(delegation2); + + when(delegationService.getDelegations(null, TO1, + null, null, null, Optional.empty(), Optional.empty(), Optional.empty())) + .thenReturn(expectedDelegations); + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/delegations?brokerId={brokerId}", TO1); + MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + List response = objectMapper.readValue( + result.getResponse().getContentAsString(), new TypeReference<>() {}); + // Then + assertThat(response).isNotNull(); + assertThat(response.size()).isEqualTo(2); + DelegationResponse actual = response.get(0); + assertThat(actual.getId()).isEqualTo(delegation1.getId()); + assertThat(actual.getInstitutionName()).isEqualTo(delegation1.getInstitutionFromName()); + assertThat(actual.getBrokerId()).isEqualTo(delegation1.getTo()); + assertThat(actual.getProductId()).isEqualTo(delegation1.getProductId()); + assertThat(actual.getInstitutionId()).isEqualTo(delegation1.getFrom()); + assertThat(actual.getInstitutionRootName()).isEqualTo(delegation1.getInstitutionFromRootName()); + + verify(delegationService, times(1)) + .getDelegations(null, TO1, null, + null, null, Optional.empty(), + Optional.empty(), Optional.empty()); + verifyNoMoreInteractions(delegationService); + } + + private Delegation dummyDelegation() { + Delegation delegation = new Delegation(); + delegation.setFrom("from"); + delegation.setTo("to"); + delegation.setId("setId"); + delegation.setProductId("setProductId"); + delegation.setType(DelegationType.PT); + delegation.setInstitutionFromName("setInstitutionFromName"); + delegation.setInstitutionFromRootName("setInstitutionFromRootName"); + return delegation; + } + + private Delegation createDelegation(String pattern, String from, String to) { + Delegation delegation = new Delegation(); + delegation.setId("id_" + pattern); + delegation.setProductId("productId"); + delegation.setType(DelegationType.PT); + delegation.setTo(to); + delegation.setFrom(from); + delegation.setInstitutionFromName("name_" + from); + delegation.setInstitutionFromRootName("name_" + to); + return delegation; + } + + /** + * Method under test: {@link DelegationController#createDelegationFromInstitutionsTaxCode(DelegationRequestFromTaxcode)} + */ + @Test + void testCreateDelegationUsingTaxCode() throws Exception { + + Delegation delegation = new Delegation(); + delegation.setId("id"); + delegation.setTo("to"); + delegation.setFrom("from"); + when(delegationService.createDelegationFromInstitutionsTaxCode(any())).thenReturn(delegation); + + DelegationRequestFromTaxcode delegationRequest = new DelegationRequestFromTaxcode(); + delegationRequest.setFromTaxCode("111111"); + delegationRequest.setToTaxCode("2222222"); + delegationRequest.setInstitutionFromName("Test name"); + delegationRequest.setInstitutionToName("Test to name"); + delegationRequest.setProductId("productId"); + delegationRequest.setType(DelegationType.PT); + String content = (new ObjectMapper()).writeValueAsString(delegationRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/delegations/from-taxcode") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + + + + DelegationResponse response = objectMapper.readValue( + result.getResponse().getContentAsString(), + new TypeReference<>() { + }); + + assertNotNull(response); + assertNotNull(response.getId()); + assertEquals(delegation.getId(), response.getId()); + } + + @Test + void testDeleteDelegation() throws Exception { + doNothing().when(delegationService).deleteDelegationByDelegationId(any()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.delete("/delegations/{delegationId}", + "42"); + MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isNoContent()); + } + +} \ No newline at end of file diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2ControllerTest.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2ControllerTest.java new file mode 100644 index 0000000..505ae58 --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/DelegationV2ControllerTest.java @@ -0,0 +1,296 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.constant.DelegationType; +import it.pagopa.selfcare.mscore.constant.Order; +import it.pagopa.selfcare.mscore.core.DelegationService; +import it.pagopa.selfcare.mscore.model.delegation.Delegation; +import it.pagopa.selfcare.mscore.model.delegation.DelegationWithPagination; +import it.pagopa.selfcare.mscore.model.delegation.GetDelegationParameters; +import it.pagopa.selfcare.mscore.model.delegation.PageInfo; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationResponse; +import it.pagopa.selfcare.mscore.web.model.delegation.DelegationWithPaginationResponse; +import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapper; +import it.pagopa.selfcare.mscore.web.model.mapper.DelegationMapperImpl; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.util.NestedServletException; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.*; + +@ContextConfiguration(classes = {DelegationV2Controller.class}) +@ExtendWith(MockitoExtension.class) +class DelegationV2ControllerTest { + + @InjectMocks + private DelegationV2Controller delegationController; + + @Mock + private DelegationService delegationService; + + @Spy + private DelegationMapper delegationResourceMapper = new DelegationMapperImpl(); + + private final ObjectMapper objectMapper = new ObjectMapper(); + + final String FROM1 = "from1"; + final String FROM2 = "from2"; + final String TO1 = "to1"; + + /** + * Method under test: {@link InstitutionController#findFromProduct(String, Integer, Integer)} + */ + @Test + void getDelegations_shouldInvalidRequest() { + + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/v2/delegations?&productId={productId}", "productId"); + + assertThrows(NestedServletException.class, () -> + MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder)); + + } + + /** + * Method under test: {@link DelegationController#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} + */ + @Test + void getDelegations_shouldGetData() throws Exception { + // Given + Delegation expectedDelegation = dummyDelegation(); + PageInfo exptectedPageInfo = new PageInfo(10, 0, 1, 1); + + DelegationWithPagination expectedDelegationWithPagination = new DelegationWithPagination(List.of(expectedDelegation), exptectedPageInfo); + + when(delegationService.getDelegationsV2(createDelegationParameters(expectedDelegation.getFrom(), expectedDelegation.getTo(), + expectedDelegation.getProductId(), null, null, Order.ASC, 0, 10))) + .thenReturn(expectedDelegationWithPagination); + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/v2/delegations?institutionId={institutionId}&brokerId={brokerId}&productId={productId}&order={order}&page={page}&size={size}", + expectedDelegation.getFrom(), expectedDelegation.getTo(), expectedDelegation.getProductId(), + Order.ASC ,exptectedPageInfo.getPageNo(), exptectedPageInfo.getPageSize()); + MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + DelegationWithPaginationResponse response = objectMapper.readValue( + result.getResponse().getContentAsString(), new TypeReference<>() {}); + // Then + assertThat(response).isNotNull(); + assertThat(response.getDelegations()).isNotNull(); + assertThat(response.getPageInfo()).isNotNull(); + assertThat((long) response.getDelegations().size()).isEqualTo(1); + DelegationResponse actualDelegation = response.getDelegations().get(0); + PageInfo actualPageInfo = response.getPageInfo(); + assertThat(actualDelegation.getId()).isEqualTo(expectedDelegation.getId()); + assertThat(actualDelegation.getInstitutionName()).isEqualTo(expectedDelegation.getInstitutionFromName()); + assertThat(actualDelegation.getBrokerId()).isEqualTo(expectedDelegation.getTo()); + assertThat(actualDelegation.getProductId()).isEqualTo(expectedDelegation.getProductId()); + assertThat(actualDelegation.getInstitutionId()).isEqualTo(expectedDelegation.getFrom()); + assertThat(actualDelegation.getInstitutionRootName()).isEqualTo(expectedDelegation.getInstitutionFromRootName()); + assertThat(actualPageInfo).isEqualTo(exptectedPageInfo); + + verify(delegationService, times(1)) + .getDelegationsV2(createDelegationParameters(expectedDelegation.getFrom(), expectedDelegation.getTo(), + expectedDelegation.getProductId(), null, null, Order.ASC, + 0, 10)); + + verifyNoMoreInteractions(delegationService); + } + + @Test + void getDelegations_shouldGetDataCustom() throws Exception { + // Given + List expectedDelegations = new ArrayList<>(); + Delegation delegation1 = createDelegation("1", FROM1, TO1); + Delegation delegation2 = createDelegation("2", FROM2, TO1); + expectedDelegations.add(delegation1); + expectedDelegations.add(delegation2); + + PageInfo exptectedPageInfo = new PageInfo(10000, 0, 2, 1); + + DelegationWithPagination expectedDelegationWithPagination = new DelegationWithPagination(expectedDelegations, exptectedPageInfo); + + when(delegationService.getDelegationsV2(createDelegationParameters(null, TO1, + null, null, null, Order.DESC, 0, 10000))) + .thenReturn(expectedDelegationWithPagination); + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/v2/delegations?brokerId={brokerId}&order={order}", TO1, Order.DESC); + MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + DelegationWithPaginationResponse response = objectMapper.readValue( + result.getResponse().getContentAsString(), new TypeReference<>() {}); + // Then + assertThat(response).isNotNull(); + assertThat(response.getDelegations()).isNotNull(); + assertThat(response.getPageInfo()).isNotNull(); + assertThat((long) response.getDelegations().size()).isEqualTo(2); + DelegationResponse actualDelegation = response.getDelegations().get(0); + PageInfo actualPageInfo = response.getPageInfo(); + assertThat(actualDelegation.getId()).isEqualTo(delegation1.getId()); + assertThat(actualDelegation.getInstitutionName()).isEqualTo(delegation1.getInstitutionFromName()); + assertThat(actualDelegation.getBrokerId()).isEqualTo(delegation1.getTo()); + assertThat(actualDelegation.getProductId()).isEqualTo(delegation1.getProductId()); + assertThat(actualDelegation.getInstitutionId()).isEqualTo(delegation1.getFrom()); + assertThat(actualDelegation.getInstitutionRootName()).isEqualTo(delegation1.getInstitutionFromRootName()); + assertThat(actualPageInfo).isEqualTo(exptectedPageInfo); + + verify(delegationService, times(1)) + .getDelegationsV2(createDelegationParameters(null, TO1, null, + null, null, Order.DESC, + 0, 10000)); + verifyNoMoreInteractions(delegationService); + } + + /** + * Method under test: {@link DelegationController#getDelegations(String, String, String, String, String, Optional, Optional, Optional)} + */ + @Test + void getDelegations_shouldGetData_nullMode() throws Exception { + // Given + Delegation expectedDelegation = dummyDelegation(); + PageInfo exptectedPageInfo = new PageInfo(10000, 0, 1, 1); + + DelegationWithPagination expectedDelegationWithPagination = new DelegationWithPagination(List.of(expectedDelegation), exptectedPageInfo); + + when(delegationService.getDelegationsV2(createDelegationParameters(expectedDelegation.getFrom(), expectedDelegation.getTo(), + expectedDelegation.getProductId(), null, null, Order.NONE, 0, 10000))) + .thenReturn(expectedDelegationWithPagination); + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/v2/delegations?institutionId={institutionId}&brokerId={brokerId}&productId={productId}", expectedDelegation.getFrom(), + expectedDelegation.getTo(), expectedDelegation.getProductId()); + MvcResult result = MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + DelegationWithPaginationResponse response = objectMapper.readValue( + result.getResponse().getContentAsString(), new TypeReference<>() {}); + // Then + assertThat(response).isNotNull(); + assertThat(response.getDelegations()).isNotNull(); + assertThat(response.getPageInfo()).isNotNull(); + assertThat((long) response.getDelegations().size()).isEqualTo(1); + DelegationResponse actualDelegation = response.getDelegations().get(0); + PageInfo actualPageInfo = response.getPageInfo(); + assertThat(actualDelegation.getId()).isEqualTo(expectedDelegation.getId()); + assertThat(actualDelegation.getInstitutionName()).isEqualTo(expectedDelegation.getInstitutionFromName()); + assertThat(actualDelegation.getBrokerId()).isEqualTo(expectedDelegation.getTo()); + assertThat(actualDelegation.getProductId()).isEqualTo(expectedDelegation.getProductId()); + assertThat(actualDelegation.getInstitutionId()).isEqualTo(expectedDelegation.getFrom()); + assertThat(actualDelegation.getInstitutionRootName()).isEqualTo(expectedDelegation.getInstitutionFromRootName()); + assertThat(actualPageInfo).isEqualTo(exptectedPageInfo); + + verify(delegationService, times(1)) + .getDelegationsV2(createDelegationParameters(expectedDelegation.getFrom(), expectedDelegation.getTo(), + expectedDelegation.getProductId(), null, null, Order.NONE,0, 10000)); + verifyNoMoreInteractions(delegationService); + } + + @Test + void getDelegations_shouldInvalidRequest_wrongPageSize() { + + Delegation expectedDelegation = dummyDelegation(); + + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/v2/delegations?brokerId={brokerId}&size={size}", + expectedDelegation.getTo(), 0); + + assertThrows(NestedServletException.class, () -> + MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder)); + + } + + @Test + void getDelegations_shouldInvalidRequest_wrongPageNumber() { + + Delegation expectedDelegation = dummyDelegation(); + + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/v2/delegations?brokerId={brokerId}&page={size}", + expectedDelegation.getTo(), -1); + + assertThrows(NestedServletException.class, () -> + MockMvcBuilders.standaloneSetup(delegationController) + .build() + .perform(requestBuilder)); + + } + + + + + private Delegation dummyDelegation() { + Delegation delegation = new Delegation(); + delegation.setFrom("from"); + delegation.setTo("to"); + delegation.setId("setId"); + delegation.setProductId("setProductId"); + delegation.setType(DelegationType.PT); + delegation.setInstitutionFromName("setInstitutionFromName"); + delegation.setInstitutionFromRootName("setInstitutionFromRootName"); + return delegation; + } + + private Delegation createDelegation(String pattern, String from, String to) { + Delegation delegation = new Delegation(); + delegation.setId("id_" + pattern); + delegation.setProductId("productId"); + delegation.setType(DelegationType.PT); + delegation.setTo(to); + delegation.setFrom(from); + delegation.setInstitutionFromName("name_" + from); + delegation.setInstitutionFromRootName("name_" + to); + return delegation; + } + + private GetDelegationParameters createDelegationParameters(String from, String to, String productId, + String search, String taxCode, Order order, + Integer page, Integer size) { + return GetDelegationParameters.builder() + .from(from) + .to(to) + .productId(productId) + .search(search) + .taxCode(taxCode) + .order(order) + .page(page) + .size(size) + .build(); + } + +} \ No newline at end of file diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ExternalControllerTest.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ExternalControllerTest.java new file mode 100644 index 0000000..1a72041 --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ExternalControllerTest.java @@ -0,0 +1,419 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.core.ExternalService; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapper; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapperImpl; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.ArrayList; +import java.util.List; + +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class ExternalControllerTest { + @InjectMocks + private ExternalController externalController; + + @Mock + private ExternalService externalService; + + @Spy + private InstitutionResourceMapper institutionResourceMapper = new InstitutionResourceMapperImpl(); + + /** + * Method under test: {@link ExternalController#retrieveInstitutionProductsByExternalId(String, List)} + */ + @Test + void testRetrieveInstitutionProductsByExternalId() throws Exception { + when(externalService.retrieveInstitutionProductsByExternalId(any(), any())) + .thenReturn(new ArrayList<>()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/external/institutions/{externalId}/products", "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"products\":[]}")); + } + + /** + * Method under test: {@link ExternalController#retrieveInstitutionProductsByExternalId(String, List)} + */ + @Test + void testRetrieveInstitutionProductsByExternalId2() throws Exception { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("?"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("?"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("?"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + when(externalService.retrieveInstitutionProductsByExternalId(any(), any())) + .thenReturn(onboardingList); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/external/institutions/{externalId}/products", "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string("{\"products\":[{\"id\":\"42\",\"state\":\"PENDING\"}]}")); + } + + /** + * Method under test: {@link ExternalController#retrieveInstitutionProductsByExternalId(String, List)} + */ + @Test + void testRetrieveInstitutionProductsByExternalId3() throws Exception { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("?"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("?"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("?"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + Billing billing1 = new Billing(); + billing1.setPublicServices(false); + billing1.setRecipientCode("U"); + billing1.setVatNumber("?"); + + Onboarding onboarding1 = new Onboarding(); + onboarding1.setBilling(billing1); + onboarding1.setClosedAt(null); + onboarding1.setContract("U"); + onboarding1.setCreatedAt(null); + onboarding1.setPricingPlan("U"); + onboarding1.setProductId("?"); + onboarding1.setStatus(RelationshipState.ACTIVE); + onboarding1.setTokenId("ABC123"); + onboarding1.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding1); + onboardingList.add(onboarding); + when(externalService.retrieveInstitutionProductsByExternalId(any(), any())) + .thenReturn(onboardingList); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/external/institutions/{externalId}/products", "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"products\":[{\"id\":\"?\",\"state\":\"ACTIVE\"},{\"id\":\"42\",\"state\":\"PENDING\"}]}")); + } + + /** + * Method under test: {@link ExternalController#retrieveInstitutionGeoTaxonomiesByExternalId(String)} + */ + @Test + void testRetrieveInstitutionGeoTaxonomiesByExternalId() throws Exception { + when(externalService.retrieveInstitutionGeoTaxonomiesByExternalId(any())).thenReturn(new ArrayList<>()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/external/institutions/{externalId}/geotaxonomies", "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("[]")); + } + + + /** + * Method under test: {@link ExternalController#getBillingInstitutionByExternalId(String, String)} + */ + @Test + void testGetBillingInstitutionByExternalId3() throws Exception { + Institution institution = new Institution(); + institution.setOnboarding(new ArrayList<>()); + when(externalService.retrieveInstitutionProduct(any(), any())).thenReturn(institution); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/external/institutions/{externalId}/products/{productId}/billing", "42", "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"institutionId\":null,\"externalId\":null,\"origin\":null,\"originId\":null,\"description\":null,\"institutionType\":null,\"digitalAddress\":null,\"address\":null,\"zipCode\":null,\"taxCode\":null,\"pricingPlan\":null,\"billing\":null,\"subunitCode\":null,\"subunitType\":null,\"aooParentCode\":null}")); + } + + /** + * Method under test: {@link ExternalController#getBillingInstitutionByExternalId(String, String)} + */ + @Test + void testGetBillingInstitutionByExternalId5() throws Exception { + Institution institution = new Institution(); + institution.setOnboarding(new ArrayList<>()); + when(externalService.retrieveInstitutionProduct(any(), any())).thenReturn(institution); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/external/institutions/{externalId}/products/{productId}/billing", "42", "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"institutionId\":null,\"externalId\":null,\"origin\":null,\"originId\":null,\"description\":null,\"institutionType" + + "\":null,\"digitalAddress\":null,\"address\":null,\"zipCode\":null,\"taxCode\":null,\"pricingPlan\":null,\"billing" + + "\":null,\"subunitCode\":null,\"subunitType\":null,\"aooParentCode\":null}")); + } + + /** + * Method under test: {@link ExternalController#getByExternalId(String)} + */ + @Test + void testGetByExternalId() throws Exception { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(billing); + institution.setDataProtectionOfficer(dataProtectionOfficer); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOnboarding(new ArrayList<>()); + institution.setOriginId("42"); + institution.setPaymentServiceProvider(paymentServiceProvider); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + when(externalService.getInstitutionByExternalId(any())).thenReturn(institution); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", + "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string("{\"id\":\"42\",\"externalId\":\"42\",\"originId\":\"42\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link ExternalController#getByExternalId(String)} + */ + @Test + void testGetByExternalId2() throws Exception { + Attributes attributes = new Attributes(); + attributes.setCode("?"); + attributes.setDescription("The characteristics of someone or something"); + attributes.setOrigin("?"); + + ArrayList attributesList = new ArrayList<>(); + attributesList.add(attributes); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(attributesList); + institution.setBilling(billing); + institution.setDataProtectionOfficer(dataProtectionOfficer); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOnboarding(new ArrayList<>()); + institution.setOriginId("42"); + institution.setPaymentServiceProvider(paymentServiceProvider); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + when(externalService.getInstitutionByExternalId("42")).thenReturn(institution); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", + "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string("{\"id\":\"42\",\"externalId\":\"42\",\"originId\":\"42\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[{\"origin\":\"?\",\"code\":\"?\",\"description\":\"The characteristics of someone or something\"}],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"imported\":false,\"delegation\":false}")); + + } + + /** + * Method under test: {@link ExternalController#getByExternalId(String)} + */ + @Test + void testGetByExternalId3() throws Exception { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("?"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(billing); + institution.setDataProtectionOfficer(dataProtectionOfficer); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOnboarding(new ArrayList<>()); + institution.setOriginId("42"); + institution.setPaymentServiceProvider(paymentServiceProvider); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + when(externalService.getInstitutionByExternalId(any())).thenReturn(institution); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", + "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string("{\"id\":\"42\",\"externalId\":\"42\",\"originId\":\"42\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[{\"code\":\"?\",\"desc\":\"The characteristics of someone or something\"}],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link ExternalController#getByExternalId(String)} + */ + @Test + void testGetByExternalId5() throws Exception { + when(externalService.getInstitutionByExternalId(any())).thenReturn(new Institution()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", + "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); + } + + + /** + * Method under test: {@link ExternalController#getByExternalId(String)} + */ + @Test + void testGetByExternalId7() throws Exception { + when(externalService.getInstitutionByExternalId(any())).thenReturn(new Institution()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions/{externalId}", + "42"); + MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); + } + + + + /** + * Method under test: {@link ExternalController#retrieveInstitutionByIds(List)} + */ + @Test + void testRetrieveInstitutionByIds() throws Exception { + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/external/institutions") + .param("ids","[code1, code2]"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(externalController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().is(200)); + } +} + + diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerPdaTest.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerPdaTest.java new file mode 100644 index 0000000..c40c441 --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerPdaTest.java @@ -0,0 +1,99 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.core.InstitutionService; +import it.pagopa.selfcare.mscore.model.institution.Billing; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.web.model.institution.PdaInstitutionRequest; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapper; +import it.pagopa.selfcare.mscore.web.model.mapper.InstitutionResourceMapperImpl; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.ArrayList; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; + +@ContextConfiguration(classes = {InstitutionController.class}) +@ExtendWith(MockitoExtension.class) +public class InstitutionControllerPdaTest { + @InjectMocks + private InstitutionController institutionController; + + @Mock + private InstitutionService institutionService; + private final ObjectMapper objectMapper = new ObjectMapper(); + @Spy + private InstitutionResourceMapper institutionResourceMapper = new InstitutionResourceMapperImpl(); + + + /** + * Method under test: {@link InstitutionController#createInstitutionFromPda(PdaInstitutionRequest)}} + */ + @Test + void shouldCreateInstitutionFromPda() throws Exception { + // Given + PdaInstitutionRequest institutionRequest = new PdaInstitutionRequest(); + institutionRequest.setInjectionInstitutionType("EC"); + institutionRequest.setDescription("test ec"); + institutionRequest.setTaxCode("taxCode"); + String content = objectMapper.writeValueAsString(institutionRequest); + + Institution institution = createSimpleInstitutionPda(); + + when(institutionService.createInstitutionFromPda(any(), any())).thenReturn(institution); + + //Then + MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-pda/") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"attributes\":[],\"imported\":true,\"delegation\":false}")); + } + + public static Institution createSimpleInstitutionPda() { + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(createSimpleBilling()); + + institution.setDescription("The characteristics of someone or something"); + institution.setExternalId("42"); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOriginId("Ipa Code"); + institution.setOrigin(Origin.MOCK.name()); + + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + institution.setImported(true); + + return institution; + } + + public static Billing createSimpleBilling() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + return billing; + } +} diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerTest.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerTest.java new file mode 100644 index 0000000..6b9aa3e --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/InstitutionControllerTest.java @@ -0,0 +1,1395 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.commons.base.security.SelfCareUser; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.core.DelegationService; +import it.pagopa.selfcare.mscore.core.InstitutionService; +import it.pagopa.selfcare.mscore.core.OnboardingService; +import it.pagopa.selfcare.mscore.core.util.InstitutionPaSubunitType; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.web.TestUtils; +import it.pagopa.selfcare.mscore.web.model.institution.*; +import it.pagopa.selfcare.mscore.web.model.mapper.*; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.*; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import javax.validation.ValidationException; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE; + +@ContextConfiguration(classes = {InstitutionController.class}) +@ExtendWith(MockitoExtension.class) +class InstitutionControllerTest { + + private static final String BASE_URL = "/institutions"; + + @InjectMocks + private InstitutionController institutionController; + + @Mock + private InstitutionService institutionService; + + @Mock + private OnboardingService onboardingService; + + @Mock + private DelegationService delegationService; + + @Spy + private OnboardingResourceMapper onboardingResourceMapper = new OnboardingResourceMapperImpl(); + + @Spy + private InstitutionResourceMapper institutionResourceMapper = new InstitutionResourceMapperImpl(); + + @Spy + private BrokerMapper brokerMapper = new BrokerMapperImpl(); + + @Spy + private UserMapper userMapper = new UserMapperImpl(); + + private final ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules(); + + + private final static Onboarding onboarding; + private final static Billing staticBilling; + + private final static Institution staticInstitution; + + static { + staticBilling = new Billing(); + staticBilling.setVatNumber("example"); + staticBilling.setRecipientCode("example"); + staticBilling.setTaxCodeInvoicing("example"); + + onboarding = new Onboarding(); + onboarding.setProductId("example"); + onboarding.setStatus(RelationshipState.ACTIVE); + onboarding.setBilling(staticBilling); + onboarding.setContract("contract"); + onboarding.setTokenId("tokenId"); + onboarding.setPricingPlan("setPricingPlan"); + onboarding.setIsAggregator(true); + + Attributes attribute = new Attributes(); + attribute.setCode("code"); + attribute.setDescription("description"); + + staticInstitution = new Institution(); + staticInstitution.setId("42"); + staticInstitution.setInstitutionType(InstitutionType.PG); + staticInstitution.setDescription("description"); + staticInstitution.setOnboarding(List.of(onboarding)); + staticInstitution.setAttributes(List.of(attribute)); + staticInstitution.setIstatCode("istatCode"); + + } + + @Test + void shouldGetInstitutionsByTaxCode() throws Exception { + + Institution institution = TestUtils.createSimpleInstitutionPA(); + + when(institutionService.getInstitutions(any(), any(), any(), any())) + .thenReturn(List.of(institution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/institutions/?taxCode={taxCode}", "TaxCode"); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}]}")); + } + + @Test + void shouldGetInstitutionsByTaxCodeAndSubunitCode() throws Exception { + + Institution institution = TestUtils.createSimpleInstitutionPA(); + institution.setSubunitCode("example"); + institution.setSubunitType(InstitutionPaSubunitType.UO.name()); + institution.setParentDescription("parentDescription"); + institution.setRootParentId("rootParentId"); + + when(institutionService.getInstitutions(any(), any(), any(), any())) + .thenReturn(List.of(institution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/institutions/?taxCode={taxCode}&subunitCode={subunitCode}", "TaxCode", "SubunitCode"); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"example\",\"subunitType\":\"UO\",\"delegation\":false}]}")); + } + + @Test + void shouldGetInstitutionsByOriginAndOriginId() throws Exception { + + Institution institution = TestUtils.createSimpleInstitutionPA(); + institution.setSubunitCode("example"); + institution.setSubunitType(InstitutionPaSubunitType.UO.name()); + institution.setParentDescription("parentDescription"); + institution.setRootParentId("rootParentId"); + + when(institutionService.getInstitutions(any(), any(), any(), any())) + .thenReturn(List.of(institution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/institutions/?origin={origin}&originId={originId}", "origin", "originId"); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"example\",\"subunitType\":\"UO\",\"delegation\":false}]}")); + } + + @Test + void shouldGetInstitutionsByOrigin() throws Exception { + + Institution institution = TestUtils.createSimpleInstitutionPA(); + institution.setSubunitCode("example"); + institution.setSubunitType(InstitutionPaSubunitType.UO.name()); + institution.setParentDescription("parentDescription"); + institution.setRootParentId("rootParentId"); + + when(institutionService.getInstitutions(any(), any(), any(), any())) + .thenReturn(List.of(institution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/institutions/?origin={origin}", "origin"); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"example\",\"subunitType\":\"UO\",\"delegation\":false}]}")); + } + + @Test + void shouldGetInstitutionsByOriginId() throws Exception { + + Institution institution = TestUtils.createSimpleInstitutionPA(); + institution.setSubunitCode("example"); + institution.setSubunitType(InstitutionPaSubunitType.UO.name()); + institution.setParentDescription("parentDescription"); + institution.setRootParentId("rootParentId"); + + when(institutionService.getInstitutions(any(), any(), any(), any())) + .thenReturn(List.of(institution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/institutions/?originId={originId}", "originId"); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"institutions\":[{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"example\",\"subunitType\":\"UO\",\"delegation\":false}]}")); + } + + @Test + void shouldGetInstitutionsBySubunitCodeWithoutParam(){ + Assertions.assertThrows(ValidationException.class, + () -> institutionController.getInstitutions(null, null, null, null), + "At least one of taxCode, origin or originId must be present"); + } + + @Test + void shouldGetInstitutionsBySubunitCodeWithoutTaxCode() { + Assertions.assertThrows(ValidationException.class, + () -> institutionController.getInstitutions(null, "subunitCode", "origin", null), + "TaxCode is required if subunitCode is present"); + } + + @Test + void shouldGetOnboardingsInstitutionByProductId() throws Exception { + + when(institutionService.getOnboardingInstitutionByProductId(any(), any())) + .thenReturn(List.of(onboarding)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .get("/institutions/{institutionId}/onboardings?productId{productId}", "42", onboarding.getProductId()); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"onboardings\":[{\"productId\":\"example\",\"tokenId\":\"tokenId\",\"status\":\"ACTIVE\",\"contract\":\"contract\",\"pricingPlan\":\"setPricingPlan\",\"billing\":{\"vatNumber\":\"example\",\"taxCodeInvoicing\":\"example\",\"recipientCode\":\"example\",\"publicServices\":false},\"createdAt\":null,\"updatedAt\":null,\"closedAt\":null,\"isAggregator\":true}]}")); + } + + @Test + void retrieveInstitutionById() throws Exception { + SecurityContext securityContext = Mockito.mock(SecurityContext.class); + SecurityContextHolder.setContext(securityContext); + when(institutionService.retrieveInstitutionById("42")).thenReturn(staticInstitution); + staticInstitution.setId("id"); + MockHttpServletRequestBuilder requestBuilder = get("/institutions/{id}", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#retrieveInstitutionById(String)} + */ + @Test + void testRetrieveInstitutionById() throws Exception { + when(institutionService.retrieveInstitutionById(any())).thenReturn(staticInstitution); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/institutions/{id}", "42"); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"description\":\"description\",\"institutionType\":\"PG\",\"istatCode\":\"istatCode\",\"attributes\":[{\"origin\":null,\"code\":\"code\",\"description\":\"description\"}],\"onboarding\":[{\"productId\":\"example\",\"status\":\"ACTIVE\",\"billing\":{\"vatNumber\":\"example\",\"taxCodeInvoicing\":\"example\",\"recipientCode\":\"example\",\"publicServices\":false},\"createdAt\":null,\"updatedAt\":null,\"isAggregator\":true}],\"imported\":false,\"delegation\":false}")); + } + + @Test + void retrieveInstitutionGeoTaxonomies() throws Exception { + SecurityContext securityContext = Mockito.mock(SecurityContext.class); + SecurityContextHolder.setContext(securityContext); + Institution institution = new Institution(); + institution.setId("id"); + GeographicTaxonomyPage page = new GeographicTaxonomyPage(); + page.setData(Collections.emptyList()); + MockHttpServletRequestBuilder requestBuilder = get("/institutions/{id}/geotaxonomies", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isOk()); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionFromIpa(InstitutionFromIpaPost)}} + */ + @Test + void shouldCreateInstitutionFromIpa() throws Exception { + // Given + InstitutionFromIpaPost institutionFromIpaPost = new InstitutionFromIpaPost(); + institutionFromIpaPost.setTaxCode("123456"); + institutionFromIpaPost.setSubunitType(InstitutionPaSubunitType.AOO); + institutionFromIpaPost.setSubunitCode("1234"); + GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); + geoTaxonomies.setCode("code"); + geoTaxonomies.setDesc("desc"); + institutionFromIpaPost.setGeographicTaxonomies(List.of(geoTaxonomies)); + String content = objectMapper.writeValueAsString(institutionFromIpaPost); + + Institution institution = TestUtils.createSimpleInstitutionPA(); + institution.setSubunitCode(institutionFromIpaPost.getSubunitCode()); + institution.setSubunitType(institutionFromIpaPost.getSubunitType().name()); + institution.setParentDescription("parentDescription"); + institution.setRootParentId("rootParentId"); + + when(institutionService.createInstitutionFromIpa(any(), any(), any(), any(), any())).thenReturn(institution); + + //Then + MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-ipa/") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rootParent\":{\"description\":\"parentDescription\",\"id\":\"rootParentId\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"subunitCode\":\"1234\",\"subunitType\":\"AOO\",\"delegation\":false}")); + + ArgumentCaptor> captorGeo = ArgumentCaptor.forClass(List.class); + verify(institutionService, times(1)) + .createInstitutionFromIpa(any(),any(),any(),captorGeo.capture(), any()); + assertEquals(institutionFromIpaPost.getGeographicTaxonomies().size(), captorGeo.getValue().size()); + assertEquals(geoTaxonomies.getCode(), captorGeo.getValue().get(0).getCode()); + assertEquals(geoTaxonomies.getDesc(), captorGeo.getValue().get(0).getDesc()); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionFromAnac(InstitutionRequest)}} + */ + @Test + void shouldCreateInstitutionFromAnac() throws Exception { + // Given + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setInstitutionType(InstitutionType.SA); + institutionRequest.setTaxCode("42"); + institutionRequest.setExternalId("42"); + String content = objectMapper.writeValueAsString(institutionRequest); + + Institution institution = TestUtils.createSimpleInstitutionSA(); + + when(institutionService.createInstitutionFromAnac(any())).thenReturn(institution); + + //Then + MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-anac/") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"ANAC\",\"originId\":\"ANAC Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"SA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionFromIvass(InstitutionRequest)}} + */ + @Test + void shouldCreateInstitutionFromIvass() throws Exception { + // Given + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setInstitutionType(InstitutionType.AS); + institutionRequest.setTaxCode("42"); + institutionRequest.setExternalId("42"); + String content = objectMapper.writeValueAsString(institutionRequest); + + Institution institution = TestUtils.createSimpleInstitutionAS(); + + when(institutionService.createInstitutionFromIvass(any())).thenReturn(institution); + + //Then + MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-ivass/") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"IVASS\",\"originId\":\"IVASS Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"AS\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionFromInfocamere(InstitutionRequest)}} + */ + @Test + void shouldCreateInstitutionFromInfocamere() throws Exception { + // Given + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setInstitutionType(InstitutionType.PG); + institutionRequest.setTaxCode("42"); + institutionRequest.setExternalId("42"); + String content = objectMapper.writeValueAsString(institutionRequest); + + Institution institution = TestUtils.createSimpleInstitutionPA(); + + when(institutionService.createInstitutionFromInfocamere(any())).thenReturn(institution); + + //Then + MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-infocamere/") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionFromIpa(InstitutionFromIpaPost)}} + */ + @Test + void shouldThrowValidationExceptionWhenCreateInstitutionFromIpaWithoutTax() throws Exception { + + String content = objectMapper.writeValueAsString(new InstitutionFromIpaPost()); + + MockHttpServletRequestBuilder requestBuilder = post("/institutions/from-ipa/") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isBadRequest()); + } + + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void shouldCreateInstitution() throws Exception { + + InstitutionRequest institution = TestUtils.createSimpleInstitutionRequest(); + Institution response = TestUtils.createSimpleInstitutionPA(); + + when(institutionService.createInstitution(any())).thenReturn(response); + + String content = objectMapper.writeValueAsString(institution); + + MockHttpServletRequestBuilder requestBuilder = post("/institutions/") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} + */ + @Test + void testCreateInstitutionByExternalId() throws Exception { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(billing); + institution.setDataProtectionOfficer(dataProtectionOfficer); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOriginId("Ipa Code"); + institution.setOnboarding(new ArrayList<>()); + institution.setPaymentServiceProvider(paymentServiceProvider); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + when(institutionService.createInstitutionByExternalId(any())).thenReturn(institution); + MockHttpServletRequestBuilder requestBuilder = post("/institutions/{externalId}", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} + */ + @Test + void testCreateInstitutionByExternalId2() throws Exception { + when(institutionService.createInstitutionByExternalId(any())).thenReturn(new Institution()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/{externalId}", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} + */ + @Test + void testCreateInstitutionByExternalId3() throws Exception { + when(institutionService.createInstitutionByExternalId(any())).thenReturn(new Institution()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/{externalId}", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} + */ + @Test + void testCreateInstitutionByExternalId4() throws Exception { + + Institution institution = TestUtils.createSimpleInstitutionPA(); + + when(institutionService.createInstitutionByExternalId(any())) + .thenReturn(institution); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/{externalId}", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string( + "{\"id\":\"42\",\"externalId\":\"42\",\"origin\":\"MOCK\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"rea\":\"Rea\",\"shareCapital\":\"Share Capital\",\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#createInstitutionByExternalId(String)} + */ + @Test + void testCreateInstitutionByExternalId5() throws Exception { + SecurityMockMvcRequestBuilders.FormLoginRequestBuilder requestBuilder = SecurityMockMvcRequestBuilders + .formLogin(); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isNotFound()); + } + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution() throws Exception { + when(institutionService.createInstitution(any())).thenReturn(new Institution()); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(new ArrayList<>()); + institutionRequest.setBusinessRegisterPlace("Business Register Place"); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(new ArrayList<>()); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setRea("Rea"); + institutionRequest.setShareCapital("Share Capital"); + institutionRequest.setSupportEmail("jane.doe@example.org"); + institutionRequest.setSupportPhone("6625550144"); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); + } + + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution2() throws Exception { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(billing); + institution.setDataProtectionOfficer(dataProtectionOfficer); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOriginId("Ipa Code"); + institution.setOnboarding(new ArrayList<>()); + institution.setPaymentServiceProvider(paymentServiceProvider); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + when(institutionService.createInstitution(any())).thenReturn(institution); + + AttributesRequest attributesRequest = new AttributesRequest(); + attributesRequest.setCode("?"); + attributesRequest.setDescription("The characteristics of someone or something"); + attributesRequest.setOrigin("?"); + + ArrayList attributesRequestList = new ArrayList<>(); + attributesRequestList.add(attributesRequest); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(attributesRequestList); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(new ArrayList<>()); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution3() throws Exception { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + DataProtectionOfficer dataProtectionOfficer = new DataProtectionOfficer(); + dataProtectionOfficer.setAddress("42 Main St"); + dataProtectionOfficer.setEmail("jane.doe@example.org"); + dataProtectionOfficer.setPec("Pec"); + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider(); + paymentServiceProvider.setAbiCode("Abi Code"); + paymentServiceProvider.setBusinessRegisterNumber("42"); + paymentServiceProvider.setLegalRegisterName("Legal Register Name"); + paymentServiceProvider.setLegalRegisterNumber("42"); + paymentServiceProvider.setVatNumberGroup(true); + + Institution institution = new Institution(); + institution.setAddress("42 Main St"); + institution.setAttributes(new ArrayList<>()); + institution.setBilling(billing); + institution.setDataProtectionOfficer(dataProtectionOfficer); + institution.setDescription("The characteristics of someone or something"); + institution.setDigitalAddress("42 Main St"); + institution.setExternalId("42"); + institution.setGeographicTaxonomies(new ArrayList<>()); + institution.setId("42"); + institution.setInstitutionType(InstitutionType.PA); + institution.setOriginId("Ipa Code"); + institution.setOnboarding(new ArrayList<>()); + institution.setPaymentServiceProvider(paymentServiceProvider); + institution.setTaxCode("Tax Code"); + institution.setZipCode("21654"); + when(institutionService.createInstitution(any())).thenReturn(institution); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); + geoTaxonomies.setCode("?"); + geoTaxonomies.setDesc("The characteristics of someone or something"); + + ArrayList geoTaxonomiesList = new ArrayList<>(); + geoTaxonomiesList.add(geoTaxonomies); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(new ArrayList<>()); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"id\":\"42\",\"externalId\":\"42\",\"originId\":\"Ipa Code\",\"description\":\"The characteristics of someone or something\",\"institutionType\":\"PA\",\"digitalAddress\":\"42 Main St\",\"address\":\"42 Main St\",\"zipCode\":\"21654\",\"taxCode\":\"Tax Code\",\"geographicTaxonomies\":[],\"attributes\":[],\"onboarding\":[],\"paymentServiceProvider\":{\"abiCode\":\"Abi Code\",\"businessRegisterNumber\":\"42\",\"legalRegisterNumber\":\"42\",\"legalRegisterName\":\"Legal Register Name\",\"vatNumberGroup\":true},\"dataProtectionOfficer\":{\"address\":\"42 Main St\",\"email\":\"jane.doe@example.org\",\"pec\":\"Pec\"},\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution4() throws Exception { + when(institutionService.createInstitution(any())).thenReturn(new Institution()); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(new ArrayList<>()); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(new ArrayList<>()); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution5() throws Exception { + when(institutionService.createInstitution(any())).thenReturn(new Institution()); + + AttributesRequest attributesRequest = new AttributesRequest(); + attributesRequest.setCode("?"); + attributesRequest.setDescription("The characteristics of someone or something"); + attributesRequest.setOrigin("?"); + + ArrayList attributesRequestList = new ArrayList<>(); + attributesRequestList.add(attributesRequest); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(attributesRequestList); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(new ArrayList<>()); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution6() throws Exception { + when(institutionService.createInstitution(any())).thenReturn(new Institution()); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); + geoTaxonomies.setCode("?"); + geoTaxonomies.setDesc("The characteristics of someone or something"); + + ArrayList geoTaxonomiesList = new ArrayList<>(); + geoTaxonomiesList.add(geoTaxonomies); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(new ArrayList<>()); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution9() throws Exception { + when(institutionService.createInstitution(any())).thenReturn(new Institution()); + + AttributesRequest attributesRequest = new AttributesRequest(); + attributesRequest.setCode("?"); + attributesRequest.setDescription("The characteristics of someone or something"); + attributesRequest.setOrigin("?"); + + ArrayList attributesRequestList = new ArrayList<>(); + attributesRequestList.add(attributesRequest); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(attributesRequestList); + institutionRequest.setBusinessRegisterPlace("Business Register Place"); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(new ArrayList<>()); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setRea("Rea"); + institutionRequest.setShareCapital("Share Capital"); + institutionRequest.setSupportEmail("jane.doe@example.org"); + institutionRequest.setSupportPhone("6625550144"); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#createInstitution(InstitutionRequest)} + */ + @Test + void testCreateInstitution10() throws Exception { + when(institutionService.createInstitution(any())).thenReturn(new Institution()); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); + geoTaxonomies.setCode("?"); + geoTaxonomies.setDesc("The characteristics of someone or something"); + + ArrayList geoTaxonomiesList = new ArrayList<>(); + geoTaxonomiesList.add(geoTaxonomies); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(new ArrayList<>()); + institutionRequest.setBusinessRegisterPlace("Business Register Place"); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setRea("Rea"); + institutionRequest.setShareCapital("Share Capital"); + institutionRequest.setSupportEmail("jane.doe@example.org"); + institutionRequest.setSupportPhone("6625550144"); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setZipCode("21654"); + String content = (new ObjectMapper()).writeValueAsString(institutionRequest); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post("/institutions/insert/{externalId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(content); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"imported\":false,\"delegation\":false}")); + } + + /** + * Method under test: {@link InstitutionController#retrieveInstitutionProducts(String, List)} + */ + @Test + void testRetrieveInstitutionProductsEmpty() throws Exception { + when(institutionService.retrieveInstitutionById(any())).thenReturn(new Institution()); + when(institutionService.retrieveInstitutionProducts(any(), any())) + .thenReturn(new ArrayList<>()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/institutions/{id}/products", "42"); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("{\"products\":[]}")); + } + + /** + * Method under test: {@link InstitutionController#retrieveInstitutionProducts(String, List)} + */ + @Test + void testRetrieveInstitutionProducts() throws Exception { + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + when(institutionService.retrieveInstitutionById(any())).thenReturn(new Institution()); + when(institutionService.retrieveInstitutionProducts(any(), any())) + .thenReturn(onboardingList); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/institutions/{id}/products", onboarding.getProductId()); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string("{\"products\":[{\"id\":\"example\",\"state\":\"ACTIVE\"}]}")); + } + + /** + * Method under test: {@link InstitutionController#retrieveInstitutionGeoTaxonomies(String)} + */ + @Test + void testRetrieveInstitutionGeoTaxonomies() throws Exception { + when(institutionService.retrieveInstitutionById(any())).thenReturn(new Institution()); + when(institutionService.retrieveInstitutionGeoTaxonomies(any())).thenReturn(new ArrayList<>()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/institutions/{id}/geotaxonomies", + "42"); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content().string("[]")); + } + + @Test + void createPgInstitution() throws Exception { + Authentication authentication = Mockito.mock(Authentication.class); + SecurityContext securityContext = Mockito.mock(SecurityContext.class); + SecurityContextHolder.setContext(securityContext); + when(authentication.getPrincipal()).thenReturn(SelfCareUser.builder("id").build()); + + CreatePgInstitutionRequest request = new CreatePgInstitutionRequest(); + request.setTaxId("taxId"); + request.setExistsInRegistry(true); + ObjectMapper mapper = new ObjectMapper(); + when(institutionService.createPgInstitution(any(), any(), anyBoolean(), any())).thenReturn(new Institution()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/pg") + .contentType(MediaType.APPLICATION_JSON) + .content(mapper.writeValueAsString(request)) + .principal(authentication); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isCreated()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#updateInstitution(String, InstitutionPut, Authentication)} (String, PgInstitutionPut, Authentication)} + */ + @Test + void testUpdateInstitutionDescription() throws Exception { + Authentication authentication = Mockito.mock(Authentication.class); + SecurityContext securityContext = Mockito.mock(SecurityContext.class); + SecurityContextHolder.setContext(securityContext); + when(authentication.getPrincipal()).thenReturn(SelfCareUser.builder("id").build()); + + InstitutionPut pgInstitutionPut = new InstitutionPut(); + pgInstitutionPut.setDescription("desc"); + pgInstitutionPut.setDigitalAddress("digitalAddress"); + pgInstitutionPut.setParentDescription("parentDesc"); + when(institutionService.updateInstitution(any(), any(), any())).thenReturn(new Institution()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.put("/institutions/42") + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(pgInstitutionPut)) + .principal(authentication); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + @Test + void testUpdateInstitution() throws Exception { + + InstitutionPut institutionPut = new InstitutionPut(); + institutionPut.setGeographicTaxonomyCodes(new ArrayList<>()); + SecurityContext securityContext = Mockito.mock(SecurityContext.class); + Authentication authentication = Mockito.mock(Authentication.class); + SecurityContextHolder.setContext(securityContext); + when(authentication.getPrincipal()).thenReturn(SelfCareUser.builder("id").build()); + + when(institutionService.updateInstitution(any(), any(), any())).thenReturn(new Institution()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.put("/institutions/42") + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(institutionPut)) + .principal(authentication); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + @Test + void testGetValidInstitutionToOnboard() throws Exception { + InstitutionToOnboard institution = new InstitutionToOnboard(); + List list = new ArrayList<>(); + list.add(institution); + List validInstitutions = new ArrayList<>(); + ValidInstitution validInstitution = new ValidInstitution(); + validInstitutions.add(validInstitution); + when(institutionService.retrieveInstitutionByExternalIds(any(), any())).thenReturn(validInstitutions); + + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/institutions/onboarded/{productId}", "42") + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(list)); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")); + } + + /** + * Method under test: {@link InstitutionController#updateCreatedAt(String, CreatedAtRequest)} + */ + @Test + void updateCreatedAt() throws Exception { + // Given + String institutionIdMock = "institutionId"; + String productIdMock = "productId"; + OffsetDateTime createdAtMock = OffsetDateTime.parse("2020-11-01T02:15:30+01:00"); + + CreatedAtRequest createdAtRequest = new CreatedAtRequest(); + createdAtRequest.setCreatedAt(createdAtMock); + createdAtRequest.setProductId(productIdMock); + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.put(BASE_URL + "/{institutionId}/createdAt", institutionIdMock) + .content(new ObjectMapper().findAndRegisterModules().writeValueAsString(createdAtRequest)) + .contentType(APPLICATION_JSON_VALUE) + .accept(APPLICATION_JSON_VALUE); + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()); + // Then + verify(institutionService, times(1)) + .updateCreatedAt(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()); + verifyNoMoreInteractions(institutionService); + } + + /** + * Method under test: {@link InstitutionController#findFromProduct(String, Integer, Integer)} + */ + @Test + void findFromProduct() throws Exception { + // Given + String productIdMock = "productId"; + Integer pageMock = 0; + Integer sizeMock = 2; + + // When + when(institutionService.getInstitutionsByProductId(any(), any(), any())).thenReturn(List.of(staticInstitution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get(BASE_URL + "/products/{productId}", productIdMock) + .param("page", pageMock.toString()) + .param("size", sizeMock.toString()); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) + .build() + .perform(requestBuilder); + actualPerformResult + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andExpect(MockMvcResultMatchers.content() + .string("{\"items\":[{\"id\":\"42\",\"externalId\":null,\"origin\":null,\"originId\":null,\"description\":\"description\",\"institutionType\":\"PG\",\"digitalAddress\":null,\"address\":null,\"zipCode\":null,\"taxCode\":null,\"onboardings\":{\"example\":{\"productId\":\"example\",\"tokenId\":\"tokenId\",\"status\":\"ACTIVE\",\"contract\":\"contract\",\"pricingPlan\":\"setPricingPlan\",\"billing\":{\"vatNumber\":\"example\",\"taxCodeInvoicing\":\"example\",\"recipientCode\":\"example\",\"publicServices\":false},\"createdAt\":null,\"updatedAt\":null,\"closedAt\":null,\"isAggregator\":true}},\"geographicTaxonomies\":null,\"attributes\":[{\"origin\":null,\"code\":\"code\",\"description\":\"description\"}],\"paymentServiceProvider\":null,\"dataProtectionOfficer\":null,\"rea\":null,\"shareCapital\":null,\"businessRegisterPlace\":null,\"supportEmail\":null,\"supportPhone\":null,\"imported\":false,\"subunitCode\":null,\"subunitType\":null,\"aooParentCode\":null,\"createdAt\":null,\"updatedAt\":null}]}"));; + // Then + verify(institutionService, times(1)) + .getInstitutionsByProductId(productIdMock, pageMock, sizeMock); + verifyNoMoreInteractions(institutionService); + } + + /** + * Method under test: {@link InstitutionController#getInstitutionBrokers(String, InstitutionType)} + */ + @Test + void getInstitutionBrokers() throws Exception { + // Given + final String productId = "test"; + final InstitutionType type = InstitutionType.PT; + Institution institution = new Institution(); + institution.setId("id"); + institution.setTaxCode("taxCode"); + + // When + when(institutionService.getInstitutionBrokers(any(), any())).thenReturn(List.of(institution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get(BASE_URL + "/{productId}/brokers/{institutionType}", productId, type); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) + .build() + .perform(requestBuilder); + MvcResult result = actualPerformResult + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType("application/json")) + .andReturn(); + + List response = objectMapper.readValue( + result.getResponse().getContentAsString(), + new TypeReference<>() { + }); + + // Then + assertNotNull(response); + assertNotNull(response.get(0)); + assertEquals(response.get(0).getId(), institution.getId()); + assertEquals(response.get(0).getTaxCode(), institution.getTaxCode()); + verify(institutionService, times(1)) + .getInstitutionBrokers(productId, type); + verifyNoMoreInteractions(institutionService); + } + + /** + * Method under test: {@link InstitutionController#getInstitutionBrokers(String, InstitutionType)} + */ + @Test + void getInstitutionBrokersWithBadRequest() throws Exception { + // Given + final String productId = "test"; + final String type = "FAKED-TYPE"; + + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get(BASE_URL + "/{productId}/brokers/{institutionType}", productId, type); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) + .build() + .perform(requestBuilder); + + actualPerformResult.andExpect(MockMvcResultMatchers.status().isBadRequest()); + + } + + + + @Test + void updateCreatedAt_invalidDate() throws Exception { + // Given + + + String institutionIdMock = "institutionId"; + String productIdMock = "productId"; + OffsetDateTime createdAtMock = OffsetDateTime.now().minusHours(10); + CreatedAtRequest createdAtRequest = new CreatedAtRequest(); + createdAtRequest.setProductId(productIdMock); + createdAtRequest.setCreatedAt(createdAtMock); + // When + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .put(BASE_URL + "/{institutionId}/createdAt", institutionIdMock) + .content(objectMapper.writeValueAsString(createdAtRequest)) + .contentType(APPLICATION_JSON_VALUE) + .accept(APPLICATION_JSON_VALUE); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()); + } + + /** + * Method under test: {@link InstitutionController#onboardingInstitution(InstitutionOnboardingRequest, String)} + */ + @Test + void institutionOnboarding() throws Exception { + + + final String institutionId = "institutionId"; + InstitutionOnboardingRequest request = new InstitutionOnboardingRequest(); + request.setProductId("id"); + request.setIsAggregator(true); + + when(onboardingService.persistOnboarding(any(), any(), any(), any())) + .thenAnswer(invocation -> { + StringBuilder status = invocation.getArgument(3); + status.append(HttpStatus.CREATED.value()); + return new Institution(); + }); + + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .post(BASE_URL + "/{id}/onboarding/", institutionId) + .content(objectMapper.writeValueAsString(request)) + .contentType(MediaType.APPLICATION_JSON); + + MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isCreated()); + } + + @Test + void deleteOnboardedInstitution_test() throws Exception { + + String institutionId = UUID.randomUUID().toString(); + String productId = "prod-io"; + + doNothing().when(onboardingService).deleteOnboardedInstitution(institutionId, productId); + + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.delete("/institutions/{id}/products/{productId}", institutionId, productId); + + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(institutionController) + .build() + .perform(requestBuilder); + + actualPerformResult + .andExpect(MockMvcResultMatchers.status().isNoContent()) + .andExpect(MockMvcResultMatchers.content().string("")); + } + +} diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ManagementControllerTest.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ManagementControllerTest.java new file mode 100644 index 0000000..85c41bf --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/ManagementControllerTest.java @@ -0,0 +1,56 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.core.InstitutionService; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.web.model.institution.BulkPartiesSeed; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.List; + +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.when; + +@ContextConfiguration(classes = {ManagementController.class}) +@ExtendWith(MockitoExtension.class) +class ManagementControllerTest { + @Mock + private InstitutionService institutionService; + + @InjectMocks + private ManagementController managementController; + + @Test + void testGetInstitutionsByIds() throws Exception { + BulkPartiesSeed bulkPartiesSeed = new BulkPartiesSeed(); + bulkPartiesSeed.setPartyIdentifiers(List.of("42")); + ObjectMapper mapper = new ObjectMapper(); + Institution institution = new Institution(); + institution.setId("id"); + Onboarding onboarding = new Onboarding(); + onboarding.setProductId("productId"); + onboarding.setStatus(RelationshipState.ACTIVE); + institution.setOnboarding(List.of(onboarding)); + when(institutionService.retrieveInstitutionByIds(any())).thenReturn(List.of(institution)); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/bulk/institutions") + .contentType(MediaType.APPLICATION_JSON) + .content(mapper.writeValueAsString(bulkPartiesSeed)); + MockMvcBuilders.standaloneSetup(managementController) + .build() + .perform(requestBuilder) + .andExpect(MockMvcResultMatchers.status().isOk()); + } +} + diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/OnboardingControllerTest.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/OnboardingControllerTest.java new file mode 100644 index 0000000..1675844 --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/controller/OnboardingControllerTest.java @@ -0,0 +1,85 @@ +package it.pagopa.selfcare.mscore.web.controller; + +import it.pagopa.selfcare.mscore.core.OnboardingService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.request.RequestContextHolder; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doNothing; + +@ContextConfiguration(classes = {OnboardingController.class}) +@ExtendWith(MockitoExtension.class) +class OnboardingControllerTest { + @InjectMocks + private OnboardingController onboardingController; + + @Mock + private OnboardingService onboardingService; + + @BeforeEach + void resetContext() { + SecurityContextHolder.clearContext(); + RequestContextHolder.resetRequestAttributes(); + } + + /** + * Method under test: {@link OnboardingController#verifyOnboardingInfo(String, String, String)} + */ + @Test + void shouldVerifyOnboardingInfoBySubunit() throws Exception { + doNothing().when(onboardingService).verifyOnboardingInfoSubunit(any(), any(), any()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .head("/onboarding/") + .queryParam("taxCode", "42") + .queryParam("productId", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(onboardingController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isNoContent()); + } + + /** + * Method under test: {@link OnboardingController#verifyOnboardingInfoByFilters(String, String, String, String, String, String)} + */ + @Test + void shouldVerifyOnboardingInfoByFiltersSuccess() throws Exception { + doNothing().when(onboardingService).verifyOnboardingInfoByFilters(any()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .head("/onboarding/verify") + .queryParam("origin", "42") + .queryParam("originId", "42") + .queryParam("productId", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(onboardingController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isNoContent()); + } + + /** + * Method under test: {@link OnboardingController#verifyOnboardingInfo(String, String)} + */ + @Test + void shouldVerifyOnboardingInfoByExternalId() throws Exception { + doNothing().when(onboardingService).verifyOnboardingInfo(any(), any()); + MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders + .head("/onboarding/institution/{externalId}/products/{productId}", "42", "42"); + ResultActions actualPerformResult = MockMvcBuilders.standaloneSetup(onboardingController) + .build() + .perform(requestBuilder); + actualPerformResult.andExpect(MockMvcResultMatchers.status().isNoContent()); + } + + } + diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandlerTest.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandlerTest.java new file mode 100644 index 0000000..25f5bfa --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/exception/CustomExceptionHandlerTest.java @@ -0,0 +1,163 @@ +package it.pagopa.selfcare.mscore.web.exception; + +import it.pagopa.selfcare.mscore.exception.InvalidRequestException; +import it.pagopa.selfcare.mscore.exception.MsCoreException; +import it.pagopa.selfcare.mscore.exception.ResourceConflictException; +import it.pagopa.selfcare.mscore.exception.ResourceNotFoundException; +import it.pagopa.selfcare.mscore.model.error.Problem; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.core.MethodParameter; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.validation.BindException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.context.request.ServletWebRequest; +import org.springframework.web.context.request.WebRequest; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Constructor; +import java.util.List; +import java.util.Objects; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@ExtendWith(MockitoExtension.class) +class CustomExceptionHandlerTest { + /** + * Method under test: {@link CustomExceptionHandler#handleMissingServletRequestParameter(MissingServletRequestParameterException, HttpHeaders, HttpStatus, WebRequest)} + */ + @Test + void testHandleMissingServletRequestParameter() { + CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); + MissingServletRequestParameterException ex = new MissingServletRequestParameterException("Parameter Name", + "Parameter Type"); + + HttpHeaders httpHeaders = new HttpHeaders(); + ResponseEntity actualHandleMissingServletRequestParameterResult = customExceptionHandler + .handleMissingServletRequestParameter(ex, httpHeaders, HttpStatus.CONTINUE, + new ServletWebRequest(new MockHttpServletRequest())); + assertTrue(actualHandleMissingServletRequestParameterResult.hasBody()); + assertEquals(1, actualHandleMissingServletRequestParameterResult.getHeaders().size()); + assertEquals(HttpStatus.BAD_REQUEST, actualHandleMissingServletRequestParameterResult.getStatusCode()); + assertEquals(400, ((Problem) Objects.requireNonNull(actualHandleMissingServletRequestParameterResult.getBody())).getStatus().intValue()); + assertEquals(1, ((Problem) actualHandleMissingServletRequestParameterResult.getBody()).getErrors().size()); + List getResult = httpHeaders.get(HttpHeaders.CONTENT_TYPE); + assertEquals(1, Objects.requireNonNull(getResult).size()); + assertEquals("application/json", getResult.get(0)); + } + + /** + * Method under test: {@link CustomExceptionHandler#handleMethodArgumentNotValid(MethodArgumentNotValidException, HttpHeaders, HttpStatus, WebRequest)} + */ + @Test + void testHandleMethodArgumentNotValid() throws NoSuchMethodException { + CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); + Constructor constructor = CustomExceptionHandler.class.getConstructor(); + MethodParameter parameter = new MethodParameter(constructor,-1); + + MethodArgumentNotValidException ex = new MethodArgumentNotValidException(parameter, + new BindException("Target", "Object Name")); + + HttpHeaders headers = new HttpHeaders(); + customExceptionHandler.handleMethodArgumentNotValid(ex, headers, HttpStatus.CONTINUE, + new ServletWebRequest(new MockHttpServletRequest())); + + HttpHeaders httpHeaders = new HttpHeaders(); + ResponseEntity actualHandleMissingServletRequestParameterResult = customExceptionHandler + .handleMethodArgumentNotValid(ex, httpHeaders, HttpStatus.CONTINUE, + new ServletWebRequest(new MockHttpServletRequest())); + assertTrue(actualHandleMissingServletRequestParameterResult.hasBody()); + assertEquals(1, actualHandleMissingServletRequestParameterResult.getHeaders().size()); + assertEquals(HttpStatus.BAD_REQUEST, actualHandleMissingServletRequestParameterResult.getStatusCode()); + assertEquals(400, ((Problem) Objects.requireNonNull(actualHandleMissingServletRequestParameterResult.getBody())).getStatus().intValue()); + assertEquals(1, ((Problem) actualHandleMissingServletRequestParameterResult.getBody()).getErrors().size()); + } + + /** + * Method under test: {@link CustomExceptionHandler#handleResourceNotFoundException(HttpServletRequest, ResourceNotFoundException)} + */ + @Test + void testHandleResourceNotFoundException() { + CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); + MockHttpServletRequest request = new MockHttpServletRequest(); + + ResponseEntity actualHandleResourceNotFoundExceptionResult = customExceptionHandler + .handleResourceNotFoundException(request, new ResourceNotFoundException("An error occurred", "Code")); + assertTrue(actualHandleResourceNotFoundExceptionResult.hasBody()); + assertEquals(1, actualHandleResourceNotFoundExceptionResult.getHeaders().size()); + assertEquals(HttpStatus.NOT_FOUND, actualHandleResourceNotFoundExceptionResult.getStatusCode()); + Problem body = actualHandleResourceNotFoundExceptionResult.getBody(); + assertEquals(404, Objects.requireNonNull(body).getStatus().intValue()); + assertEquals(1, body.getErrors().size()); + } + + /** + * Method under test: {@link CustomExceptionHandler#handleResourceConflictException(HttpServletRequest, ResourceConflictException)} + */ + @Test + void testHandleResourceConflictException() { + CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); + MockHttpServletRequest request = new MockHttpServletRequest(); + ResponseEntity actualHandleResourceConflictExceptionResult = customExceptionHandler + .handleResourceConflictException(request, new ResourceConflictException("An error occurred", "Code")); + assertTrue(actualHandleResourceConflictExceptionResult.hasBody()); + assertEquals(1, actualHandleResourceConflictExceptionResult.getHeaders().size()); + assertEquals(HttpStatus.CONFLICT, actualHandleResourceConflictExceptionResult.getStatusCode()); + Problem body = actualHandleResourceConflictExceptionResult.getBody(); + assertEquals(409, Objects.requireNonNull(body).getStatus().intValue()); + assertEquals(1, body.getErrors().size()); + } + + /** + * Method under test: {@link CustomExceptionHandler#handleInvalidRequestException(HttpServletRequest, InvalidRequestException)} + */ + @Test + void testHandleInvalidRequestException() { + CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); + MockHttpServletRequest request = new MockHttpServletRequest(); + ResponseEntity actualHandleInvalidRequestExceptionResult = customExceptionHandler + .handleInvalidRequestException(request, new InvalidRequestException("An error occurred", "Code")); + assertTrue(actualHandleInvalidRequestExceptionResult.hasBody()); + assertEquals(1, actualHandleInvalidRequestExceptionResult.getHeaders().size()); + assertEquals(HttpStatus.BAD_REQUEST, actualHandleInvalidRequestExceptionResult.getStatusCode()); + Problem body = actualHandleInvalidRequestExceptionResult.getBody(); + assertEquals(400, Objects.requireNonNull(body).getStatus().intValue()); + assertEquals(1, body.getErrors().size()); + } + + /** + * Method under test: {@link CustomExceptionHandler#handleException(HttpServletRequest, Exception)} + */ + @Test + void testHandleException() { + CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); + MockHttpServletRequest request = new MockHttpServletRequest(); + ResponseEntity actualHandleExceptionResult = customExceptionHandler.handleException(request, + new Exception()); + assertTrue(actualHandleExceptionResult.hasBody()); + assertTrue(actualHandleExceptionResult.getHeaders().isEmpty()); + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualHandleExceptionResult.getStatusCode()); + Problem body = actualHandleExceptionResult.getBody(); + assertEquals(1, Objects.requireNonNull(body).getErrors().size()); + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR.value(), body.getStatus().intValue()); + } + + @Test + void handleMsCoreException() { + CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); + MockHttpServletRequest request = new MockHttpServletRequest(); + ResponseEntity actualHandleInvalidRequestExceptionResult = customExceptionHandler + .handleMsCoreException(request, new MsCoreException("An error occurred", "Code")); + assertTrue(actualHandleInvalidRequestExceptionResult.hasBody()); + assertEquals(1, actualHandleInvalidRequestExceptionResult.getHeaders().size()); + } + + +} + diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/filter/LogFilterTest.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/filter/LogFilterTest.java new file mode 100644 index 0000000..447d906 --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/filter/LogFilterTest.java @@ -0,0 +1,63 @@ +package it.pagopa.selfcare.mscore.web.filter; + +import org.apache.catalina.connector.Response; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import java.io.IOException; +import java.io.UnsupportedEncodingException; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.*; + +@ExtendWith(SpringExtension.class) +class LogFilterTest { + @InjectMocks + private LogFilter logFilter; + + @Test + void testDoFilter() throws IOException, ServletException { + MockHttpServletRequest request = new MockHttpServletRequest(); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + doNothing().when(filterChain).doFilter(any(), any()); + logFilter.doFilter(request, response, filterChain); + verify(filterChain).doFilter(any(), any()); + } + + /** + * Method under test: {@link LogFilter#doFilter(ServletRequest, ServletResponse, FilterChain)} + */ + @Test + void testDoFilter4() throws IOException, ServletException { + MockHttpServletRequest request = new MockHttpServletRequest(); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + doNothing().when(filterChain).doFilter(any(), any()); + logFilter.doFilter(request, response, filterChain); + verify(filterChain).doFilter(any(), any()); + } + + /** + * Method under test: {@link LogFilter#doFilter(ServletRequest, ServletResponse, FilterChain)} + */ + @Test + void testDoFilter5() throws IOException, ServletException { + MockHttpServletRequest request = new MockHttpServletRequest(); + Response response = new Response(); + FilterChain filterChain = mock(FilterChain.class); + doThrow(new UnsupportedEncodingException()).when(filterChain) + .doFilter(any(), any()); + assertThrows(UnsupportedEncodingException.class, () -> logFilter.doFilter(request, response, filterChain)); + verify(filterChain).doFilter(any(), any()); + } +} + diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustomTest.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustomTest.java new file mode 100644 index 0000000..e6b90e2 --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/InstitutionMapperCustomTest.java @@ -0,0 +1,1248 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import it.pagopa.selfcare.commons.base.security.PartyRole; +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.Env; +import it.pagopa.selfcare.mscore.constant.Origin; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.model.user.ProductManagerInfo; +import it.pagopa.selfcare.mscore.web.TestUtils; +import it.pagopa.selfcare.mscore.web.model.institution.*; +import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +class InstitutionMapperCustomTest { + + Institution createDmmyInstitution() { + + Institution dummyInstitution = new Institution(); + dummyInstitution.setId("42"); + dummyInstitution.setExternalId("42"); + dummyInstitution.setOrigin(Origin.MOCK.name()); + dummyInstitution.setOriginId("42"); + dummyInstitution.setDescription("The characteristics of someone or something"); + dummyInstitution.setInstitutionType(InstitutionType.PA); + dummyInstitution.setDigitalAddress("42 Main St"); + dummyInstitution.setTaxCode("taxCode"); + dummyInstitution.setDataProtectionOfficer(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); + dummyInstitution.setAddress("42 Main St"); + dummyInstitution.setBusinessRegisterPlace("Business Register Place"); + dummyInstitution.setRea("Rea"); + dummyInstitution.setZipCode("zipCpde"); + dummyInstitution.setShareCapital("Share Capital"); + + + PaymentServiceProvider paymentServiceProvider = new PaymentServiceProvider("Abi Code", "42", + "Legal Register Name", "42", true); + dummyInstitution.setPaymentServiceProvider(paymentServiceProvider); + + return dummyInstitution; + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} + */ + @Test + void testToInstitutionManagerResponse6() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + + ProductManagerInfo productManagerInfo = new ProductManagerInfo(); + productManagerInfo.setProducts(new ArrayList<>()); + productManagerInfo.setInstitution(institution); + InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom + .toInstitutionManagerResponse(productManagerInfo, "42"); + assertNull(actualToInstitutionManagerResponseResult.getTo()); + assertNull(actualToInstitutionManagerResponseResult.getFrom()); + assertEquals("Pricing Plan", actualToInstitutionManagerResponseResult.getPricingPlan()); + InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); + assertNull(institutionUpdate.getTaxCode()); + assertNull(institutionUpdate.getSupportPhone()); + assertNull(institutionUpdate.getSupportEmail()); + assertNull(institutionUpdate.getShareCapital()); + assertNull(institutionUpdate.getRea()); + assertNull(institutionUpdate.getInstitutionType()); + BillingResponse billing1 = actualToInstitutionManagerResponseResult.getBilling(); + assertTrue(billing1.isPublicServices()); + assertEquals("Recipient Code", billing1.getRecipientCode()); + assertNull(institutionUpdate.getBusinessRegisterPlace()); + assertEquals("42", billing1.getVatNumber()); + assertNull(institutionUpdate.getDescription()); + assertNull(institutionUpdate.getDigitalAddress()); + assertNull(institutionUpdate.getZipCode()); + assertFalse(institutionUpdate.isImported()); + assertNull(institutionUpdate.getAddress()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} + */ + @Test + void testToInstitutionManagerResponse7() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract("Contract"); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole("Product Role"); + onboardedProduct.setRelationshipId("42"); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setTokenId("42"); + onboardedProduct.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct); + + ProductManagerInfo productManagerInfo = new ProductManagerInfo(); + productManagerInfo.setProducts(onboardedProductList); + productManagerInfo.setInstitution(institution); + InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom + .toInstitutionManagerResponse(productManagerInfo, "42"); + assertNull(actualToInstitutionManagerResponseResult.getUpdatedAt()); + assertNull(actualToInstitutionManagerResponseResult.getCreatedAt()); + assertEquals("42", actualToInstitutionManagerResponseResult.getId()); + assertNull(actualToInstitutionManagerResponseResult.getTo()); + assertEquals(RelationshipState.PENDING, actualToInstitutionManagerResponseResult.getState()); + assertNull(actualToInstitutionManagerResponseResult.getFrom()); + assertEquals("Pricing Plan", actualToInstitutionManagerResponseResult.getPricingPlan()); + ProductInfo product = actualToInstitutionManagerResponseResult.getProduct(); + assertEquals("42", product.getId()); + assertNull(product.getCreatedAt()); + InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); + assertNull(institutionUpdate.getZipCode()); + assertNull(institutionUpdate.getTaxCode()); + assertNull(institutionUpdate.getSupportPhone()); + assertNull(institutionUpdate.getSupportEmail()); + assertNull(institutionUpdate.getShareCapital()); + assertNull(institutionUpdate.getRea()); + assertNull(institutionUpdate.getInstitutionType()); + BillingResponse billing1 = actualToInstitutionManagerResponseResult.getBilling(); + assertTrue(billing1.isPublicServices()); + assertEquals("Recipient Code", billing1.getRecipientCode()); + assertNull(institutionUpdate.getBusinessRegisterPlace()); + assertEquals("42", billing1.getVatNumber()); + assertNull(institutionUpdate.getDescription()); + assertNull(institutionUpdate.getDigitalAddress()); + assertEquals("Product Role", product.getRole()); + assertFalse(institutionUpdate.isImported()); + assertNull(institutionUpdate.getAddress()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} + */ + @Test + void testToInstitutionManagerResponse8() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setContract("Contract"); + onboardedProduct.setCreatedAt(null); + onboardedProduct.setEnv(Env.ROOT); + onboardedProduct.setProductId("42"); + onboardedProduct.setProductRole("Product Role"); + onboardedProduct.setRelationshipId("42"); + onboardedProduct.setRole(PartyRole.MANAGER); + onboardedProduct.setStatus(RelationshipState.PENDING); + onboardedProduct.setTokenId("42"); + onboardedProduct.setUpdatedAt(null); + + OnboardedProduct onboardedProduct1 = new OnboardedProduct(); + onboardedProduct1.setContract("it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct"); + onboardedProduct1.setCreatedAt(null); + onboardedProduct1.setEnv(Env.DEV); + onboardedProduct1.setProductId("Product Id"); + onboardedProduct1.setProductRole("it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct"); + onboardedProduct1.setRelationshipId("Relationship Id"); + onboardedProduct1.setRole(PartyRole.DELEGATE); + onboardedProduct1.setStatus(RelationshipState.ACTIVE); + onboardedProduct1.setTokenId("ABC123"); + onboardedProduct1.setUpdatedAt(null); + + ArrayList onboardedProductList = new ArrayList<>(); + onboardedProductList.add(onboardedProduct1); + onboardedProductList.add(onboardedProduct); + + ProductManagerInfo productManagerInfo = new ProductManagerInfo(); + productManagerInfo.setProducts(onboardedProductList); + productManagerInfo.setInstitution(institution); + InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom + .toInstitutionManagerResponse(productManagerInfo, "42"); + assertNull(actualToInstitutionManagerResponseResult.getUpdatedAt()); + assertNull(actualToInstitutionManagerResponseResult.getCreatedAt()); + assertEquals("42", actualToInstitutionManagerResponseResult.getId()); + assertNull(actualToInstitutionManagerResponseResult.getTo()); + assertEquals(RelationshipState.PENDING, actualToInstitutionManagerResponseResult.getState()); + assertNull(actualToInstitutionManagerResponseResult.getFrom()); + assertEquals("Pricing Plan", actualToInstitutionManagerResponseResult.getPricingPlan()); + ProductInfo product = actualToInstitutionManagerResponseResult.getProduct(); + assertEquals("42", product.getId()); + assertNull(product.getCreatedAt()); + InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); + assertNull(institutionUpdate.getZipCode()); + assertNull(institutionUpdate.getTaxCode()); + assertNull(institutionUpdate.getSupportPhone()); + assertNull(institutionUpdate.getSupportEmail()); + assertNull(institutionUpdate.getShareCapital()); + assertNull(institutionUpdate.getRea()); + assertNull(institutionUpdate.getInstitutionType()); + BillingResponse billing1 = actualToInstitutionManagerResponseResult.getBilling(); + assertTrue(billing1.isPublicServices()); + assertEquals("Recipient Code", billing1.getRecipientCode()); + assertNull(institutionUpdate.getBusinessRegisterPlace()); + assertEquals("42", billing1.getVatNumber()); + assertNull(institutionUpdate.getDescription()); + assertNull(institutionUpdate.getDigitalAddress()); + assertEquals("Product Role", product.getRole()); + assertFalse(institutionUpdate.isImported()); + assertNull(institutionUpdate.getAddress()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} + */ + @Test + void testToInstitutionManagerResponse9() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + Institution toInstitutionResult = InstitutionMapperCustom.toInstitution(new InstitutionRequest(), "42"); + toInstitutionResult.setOnboarding(onboardingList); + + ProductManagerInfo productManagerInfo = new ProductManagerInfo(); + ArrayList onboardedProductList = new ArrayList<>(); + productManagerInfo.setProducts(onboardedProductList); + productManagerInfo.setInstitution(toInstitutionResult); + InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom + .toInstitutionManagerResponse(productManagerInfo, "42"); + assertNull(actualToInstitutionManagerResponseResult.getTo()); + assertNull(actualToInstitutionManagerResponseResult.getFrom()); + assertEquals("Pricing Plan", actualToInstitutionManagerResponseResult.getPricingPlan()); + InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); + assertNull(institutionUpdate.getTaxCode()); + assertNull(institutionUpdate.getSupportPhone()); + assertNull(institutionUpdate.getSupportEmail()); + assertNull(institutionUpdate.getShareCapital()); + assertNull(institutionUpdate.getRea()); + assertNull(institutionUpdate.getInstitutionType()); + BillingResponse billing1 = actualToInstitutionManagerResponseResult.getBilling(); + assertTrue(billing1.isPublicServices()); + assertEquals("Recipient Code", billing1.getRecipientCode()); + assertNull(institutionUpdate.getBusinessRegisterPlace()); + assertEquals("42", billing1.getVatNumber()); + assertNull(institutionUpdate.getDescription()); + assertNull(institutionUpdate.getDigitalAddress()); + assertNull(institutionUpdate.getZipCode()); + assertFalse(institutionUpdate.isImported()); + assertNull(institutionUpdate.getAddress()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagerResponse(ProductManagerInfo, String)} + */ + @Test + void testToInstitutionManagerResponse10() { + Billing billing = TestUtils.createSimpleBilling(); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = createDmmyInstitution(); + institution.setOnboarding(onboardingList); + institution.setImported(true); + + ProductManagerInfo productManagerInfo = new ProductManagerInfo(); + ArrayList onboardedProductList = new ArrayList<>(); + productManagerInfo.setProducts(onboardedProductList); + productManagerInfo.setInstitution(institution); + + InstitutionManagerResponse actualToInstitutionManagerResponseResult = InstitutionMapperCustom + .toInstitutionManagerResponse(productManagerInfo, "42"); + + assertEquals("42", actualToInstitutionManagerResponseResult.getTo()); + assertNull(actualToInstitutionManagerResponseResult.getFrom()); + assertEquals(onboarding.getPricingPlan(), actualToInstitutionManagerResponseResult.getPricingPlan()); + InstitutionUpdateResponse institutionUpdate = actualToInstitutionManagerResponseResult.getInstitutionUpdate(); + assertEquals(institution.getTaxCode(), institutionUpdate.getTaxCode()); + assertEquals(institution.getSupportPhone(), institutionUpdate.getSupportPhone()); + assertEquals(institution.getSupportEmail(), institutionUpdate.getSupportEmail()); + assertEquals(institution.getShareCapital(), institutionUpdate.getShareCapital()); + assertEquals(institution.getRea(), institutionUpdate.getRea()); + assertEquals(InstitutionType.PA, institutionUpdate.getInstitutionType()); + BillingResponse billing2 = actualToInstitutionManagerResponseResult.getBilling(); + assertTrue(billing2.isPublicServices()); + assertEquals("Recipient Code", billing2.getRecipientCode()); + assertEquals("Business Register Place", institutionUpdate.getBusinessRegisterPlace()); + assertEquals("42", billing2.getVatNumber()); + assertEquals("The characteristics of someone or something", institutionUpdate.getDescription()); + assertEquals(institution.getDigitalAddress(), institutionUpdate.getDigitalAddress()); + assertEquals(institution.getZipCode(), institutionUpdate.getZipCode()); + assertTrue(institutionUpdate.isImported()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionBillingResponse(Institution, String)} + */ + @Test + void testToInstitutionBillingResponse2() { + Institution institution = new Institution(); + institution.setOnboarding(new ArrayList<>()); + InstitutionBillingResponse actualToInstitutionBillingResponseResult = InstitutionMapperCustom + .toInstitutionBillingResponse(institution, "42"); + assertNull(actualToInstitutionBillingResponseResult.getAddress()); + assertNull(actualToInstitutionBillingResponseResult.getZipCode()); + assertNull(actualToInstitutionBillingResponseResult.getTaxCode()); + assertNull(actualToInstitutionBillingResponseResult.getOriginId()); + assertNull(actualToInstitutionBillingResponseResult.getOrigin()); + assertNull(actualToInstitutionBillingResponseResult.getInstitutionType()); + assertNull(actualToInstitutionBillingResponseResult.getInstitutionId()); + assertNull(actualToInstitutionBillingResponseResult.getExternalId()); + assertNull(actualToInstitutionBillingResponseResult.getDigitalAddress()); + assertNull(actualToInstitutionBillingResponseResult.getDescription()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionBillingResponse(Institution, String)} + */ + @Test + void testToInstitutionBillingResponse3() { + assertNull(InstitutionMapperCustom.toInstitutionBillingResponse(null, "42")); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionBillingResponse(Institution, String)} + */ + @Test + void testToInstitutionBillingResponse4() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + InstitutionBillingResponse actualToInstitutionBillingResponseResult = InstitutionMapperCustom + .toInstitutionBillingResponse(institution, "42"); + assertNull(actualToInstitutionBillingResponseResult.getAddress()); + assertNull(actualToInstitutionBillingResponseResult.getZipCode()); + assertNull(actualToInstitutionBillingResponseResult.getTaxCode()); + assertEquals("Pricing Plan", actualToInstitutionBillingResponseResult.getPricingPlan()); + assertNull(actualToInstitutionBillingResponseResult.getOriginId()); + assertNull(actualToInstitutionBillingResponseResult.getOrigin()); + assertNull(actualToInstitutionBillingResponseResult.getInstitutionType()); + assertNull(actualToInstitutionBillingResponseResult.getInstitutionId()); + assertNull(actualToInstitutionBillingResponseResult.getExternalId()); + assertNull(actualToInstitutionBillingResponseResult.getDigitalAddress()); + assertNull(actualToInstitutionBillingResponseResult.getDescription()); + BillingResponse billing1 = actualToInstitutionBillingResponseResult.getBilling(); + assertEquals("Recipient Code", billing1.getRecipientCode()); + assertTrue(billing1.isPublicServices()); + assertEquals("42", billing1.getVatNumber()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionBillingResponse(Institution, String)} + */ + @Test + void testToInstitutionBillingResponse5() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + Billing billing1 = new Billing(); + billing1.setPublicServices(false); + billing1.setRecipientCode("it.pagopa.selfcare.mscore.model.institution.Billing"); + billing1.setVatNumber("Vat Number"); + + Onboarding onboarding1 = new Onboarding(); + onboarding1.setBilling(billing1); + onboarding1.setClosedAt(null); + onboarding1.setContract("it.pagopa.selfcare.mscore.model.institution.Onboarding"); + onboarding1.setCreatedAt(null); + onboarding1.setPricingPlan("it.pagopa.selfcare.mscore.model.institution.Onboarding"); + onboarding1.setProductId("Product Id"); + onboarding1.setStatus(RelationshipState.ACTIVE); + onboarding1.setTokenId("ABC123"); + onboarding1.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding1); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + InstitutionBillingResponse actualToInstitutionBillingResponseResult = InstitutionMapperCustom + .toInstitutionBillingResponse(institution, "42"); + assertNull(actualToInstitutionBillingResponseResult.getAddress()); + assertNull(actualToInstitutionBillingResponseResult.getZipCode()); + assertNull(actualToInstitutionBillingResponseResult.getTaxCode()); + assertEquals("Pricing Plan", actualToInstitutionBillingResponseResult.getPricingPlan()); + assertNull(actualToInstitutionBillingResponseResult.getOriginId()); + assertNull(actualToInstitutionBillingResponseResult.getOrigin()); + assertNull(actualToInstitutionBillingResponseResult.getInstitutionType()); + assertNull(actualToInstitutionBillingResponseResult.getInstitutionId()); + assertNull(actualToInstitutionBillingResponseResult.getExternalId()); + assertNull(actualToInstitutionBillingResponseResult.getDigitalAddress()); + assertNull(actualToInstitutionBillingResponseResult.getDescription()); + BillingResponse billing2 = actualToInstitutionBillingResponseResult.getBilling(); + assertEquals("Recipient Code", billing2.getRecipientCode()); + assertTrue(billing2.isPublicServices()); + assertEquals("42", billing2.getVatNumber()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitution(InstitutionRequest, String)} + */ + @Test + void testToInstitution() { + BillingRequest billingRequest = new BillingRequest(); + billingRequest.setPublicServices(true); + billingRequest.setRecipientCode("Recipient Code"); + billingRequest.setVatNumber("42"); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + ArrayList attributesRequestList = new ArrayList<>(); + institutionRequest.setAttributes(attributesRequestList); + institutionRequest.setBilling(billingRequest); + institutionRequest.setBusinessRegisterPlace("Business Register Place"); + institutionRequest.setCreatedAt(null); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setExternalId("42"); + institutionRequest.setGeographicTaxonomies(new ArrayList<>()); + institutionRequest.setId("42"); + institutionRequest.setImported(true); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setOnboarding(new ArrayList<>()); + institutionRequest.setOrigin(Origin.MOCK.name()); + institutionRequest.setOriginId("42"); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setRea("Rea"); + institutionRequest.setShareCapital("Share Capital"); + institutionRequest.setSupportEmail("jane.doe@example.org"); + institutionRequest.setSupportPhone("6625550144"); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setUpdatedAt(null); + institutionRequest.setZipCode("21654"); + Institution actualToInstitutionResult = InstitutionMapperCustom.toInstitution(institutionRequest, "42"); + assertEquals("42 Main St", actualToInstitutionResult.getAddress()); + assertEquals("21654", actualToInstitutionResult.getZipCode()); + assertEquals("Tax Code", actualToInstitutionResult.getTaxCode()); + assertEquals("6625550144", actualToInstitutionResult.getSupportPhone()); + assertEquals("jane.doe@example.org", actualToInstitutionResult.getSupportEmail()); + assertEquals("Share Capital", actualToInstitutionResult.getShareCapital()); + assertEquals("Rea", actualToInstitutionResult.getRea()); + assertEquals("Business Register Place", actualToInstitutionResult.getBusinessRegisterPlace()); + assertEquals("42 Main St", actualToInstitutionResult.getDigitalAddress()); + assertEquals("42", actualToInstitutionResult.getExternalId()); + assertEquals(InstitutionType.PA, actualToInstitutionResult.getInstitutionType()); + assertEquals("The characteristics of someone or something", actualToInstitutionResult.getDescription()); + DataProtectionOfficer dataProtectionOfficer = actualToInstitutionResult.getDataProtectionOfficer(); + assertEquals("Pec", dataProtectionOfficer.getPec()); + assertEquals("jane.doe@example.org", dataProtectionOfficer.getEmail()); + assertEquals("42 Main St", dataProtectionOfficer.getAddress()); + PaymentServiceProvider paymentServiceProvider = actualToInstitutionResult.getPaymentServiceProvider(); + assertEquals("42", paymentServiceProvider.getLegalRegisterNumber()); + assertEquals("Abi Code", paymentServiceProvider.getAbiCode()); + assertEquals("Legal Register Name", paymentServiceProvider.getLegalRegisterName()); + assertTrue(paymentServiceProvider.isVatNumberGroup()); + assertEquals("42", paymentServiceProvider.getBusinessRegisterNumber()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitution(InstitutionRequest, String)} + */ + @Test + void testToInstitution2() { + AttributesRequest attributesRequest = new AttributesRequest(); + attributesRequest.setCode("Code"); + attributesRequest.setDescription("The characteristics of someone or something"); + attributesRequest.setOrigin("Origin"); + + ArrayList attributesRequestList = new ArrayList<>(); + attributesRequestList.add(attributesRequest); + + BillingRequest billingRequest = new BillingRequest(); + billingRequest.setPublicServices(true); + billingRequest.setRecipientCode("Recipient Code"); + billingRequest.setVatNumber("42"); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + institutionRequest.setAttributes(attributesRequestList); + institutionRequest.setBilling(billingRequest); + institutionRequest.setBusinessRegisterPlace("Business Register Place"); + institutionRequest.setCreatedAt(null); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setExternalId("42"); + ArrayList geoTaxonomiesList = new ArrayList<>(); + institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); + institutionRequest.setId("42"); + institutionRequest.setImported(true); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setOnboarding(new ArrayList<>()); + institutionRequest.setOrigin(Origin.MOCK.name()); + institutionRequest.setOriginId("42"); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setRea("Rea"); + institutionRequest.setShareCapital("Share Capital"); + institutionRequest.setSupportEmail("jane.doe@example.org"); + institutionRequest.setSupportPhone("6625550144"); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setUpdatedAt(null); + institutionRequest.setZipCode("21654"); + Institution actualToInstitutionResult = InstitutionMapperCustom.toInstitution(institutionRequest, "42"); + assertEquals("42 Main St", actualToInstitutionResult.getAddress()); + assertEquals("21654", actualToInstitutionResult.getZipCode()); + assertEquals("Tax Code", actualToInstitutionResult.getTaxCode()); + assertEquals("6625550144", actualToInstitutionResult.getSupportPhone()); + assertEquals("jane.doe@example.org", actualToInstitutionResult.getSupportEmail()); + assertEquals("Share Capital", actualToInstitutionResult.getShareCapital()); + assertEquals("Rea", actualToInstitutionResult.getRea()); + List attributes = actualToInstitutionResult.getAttributes(); + assertEquals(1, attributes.size()); + assertEquals("Business Register Place", actualToInstitutionResult.getBusinessRegisterPlace()); + assertEquals("42 Main St", actualToInstitutionResult.getDigitalAddress()); + assertEquals("42", actualToInstitutionResult.getExternalId()); + assertEquals(InstitutionType.PA, actualToInstitutionResult.getInstitutionType()); + assertEquals("The characteristics of someone or something", actualToInstitutionResult.getDescription()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitution(InstitutionRequest, String)} + */ + @Test + void testToInstitution3() { + BillingRequest billingRequest = new BillingRequest(); + billingRequest.setPublicServices(true); + billingRequest.setRecipientCode("Recipient Code"); + billingRequest.setVatNumber("42"); + + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + + GeoTaxonomies geoTaxonomies = new GeoTaxonomies(); + geoTaxonomies.setCode("Code"); + geoTaxonomies.setDesc("The characteristics of someone or something"); + + ArrayList geoTaxonomiesList = new ArrayList<>(); + geoTaxonomiesList.add(geoTaxonomies); + + PaymentServiceProviderRequest paymentServiceProviderRequest = new PaymentServiceProviderRequest(); + paymentServiceProviderRequest.setAbiCode("Abi Code"); + paymentServiceProviderRequest.setBusinessRegisterNumber("42"); + paymentServiceProviderRequest.setLegalRegisterName("Legal Register Name"); + paymentServiceProviderRequest.setLegalRegisterNumber("42"); + paymentServiceProviderRequest.setVatNumberGroup(true); + + InstitutionRequest institutionRequest = new InstitutionRequest(); + institutionRequest.setAddress("42 Main St"); + ArrayList attributesRequestList = new ArrayList<>(); + institutionRequest.setAttributes(attributesRequestList); + institutionRequest.setBilling(billingRequest); + institutionRequest.setBusinessRegisterPlace("Business Register Place"); + institutionRequest.setCreatedAt(null); + institutionRequest.setDataProtectionOfficer(dataProtectionOfficerRequest); + institutionRequest.setDescription("The characteristics of someone or something"); + institutionRequest.setDigitalAddress("42 Main St"); + institutionRequest.setExternalId("42"); + institutionRequest.setGeographicTaxonomies(geoTaxonomiesList); + institutionRequest.setId("42"); + institutionRequest.setImported(true); + institutionRequest.setInstitutionType(InstitutionType.PA); + institutionRequest.setOnboarding(new ArrayList<>()); + institutionRequest.setOrigin(Origin.MOCK.name()); + institutionRequest.setOriginId("42"); + institutionRequest.setPaymentServiceProvider(paymentServiceProviderRequest); + institutionRequest.setRea("Rea"); + institutionRequest.setShareCapital("Share Capital"); + institutionRequest.setSupportEmail("jane.doe@example.org"); + institutionRequest.setSupportPhone("6625550144"); + institutionRequest.setTaxCode("Tax Code"); + institutionRequest.setUpdatedAt(null); + institutionRequest.setZipCode("21654"); + Institution actualToInstitutionResult = InstitutionMapperCustom.toInstitution(institutionRequest, "42"); + assertEquals("42 Main St", actualToInstitutionResult.getAddress()); + assertEquals("21654", actualToInstitutionResult.getZipCode()); + assertEquals("Tax Code", actualToInstitutionResult.getTaxCode()); + assertEquals("6625550144", actualToInstitutionResult.getSupportPhone()); + assertEquals("jane.doe@example.org", actualToInstitutionResult.getSupportEmail()); + assertEquals("Share Capital", actualToInstitutionResult.getShareCapital()); + assertEquals("Rea", actualToInstitutionResult.getRea()); + assertEquals("Business Register Place", actualToInstitutionResult.getBusinessRegisterPlace()); + assertEquals("42 Main St", actualToInstitutionResult.getDigitalAddress()); + assertEquals("42", actualToInstitutionResult.getExternalId()); + assertEquals(InstitutionType.PA, actualToInstitutionResult.getInstitutionType()); + List geographicTaxonomies = actualToInstitutionResult.getGeographicTaxonomies(); + assertEquals(1, geographicTaxonomies.size()); + assertEquals("The characteristics of someone or something", actualToInstitutionResult.getDescription()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toBillingResponse(Onboarding, Institution)} + */ + @Test + void testToBillingResponse() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + BillingResponse actualToBillingResponseResult = InstitutionMapperCustom.toBillingResponse(onboarding, new Institution()); + assertEquals("Recipient Code", actualToBillingResponseResult.getRecipientCode()); + assertTrue(actualToBillingResponseResult.isPublicServices()); + assertEquals("42", actualToBillingResponseResult.getVatNumber()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#getBillingFromOnboarding(Onboarding, Institution)} + */ + @Test + void testGetBillingFromOnboarding2() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Billing billing1 = new Billing(); + billing1.setPublicServices(true); + billing1.setRecipientCode("Recipient Code"); + billing1.setVatNumber("42"); + Onboarding onboarding = mock(Onboarding.class); + when(onboarding.getBilling()).thenReturn(billing1); + doNothing().when(onboarding).setBilling(any()); + doNothing().when(onboarding).setClosedAt(any()); + doNothing().when(onboarding).setContract(any()); + doNothing().when(onboarding).setCreatedAt(any()); + doNothing().when(onboarding).setPricingPlan(any()); + doNothing().when(onboarding).setProductId(any()); + doNothing().when(onboarding).setStatus(any()); + doNothing().when(onboarding).setTokenId(any()); + doNothing().when(onboarding).setUpdatedAt(any()); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + InstitutionMapperCustom.getBillingFromOnboarding(onboarding, new Institution()); + verify(onboarding, atLeast(1)).getBilling(); + verify(onboarding).setBilling( any()); + verify(onboarding).setClosedAt(any()); + verify(onboarding).setContract(any()); + verify(onboarding).setCreatedAt(any()); + verify(onboarding).setPricingPlan(any()); + verify(onboarding).setProductId(any()); + verify(onboarding).setStatus(any()); + verify(onboarding).setTokenId(any()); + verify(onboarding).setUpdatedAt(any()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toBilling(BillingRequest)} + */ + @Test + void testToBilling() { + BillingRequest billingRequest = new BillingRequest(); + billingRequest.setPublicServices(true); + billingRequest.setRecipientCode("Recipient Code"); + billingRequest.setVatNumber("42"); + Billing actualToBillingResult = InstitutionMapperCustom.toBilling(billingRequest); + assertEquals("Recipient Code", actualToBillingResult.getRecipientCode()); + assertFalse(actualToBillingResult.isPublicServices()); + assertEquals("42", actualToBillingResult.getVatNumber()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toDataProtectionOfficer(DataProtectionOfficerRequest)} + */ + @Test + void testToDataProtectionOfficer() { + DataProtectionOfficerRequest dataProtectionOfficerRequest = new DataProtectionOfficerRequest(); + dataProtectionOfficerRequest.setAddress("42 Main St"); + dataProtectionOfficerRequest.setEmail("jane.doe@example.org"); + dataProtectionOfficerRequest.setPec("Pec"); + DataProtectionOfficer actualToDataProtectionOfficerResult = InstitutionMapperCustom + .toDataProtectionOfficer(dataProtectionOfficerRequest); + assertEquals("42 Main St", actualToDataProtectionOfficerResult.getAddress()); + assertEquals("Pec", actualToDataProtectionOfficerResult.getPec()); + assertEquals("jane.doe@example.org", actualToDataProtectionOfficerResult.getEmail()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toDataProtectionOfficerResponse(DataProtectionOfficer)} + */ + @Test + void testToDataProtectionOfficerResponse() { + DataProtectionOfficerResponse actualToDataProtectionOfficerResponseResult = InstitutionMapperCustom + .toDataProtectionOfficerResponse(new DataProtectionOfficer("42 Main St", "jane.doe@example.org", "Pec")); + assertEquals("42 Main St", actualToDataProtectionOfficerResponseResult.getAddress()); + assertEquals("Pec", actualToDataProtectionOfficerResponseResult.getPec()); + assertEquals("jane.doe@example.org", actualToDataProtectionOfficerResponseResult.getEmail()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toAttributes(List)} + */ + @Test + void testToAttributes2() { + AttributesRequest attributesRequest = new AttributesRequest(); + attributesRequest.setCode("Code"); + attributesRequest.setDescription("The characteristics of someone or something"); + attributesRequest.setOrigin("Origin"); + + ArrayList attributesRequestList = new ArrayList<>(); + attributesRequestList.add(attributesRequest); + List actualToAttributesResult = InstitutionMapperCustom.toAttributes(attributesRequestList); + assertEquals(1, actualToAttributesResult.size()); + Attributes getResult = actualToAttributesResult.get(0); + assertEquals("Code", getResult.getCode()); + assertEquals("Origin", getResult.getOrigin()); + assertEquals("The characteristics of someone or something", getResult.getDescription()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toAttributeResponse(List)} + */ + @Test + void testToAttributeResponse() { + assertTrue(InstitutionMapperCustom.toAttributeResponse(new ArrayList<>()).isEmpty()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toAttributeResponse(List)} + */ + @Test + void testToAttributeResponse2() { + Attributes attributes = new Attributes(); + attributes.setCode("Code"); + attributes.setDescription("The characteristics of someone or something"); + attributes.setOrigin("Origin"); + + ArrayList attributesList = new ArrayList<>(); + attributesList.add(attributes); + List actualToAttributeResponseResult = InstitutionMapperCustom.toAttributeResponse(attributesList); + assertEquals(1, actualToAttributeResponseResult.size()); + AttributesResponse getResult = actualToAttributeResponseResult.get(0); + assertEquals("Code", getResult.getCode()); + assertEquals("Origin", getResult.getOrigin()); + assertEquals("The characteristics of someone or something", getResult.getDescription()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toGeoTaxonomies(List)} + */ + @Test + void testToGeoTaxonomies() { + assertTrue(InstitutionMapperCustom.toGeoTaxonomies(new ArrayList<>()).isEmpty()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toGeoTaxonomies(List)} + */ + @Test + void testToGeoTaxonomies2() { + ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); + institutionGeographicTaxonomiesList + .add(new InstitutionGeographicTaxonomies("Code", "The characteristics of someone or something")); + List actualToGeoTaxonomiesResult = InstitutionMapperCustom + .toGeoTaxonomies(institutionGeographicTaxonomiesList); + assertEquals(1, actualToGeoTaxonomiesResult.size()); + GeoTaxonomies getResult = actualToGeoTaxonomiesResult.get(0); + assertEquals("Code", getResult.getCode()); + assertEquals("The characteristics of someone or something", getResult.getDesc()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} + */ + @Test + void testToInstitutionManagementResponse() { + InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom + .toInstitutionManagementResponse(new Institution()); + assertNull(actualToInstitutionManagementResponseResult.getAddress()); + assertFalse(actualToInstitutionManagementResponseResult.isImported()); + assertNull(actualToInstitutionManagementResponseResult.getZipCode()); + assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); + assertNull(actualToInstitutionManagementResponseResult.getTaxCode()); + assertNull(actualToInstitutionManagementResponseResult.getSupportPhone()); + assertNull(actualToInstitutionManagementResponseResult.getSupportEmail()); + assertNull(actualToInstitutionManagementResponseResult.getShareCapital()); + assertNull(actualToInstitutionManagementResponseResult.getRea()); + assertNull(actualToInstitutionManagementResponseResult.getOriginId()); + assertNull(actualToInstitutionManagementResponseResult.getOrigin()); + assertNull(actualToInstitutionManagementResponseResult.getInstitutionType()); + assertNull(actualToInstitutionManagementResponseResult.getId()); + assertNull(actualToInstitutionManagementResponseResult.getExternalId()); + assertNull(actualToInstitutionManagementResponseResult.getDigitalAddress()); + assertNull(actualToInstitutionManagementResponseResult.getDescription()); + assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); + assertNull(actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} + */ + @Test + void testToInstitutionManagementResponse4() { + + Institution institution = createDmmyInstitution(); + institution.setImported(true); + institution.setOnboarding(List.of()); + + InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom + .toInstitutionManagementResponse(institution); + + assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getAddress()); + assertTrue(actualToInstitutionManagementResponseResult.isImported()); + assertEquals(institution.getZipCode(), actualToInstitutionManagementResponseResult.getZipCode()); + assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); + assertEquals(institution.getTaxCode(), actualToInstitutionManagementResponseResult.getTaxCode()); + assertEquals(institution.getSupportPhone(), actualToInstitutionManagementResponseResult.getSupportPhone()); + assertEquals(institution.getSupportEmail(), actualToInstitutionManagementResponseResult.getSupportEmail()); + assertEquals(institution.getShareCapital(), actualToInstitutionManagementResponseResult.getShareCapital()); + assertEquals("Rea", actualToInstitutionManagementResponseResult.getRea()); + assertTrue(actualToInstitutionManagementResponseResult.getProducts().isEmpty()); + assertEquals("42", actualToInstitutionManagementResponseResult.getOriginId()); + assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); + assertEquals("42", actualToInstitutionManagementResponseResult.getExternalId()); + assertEquals(Origin.MOCK.name(), actualToInstitutionManagementResponseResult.getOrigin()); + assertEquals("42", actualToInstitutionManagementResponseResult.getId()); + assertEquals(InstitutionType.PA, actualToInstitutionManagementResponseResult.getInstitutionType()); + assertEquals("Business Register Place", actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); + assertEquals("The characteristics of someone or something", + actualToInstitutionManagementResponseResult.getDescription()); + assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getDigitalAddress()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} + */ + @Test + void testToInstitutionManagementResponse5() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = createDmmyInstitution(); + institution.setOnboarding(onboardingList); + institution.setImported(true); + + InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom + .toInstitutionManagementResponse(institution); + assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getAddress()); + assertTrue(actualToInstitutionManagementResponseResult.isImported()); + assertEquals(institution.getZipCode(), actualToInstitutionManagementResponseResult.getZipCode()); + assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); + assertEquals(institution.getTaxCode(), actualToInstitutionManagementResponseResult.getTaxCode()); + assertEquals(institution.getSupportPhone(), actualToInstitutionManagementResponseResult.getSupportPhone()); + assertEquals(institution.getSupportEmail(), actualToInstitutionManagementResponseResult.getSupportEmail()); + assertEquals("Share Capital", actualToInstitutionManagementResponseResult.getShareCapital()); + assertEquals("Rea", actualToInstitutionManagementResponseResult.getRea()); + Map products = actualToInstitutionManagementResponseResult.getProducts(); + assertEquals(1, products.size()); + assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); + assertEquals("42", actualToInstitutionManagementResponseResult.getExternalId()); + assertEquals("42", actualToInstitutionManagementResponseResult.getId()); + assertEquals(InstitutionType.PA, actualToInstitutionManagementResponseResult.getInstitutionType()); + assertEquals("Business Register Place", actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); + assertEquals("The characteristics of someone or something", + actualToInstitutionManagementResponseResult.getDescription()); + assertEquals(Origin.MOCK.name(), actualToInstitutionManagementResponseResult.getOrigin()); + assertEquals("42", actualToInstitutionManagementResponseResult.getOriginId()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} + */ + @Test + void testToInstitutionManagementResponse6() { + ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); + institutionGeographicTaxonomiesList + .add(new InstitutionGeographicTaxonomies("Code", "The characteristics of someone or something")); + Institution institution = createDmmyInstitution(); + institution.setGeographicTaxonomies(institutionGeographicTaxonomiesList); + institution.setImported(true); + institution.setOnboarding(List.of()); + + InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom + .toInstitutionManagementResponse(institution); + assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getAddress()); + assertTrue(actualToInstitutionManagementResponseResult.isImported()); + assertEquals(institution.getZipCode(), actualToInstitutionManagementResponseResult.getZipCode()); + assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); + assertEquals(institution.getTaxCode(), actualToInstitutionManagementResponseResult.getTaxCode()); + assertEquals(institution.getSupportPhone(), actualToInstitutionManagementResponseResult.getSupportPhone()); + assertEquals(institution.getSupportEmail(), actualToInstitutionManagementResponseResult.getSupportEmail()); + assertEquals("Share Capital", actualToInstitutionManagementResponseResult.getShareCapital()); + assertEquals("Rea", actualToInstitutionManagementResponseResult.getRea()); + assertTrue(actualToInstitutionManagementResponseResult.getProducts().isEmpty()); + assertEquals("42", actualToInstitutionManagementResponseResult.getOriginId()); + assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); + assertEquals("42", actualToInstitutionManagementResponseResult.getExternalId()); + List geographicTaxonomies = actualToInstitutionManagementResponseResult.getGeographicTaxonomies(); + assertEquals(1, geographicTaxonomies.size()); + assertEquals("42", actualToInstitutionManagementResponseResult.getId()); + assertEquals(InstitutionType.PA, actualToInstitutionManagementResponseResult.getInstitutionType()); + assertEquals("Business Register Place", actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); + assertEquals("The characteristics of someone or something", + actualToInstitutionManagementResponseResult.getDescription()); + assertEquals(Origin.MOCK.name(), actualToInstitutionManagementResponseResult.getOrigin()); + assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getDigitalAddress()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionManagementResponse(Institution)} + */ + @Test + void testToInstitutionManagementResponse7() { + Attributes attributes = new Attributes(); + attributes.setCode("Code"); + attributes.setDescription("The characteristics of someone or something"); + attributes.setOrigin("Origin"); + + ArrayList attributesList = new ArrayList<>(); + attributesList.add(attributes); + + Institution institution = createDmmyInstitution(); + institution.setAttributes(attributesList); + institution.setImported(true); + institution.setOnboarding(List.of()); + + InstitutionManagementResponse actualToInstitutionManagementResponseResult = InstitutionMapperCustom + .toInstitutionManagementResponse(institution); + assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getAddress()); + assertTrue(actualToInstitutionManagementResponseResult.isImported()); + assertEquals(institution.getZipCode(), actualToInstitutionManagementResponseResult.getZipCode()); + assertNull(actualToInstitutionManagementResponseResult.getUpdatedAt()); + assertEquals(institution.getTaxCode(), actualToInstitutionManagementResponseResult.getTaxCode()); + assertEquals(institution.getSupportPhone(), actualToInstitutionManagementResponseResult.getSupportPhone()); + assertEquals(institution.getSupportEmail(), actualToInstitutionManagementResponseResult.getSupportEmail()); + assertEquals("Share Capital", actualToInstitutionManagementResponseResult.getShareCapital()); + assertEquals("Rea", actualToInstitutionManagementResponseResult.getRea()); + assertTrue(actualToInstitutionManagementResponseResult.getProducts().isEmpty()); + assertEquals("42", actualToInstitutionManagementResponseResult.getOriginId()); + List attributes1 = actualToInstitutionManagementResponseResult.getAttributes(); + assertEquals(1, attributes1.size()); + assertNull(actualToInstitutionManagementResponseResult.getCreatedAt()); + assertEquals("42", actualToInstitutionManagementResponseResult.getExternalId()); + assertEquals("42", actualToInstitutionManagementResponseResult.getId()); + assertEquals(InstitutionType.PA, actualToInstitutionManagementResponseResult.getInstitutionType()); + assertEquals("Business Register Place", actualToInstitutionManagementResponseResult.getBusinessRegisterPlace()); + assertEquals("The characteristics of someone or something", + actualToInstitutionManagementResponseResult.getDescription()); + assertEquals(Origin.MOCK.name(), actualToInstitutionManagementResponseResult.getOrigin()); + assertEquals("42 Main St", actualToInstitutionManagementResponseResult.getDigitalAddress()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} + */ + @Test + void testToInstitutionListResponse() { + assertTrue(InstitutionMapperCustom.toInstitutionListResponse(new ArrayList<>()).isEmpty()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} + */ + @Test + void testToInstitutionListResponse2() { + ArrayList institutionList = new ArrayList<>(); + institutionList.add(new Institution()); + assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} + */ + @Test + void testToInstitutionListResponse4() { + ArrayList institutionList = new ArrayList<>(); + institutionList.add(InstitutionMapperCustom.toInstitution(new InstitutionRequest(), "42")); + assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} + */ + @Test + void testToInstitutionListResponse5() { + ArrayList institutionList = new ArrayList<>(); + institutionList.add(createDmmyInstitution()); + assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} + */ + @Test + void testToInstitutionListResponse6() { + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setClosedAt(null); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setTokenId("42"); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = createDmmyInstitution(); + institution.setOnboarding(onboardingList); + + ArrayList institutionList = new ArrayList<>(); + institutionList.add(institution); + assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} + */ + @Test + void testToInstitutionListResponse7() { + ArrayList institutionGeographicTaxonomiesList = new ArrayList<>(); + institutionGeographicTaxonomiesList + .add(new InstitutionGeographicTaxonomies("Code", "The characteristics of someone or something")); + + Institution institution = createDmmyInstitution(); + institution.setGeographicTaxonomies(institutionGeographicTaxonomiesList); + + ArrayList institutionList = new ArrayList<>(); + institutionList.add(institution); + assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionListResponse(List)} + */ + @Test + void testToInstitutionListResponse8() { + Attributes attributes = new Attributes(); + attributes.setCode("Code"); + attributes.setDescription("The characteristics of someone or something"); + attributes.setOrigin("Origin"); + + ArrayList attributesList = new ArrayList<>(); + attributesList.add(attributes); + + Institution institution = createDmmyInstitution(); + institution.setAttributes(attributesList); + + ArrayList institutionList = new ArrayList<>(); + institutionList.add(institution); + assertEquals(1, InstitutionMapperCustom.toInstitutionListResponse(institutionList).size()); + } + + /** + * Method under test: {@link InstitutionMapperCustom#toInstitutionAttributeResponse(List, String)} + */ + @Test + void testToInstitutionAttributeResponse2() { + Attributes attributes = new Attributes(); + attributes.setCode("Attributes for institution %s not found"); + attributes.setDescription("The characteristics of someone or something"); + attributes.setOrigin("Attributes for institution %s not found"); + + ArrayList attributesList = new ArrayList<>(); + attributesList.add(attributes); + List actualToInstitutionAttributeResponseResult = InstitutionMapperCustom + .toInstitutionAttributeResponse(attributesList, "42"); + assertEquals(1, actualToInstitutionAttributeResponseResult.size()); + AttributesResponse getResult = actualToInstitutionAttributeResponseResult.get(0); + assertEquals("Attributes for institution %s not found", getResult.getCode()); + assertEquals("Attributes for institution %s not found", getResult.getOrigin()); + assertEquals("The characteristics of someone or something", getResult.getDescription()); + } +} + diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapperTest.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapperTest.java new file mode 100644 index 0000000..e5b1e6b --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/OnboardingMapperTest.java @@ -0,0 +1,115 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import it.pagopa.selfcare.mscore.constant.TokenType; +import it.pagopa.selfcare.mscore.model.aggregation.UserInstitutionBinding; +import it.pagopa.selfcare.mscore.model.institution.Institution; +import it.pagopa.selfcare.mscore.model.institution.Onboarding; +import it.pagopa.selfcare.mscore.model.onboarding.Contract; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardingInfo; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardingLegalsRequest; +import it.pagopa.selfcare.mscore.web.model.onboarding.ContractRequest; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardingInfoResponse; +import it.pagopa.selfcare.mscore.web.model.onboarding.OnboardingInstitutionLegalsRequest; +import it.pagopa.selfcare.mscore.web.model.user.Person; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.Test; + +class OnboardingMapperTest { + /** + * Method under test: {@link OnboardingMapper#toOnboardingLegalsRequest(OnboardingInstitutionLegalsRequest)} + */ + @Test + void testToOnboardingLegalsRequest() { + ContractRequest contractRequest = new ContractRequest(); + contractRequest.setPath("Path"); + contractRequest.setVersion("1.0.2"); + + OnboardingInstitutionLegalsRequest onboardingInstitutionLegalsRequest = new OnboardingInstitutionLegalsRequest(); + onboardingInstitutionLegalsRequest.setContract(contractRequest); + onboardingInstitutionLegalsRequest.setInstitutionExternalId("42"); + onboardingInstitutionLegalsRequest.setInstitutionId("42"); + onboardingInstitutionLegalsRequest.setProductId("42"); + onboardingInstitutionLegalsRequest.setProductName("Product Name"); + onboardingInstitutionLegalsRequest.setSignContract(true); + ArrayList personList = new ArrayList<>(); + onboardingInstitutionLegalsRequest.setUsers(personList); + OnboardingLegalsRequest actualToOnboardingLegalsRequestResult = OnboardingMapper + .toOnboardingLegalsRequest(onboardingInstitutionLegalsRequest); + assertTrue(actualToOnboardingLegalsRequestResult.isSignContract()); + assertEquals("42", actualToOnboardingLegalsRequestResult.getInstitutionExternalId()); + assertEquals("42", actualToOnboardingLegalsRequestResult.getProductId()); + assertEquals(TokenType.LEGALS, actualToOnboardingLegalsRequestResult.getTokenType()); + assertEquals("Product Name", actualToOnboardingLegalsRequestResult.getProductName()); + assertEquals("42", actualToOnboardingLegalsRequestResult.getInstitutionId()); + Contract contract = actualToOnboardingLegalsRequestResult.getContract(); + assertEquals("1.0.2", contract.getVersion()); + assertEquals("Path", contract.getPath()); + } + + /** + * Method under test: {@link OnboardingMapper#toOnboardingLegalsRequest(OnboardingInstitutionLegalsRequest)} + */ + @Test + void testToOnboardingLegalsRequest2() { + ArrayList personList = new ArrayList<>(); + personList.add(new Person()); + + OnboardingInstitutionLegalsRequest onboardingInstitutionLegalsRequest = new OnboardingInstitutionLegalsRequest(); + onboardingInstitutionLegalsRequest.setInstitutionExternalId("42"); + onboardingInstitutionLegalsRequest.setInstitutionId("42"); + onboardingInstitutionLegalsRequest.setProductId("42"); + onboardingInstitutionLegalsRequest.setProductName("Product Name"); + onboardingInstitutionLegalsRequest.setSignContract(true); + onboardingInstitutionLegalsRequest.setContract(null); + onboardingInstitutionLegalsRequest.setUsers(personList); + OnboardingLegalsRequest actualToOnboardingLegalsRequestResult = OnboardingMapper + .toOnboardingLegalsRequest(onboardingInstitutionLegalsRequest); + assertTrue(actualToOnboardingLegalsRequestResult.isSignContract()); + assertEquals("42", actualToOnboardingLegalsRequestResult.getInstitutionExternalId()); + assertEquals("42", actualToOnboardingLegalsRequestResult.getProductId()); + assertEquals(1, actualToOnboardingLegalsRequestResult.getUsers().size()); + assertEquals(TokenType.LEGALS, actualToOnboardingLegalsRequestResult.getTokenType()); + assertEquals("Product Name", actualToOnboardingLegalsRequestResult.getProductName()); + assertEquals("42", actualToOnboardingLegalsRequestResult.getInstitutionId()); + } + + @Test + void toOnboardingInfoResponse_onboardingEmpty() { + String userId = "userId"; + List onboardingInfos = new ArrayList<>(); + onboardingInfos.add(new OnboardingInfo()); + + OnboardingInfoResponse actual = OnboardingMapper.toOnboardingInfoResponse(userId, onboardingInfos); + assertEquals(actual.getUserId(), userId); + } + + @Test + void toOnboardingInfoResponse() { + String userId = "userId"; + List onboardingInfos = new ArrayList<>(); + OnboardingInfo onboardingInfo = new OnboardingInfo(); + Institution institution = new Institution(); + + Onboarding onboarding = new Onboarding(); + onboarding.setProductId("prod-io"); + institution.setOnboarding(List.of(onboarding)); + + onboardingInfo.setInstitution(institution); + UserInstitutionBinding institutionBinding = new UserInstitutionBinding(); + institutionBinding.setProducts(new OnboardedProduct()); + onboardingInfo.setBinding(institutionBinding); + onboardingInfos.add(onboardingInfo); + + OnboardingInfoResponse actual = OnboardingMapper.toOnboardingInfoResponse(userId, onboardingInfos); + assertEquals(actual.getUserId(), userId); + assertEquals(actual.getInstitutions().size(), 0); + } +} + diff --git a/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapperTest.java b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapperTest.java new file mode 100644 index 0000000..e9615b2 --- /dev/null +++ b/apps/institution-ms/web/src/test/java/it/pagopa/selfcare/mscore/web/model/mapper/RelationshipMapperTest.java @@ -0,0 +1,351 @@ +package it.pagopa.selfcare.mscore.web.model.mapper; + +import it.pagopa.selfcare.commons.base.utils.InstitutionType; +import it.pagopa.selfcare.mscore.constant.RelationshipState; +import it.pagopa.selfcare.mscore.model.institution.*; +import it.pagopa.selfcare.mscore.model.onboarding.OnboardedProduct; +import it.pagopa.selfcare.mscore.model.user.RelationshipInfo; +import it.pagopa.selfcare.mscore.web.TestUtils; +import it.pagopa.selfcare.mscore.web.model.institution.BillingResponse; +import it.pagopa.selfcare.mscore.web.model.institution.InstitutionUpdateResponse; +import it.pagopa.selfcare.mscore.web.model.institution.RelationshipResult; +import it.pagopa.selfcare.mscore.web.model.onboarding.ProductInfo; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class RelationshipMapperTest { + + @Test + void testToRelationshipResult12() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + Institution institution = new Institution(); + institution.setOnboarding(new ArrayList<>()); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + Institution institution1 = new Institution(); + + RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); + relationshipInfo.setInstitution(institution); + RelationshipResult actualToRelationshipResultResult = RelationshipMapper.toRelationshipResult(relationshipInfo); + assertNull(actualToRelationshipResultResult.getTo()); + assertNull(actualToRelationshipResultResult.getState()); + assertNull(actualToRelationshipResultResult.getRole()); + assertNull(actualToRelationshipResultResult.getId()); + assertEquals("42", actualToRelationshipResultResult.getFrom()); + InstitutionUpdateResponse institutionUpdate = actualToRelationshipResultResult.getInstitutionUpdate(); + assertEquals(1, institutionUpdate.getGeographicTaxonomyCodes().size()); + } + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResult(RelationshipInfo)} + */ + @Test + void testToRelationshipResult13() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + Institution institution = TestUtils.createSimpleInstitutionPA(); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + Institution institution1 = new Institution(); + + RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); + relationshipInfo.setInstitution(institution); + RelationshipResult actualToRelationshipResultResult = RelationshipMapper.toRelationshipResult(relationshipInfo); + assertEquals("42", actualToRelationshipResultResult.getTo()); + assertNull(actualToRelationshipResultResult.getState()); + assertNull(actualToRelationshipResultResult.getRole()); + assertNull(actualToRelationshipResultResult.getId()); + assertEquals("42", actualToRelationshipResultResult.getFrom()); + InstitutionUpdateResponse institutionUpdate = actualToRelationshipResultResult.getInstitutionUpdate(); + assertEquals("21654", institutionUpdate.getZipCode()); + assertEquals("Tax Code", institutionUpdate.getTaxCode()); + assertEquals(InstitutionType.PA, institutionUpdate.getInstitutionType()); + ProductInfo product = actualToRelationshipResultResult.getProduct(); + assertNull(product.getCreatedAt()); + assertEquals("The characteristics of someone or something", institutionUpdate.getDescription()); + assertEquals("42 Main St", institutionUpdate.getDigitalAddress()); + assertEquals("42 Main St", institutionUpdate.getAddress()); + assertEquals(1, institutionUpdate.getGeographicTaxonomyCodes().size()); + assertNull(product.getId()); + } + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResult(RelationshipInfo)} + */ + @Test + void testToRelationshipResult14() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + Institution institution1 = new Institution(); + + RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); + relationshipInfo.setInstitution(institution); + RelationshipResult actualToRelationshipResultResult = RelationshipMapper.toRelationshipResult(relationshipInfo); + assertNull(actualToRelationshipResultResult.getTo()); + assertNull(actualToRelationshipResultResult.getState()); + assertNull(actualToRelationshipResultResult.getRole()); + assertNull(actualToRelationshipResultResult.getId()); + assertEquals("42", actualToRelationshipResultResult.getFrom()); + InstitutionUpdateResponse institutionUpdate = actualToRelationshipResultResult.getInstitutionUpdate(); + assertNull(institutionUpdate.getInstitutionType()); + assertEquals(1, institutionUpdate.getGeographicTaxonomyCodes().size()); + } + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResult(RelationshipInfo)} + */ + @Test + void testToRelationshipResult15() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setProductId("42"); + + RelationshipInfo relationshipInfo = new RelationshipInfo(new Institution(), "42", onboardedProduct); + relationshipInfo.setInstitution(institution); + RelationshipResult actualToRelationshipResultResult = RelationshipMapper.toRelationshipResult(relationshipInfo); + assertNull(actualToRelationshipResultResult.getId()); + assertNull(actualToRelationshipResultResult.getRole()); + assertNull(actualToRelationshipResultResult.getTo()); + assertNull(actualToRelationshipResultResult.getState()); + assertEquals("42", actualToRelationshipResultResult.getFrom()); + assertEquals("Pricing Plan", actualToRelationshipResultResult.getPricingPlan()); + ProductInfo product = actualToRelationshipResultResult.getProduct(); + assertEquals("42", product.getId()); + assertNull(product.getCreatedAt()); + InstitutionUpdateResponse institutionUpdate = actualToRelationshipResultResult.getInstitutionUpdate(); + assertEquals(1, institutionUpdate.getGeographicTaxonomyCodes().size()); + assertNull(institutionUpdate.getDigitalAddress()); + assertNull(institutionUpdate.getDescription()); + assertNull(institutionUpdate.getAddress()); + BillingResponse billing1 = actualToRelationshipResultResult.getBilling(); + assertEquals("42", billing1.getVatNumber()); + assertEquals("Recipient Code", billing1.getRecipientCode()); + assertTrue(billing1.isPublicServices()); + } + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} + */ + @Test + void testToRelationshipResultList() { + assertTrue(RelationshipMapper.toRelationshipResultList(new ArrayList<>()).isEmpty()); + } + + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} + */ + @Test + void testToRelationshipResultList6() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + Institution institution = new Institution(); + institution.setOnboarding(new ArrayList<>()); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + Institution institution1 = new Institution(); + + RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); + relationshipInfo.setInstitution(institution); + + ArrayList relationshipInfoList = new ArrayList<>(); + relationshipInfoList.add(relationshipInfo); + assertEquals(1, RelationshipMapper.toRelationshipResultList(relationshipInfoList).size()); + assertFalse(relationshipInfoList.get(0).getInstitution().isImported()); + } + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} + */ + @Test + void testToRelationshipResultList7() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + Institution institution = TestUtils.createSimpleInstitutionPA(); + institution.setGeographicTaxonomies(List.of(geographicTaxonomies)); + institution.setImported(true); + + RelationshipInfo relationshipInfo = new RelationshipInfo(institution, "42", new OnboardedProduct()); + relationshipInfo.setInstitution(institution); + + ArrayList relationshipInfoList = new ArrayList<>(); + relationshipInfoList.add(relationshipInfo); + assertEquals(1, RelationshipMapper.toRelationshipResultList(relationshipInfoList).size()); + assertTrue(relationshipInfoList.get(0).getInstitution().isImported()); + } + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} + */ + @Test + void testToRelationshipResultList8() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + Institution institution1 = new Institution(); + + RelationshipInfo relationshipInfo = new RelationshipInfo(institution1, "42", new OnboardedProduct()); + relationshipInfo.setInstitution(institution); + + ArrayList relationshipInfoList = new ArrayList<>(); + relationshipInfoList.add(relationshipInfo); + assertEquals(1, RelationshipMapper.toRelationshipResultList(relationshipInfoList).size()); + assertFalse(relationshipInfoList.get(0).getInstitution().isImported()); + } + + /** + * Method under test: {@link RelationshipMapper#toRelationshipResultList(List)} + */ + @Test + void testToRelationshipResultList9() { + InstitutionGeographicTaxonomies geographicTaxonomies = new InstitutionGeographicTaxonomies(); + geographicTaxonomies.setCode("Code"); + geographicTaxonomies.setDesc("The characteristics of someone or something"); + + List geographicTaxonomiesList = new ArrayList<>(); + geographicTaxonomiesList.add(geographicTaxonomies); + + Billing billing = new Billing(); + billing.setPublicServices(true); + billing.setRecipientCode("Recipient Code"); + billing.setVatNumber("42"); + + Premium premium = new Premium(); + premium.setContract("Contract"); + premium.setStatus(RelationshipState.PENDING); + + Onboarding onboarding = new Onboarding(); + onboarding.setBilling(billing); + onboarding.setContract("Contract"); + onboarding.setCreatedAt(null); + onboarding.setPricingPlan("Pricing Plan"); + onboarding.setProductId("42"); + onboarding.setStatus(RelationshipState.PENDING); + onboarding.setUpdatedAt(null); + + ArrayList onboardingList = new ArrayList<>(); + onboardingList.add(onboarding); + + Institution institution = new Institution(); + institution.setOnboarding(onboardingList); + institution.setGeographicTaxonomies(geographicTaxonomiesList); + + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setProductId("42"); + + RelationshipInfo relationshipInfo = new RelationshipInfo(new Institution(), "42", onboardedProduct); + relationshipInfo.setInstitution(institution); + + ArrayList relationshipInfoList = new ArrayList<>(); + relationshipInfoList.add(relationshipInfo); + assertEquals(1, RelationshipMapper.toRelationshipResultList(relationshipInfoList).size()); + assertFalse(relationshipInfoList.get(0).getInstitution().isImported()); + } + +} From 0b2daf478384466779e99dad6f35ecbdd2bc7efe Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Wed, 10 Jul 2024 15:53:26 +0200 Subject: [PATCH 10/29] [SELC-5168] feat : changed name for git actions --- ...titution-ms.yml => pr_container_apps_infra_institution_ms.yml} | 0 .../workflows/{pr_institution-ms.yml => pr_institution_ms.yml} | 0 .../{release_institution-ms.yml => release_institution_ms.yml} | 0 ...se_institution-ms_pnpg.yml => release_institution_ms_pnpg.yml} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{pr_container_apps_infra_institution-ms.yml => pr_container_apps_infra_institution_ms.yml} (100%) rename .github/workflows/{pr_institution-ms.yml => pr_institution_ms.yml} (100%) rename .github/workflows/{release_institution-ms.yml => release_institution_ms.yml} (100%) rename .github/workflows/{release_institution-ms_pnpg.yml => release_institution_ms_pnpg.yml} (100%) diff --git a/.github/workflows/pr_container_apps_infra_institution-ms.yml b/.github/workflows/pr_container_apps_infra_institution_ms.yml similarity index 100% rename from .github/workflows/pr_container_apps_infra_institution-ms.yml rename to .github/workflows/pr_container_apps_infra_institution_ms.yml diff --git a/.github/workflows/pr_institution-ms.yml b/.github/workflows/pr_institution_ms.yml similarity index 100% rename from .github/workflows/pr_institution-ms.yml rename to .github/workflows/pr_institution_ms.yml diff --git a/.github/workflows/release_institution-ms.yml b/.github/workflows/release_institution_ms.yml similarity index 100% rename from .github/workflows/release_institution-ms.yml rename to .github/workflows/release_institution_ms.yml diff --git a/.github/workflows/release_institution-ms_pnpg.yml b/.github/workflows/release_institution_ms_pnpg.yml similarity index 100% rename from .github/workflows/release_institution-ms_pnpg.yml rename to .github/workflows/release_institution_ms_pnpg.yml From b828f65658895be8e8323072fa9cd8f1e5f9118d Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Wed, 10 Jul 2024 16:07:59 +0200 Subject: [PATCH 11/29] [SELC-5168] feat : changed type of id field to Object --- .github/workflows/release_open_api.yml | 6 ++++++ .../mscore/model/pecnotification/PecNotification.java | 2 +- .../mscore/connector/dao/model/PecNotificationEntity.java | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release_open_api.yml b/.github/workflows/release_open_api.yml index 0d30053..dba276f 100644 --- a/.github/workflows/release_open_api.yml +++ b/.github/workflows/release_open_api.yml @@ -2,6 +2,12 @@ name: Swagger Detect Rules and Conflict on: pull_request: types: [ opened, synchronize, reopened ] + branches: + - main + - releases/* + paths: + - "apps/institution-ms/**" + # workflow_dispatch: permissions: contents: write diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java index f6fcf92..9ff6e08 100644 --- a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java @@ -12,7 +12,7 @@ @AllArgsConstructor public class PecNotification { - private String id; + private Object id; private String institutionId; private String productId; private Integer moduleDayOfTheEpoch; diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java index ac2c57a..9251ffc 100644 --- a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java @@ -17,7 +17,7 @@ public class PecNotificationEntity { @Id - private String id; + private Object id; private String institutionId; private String productId; private Integer moduleDayOfTheEpoch; From 92c026729bbaf23798c582767c40757d3d44576f Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Wed, 10 Jul 2024 16:40:24 +0200 Subject: [PATCH 12/29] [SELC-5168] feat : changed path_open_api_docs --- .github/workflows/release_open_api.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release_open_api.yml b/.github/workflows/release_open_api.yml index dba276f..3369050 100644 --- a/.github/workflows/release_open_api.yml +++ b/.github/workflows/release_open_api.yml @@ -21,5 +21,5 @@ jobs: - id: swagger-detect uses: pagopa/selfcare-commons/github-actions-template/swagger-detect-conflict-spring@main with: - path_openapi_docs: app/src/main/resources/swagger/api-docs.json + path_openapi_docs: apps/institution-ms/app/src/main/resources/swagger/api-docs.json github_token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From 8980cecabacf38973ba5455a34b910b836bf0e3c Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Thu, 11 Jul 2024 12:54:13 +0200 Subject: [PATCH 13/29] [SELC-5168] feat : added last update of the core ms --- .../resources/config/core-config.properties | 3 +- apps/institution-ms/connector-api/pom.xml | 4 +++ .../pecnotification/PecNotification.java | 11 +++--- .../dao/model/PecNotificationEntity.java | 11 +++--- .../mapper/PecNotificationEntityMapper.java | 2 +- .../mscore/core/DelegationServiceImpl.java | 11 +++--- .../mscore/core/OnboardingServiceImpl.java | 28 +++++++++------ .../core/DelegationServiceImplTest.java | 34 ++++++++++++++++++- .../core/OnboardingServiceImplTest.java | 32 +++++++++++++++++ .../env/dev-pnpg/terraform.tfvars | 4 +++ .../institution-ms/env/dev/terraform.tfvars | 4 +++ .../env/prod-pnpg/terraform.tfvars | 4 +++ .../institution-ms/env/prod/terraform.tfvars | 4 +++ .../env/uat-pnpg/terraform.tfvars | 4 +++ .../institution-ms/env/uat/terraform.tfvars | 4 +++ 15 files changed, 135 insertions(+), 25 deletions(-) diff --git a/apps/institution-ms/app/src/main/resources/config/core-config.properties b/apps/institution-ms/app/src/main/resources/config/core-config.properties index 9a5ec02..74d5dfd 100644 --- a/apps/institution-ms/app/src/main/resources/config/core-config.properties +++ b/apps/institution-ms/app/src/main/resources/config/core-config.properties @@ -28,4 +28,5 @@ mscore.aws-ses-secret-key=${AWS_SES_SECRET_ACCESS_KEY:secret-key-example} mscore.aws-ses-region=${AWS_SES_REGION:eu-south-1} mscore.sending-frequency-pec-notification=${SENDING_FREQUENCY_PEC_NOTIFICATION:30} -mscore.epoch-date-pec-notification=${EPOCH_DATE_PEC_NOTIFICATION:2024-01-01} \ No newline at end of file +mscore.epoch-date-pec-notification=${EPOCH_DATE_PEC_NOTIFICATION:2024-01-01} +mscore.pec-notification.disabled=${PEC_NOTIFICATION_DISABLED:false} \ No newline at end of file diff --git a/apps/institution-ms/connector-api/pom.xml b/apps/institution-ms/connector-api/pom.xml index a2f0c26..777cc1d 100644 --- a/apps/institution-ms/connector-api/pom.xml +++ b/apps/institution-ms/connector-api/pom.xml @@ -35,6 +35,10 @@ onboarding-sdk-product 0.1.15 + + org.mongodb + bson + diff --git a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java index 9ff6e08..dfcf44e 100644 --- a/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java +++ b/apps/institution-ms/connector-api/src/main/java/it/pagopa/selfcare/mscore/model/pecnotification/PecNotification.java @@ -4,20 +4,23 @@ import lombok.Data; import lombok.NoArgsConstructor; +import java.time.Instant; import java.time.OffsetDateTime; -import java.util.List; +import org.bson.types.ObjectId; @Data @NoArgsConstructor @AllArgsConstructor public class PecNotification { - private Object id; + private ObjectId id; private String institutionId; private String productId; private Integer moduleDayOfTheEpoch; private String digitalAddress; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; + private Instant createdAt; + private Instant updatedAt; + + } diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java index 9251ffc..71af7c2 100644 --- a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/PecNotificationEntity.java @@ -3,10 +3,13 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.FieldNameConstants; +import org.bson.codecs.pojo.annotations.BsonId; +import org.bson.types.ObjectId; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Sharded; +import java.time.Instant; import java.time.OffsetDateTime; @Data @@ -16,14 +19,14 @@ @FieldNameConstants(asEnum = true) public class PecNotificationEntity { - @Id - private Object id; + @BsonId + private ObjectId id; private String institutionId; private String productId; private Integer moduleDayOfTheEpoch; private String digitalAddress; - private OffsetDateTime createdAt; - private OffsetDateTime updatedAt; + private Instant createdAt; + private Instant updatedAt; } \ No newline at end of file diff --git a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java index fe31aad..0151eaf 100644 --- a/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java +++ b/apps/institution-ms/connector/dao/src/main/java/it/pagopa/selfcare/mscore/connector/dao/model/mapper/PecNotificationEntityMapper.java @@ -10,7 +10,7 @@ @Mapper(componentModel = "spring", imports = UUID.class) public interface PecNotificationEntityMapper { - @Mapping(target = "id", defaultExpression = "java(UUID.randomUUID().toString())") + @Mapping(target = "id", defaultExpression = "java(org.bson.types.ObjectId.get())") PecNotificationEntity convertToPecNotificationEntity(PecNotification institution); PecNotification convertToPecNotification(PecNotificationEntity entity); diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java index 69e9b5c..ee97fe6 100644 --- a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/DelegationServiceImpl.java @@ -3,6 +3,7 @@ import it.pagopa.selfcare.mscore.api.DelegationConnector; import it.pagopa.selfcare.mscore.constant.CustomError; import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.DelegationType; import it.pagopa.selfcare.mscore.constant.Order; import it.pagopa.selfcare.mscore.exception.MsCoreException; import it.pagopa.selfcare.mscore.exception.ResourceConflictException; @@ -45,10 +46,12 @@ public Delegation createDelegation(Delegation delegation) { Delegation savedDelegation = checkIfExistsAndSaveDelegation(delegation); - try { - notificationService.sendMailForDelegation(delegation.getInstitutionFromName(), delegation.getProductId(), delegation.getTo()); - } catch (Exception e) { - log.error(SEND_MAIL_FOR_DELEGATION_ERROR.getMessage() + ":", e.getMessage(), e); + if(delegation.getType().equals(DelegationType.PT)) { + try { + notificationService.sendMailForDelegation(delegation.getInstitutionFromName(), delegation.getProductId(), delegation.getTo()); + } catch (Exception e) { + log.error(SEND_MAIL_FOR_DELEGATION_ERROR.getMessage() + ":", e.getMessage(), e); + } } return savedDelegation; } diff --git a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java index 91e636f..1092ae4 100644 --- a/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java +++ b/apps/institution-ms/core/src/main/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImpl.java @@ -13,17 +13,18 @@ import it.pagopa.selfcare.mscore.model.pecnotification.PecNotification; import lombok.extern.slf4j.Slf4j; +import org.bson.types.ObjectId; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import java.time.Instant; import java.time.LocalDate; import java.time.OffsetDateTime; import java.time.temporal.ChronoUnit; import java.util.List; import java.util.Objects; import java.util.Optional; -import java.util.UUID; import static it.pagopa.selfcare.mscore.constant.GenericError.*; @@ -34,16 +35,19 @@ public class OnboardingServiceImpl implements OnboardingService { private final InstitutionService institutionService; private final InstitutionConnector institutionConnector; private final PecNotificationConnector pecNotificationConnector; - private Integer sendingFrequencyPecNotification; - private String epochDatePecNotification; - private LocalDate currentDate = LocalDate.now(); + private final Integer sendingFrequencyPecNotification; + private final String epochDatePecNotification; + private final LocalDate currentDate = LocalDate.now(); + + private final Boolean disabledPecNotification; public OnboardingServiceImpl(OnboardingDao onboardingDao, InstitutionService institutionService, InstitutionConnector institutionConnector, PecNotificationConnector pecNotificationConnector, @Value("${mscore.sending-frequency-pec-notification}") Integer sendingFrequencyPecNotification, - @Value("${mscore.epoch-date-pec-notification}") String epochDatePecNotification) { + @Value("${mscore.epoch-date-pec-notification}") String epochDatePecNotification, + @Value("${mscore.pec-notification.disabled}") Boolean disabledPecNotification) { this.onboardingDao = onboardingDao; this.institutionService = institutionService; @@ -51,6 +55,7 @@ public OnboardingServiceImpl(OnboardingDao onboardingDao, this.pecNotificationConnector = pecNotificationConnector; this.sendingFrequencyPecNotification = sendingFrequencyPecNotification; this.epochDatePecNotification = epochDatePecNotification; + this.disabledPecNotification = disabledPecNotification; } @Override @@ -82,8 +87,8 @@ public void verifyOnboardingInfoByFilters(VerifyOnboardingFilters filters) { public void insertPecNotification(String institutionId, String productId, String digitalAddress) { PecNotification pecNotification = new PecNotification(); - pecNotification.setId(UUID.randomUUID().toString()); - pecNotification.setCreatedAt(OffsetDateTime.now()); + pecNotification.setId(ObjectId.get()); + pecNotification.setCreatedAt(Instant.now()); pecNotification.setProductId(productId); pecNotification.setInstitutionId(institutionId); pecNotification.setModuleDayOfTheEpoch(calculateModuleDayOfTheEpoch()); @@ -98,8 +103,7 @@ public void insertPecNotification(String institutionId, String productId, String public int calculateModuleDayOfTheEpoch() { LocalDate epochStart = LocalDate.parse(this.epochDatePecNotification); long daysDiff = ChronoUnit.DAYS.between(epochStart, this.currentDate); - int moduleDayOfTheEpoch = (int) (daysDiff % this.sendingFrequencyPecNotification); - return moduleDayOfTheEpoch; + return (int) (daysDiff % this.sendingFrequencyPecNotification); } @Override @@ -107,7 +111,11 @@ public Institution persistOnboarding(String institutionId, String productId, Onboarding onboarding, StringBuilder httpStatus) { Institution institution = persistAndGetInstitution(institutionId, productId, onboarding, httpStatus); - this.insertPecNotification(institutionId, productId, institution.getDigitalAddress()); + + if (!disabledPecNotification){ + this.insertPecNotification(institutionId, productId, institution.getDigitalAddress()); + } + return institution; } diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java index 8ab55f5..b26ce09 100644 --- a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/DelegationServiceImplTest.java @@ -3,6 +3,7 @@ import it.pagopa.selfcare.commons.base.utils.InstitutionType; import it.pagopa.selfcare.mscore.api.DelegationConnector; import it.pagopa.selfcare.mscore.constant.DelegationState; +import it.pagopa.selfcare.mscore.constant.DelegationType; import it.pagopa.selfcare.mscore.constant.Order; import it.pagopa.selfcare.mscore.exception.MsCoreException; import it.pagopa.selfcare.mscore.exception.ResourceConflictException; @@ -52,12 +53,14 @@ class DelegationServiceImplTest { dummyDelegationProdIo.setTo("to"); dummyDelegationProdIo.setFrom("from"); dummyDelegationProdIo.setProductId("prod-io"); + dummyDelegationProdIo.setType(DelegationType.PT); dummyDelegationProdPagopa = new Delegation(); dummyDelegationProdPagopa.setId("id"); dummyDelegationProdPagopa.setProductId("prod-pagopa"); dummyDelegationProdPagopa.setTo("taxCodeTo"); dummyDelegationProdPagopa.setFrom("from"); + dummyDelegationProdPagopa.setType(DelegationType.EA); dummyDelegationTaxCode = new Delegation(); dummyDelegationTaxCode.setToTaxCode("taxCodeTo"); @@ -95,6 +98,35 @@ void testCreateDelegationWithProductProdIo() { assertEquals(institutionFrom.getInstitutionType(), response.getInstitutionType()); } + /** + * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} + */ + @Test + void testCreateDelegationEA() { + Institution institutionTo = new Institution(); + institutionTo.setId("idTo"); + institutionTo.setTaxCode("taxCodeTo"); + institutionTo.setInstitutionType(InstitutionType.PA); + Institution institutionFrom = new Institution(); + institutionTo.setId("idFrom"); + institutionTo.setTaxCode("taxCodeFrom"); + institutionTo.setInstitutionType(InstitutionType.PT); + when(delegationConnector.save(dummyDelegationProdPagopa)).thenAnswer(arg ->arg.getArguments()[0]); + when(institutionService.retrieveInstitutionById(dummyDelegationProdPagopa.getFrom())).thenReturn(institutionFrom); + when(institutionService.retrieveInstitutionById(dummyDelegationProdPagopa.getTo())).thenReturn(institutionTo); + doNothing().when(institutionService).updateInstitutionDelegation(any(),anyBoolean()); + Delegation response = delegationServiceImpl.createDelegation(dummyDelegationProdPagopa); + verify(delegationConnector).save(dummyDelegationProdPagopa); + verifyNoInteractions(mailNotificationService); + assertNotNull(response); + assertNotNull(response.getId()); + assertEquals(dummyDelegationProdPagopa.getId(), response.getId()); + assertEquals(institutionTo.getTaxCode(), response.getToTaxCode()); + assertEquals(institutionFrom.getTaxCode(), response.getFromTaxCode()); + assertEquals(institutionTo.getInstitutionType(), response.getBrokerType()); + assertEquals(institutionFrom.getInstitutionType(), response.getInstitutionType()); + } + /** * Method under test: {@link DelegationServiceImpl#createDelegation(Delegation)} */ @@ -106,7 +138,7 @@ void testCreateDelegationWithSendMailError() { doThrow(new MsCoreException(SEND_MAIL_FOR_DELEGATION_ERROR.getMessage(), SEND_MAIL_FOR_DELEGATION_ERROR.getCode())) .when(mailNotificationService) .sendMailForDelegation(any(), any(), any()); - assertDoesNotThrow(() -> delegationServiceImpl.createDelegation(dummyDelegationProdPagopa)); + assertDoesNotThrow(() -> delegationServiceImpl.createDelegation(dummyDelegationProdIo)); verify(mailNotificationService).sendMailForDelegation(any(), any(), any()); } diff --git a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java index 6fda8ba..e3c1f77 100644 --- a/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java +++ b/apps/institution-ms/core/src/test/java/it/pagopa/selfcare/mscore/core/OnboardingServiceImplTest.java @@ -136,6 +136,7 @@ void persistOnboarding_whenUserExistsOnRegistry() { ReflectionTestUtils.setField(onboardingServiceImpl, "sendingFrequencyPecNotification", 30); ReflectionTestUtils.setField(onboardingServiceImpl, "epochDatePecNotification", "2024-01-01"); + ReflectionTestUtils.setField(onboardingServiceImpl, "disabledPecNotification", false); Onboarding onboarding = dummyOnboarding(); onboarding.setStatus(UtilEnumList.VALID_RELATIONSHIP_STATES.get(0)); @@ -159,6 +160,36 @@ void persistOnboarding_whenUserExistsOnRegistry() { assertEquals(HttpStatus.OK.value(), Integer.parseInt(statusCode.toString())); } + @Test + void persistOnboarding_whenPecNotificationIsDisabled() { + + ReflectionTestUtils.setField(onboardingServiceImpl, "sendingFrequencyPecNotification", 30); + ReflectionTestUtils.setField(onboardingServiceImpl, "epochDatePecNotification", "2024-01-01"); + ReflectionTestUtils.setField(onboardingServiceImpl, "disabledPecNotification", true); + + Onboarding onboarding = dummyOnboarding(); + onboarding.setStatus(UtilEnumList.VALID_RELATIONSHIP_STATES.get(0)); + Institution institution = new Institution(); + institution.setId("institutionId"); + institution.setOnboarding(List.of(onboarding, dummyOnboarding())); + + when(institutionConnector.findById(institution.getId())).thenReturn(institution); + + String institutionId = institution.getId(); + + String productId = onboarding.getProductId(); + Onboarding onb = new Onboarding(); + + StringBuilder statusCode = new StringBuilder(); + + onboardingServiceImpl.persistOnboarding(institutionId, + productId, onb, statusCode); + + verify(pecNotificationConnector, never()).insertPecNotification(any(PecNotification.class)); + + assertEquals(HttpStatus.OK.value(), Integer.parseInt(statusCode.toString())); + } + /** @@ -201,6 +232,7 @@ void persistOnboarding_whenUserNotExistsOnRegistry() { ReflectionTestUtils.setField(onboardingServiceImpl, "sendingFrequencyPecNotification", 30); ReflectionTestUtils.setField(onboardingServiceImpl, "epochDatePecNotification", "2024-01-01"); + ReflectionTestUtils.setField(onboardingServiceImpl, "disabledPecNotification", false); String pricingPlan = "pricingPlan"; String productId = "productId"; diff --git a/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars b/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars index d7857b7..9bec420 100644 --- a/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars @@ -117,6 +117,10 @@ app_settings = [ { name = "MAIL_SENDER_ADDRESS" value = "noreply@areariservata.pagopa.it" + }, + { + name = "PEC_NOTIFICATION_DISABLED" + value = "true" } ] diff --git a/infra/container_apps/institution-ms/env/dev/terraform.tfvars b/infra/container_apps/institution-ms/env/dev/terraform.tfvars index a4471ba..bb30844 100644 --- a/infra/container_apps/institution-ms/env/dev/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/dev/terraform.tfvars @@ -123,6 +123,10 @@ app_settings = [ { name = "MAIL_SENDER_ADDRESS" value = "noreply@areariservata.pagopa.it" + }, + { + name = "PEC_NOTIFICATION_DISABLED" + value = "false" } ] diff --git a/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars b/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars index b88bfa3..b3f91b0 100644 --- a/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars @@ -116,6 +116,10 @@ app_settings = [ { name = "MAIL_SENDER_ADDRESS" value = "noreply@areariservata.pagopa.it" + }, + { + name = "PEC_NOTIFICATION_DISABLED" + value = "true" } ] diff --git a/infra/container_apps/institution-ms/env/prod/terraform.tfvars b/infra/container_apps/institution-ms/env/prod/terraform.tfvars index 5d75a28..dd5712f 100644 --- a/infra/container_apps/institution-ms/env/prod/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/prod/terraform.tfvars @@ -121,6 +121,10 @@ app_settings = [ { name = "MAIL_SENDER_ADDRESS" value = "noreply@areariservata.pagopa.it" + }, + { + name = "PEC_NOTIFICATION_DISABLED" + value = "false" } ] diff --git a/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars b/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars index 2426434..b66e1d8 100644 --- a/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars @@ -109,6 +109,10 @@ app_settings = [ { name = "MAIL_SENDER_ADDRESS" value = "noreply@areariservata.pagopa.it" + }, + { + name = "PEC_NOTIFICATION_DISABLED" + value = "true" } ] diff --git a/infra/container_apps/institution-ms/env/uat/terraform.tfvars b/infra/container_apps/institution-ms/env/uat/terraform.tfvars index 64f9ff6..e7da9c9 100644 --- a/infra/container_apps/institution-ms/env/uat/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/uat/terraform.tfvars @@ -112,6 +112,10 @@ app_settings = [ { name = "MAIL_SENDER_ADDRESS" value = "noreply@areariservata.pagopa.it" + }, + { + name = "PEC_NOTIFICATION_DISABLED" + value = "false" } ] From 9ddbde092057432ec1e6625909abcd0b0c75f98a Mon Sep 17 00:00:00 2001 From: manuraf Date: Thu, 11 Jul 2024 13:59:06 +0200 Subject: [PATCH 14/29] refactor: recover Dockerfile with .new --- apps/institution-ms/Dockerfile | 40 ++++++++++++++++++++++++++---- apps/institution-ms/Dockerfile.new | 35 -------------------------- 2 files changed, 35 insertions(+), 40 deletions(-) delete mode 100644 apps/institution-ms/Dockerfile.new diff --git a/apps/institution-ms/Dockerfile b/apps/institution-ms/Dockerfile index 322cffb..8f8f2be 100644 --- a/apps/institution-ms/Dockerfile +++ b/apps/institution-ms/Dockerfile @@ -1,5 +1,35 @@ -FROM maven@sha256:dcfe7934d3780beda6e1f0f641bc7db3fa9b8818899981f6eddae052c78394c7 -ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/3.1.1/applicationinsights-agent-3.1.1.jar /applicationinsights-agent.jar -VOLUME /tmp -COPY target/*.jar app.jar -ENTRYPOINT ["java","-jar","app.jar"] \ No newline at end of file +FROM maven:3-eclipse-temurin-17@sha256:0d328fa6843bb26b60cf44d69833f241ffe96218fb29fa19df7a6603863eaae7 AS builder + +COPY . . + +RUN echo "\n" \ + "\n" \ + "\n" \ + "\${repositoryOnboarding}\n" \ + "\${repoLogin}\n" \ + "\${repoPwd}\n" \ + "\n" \ + "\n" \ + "\n" > settings.xml + +ARG REPO_ONBOARDING +ARG REPO_USERNAME +ARG REPO_PASSWORD + +RUN mvn --global-settings settings.xml -DrepositoryOnboarding=${REPO_ONBOARDING} -DrepoLogin=${REPO_USERNAME} -DrepoPwd=${REPO_PASSWORD} clean package -DskipTests=true + +FROM openjdk:17-jdk@sha256:528707081fdb9562eb819128a9f85ae7fe000e2fbaeaf9f87662e7b3f38cb7d8 AS runtime + +ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' + +WORKDIR /app + +COPY --from=builder ./target/*.jar ./app.jar + +ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/3.2.11/applicationinsights-agent-3.2.11.jar ./applicationinsights-agent.jar +RUN chmod 755 ./applicationinsights-agent.jar + +EXPOSE 8080 +USER 1001 + +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/apps/institution-ms/Dockerfile.new b/apps/institution-ms/Dockerfile.new deleted file mode 100644 index 8f8f2be..0000000 --- a/apps/institution-ms/Dockerfile.new +++ /dev/null @@ -1,35 +0,0 @@ -FROM maven:3-eclipse-temurin-17@sha256:0d328fa6843bb26b60cf44d69833f241ffe96218fb29fa19df7a6603863eaae7 AS builder - -COPY . . - -RUN echo "\n" \ - "\n" \ - "\n" \ - "\${repositoryOnboarding}\n" \ - "\${repoLogin}\n" \ - "\${repoPwd}\n" \ - "\n" \ - "\n" \ - "\n" > settings.xml - -ARG REPO_ONBOARDING -ARG REPO_USERNAME -ARG REPO_PASSWORD - -RUN mvn --global-settings settings.xml -DrepositoryOnboarding=${REPO_ONBOARDING} -DrepoLogin=${REPO_USERNAME} -DrepoPwd=${REPO_PASSWORD} clean package -DskipTests=true - -FROM openjdk:17-jdk@sha256:528707081fdb9562eb819128a9f85ae7fe000e2fbaeaf9f87662e7b3f38cb7d8 AS runtime - -ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' - -WORKDIR /app - -COPY --from=builder ./target/*.jar ./app.jar - -ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/3.2.11/applicationinsights-agent-3.2.11.jar ./applicationinsights-agent.jar -RUN chmod 755 ./applicationinsights-agent.jar - -EXPOSE 8080 -USER 1001 - -ENTRYPOINT ["java", "-jar", "app.jar"] From 71f1095a4b5cce50b39fce549e21da714d23114c Mon Sep 17 00:00:00 2001 From: manuraf Date: Thu, 11 Jul 2024 14:00:48 +0200 Subject: [PATCH 15/29] fix: double /container_apps on release --- .github/workflows/release_institution_ms.yml | 6 +++--- .github/workflows/release_institution_ms_pnpg.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release_institution_ms.yml b/.github/workflows/release_institution_ms.yml index f90ab74..ba29ba1 100644 --- a/.github/workflows/release_institution_ms.yml +++ b/.github/workflows/release_institution_ms.yml @@ -31,7 +31,7 @@ jobs: with: environment: dev tf_environment: dev - dir: 'infra/container_apps/container_apps' + dir: 'infra/container_apps' dockerfile_path: ./apps/institution-ms/Dockerfile docker_image_name: pagopa/institution-ms upload_openapi_enabled: false @@ -44,7 +44,7 @@ jobs: with: environment: uat tf_environment: uat - dir: 'infra/container_apps/container_apps' + dir: 'infra/container_apps' dockerfile_path: ./apps/institution-ms/Dockerfile docker_image_name: pagopa/institution-ms upload_openapi_enabled: false @@ -57,7 +57,7 @@ jobs: with: environment: prod tf_environment: prod - dir: 'infra/container_apps/container_apps' + dir: 'infra/container_apps' dockerfile_path: ./apps/institution-ms/Dockerfile docker_image_name: pagopa/institution-ms upload_openapi_enabled: false diff --git a/.github/workflows/release_institution_ms_pnpg.yml b/.github/workflows/release_institution_ms_pnpg.yml index 2724f8a..1edee11 100644 --- a/.github/workflows/release_institution_ms_pnpg.yml +++ b/.github/workflows/release_institution_ms_pnpg.yml @@ -31,7 +31,7 @@ jobs: with: environment: dev tf_environment: dev-pnpg - dir: 'infra/container_apps/container_apps' + dir: 'infra/container_apps' dockerfile_path: ./apps/institution-ms/Dockerfile docker_image_name: pagopa/institution-ms upload_openapi_enabled: false @@ -44,7 +44,7 @@ jobs: with: environment: uat tf_environment: uat-pnpg - dir: 'infra/container_apps/container_apps' + dir: 'infra/container_apps' dockerfile_path: ./apps/institution-ms/Dockerfile docker_image_name: pagopa/institution-ms upload_openapi_enabled: false @@ -57,7 +57,7 @@ jobs: with: environment: prod tf_environment: prod-pnpg - dir: 'infra/container_apps/container_apps' + dir: 'infra/container_apps' dockerfile_path: ./apps/institution-ms/Dockerfile docker_image_name: pagopa/institution-ms upload_openapi_enabled: false \ No newline at end of file From 5b24a88493e7d958ca51bc909086a65276e4895b Mon Sep 17 00:00:00 2001 From: manuraf Date: Thu, 11 Jul 2024 14:13:27 +0200 Subject: [PATCH 16/29] fix: reference institution-ms module in Dockerfile --- .github/workflows/pr_institution_ms.yml | 4 ---- apps/institution-ms/Dockerfile | 19 +++++++++++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/.github/workflows/pr_institution_ms.yml b/.github/workflows/pr_institution_ms.yml index d0d2b23..9eaade3 100644 --- a/.github/workflows/pr_institution_ms.yml +++ b/.github/workflows/pr_institution_ms.yml @@ -30,7 +30,3 @@ jobs: target_branch: ${{ github.base_ref }} sonar_key: 'pagopa_selfcare-ms-core' module: 'institution-ms' - - docker_build: - uses: ./.github/workflows/call_code_review.yml - name: 'Docker' diff --git a/apps/institution-ms/Dockerfile b/apps/institution-ms/Dockerfile index 8f8f2be..80ae99c 100644 --- a/apps/institution-ms/Dockerfile +++ b/apps/institution-ms/Dockerfile @@ -1,11 +1,22 @@ FROM maven:3-eclipse-temurin-17@sha256:0d328fa6843bb26b60cf44d69833f241ffe96218fb29fa19df7a6603863eaae7 AS builder -COPY . . +WORKDIR /src +COPY --link pom.xml . + +WORKDIR /src/test-coverage +COPY --link ./test-coverage/pom.xml . + +WORKDIR /src/apps +COPY --link ./apps/pom.xml . + +WORKDIR /src/apps/institution-ms +COPY --link ./apps/institution-ms/pom.xml . +COPY ./apps/institution-ms/ ./ RUN echo "\n" \ "\n" \ "\n" \ - "\${repositoryOnboarding}\n" \ + "\${repositoryId}\n" \ "\${repoLogin}\n" \ "\${repoPwd}\n" \ "\n" \ @@ -16,7 +27,7 @@ ARG REPO_ONBOARDING ARG REPO_USERNAME ARG REPO_PASSWORD -RUN mvn --global-settings settings.xml -DrepositoryOnboarding=${REPO_ONBOARDING} -DrepoLogin=${REPO_USERNAME} -DrepoPwd=${REPO_PASSWORD} clean package -DskipTests=true +RUN mvn --global-settings settings.xml --projects :institution-ms -DrepositoryId=${REPO_ONBOARDING} -DrepoLogin=${REPO_USERNAME} -DrepoPwd=${REPO_PASSWORD} --also-make-dependents clean package -DskipTests FROM openjdk:17-jdk@sha256:528707081fdb9562eb819128a9f85ae7fe000e2fbaeaf9f87662e7b3f38cb7d8 AS runtime @@ -24,7 +35,7 @@ ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' WORKDIR /app -COPY --from=builder ./target/*.jar ./app.jar +COPY --from=builder /src/apps/institution-ms/target/*.jar ./app.jar ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/3.2.11/applicationinsights-agent-3.2.11.jar ./applicationinsights-agent.jar RUN chmod 755 ./applicationinsights-agent.jar From 81ddbcf747110f7c23a1b4cfa0b1874b5518df03 Mon Sep 17 00:00:00 2001 From: manuraf Date: Thu, 11 Jul 2024 14:23:21 +0200 Subject: [PATCH 17/29] fix: reference dir on release --- .github/workflows/release_institution_ms.yml | 12 ++++++------ .github/workflows/release_institution_ms_pnpg.yml | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/release_institution_ms.yml b/.github/workflows/release_institution_ms.yml index ba29ba1..cb3d7b4 100644 --- a/.github/workflows/release_institution_ms.yml +++ b/.github/workflows/release_institution_ms.yml @@ -31,10 +31,10 @@ jobs: with: environment: dev tf_environment: dev - dir: 'infra/container_apps' + dir: 'infra/container_apps/institution-ms' dockerfile_path: ./apps/institution-ms/Dockerfile docker_image_name: pagopa/institution-ms - upload_openapi_enabled: false + path_openapi_docs: ./apps/institution-ms/app/src/main/docs/openapi.json release_uat: uses: pagopa/selfcare-commons/.github/workflows/call_release_docker.yml@main @@ -44,10 +44,10 @@ jobs: with: environment: uat tf_environment: uat - dir: 'infra/container_apps' + dir: 'infra/container_apps/institution-ms' dockerfile_path: ./apps/institution-ms/Dockerfile docker_image_name: pagopa/institution-ms - upload_openapi_enabled: false + path_openapi_docs: ./apps/institution-ms/app/src/main/docs/openapi.json release_prod: uses: pagopa/selfcare-commons/.github/workflows/call_release_docker.yml@main @@ -57,10 +57,10 @@ jobs: with: environment: prod tf_environment: prod - dir: 'infra/container_apps' + dir: 'infra/container_apps/institution-ms' dockerfile_path: ./apps/institution-ms/Dockerfile docker_image_name: pagopa/institution-ms - upload_openapi_enabled: false + path_openapi_docs: ./apps/institution-ms/app/src/main/docs/openapi.json promote_release: name: 'Promote prerelase release' diff --git a/.github/workflows/release_institution_ms_pnpg.yml b/.github/workflows/release_institution_ms_pnpg.yml index 1edee11..1d67d87 100644 --- a/.github/workflows/release_institution_ms_pnpg.yml +++ b/.github/workflows/release_institution_ms_pnpg.yml @@ -31,7 +31,7 @@ jobs: with: environment: dev tf_environment: dev-pnpg - dir: 'infra/container_apps' + dir: 'infra/container_apps/institution-ms' dockerfile_path: ./apps/institution-ms/Dockerfile docker_image_name: pagopa/institution-ms upload_openapi_enabled: false @@ -44,7 +44,7 @@ jobs: with: environment: uat tf_environment: uat-pnpg - dir: 'infra/container_apps' + dir: 'infra/container_apps/institution-ms' dockerfile_path: ./apps/institution-ms/Dockerfile docker_image_name: pagopa/institution-ms upload_openapi_enabled: false @@ -57,7 +57,7 @@ jobs: with: environment: prod tf_environment: prod-pnpg - dir: 'infra/container_apps' + dir: 'infra/container_apps/institution-ms' dockerfile_path: ./apps/institution-ms/Dockerfile docker_image_name: pagopa/institution-ms upload_openapi_enabled: false \ No newline at end of file From a020aee5b6d76a5679a587b1de11c2feaeb3f967 Mon Sep 17 00:00:00 2001 From: manuraf Date: Thu, 11 Jul 2024 14:29:09 +0200 Subject: [PATCH 18/29] fix: docker_image_name on release --- .github/workflows/release_institution_ms.yml | 6 +++--- .github/workflows/release_institution_ms_pnpg.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release_institution_ms.yml b/.github/workflows/release_institution_ms.yml index cb3d7b4..2201f69 100644 --- a/.github/workflows/release_institution_ms.yml +++ b/.github/workflows/release_institution_ms.yml @@ -33,7 +33,7 @@ jobs: tf_environment: dev dir: 'infra/container_apps/institution-ms' dockerfile_path: ./apps/institution-ms/Dockerfile - docker_image_name: pagopa/institution-ms + docker_image_name: pagopa/selfcare-institution-ms path_openapi_docs: ./apps/institution-ms/app/src/main/docs/openapi.json release_uat: @@ -46,7 +46,7 @@ jobs: tf_environment: uat dir: 'infra/container_apps/institution-ms' dockerfile_path: ./apps/institution-ms/Dockerfile - docker_image_name: pagopa/institution-ms + docker_image_name: pagopa/selfcare-institution-ms path_openapi_docs: ./apps/institution-ms/app/src/main/docs/openapi.json release_prod: @@ -59,7 +59,7 @@ jobs: tf_environment: prod dir: 'infra/container_apps/institution-ms' dockerfile_path: ./apps/institution-ms/Dockerfile - docker_image_name: pagopa/institution-ms + docker_image_name: pagopa/selfcare-institution-ms path_openapi_docs: ./apps/institution-ms/app/src/main/docs/openapi.json promote_release: diff --git a/.github/workflows/release_institution_ms_pnpg.yml b/.github/workflows/release_institution_ms_pnpg.yml index 1d67d87..18c7615 100644 --- a/.github/workflows/release_institution_ms_pnpg.yml +++ b/.github/workflows/release_institution_ms_pnpg.yml @@ -33,7 +33,7 @@ jobs: tf_environment: dev-pnpg dir: 'infra/container_apps/institution-ms' dockerfile_path: ./apps/institution-ms/Dockerfile - docker_image_name: pagopa/institution-ms + docker_image_name: pagopa/selfcare-institution-ms upload_openapi_enabled: false release_uat: @@ -46,7 +46,7 @@ jobs: tf_environment: uat-pnpg dir: 'infra/container_apps/institution-ms' dockerfile_path: ./apps/institution-ms/Dockerfile - docker_image_name: pagopa/institution-ms + docker_image_name: pagopa/selfcare-institution-ms upload_openapi_enabled: false release_prod: @@ -59,5 +59,5 @@ jobs: tf_environment: prod-pnpg dir: 'infra/container_apps/institution-ms' dockerfile_path: ./apps/institution-ms/Dockerfile - docker_image_name: pagopa/institution-ms + docker_image_name: pagopa/selfcare-institution-ms upload_openapi_enabled: false \ No newline at end of file From d170a359fa8c3c86aca001ce1f397b46097abdc3 Mon Sep 17 00:00:00 2001 From: manuraf Date: Thu, 11 Jul 2024 14:34:15 +0200 Subject: [PATCH 19/29] fix: add WORKDIR /src on dockerfile --- apps/institution-ms/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/institution-ms/Dockerfile b/apps/institution-ms/Dockerfile index 80ae99c..fcdcef7 100644 --- a/apps/institution-ms/Dockerfile +++ b/apps/institution-ms/Dockerfile @@ -13,6 +13,8 @@ WORKDIR /src/apps/institution-ms COPY --link ./apps/institution-ms/pom.xml . COPY ./apps/institution-ms/ ./ +WORKDIR /src + RUN echo "\n" \ "\n" \ "\n" \ From e24462d56f9ebfd7ea9fe36fdaec24058f009bc7 Mon Sep 17 00:00:00 2001 From: manuraf Date: Thu, 11 Jul 2024 15:02:47 +0200 Subject: [PATCH 20/29] test: change sha eclipse-temurin-17 --- apps/institution-ms/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/institution-ms/Dockerfile b/apps/institution-ms/Dockerfile index fcdcef7..7b536c7 100644 --- a/apps/institution-ms/Dockerfile +++ b/apps/institution-ms/Dockerfile @@ -1,7 +1,7 @@ -FROM maven:3-eclipse-temurin-17@sha256:0d328fa6843bb26b60cf44d69833f241ffe96218fb29fa19df7a6603863eaae7 AS builder +FROM maven:3-eclipse-temurin-17@sha256:6ca4f2d4c7a8affa4a7cdec526dd2aa5d433ddd63f8ed3337a543408136b174e AS builder WORKDIR /src -COPY --link pom.xml . +COPY --link ./pom.xml . WORKDIR /src/test-coverage COPY --link ./test-coverage/pom.xml . From f6460764cd6bcfb4a08b4e617fd806dd9799542b Mon Sep 17 00:00:00 2001 From: manuraf Date: Thu, 11 Jul 2024 15:34:03 +0200 Subject: [PATCH 21/29] refactor: change name artifact institution-ms --- apps/institution-ms/app/pom.xml | 2 +- .../src/main/resources/swagger/api-docs.json | 2 +- apps/institution-ms/connector-api/pom.xml | 2 +- apps/institution-ms/connector/pom.xml | 2 +- apps/institution-ms/core/pom.xml | 2 +- apps/institution-ms/pom.xml | 6 +++-- apps/institution-ms/web/pom.xml | 2 +- test-coverage/pom.xml | 22 ++++++++++++++++++- 8 files changed, 31 insertions(+), 9 deletions(-) diff --git a/apps/institution-ms/app/pom.xml b/apps/institution-ms/app/pom.xml index 12a6481..e61fc85 100644 --- a/apps/institution-ms/app/pom.xml +++ b/apps/institution-ms/app/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - selc-ms-core + institution-ms it.pagopa.selfcare 1.0-SNAPSHOT diff --git a/apps/institution-ms/app/src/main/resources/swagger/api-docs.json b/apps/institution-ms/app/src/main/resources/swagger/api-docs.json index 936ecd7..bc67935 100644 --- a/apps/institution-ms/app/src/main/resources/swagger/api-docs.json +++ b/apps/institution-ms/app/src/main/resources/swagger/api-docs.json @@ -1,7 +1,7 @@ { "openapi" : "3.0.3", "info" : { - "title" : "selc-ms-core", + "title" : "institution-ms", "version" : "1.0-SNAPSHOT" }, "servers" : [ { diff --git a/apps/institution-ms/connector-api/pom.xml b/apps/institution-ms/connector-api/pom.xml index 777cc1d..a5bf7d8 100644 --- a/apps/institution-ms/connector-api/pom.xml +++ b/apps/institution-ms/connector-api/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - selc-ms-core + institution-ms it.pagopa.selfcare 1.0-SNAPSHOT diff --git a/apps/institution-ms/connector/pom.xml b/apps/institution-ms/connector/pom.xml index 7220fdf..67b84ce 100644 --- a/apps/institution-ms/connector/pom.xml +++ b/apps/institution-ms/connector/pom.xml @@ -2,7 +2,7 @@ 4.0.0 - selc-ms-core + institution-ms it.pagopa.selfcare 1.0-SNAPSHOT diff --git a/apps/institution-ms/core/pom.xml b/apps/institution-ms/core/pom.xml index ff21c08..376b6be 100644 --- a/apps/institution-ms/core/pom.xml +++ b/apps/institution-ms/core/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - selc-ms-core + institution-ms it.pagopa.selfcare 1.0-SNAPSHOT diff --git a/apps/institution-ms/pom.xml b/apps/institution-ms/pom.xml index 8c0314a..9bb3e3a 100644 --- a/apps/institution-ms/pom.xml +++ b/apps/institution-ms/pom.xml @@ -6,12 +6,13 @@ it.pagopa.selfcare selc-starter-parent 0.0.3-SNAPSHOT + - selc-ms-core + institution-ms 1.0-SNAPSHOT pom - selc-ms-core + institution-ms Selface ms-core @@ -27,6 +28,7 @@ 5.2.1 5.2.1 https://sonarcloud.io/ + true diff --git a/apps/institution-ms/web/pom.xml b/apps/institution-ms/web/pom.xml index 46f4c57..a534f96 100644 --- a/apps/institution-ms/web/pom.xml +++ b/apps/institution-ms/web/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - selc-ms-core + institution-ms it.pagopa.selfcare 1.0-SNAPSHOT diff --git a/test-coverage/pom.xml b/test-coverage/pom.xml index 978d9f6..d9178b1 100644 --- a/test-coverage/pom.xml +++ b/test-coverage/pom.xml @@ -50,7 +50,27 @@ it.pagopa.selfcare - selc-ms-core + selc-ms-core-app + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-web + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-core + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-connector-dao + 1.0-SNAPSHOT + + + it.pagopa.selfcare + selc-ms-core-connector-api 1.0-SNAPSHOT From 6e4b28504e0fce8b4fb3ce7a7566bcf1b732e382 Mon Sep 17 00:00:00 2001 From: manuraf Date: Thu, 11 Jul 2024 16:39:29 +0200 Subject: [PATCH 22/29] fix: servers selfcare-onboarding pr --- .github/workflows/call_code_review.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/call_code_review.yml b/.github/workflows/call_code_review.yml index d15264f..001830d 100644 --- a/.github/workflows/call_code_review.yml +++ b/.github/workflows/call_code_review.yml @@ -35,7 +35,7 @@ jobs: - uses: s4u/maven-settings-action@60912582505985be4cc55d2b890eb32767f8de5f # pin@v2.8.0 with: - servers: '[{"id": "selfcare-institution", "username": "${{ github.actor }}", "password": "${{ secrets.GITHUB_TOKEN }}"}]' + servers: '[{"id": "selfcare-onboarding", "username": "${{ github.actor }}", "password": "${{ secrets.GITHUB_TOKEN }}"}]' - name: Build and Analyze shell: bash From f81ce41f6ab76e474703cc143bd248866dcf34b1 Mon Sep 17 00:00:00 2001 From: manuraf Date: Thu, 11 Jul 2024 16:57:37 +0200 Subject: [PATCH 23/29] some fix --- .github/workflows/pr_institution_ms.yml | 2 +- apps/institution-ms/Dockerfile | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/pr_institution_ms.yml b/.github/workflows/pr_institution_ms.yml index 9eaade3..b0ef18b 100644 --- a/.github/workflows/pr_institution_ms.yml +++ b/.github/workflows/pr_institution_ms.yml @@ -15,7 +15,7 @@ on: - ready_for_review paths: - 'apps/institution-ms/**' - - '.github/workflows/pr_institution-ms.yml' + - '.github/workflows/pr_institution_ms.yml' - '.github/workflows/call_code_review.yml' jobs: diff --git a/apps/institution-ms/Dockerfile b/apps/institution-ms/Dockerfile index 7b536c7..d06e2d8 100644 --- a/apps/institution-ms/Dockerfile +++ b/apps/institution-ms/Dockerfile @@ -3,9 +3,6 @@ FROM maven:3-eclipse-temurin-17@sha256:6ca4f2d4c7a8affa4a7cdec526dd2aa5d433ddd63 WORKDIR /src COPY --link ./pom.xml . -WORKDIR /src/test-coverage -COPY --link ./test-coverage/pom.xml . - WORKDIR /src/apps COPY --link ./apps/pom.xml . @@ -13,8 +10,6 @@ WORKDIR /src/apps/institution-ms COPY --link ./apps/institution-ms/pom.xml . COPY ./apps/institution-ms/ ./ -WORKDIR /src - RUN echo "\n" \ "\n" \ "\n" \ From c545c484b2c6b405d8e8760bddc196953a135651 Mon Sep 17 00:00:00 2001 From: manuraf Date: Thu, 11 Jul 2024 17:02:27 +0200 Subject: [PATCH 24/29] test --- apps/institution-ms/Dockerfile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/institution-ms/Dockerfile b/apps/institution-ms/Dockerfile index d06e2d8..0f207e0 100644 --- a/apps/institution-ms/Dockerfile +++ b/apps/institution-ms/Dockerfile @@ -3,11 +3,14 @@ FROM maven:3-eclipse-temurin-17@sha256:6ca4f2d4c7a8affa4a7cdec526dd2aa5d433ddd63 WORKDIR /src COPY --link ./pom.xml . +WORKDIR /src/test-coverage +COPY --link ./test-coverage/pom.xml ./ + WORKDIR /src/apps -COPY --link ./apps/pom.xml . +COPY --link ./apps/pom.xml ./ WORKDIR /src/apps/institution-ms -COPY --link ./apps/institution-ms/pom.xml . +COPY --link ./apps/institution-ms/pom.xml ./ COPY ./apps/institution-ms/ ./ RUN echo "\n" \ From 7e3ddbfc7cb98546086747ee4380e1a30a8d33d3 Mon Sep 17 00:00:00 2001 From: manuraf Date: Thu, 11 Jul 2024 17:06:01 +0200 Subject: [PATCH 25/29] recover test --- apps/institution-ms/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/institution-ms/Dockerfile b/apps/institution-ms/Dockerfile index 0f207e0..dbb09d4 100644 --- a/apps/institution-ms/Dockerfile +++ b/apps/institution-ms/Dockerfile @@ -4,13 +4,13 @@ WORKDIR /src COPY --link ./pom.xml . WORKDIR /src/test-coverage -COPY --link ./test-coverage/pom.xml ./ +COPY --link ./test-coverage/pom.xml . WORKDIR /src/apps -COPY --link ./apps/pom.xml ./ +COPY --link ./apps/pom.xml . WORKDIR /src/apps/institution-ms -COPY --link ./apps/institution-ms/pom.xml ./ +COPY --link ./apps/institution-ms/pom.xml . COPY ./apps/institution-ms/ ./ RUN echo "\n" \ From 27ebe21d47ba9489b164764417e3decd20785280 Mon Sep 17 00:00:00 2001 From: manuraf Date: Wed, 17 Jul 2024 17:27:32 +0200 Subject: [PATCH 26/29] update openapi for merge --- .../app/src/main/resources/swagger/api-docs.json | 6 +++--- .../mscore/web/controller/InstitutionController.java | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/institution-ms/app/src/main/resources/swagger/api-docs.json b/apps/institution-ms/app/src/main/resources/swagger/api-docs.json index bc67935..d900e5f 100644 --- a/apps/institution-ms/app/src/main/resources/swagger/api-docs.json +++ b/apps/institution-ms/app/src/main/resources/swagger/api-docs.json @@ -1,7 +1,7 @@ { "openapi" : "3.0.3", "info" : { - "title" : "institution-ms", + "title" : "selc-ms-core", "version" : "1.0-SNAPSHOT" }, "servers" : [ { @@ -1548,7 +1548,7 @@ }, "/institutions/{id}" : { "get" : { - "tags" : [ "Institution", "external-v2" ], + "tags" : [ "Institution", "external-pnpg", "external-v2", "internal-v1" ], "summary" : "Gets the corresponding institution using internal institution id", "description" : "Gets the corresponding institution using internal institution id", "operationId" : "retrieveInstitutionByIdUsingGET", @@ -1938,7 +1938,7 @@ }, "/institutions/{institutionId}/createdAt" : { "put" : { - "tags" : [ "Institution" ], + "tags" : [ "Institution", "internal-v1" ], "summary" : "The service updates the createdAt field for the institution-product pair", "description" : "The service updates the createdAt field for the institution-product pair", "operationId" : "updateCreatedAtUsingPUT", diff --git a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java index efe28e0..ddcb1e1 100644 --- a/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java +++ b/apps/institution-ms/web/src/main/java/it/pagopa/selfcare/mscore/web/controller/InstitutionController.java @@ -408,7 +408,10 @@ public ResponseEntity> retrieveInstitutionGeoTaxonomi * * Code: 200, Message: successful operation, DataType: InstitutionResponse * * Code: 404, Message: GeographicTaxonomies or Institution not found, DataType: Problem */ - @Tags({@Tag(name = "external-v2"), @Tag(name = "Institution")}) + @Tag(name = "external-v2") + @Tag(name = "internal-v1") + @Tag(name = "external-pnpg") + @Tag(name = "Institution") @ResponseStatus(HttpStatus.OK) @ApiOperation(value = "${swagger.mscore.institution}", notes = "${swagger.mscore.institution}") @GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) @@ -472,6 +475,8 @@ public ResponseEntity> getValidInstitutionToOnboard(@ * * Code: 404, Message: Institution or Token or UserBinding not found, DataType: Problem */ @ResponseStatus(HttpStatus.OK) + @Tag(name = "internal-v1") + @Tag(name = "Institution") @ApiOperation(value = "${swagger.mscore.institutions.updateCreatedAt}", notes = "${swagger.mscore.institutions.updateCreatedAt}") @PutMapping(value = "/{institutionId}/createdAt", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity updateCreatedAt(@ApiParam("${swagger.mscore.institutions.model.institutionId}") From 82b0ccd66f3a74f10e297e13be9e69b63fdc1b40 Mon Sep 17 00:00:00 2001 From: manuraf Date: Wed, 17 Jul 2024 17:27:39 +0200 Subject: [PATCH 27/29] pre-commit --- .../env/dev-pnpg/terraform.tfvars | 2 +- .../institution-ms/env/dev/terraform.tfvars | 34 ++++++++++--------- .../env/prod-pnpg/terraform.tfvars | 2 +- .../institution-ms/env/prod/terraform.tfvars | 28 +++++++-------- .../env/uat-pnpg/terraform.tfvars | 2 +- .../institution-ms/env/uat/terraform.tfvars | 32 ++++++++--------- .../env/dev/terraform.tfvars | 30 ++++++++-------- .../env/prod/terraform.tfvars | 18 +++++----- .../env/uat/terraform.tfvars | 16 ++++----- .../institution-send-mail-scheduler/locals.tf | 4 +-- .../institution-send-mail-scheduler/main.tf | 18 +++++----- .../mongo_db.tf | 4 +-- infra/repository/README.md | 4 +++ 13 files changed, 100 insertions(+), 94 deletions(-) diff --git a/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars b/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars index 9bec420..543d2f1 100644 --- a/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars @@ -119,7 +119,7 @@ app_settings = [ value = "noreply@areariservata.pagopa.it" }, { - name = "PEC_NOTIFICATION_DISABLED" + name = "PEC_NOTIFICATION_DISABLED" value = "true" } ] diff --git a/infra/container_apps/institution-ms/env/dev/terraform.tfvars b/infra/container_apps/institution-ms/env/dev/terraform.tfvars index bb30844..a27c1f0 100644 --- a/infra/container_apps/institution-ms/env/dev/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/dev/terraform.tfvars @@ -1,5 +1,7 @@ -env_short = "d" -env = "dev" +env_short = "d" +env = "dev" +suffix_increment = "-002" +cae_name = "cae-002" tags = { CreatedBy = "Terraform" @@ -125,23 +127,23 @@ app_settings = [ value = "noreply@areariservata.pagopa.it" }, { - name = "PEC_NOTIFICATION_DISABLED" + name = "PEC_NOTIFICATION_DISABLED" value = "false" } ] secrets_names = { - "STORAGE_APPLICATION_SECRET" = "contracts-storage-access-key" - "APPLICATIONINSIGHTS_CONNECTION_STRING" = "appinsights-connection-string" - "MONGODB_CONNECTION_URI" = "mongodb-connection-string" - "BLOB_STORAGE_CONN_STRING" = "blob-storage-contract-connection-string" - "STORAGE_CREDENTIAL_SECRET" = "contracts-storage-access-key" - "SMTP_USR" = "smtp-usr" - "SMTP_PSW" = "smtp-psw" - "ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL" = "party-test-institution-email" - "USER_REGISTRY_API_KEY" = "user-registry-api-key" - "JWT_TOKEN_PUBLIC_KEY" = "jwt-public-key" - "BLOB_STORAGE_PRODUCT_CONNECTION_STRING" = "blob-storage-product-connection-string" - "AWS_SES_ACCESS_KEY_ID" = "aws-ses-access-key-id" - "AWS_SES_SECRET_ACCESS_KEY" = "aws-ses-secret-access-key" + "STORAGE_APPLICATION_SECRET" = "contracts-storage-access-key" + "APPLICATIONINSIGHTS_CONNECTION_STRING" = "appinsights-connection-string" + "MONGODB_CONNECTION_URI" = "mongodb-connection-string" + "BLOB_STORAGE_CONN_STRING" = "blob-storage-contract-connection-string" + "STORAGE_CREDENTIAL_SECRET" = "contracts-storage-access-key" + "SMTP_USR" = "smtp-usr" + "SMTP_PSW" = "smtp-psw" + "ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL" = "party-test-institution-email" + "USER_REGISTRY_API_KEY" = "user-registry-api-key" + "JWT_TOKEN_PUBLIC_KEY" = "jwt-public-key" + "BLOB_STORAGE_PRODUCT_CONNECTION_STRING" = "blob-storage-product-connection-string" + "AWS_SES_ACCESS_KEY_ID" = "aws-ses-access-key-id" + "AWS_SES_SECRET_ACCESS_KEY" = "aws-ses-secret-access-key" } diff --git a/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars b/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars index b3f91b0..38c23cb 100644 --- a/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars @@ -118,7 +118,7 @@ app_settings = [ value = "noreply@areariservata.pagopa.it" }, { - name = "PEC_NOTIFICATION_DISABLED" + name = "PEC_NOTIFICATION_DISABLED" value = "true" } ] diff --git a/infra/container_apps/institution-ms/env/prod/terraform.tfvars b/infra/container_apps/institution-ms/env/prod/terraform.tfvars index dd5712f..36d0893 100644 --- a/infra/container_apps/institution-ms/env/prod/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/prod/terraform.tfvars @@ -123,23 +123,23 @@ app_settings = [ value = "noreply@areariservata.pagopa.it" }, { - name = "PEC_NOTIFICATION_DISABLED" + name = "PEC_NOTIFICATION_DISABLED" value = "false" } ] secrets_names = { - "STORAGE_APPLICATION_SECRET" = "contracts-storage-access-key" - "APPLICATIONINSIGHTS_CONNECTION_STRING" = "appinsights-connection-string" - "MONGODB_CONNECTION_URI" = "mongodb-connection-string" - "BLOB_STORAGE_CONN_STRING" = "blob-storage-contract-connection-string" - "STORAGE_CREDENTIAL_SECRET" = "contracts-storage-access-key" - "SMTP_USR" = "smtp-usr" - "SMTP_PSW" = "smtp-psw" - "ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL" = "party-test-institution-email" - "USER_REGISTRY_API_KEY" = "user-registry-api-key" - "JWT_TOKEN_PUBLIC_KEY" = "jwt-public-key" - "BLOB_STORAGE_PRODUCT_CONNECTION_STRING" = "blob-storage-product-connection-string" - "AWS_SES_ACCESS_KEY_ID" = "aws-ses-access-key-id" - "AWS_SES_SECRET_ACCESS_KEY" = "aws-ses-secret-access-key" + "STORAGE_APPLICATION_SECRET" = "contracts-storage-access-key" + "APPLICATIONINSIGHTS_CONNECTION_STRING" = "appinsights-connection-string" + "MONGODB_CONNECTION_URI" = "mongodb-connection-string" + "BLOB_STORAGE_CONN_STRING" = "blob-storage-contract-connection-string" + "STORAGE_CREDENTIAL_SECRET" = "contracts-storage-access-key" + "SMTP_USR" = "smtp-usr" + "SMTP_PSW" = "smtp-psw" + "ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL" = "party-test-institution-email" + "USER_REGISTRY_API_KEY" = "user-registry-api-key" + "JWT_TOKEN_PUBLIC_KEY" = "jwt-public-key" + "BLOB_STORAGE_PRODUCT_CONNECTION_STRING" = "blob-storage-product-connection-string" + "AWS_SES_ACCESS_KEY_ID" = "aws-ses-access-key-id" + "AWS_SES_SECRET_ACCESS_KEY" = "aws-ses-secret-access-key" } \ No newline at end of file diff --git a/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars b/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars index b66e1d8..f613b13 100644 --- a/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars @@ -111,7 +111,7 @@ app_settings = [ value = "noreply@areariservata.pagopa.it" }, { - name = "PEC_NOTIFICATION_DISABLED" + name = "PEC_NOTIFICATION_DISABLED" value = "true" } ] diff --git a/infra/container_apps/institution-ms/env/uat/terraform.tfvars b/infra/container_apps/institution-ms/env/uat/terraform.tfvars index e7da9c9..9462bc7 100644 --- a/infra/container_apps/institution-ms/env/uat/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/uat/terraform.tfvars @@ -1,6 +1,6 @@ env_short = "u" -suffix_increment = "-001" -cae_name = "cae-001" +suffix_increment = "-002" +cae_name = "cae-002" tags = { CreatedBy = "Terraform" @@ -114,23 +114,23 @@ app_settings = [ value = "noreply@areariservata.pagopa.it" }, { - name = "PEC_NOTIFICATION_DISABLED" + name = "PEC_NOTIFICATION_DISABLED" value = "false" } ] secrets_names = { - "STORAGE_APPLICATION_SECRET" = "contracts-storage-access-key" - "APPLICATIONINSIGHTS_CONNECTION_STRING" = "appinsights-connection-string" - "MONGODB_CONNECTION_URI" = "mongodb-connection-string" - "BLOB_STORAGE_CONN_STRING" = "blob-storage-contract-connection-string" - "STORAGE_CREDENTIAL_SECRET" = "contracts-storage-access-key" - "SMTP_USR" = "smtp-usr" - "SMTP_PSW" = "smtp-psw" - "ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL" = "party-test-institution-email" - "USER_REGISTRY_API_KEY" = "user-registry-api-key" - "JWT_TOKEN_PUBLIC_KEY" = "jwt-public-key" - "BLOB_STORAGE_PRODUCT_CONNECTION_STRING" = "blob-storage-product-connection-string" - "AWS_SES_ACCESS_KEY_ID" = "aws-ses-access-key-id" - "AWS_SES_SECRET_ACCESS_KEY" = "aws-ses-secret-access-key" + "STORAGE_APPLICATION_SECRET" = "contracts-storage-access-key" + "APPLICATIONINSIGHTS_CONNECTION_STRING" = "appinsights-connection-string" + "MONGODB_CONNECTION_URI" = "mongodb-connection-string" + "BLOB_STORAGE_CONN_STRING" = "blob-storage-contract-connection-string" + "STORAGE_CREDENTIAL_SECRET" = "contracts-storage-access-key" + "SMTP_USR" = "smtp-usr" + "SMTP_PSW" = "smtp-psw" + "ONBOARDING_INSTITUTION_ALTERNATIVE_EMAIL" = "party-test-institution-email" + "USER_REGISTRY_API_KEY" = "user-registry-api-key" + "JWT_TOKEN_PUBLIC_KEY" = "jwt-public-key" + "BLOB_STORAGE_PRODUCT_CONNECTION_STRING" = "blob-storage-product-connection-string" + "AWS_SES_ACCESS_KEY_ID" = "aws-ses-access-key-id" + "AWS_SES_SECRET_ACCESS_KEY" = "aws-ses-secret-access-key" } diff --git a/infra/container_apps/institution-send-mail-scheduler/env/dev/terraform.tfvars b/infra/container_apps/institution-send-mail-scheduler/env/dev/terraform.tfvars index 7f3b7b1..72bf483 100644 --- a/infra/container_apps/institution-send-mail-scheduler/env/dev/terraform.tfvars +++ b/infra/container_apps/institution-send-mail-scheduler/env/dev/terraform.tfvars @@ -40,47 +40,47 @@ app_settings = [ value = "institution_send_mail_scheduler", }, { - name = "STORAGE_CONTAINER_CONTRACT" + name = "STORAGE_CONTAINER_CONTRACT" value = "selc-d-contracts-blob" }, { - name = "MAIL_DESTINATION_TEST_ADDRESS" + name = "MAIL_DESTINATION_TEST_ADDRESS" value = "pectest@pec.pagopa.it" }, { - name = "MAIL_SERVER_HOST" + name = "MAIL_SERVER_HOST" value = "smtps.pec.aruba.it" }, { - name = "MAIL_SERVER_PORT" + name = "MAIL_SERVER_PORT" value = "465" }, { - name = "MAIL_TEMPLATE_NOTIFICATION_PATH" + name = "MAIL_TEMPLATE_NOTIFICATION_PATH" value = "contracts/template/mail/institution-user-list-notification/1.0.0.json" }, { - name = "MAIL_TEMPLATE_FIRST_NOTIFICATION_PATH" + name = "MAIL_TEMPLATE_FIRST_NOTIFICATION_PATH" value = "contracts/template/mail/institution-user-list-first-notification/1.0.0.json" }, { - name = "STORAGE_CONTAINER_PRODUCT" + name = "STORAGE_CONTAINER_PRODUCT" value = "selc-d-product" }, { - name = "SELFCARE_USER_URL" + name = "SELFCARE_USER_URL" value = "https://selc-d-user-ms-ca.politewater-9af33050.westeurope.azurecontainerapps.io" } ] secrets_names = { - "MONGODB-CONNECTION-STRING" = "mongodb-connection-string" - "BLOB-STORAGE-CONTRACT-CONNECTION-STRING" = "blob-storage-contract-connection-string" - "BLOB_STORAGE_CONN_STRING_PRODUCT" = "blob-storage-product-connection-string" - "MAIL_SERVER_USERNAME" = "smtp-usr" - "MAIL_SENDER_ADDRESS" = "smtp-usr" - "MAIL_SERVER_PASSWORD" = "smtp-psw" - "JWT_BEARER_TOKEN" = "jwt-bearer-token-functions" + "MONGODB-CONNECTION-STRING" = "mongodb-connection-string" + "BLOB-STORAGE-CONTRACT-CONNECTION-STRING" = "blob-storage-contract-connection-string" + "BLOB_STORAGE_CONN_STRING_PRODUCT" = "blob-storage-product-connection-string" + "MAIL_SERVER_USERNAME" = "smtp-usr" + "MAIL_SENDER_ADDRESS" = "smtp-usr" + "MAIL_SERVER_PASSWORD" = "smtp-psw" + "JWT_BEARER_TOKEN" = "jwt-bearer-token-functions" } diff --git a/infra/container_apps/institution-send-mail-scheduler/env/prod/terraform.tfvars b/infra/container_apps/institution-send-mail-scheduler/env/prod/terraform.tfvars index cd88bc5..217500e 100644 --- a/infra/container_apps/institution-send-mail-scheduler/env/prod/terraform.tfvars +++ b/infra/container_apps/institution-send-mail-scheduler/env/prod/terraform.tfvars @@ -27,39 +27,39 @@ app_settings = [ value = "institution_send_mail_scheduler", }, { - name = "STORAGE_CONTAINER_CONTRACT" + name = "STORAGE_CONTAINER_CONTRACT" value = "selc-p-contracts-blob" }, { - name = "MAIL_DESTINATION_TEST_ADDRESS" + name = "MAIL_DESTINATION_TEST_ADDRESS" value = "pectest@pec.pagopa.it" }, { - name = "MAIL_SERVER_HOST" + name = "MAIL_SERVER_HOST" value = "smtps.pec.aruba.it" }, { - name = "MAIL_SERVER_PORT" + name = "MAIL_SERVER_PORT" value = "465" }, { - name = "MAIL_TEMPLATE_NOTIFICATION_PATH" + name = "MAIL_TEMPLATE_NOTIFICATION_PATH" value = "contracts/template/mail/institution-user-list-notification/1.0.0.json" }, { - name = "MAIL_TEMPLATE_FIRST_NOTIFICATION_PATH" + name = "MAIL_TEMPLATE_FIRST_NOTIFICATION_PATH" value = "contracts/template/mail/institution-user-list-first-notification/1.0.0.json" }, { - name = "STORAGE_CONTAINER_PRODUCT" + name = "STORAGE_CONTAINER_PRODUCT" value = "selc-p-product" }, { - name = "MAIL_DESTINATION_TEST" + name = "MAIL_DESTINATION_TEST" value = "false" }, { - name = "SELFCARE_USER_URL" + name = "SELFCARE_USER_URL" value = "https://selc-p-user-ms-ca.greensand-62fc96da.westeurope.azurecontainerapps.io" } ] diff --git a/infra/container_apps/institution-send-mail-scheduler/env/uat/terraform.tfvars b/infra/container_apps/institution-send-mail-scheduler/env/uat/terraform.tfvars index 102cbd5..186c361 100644 --- a/infra/container_apps/institution-send-mail-scheduler/env/uat/terraform.tfvars +++ b/infra/container_apps/institution-send-mail-scheduler/env/uat/terraform.tfvars @@ -29,35 +29,35 @@ app_settings = [ value = "institution_send_mail_scheduler", }, { - name = "STORAGE_CONTAINER_CONTRACT" + name = "STORAGE_CONTAINER_CONTRACT" value = "selc-u-contracts-blob" }, { - name = "MAIL_DESTINATION_TEST_ADDRESS" + name = "MAIL_DESTINATION_TEST_ADDRESS" value = "pectest@pec.pagopa.it" }, { - name = "MAIL_SERVER_HOST" + name = "MAIL_SERVER_HOST" value = "smtps.pec.aruba.it" }, { - name = "MAIL_SERVER_PORT" + name = "MAIL_SERVER_PORT" value = "465" }, { - name = "MAIL_TEMPLATE_NOTIFICATION_PATH" + name = "MAIL_TEMPLATE_NOTIFICATION_PATH" value = "contracts/template/mail/institution-user-list-notification/1.0.0.json" }, { - name = "MAIL_TEMPLATE_FIRST_NOTIFICATION_PATH" + name = "MAIL_TEMPLATE_FIRST_NOTIFICATION_PATH" value = "contracts/template/mail/institution-user-list-first-notification/1.0.0.json" }, { - name = "STORAGE_CONTAINER_PRODUCT" + name = "STORAGE_CONTAINER_PRODUCT" value = "selc-u-product" }, { - name = "SELFCARE_USER_URL" + name = "SELFCARE_USER_URL" value = "https://selc-u-user-ms-ca.proudglacier-20652b81.westeurope.azurecontainerapps.io" } ] diff --git a/infra/container_apps/institution-send-mail-scheduler/locals.tf b/infra/container_apps/institution-send-mail-scheduler/locals.tf index b0151bf..b3d345b 100644 --- a/infra/container_apps/institution-send-mail-scheduler/locals.tf +++ b/infra/container_apps/institution-send-mail-scheduler/locals.tf @@ -1,6 +1,6 @@ locals { - prefix = "selc" - project = "selc-${var.env_short}" + prefix = "selc" + project = "selc-${var.env_short}" container_app_environment_name = "${local.project}-${var.cae_name}" ca_resource_group_name = "${local.project}-container-app${var.suffix_increment}-rg" diff --git a/infra/container_apps/institution-send-mail-scheduler/main.tf b/infra/container_apps/institution-send-mail-scheduler/main.tf index e9d31e8..45e443e 100644 --- a/infra/container_apps/institution-send-mail-scheduler/main.tf +++ b/infra/container_apps/institution-send-mail-scheduler/main.tf @@ -31,9 +31,9 @@ module "container_app_institution_send_mail_scheduler" { port = 8080 scheme = "HTTP" } - timeoutSeconds = 5 - type = "Liveness" - failureThreshold = 3 + timeoutSeconds = 5 + type = "Liveness" + failureThreshold = 3 initialDelaySeconds = 1 }, { @@ -42,9 +42,9 @@ module "container_app_institution_send_mail_scheduler" { port = 8080 scheme = "HTTP" } - timeoutSeconds = 5 - type = "Readiness" - failureThreshold = 30 + timeoutSeconds = 5 + type = "Readiness" + failureThreshold = 30 initialDelaySeconds = 3 }, { @@ -53,9 +53,9 @@ module "container_app_institution_send_mail_scheduler" { port = 8080 scheme = "HTTP" } - timeoutSeconds = 5 - failureThreshold = 5 - type = "Startup" + timeoutSeconds = 5 + failureThreshold = 5 + type = "Startup" initialDelaySeconds = 5 } ] diff --git a/infra/container_apps/institution-send-mail-scheduler/mongo_db.tf b/infra/container_apps/institution-send-mail-scheduler/mongo_db.tf index 7b1bc03..2ae7c1f 100644 --- a/infra/container_apps/institution-send-mail-scheduler/mongo_db.tf +++ b/infra/container_apps/institution-send-mail-scheduler/mongo_db.tf @@ -8,8 +8,8 @@ module "mongodb_collection_pec_notifications" { cosmosdb_mongo_database_name = "selcMsCore" indexes = [{ - keys = ["_id"] - unique = true + keys = ["_id"] + unique = true }, { keys = ["moduleDayOfTheEpoch"] diff --git a/infra/repository/README.md b/infra/repository/README.md index 61b0a0a..b9c2ba0 100644 --- a/infra/repository/README.md +++ b/infra/repository/README.md @@ -19,6 +19,10 @@ Make sure your PAT has access to this repository. Then, follow these steps: |------|---------| | [terraform](#requirement\_terraform) | >= 1.6.0 | +## Providers + +No providers. + ## Modules | Name | Source | Version | From 7286f82d93660bff25cfc743612918546df14938 Mon Sep 17 00:00:00 2001 From: manuraf Date: Thu, 18 Jul 2024 09:50:41 +0200 Subject: [PATCH 28/29] refactor: ms-core to institution-ms --- .github/workflows/pr_institution_ms.yml | 2 +- apps/institution-ms/README.md | 6 +++--- apps/institution-ms/pom.xml | 2 +- .../institution-ms/env/dev-pnpg/terraform.tfvars | 4 ++-- .../container_apps/institution-ms/env/dev/terraform.tfvars | 4 ++-- .../institution-ms/env/prod-pnpg/terraform.tfvars | 4 ++-- .../container_apps/institution-ms/env/prod/terraform.tfvars | 4 ++-- .../institution-ms/env/uat-pnpg/terraform.tfvars | 4 ++-- .../container_apps/institution-ms/env/uat/terraform.tfvars | 4 ++-- infra/container_apps/institution-ms/main.tf | 2 +- 10 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/pr_institution_ms.yml b/.github/workflows/pr_institution_ms.yml index b0ef18b..b4150e2 100644 --- a/.github/workflows/pr_institution_ms.yml +++ b/.github/workflows/pr_institution_ms.yml @@ -28,5 +28,5 @@ jobs: pr_number: ${{ github.event.pull_request.number }} source_branch: ${{ github.head_ref }} target_branch: ${{ github.base_ref }} - sonar_key: 'pagopa_selfcare-ms-core' + sonar_key: 'pagopa_selfcare-institution' module: 'institution-ms' diff --git a/apps/institution-ms/README.md b/apps/institution-ms/README.md index 7da7e5e..e7f489c 100644 --- a/apps/institution-ms/README.md +++ b/apps/institution-ms/README.md @@ -1,4 +1,4 @@ -# selfcare-ms-core +# selfcare-institition-ms ## Description This Spring Boot-based microservice is designed to handle several key functionalities in the selfcare operations domain. It includes business logic for: @@ -24,8 +24,8 @@ To run the microservice locally, follow these steps: 1. **Clone the Repository** ```shell script -git clone https://github.com/pagopa/selfcare-ms-core.git -cd selfcare-ms-core +git clone https://github.com/pagopa/selfcare-institution.git +cd apps/selfcare-institution-ms/ ``` 2. **Build the Project** diff --git a/apps/institution-ms/pom.xml b/apps/institution-ms/pom.xml index 9bb3e3a..8247b5f 100644 --- a/apps/institution-ms/pom.xml +++ b/apps/institution-ms/pom.xml @@ -13,7 +13,7 @@ 1.0-SNAPSHOT pom institution-ms - Selface ms-core + Selface Institutions MS connector-api diff --git a/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars b/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars index 543d2f1..e767896 100644 --- a/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/dev-pnpg/terraform.tfvars @@ -5,7 +5,7 @@ tags = { CreatedBy = "Terraform" Environment = "Dev" Owner = "SelfCare" - Source = "https://github.com/pagopa/selfcare-ms-core" + Source = "https://github.com/pagopa/selfcare-institution" CostCenter = "TS310 - PAGAMENTI & SERVIZI" } @@ -72,7 +72,7 @@ app_settings = [ }, { name = "APPLICATIONINSIGHTS_ROLE_NAME" - value = "ms-core" + value = "institution-ms" }, { name = "JAVA_TOOL_OPTIONS" diff --git a/infra/container_apps/institution-ms/env/dev/terraform.tfvars b/infra/container_apps/institution-ms/env/dev/terraform.tfvars index a27c1f0..315a6de 100644 --- a/infra/container_apps/institution-ms/env/dev/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/dev/terraform.tfvars @@ -7,7 +7,7 @@ tags = { CreatedBy = "Terraform" Environment = "Dev" Owner = "SelfCare" - Source = "https://github.com/pagopa/selfcare-ms-core" + Source = "https://github.com/pagopa/selfcare-institution" CostCenter = "TS310 - PAGAMENTI & SERVIZI" } @@ -78,7 +78,7 @@ app_settings = [ }, { name = "APPLICATIONINSIGHTS_ROLE_NAME" - value = "ms-core" + value = "institution-ms" }, { name = "JAVA_TOOL_OPTIONS" diff --git a/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars b/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars index 38c23cb..14e4ae7 100644 --- a/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/prod-pnpg/terraform.tfvars @@ -5,7 +5,7 @@ tags = { CreatedBy = "Terraform" Environment = "Prod" Owner = "SelfCare" - Source = "https://github.com/pagopa/selfcare-ms-core" + Source = "https://github.com/pagopa/selfcare-institution" CostCenter = "TS310 - PAGAMENTI & SERVIZI" } @@ -67,7 +67,7 @@ app_settings = [ }, { name = "APPLICATIONINSIGHTS_ROLE_NAME" - value = "ms-core" + value = "institution-ms" }, { name = "JAVA_TOOL_OPTIONS" diff --git a/infra/container_apps/institution-ms/env/prod/terraform.tfvars b/infra/container_apps/institution-ms/env/prod/terraform.tfvars index 36d0893..f8b3c28 100644 --- a/infra/container_apps/institution-ms/env/prod/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/prod/terraform.tfvars @@ -4,7 +4,7 @@ tags = { CreatedBy = "Terraform" Environment = "Prod" Owner = "SelfCare" - Source = "https://github.com/pagopa/selfcare-ms-core" + Source = "https://github.com/pagopa/selfcare-institution" CostCenter = "TS310 - PAGAMENTI & SERVIZI" } @@ -71,7 +71,7 @@ app_settings = [ }, { name = "APPLICATIONINSIGHTS_ROLE_NAME" - value = "ms-core" + value = "institution-ms" }, { name = "JAVA_TOOL_OPTIONS" diff --git a/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars b/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars index f613b13..0300e29 100644 --- a/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/uat-pnpg/terraform.tfvars @@ -7,7 +7,7 @@ tags = { CreatedBy = "Terraform" Environment = "Uat" Owner = "SelfCare" - Source = "https://github.com/pagopa/selfcare-ms-core" + Source = "https://github.com/pagopa/selfcare-institution" CostCenter = "TS310 - PAGAMENTI & SERVIZI" } @@ -60,7 +60,7 @@ app_settings = [ }, { name = "APPLICATIONINSIGHTS_ROLE_NAME" - value = "ms-core" + value = "institution-ms" }, { name = "JAVA_TOOL_OPTIONS" diff --git a/infra/container_apps/institution-ms/env/uat/terraform.tfvars b/infra/container_apps/institution-ms/env/uat/terraform.tfvars index 9462bc7..81d678b 100644 --- a/infra/container_apps/institution-ms/env/uat/terraform.tfvars +++ b/infra/container_apps/institution-ms/env/uat/terraform.tfvars @@ -6,7 +6,7 @@ tags = { CreatedBy = "Terraform" Environment = "Uat" Owner = "SelfCare" - Source = "https://github.com/pagopa/selfcare-ms-core" + Source = "https://github.com/pagopa/selfcare-institution" CostCenter = "TS310 - PAGAMENTI & SERVIZI" } @@ -61,7 +61,7 @@ app_settings = [ }, { name = "APPLICATIONINSIGHTS_ROLE_NAME" - value = "ms-core" + value = "institution-ms" }, { name = "JAVA_TOOL_OPTIONS" diff --git a/infra/container_apps/institution-ms/main.tf b/infra/container_apps/institution-ms/main.tf index 8b176ac..f1a624d 100644 --- a/infra/container_apps/institution-ms/main.tf +++ b/infra/container_apps/institution-ms/main.tf @@ -18,7 +18,7 @@ module "container_app_core" { resource_group_name = local.ca_resource_group_name container_app_name = "ms-core" container_app_environment_name = local.container_app_environment_name - image_name = "selfcare-ms-core" + image_name = "selfcare-institution-ms" image_tag = var.image_tag app_settings = var.app_settings secrets_names = var.secrets_names From abdabd8510fd02fcf27f602438249d44e151bad2 Mon Sep 17 00:00:00 2001 From: manuraf Date: Thu, 18 Jul 2024 10:22:06 +0200 Subject: [PATCH 29/29] openapi under docs folder --- .github/workflows/release_open_api.yml | 2 +- .../{resources/swagger/api-docs.json => docs/openapi.json} | 2 +- .../pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) rename apps/institution-ms/app/src/main/{resources/swagger/api-docs.json => docs/openapi.json} (99%) diff --git a/.github/workflows/release_open_api.yml b/.github/workflows/release_open_api.yml index 3369050..7343326 100644 --- a/.github/workflows/release_open_api.yml +++ b/.github/workflows/release_open_api.yml @@ -21,5 +21,5 @@ jobs: - id: swagger-detect uses: pagopa/selfcare-commons/github-actions-template/swagger-detect-conflict-spring@main with: - path_openapi_docs: apps/institution-ms/app/src/main/resources/swagger/api-docs.json + path_openapi_docs: apps/institution-ms/app/src/main/docs/openapi.json github_token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/apps/institution-ms/app/src/main/resources/swagger/api-docs.json b/apps/institution-ms/app/src/main/docs/openapi.json similarity index 99% rename from apps/institution-ms/app/src/main/resources/swagger/api-docs.json rename to apps/institution-ms/app/src/main/docs/openapi.json index d900e5f..f11ddcf 100644 --- a/apps/institution-ms/app/src/main/resources/swagger/api-docs.json +++ b/apps/institution-ms/app/src/main/docs/openapi.json @@ -1,7 +1,7 @@ { "openapi" : "3.0.3", "info" : { - "title" : "selc-ms-core", + "title" : "institution-ms", "version" : "1.0-SNAPSHOT" }, "servers" : [ { diff --git a/apps/institution-ms/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java b/apps/institution-ms/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java index 572f386..947d4d6 100644 --- a/apps/institution-ms/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java +++ b/apps/institution-ms/app/src/test/java/it/pagopa/selfcare/mscore/web/config/SwaggerConfigTest.java @@ -69,9 +69,9 @@ void swaggerSpringPlugin() throws Exception { assertFalse(content.contains("${"), "Generated swagger contains placeholders"); Object swagger = objectMapper.readValue(result.getResponse().getContentAsString(), Object.class); String formatted = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(swagger); - Path basePath = Paths.get("src/main/resources/swagger/"); + Path basePath = Paths.get("src/main/docs/"); Files.createDirectories(basePath); - Files.write(basePath.resolve("api-docs.json"), formatted.getBytes()); + Files.write(basePath.resolve("openapi.json"), formatted.getBytes()); }); }