Skip to content

Commit f7b88e4

Browse files
committed
Merge branch 'release/1.0.18' of github.com:pagopa/interop-be-purpose-process into release/1.0.18
2 parents 7db49bc + e8fbdae commit f7b88e4

16 files changed

+178
-121
lines changed

project/Versions.scala

+6-6
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ object Versions {
1919
}
2020

2121
object PagopaVersions {
22-
lazy val agreementManagementVersion = "1.0.14"
23-
lazy val authorizationManagementVersion = "1.0.15"
24-
lazy val purposeManagementVersion = "1.0.13"
25-
lazy val catalogManagementVersion = "1.0.16"
26-
lazy val tenantManagementVersion = "1.0.10"
27-
lazy val commonsVersion = "1.0.22"
22+
lazy val agreementManagementVersion = "1.0.x-SNAPSHOT"
23+
lazy val authorizationManagementVersion = "1.0.x-SNAPSHOT"
24+
lazy val purposeManagementVersion = "1.0.x-SNAPSHOT"
25+
lazy val catalogManagementVersion = "1.0.x-SNAPSHOT"
26+
lazy val tenantManagementVersion = "1.0.x-SNAPSHOT"
27+
lazy val commonsVersion = "1.0.x-SNAPSHOT"
2828
}

src/main/resources/interface-specification.yml

+33-25
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ paths:
3030
/purposes:
3131
parameters:
3232
- $ref: '#/components/parameters/CorrelationIdHeader'
33-
- $ref: '#/components/parameters/IpAddress'
3433
get:
3534
tags:
3635
- purpose
@@ -152,11 +151,9 @@ paths:
152151
/reverse/purposes:
153152
parameters:
154153
- $ref: '#/components/parameters/CorrelationIdHeader'
155-
- $ref: '#/components/parameters/IpAddress'
156154
post:
157155
parameters:
158156
- $ref: '#/components/parameters/CorrelationIdHeader'
159-
- $ref: '#/components/parameters/IpAddress'
160157
tags:
161158
- purpose
162159
operationId: createPurposeFromEService
@@ -195,7 +192,6 @@ paths:
195192
/reverse/purposes/{id}:
196193
parameters:
197194
- $ref: '#/components/parameters/CorrelationIdHeader'
198-
- $ref: '#/components/parameters/IpAddress'
199195
- name: id
200196
in: path
201197
description: the purpose id
@@ -206,7 +202,6 @@ paths:
206202
post:
207203
parameters:
208204
- $ref: '#/components/parameters/CorrelationIdHeader'
209-
- $ref: '#/components/parameters/IpAddress'
210205
tags:
211206
- purpose
212207
operationId: updateReversePurpose
@@ -233,7 +228,6 @@ paths:
233228
/purposes/{id}:
234229
parameters:
235230
- $ref: '#/components/parameters/CorrelationIdHeader'
236-
- $ref: '#/components/parameters/IpAddress'
237231
- name: id
238232
in: path
239233
description: the purpose id
@@ -268,7 +262,6 @@ paths:
268262
post:
269263
parameters:
270264
- $ref: '#/components/parameters/CorrelationIdHeader'
271-
- $ref: '#/components/parameters/IpAddress'
272265
tags:
273266
- purpose
274267
operationId: updatePurpose
@@ -295,7 +288,6 @@ paths:
295288
delete:
296289
parameters:
297290
- $ref: '#/components/parameters/CorrelationIdHeader'
298-
- $ref: '#/components/parameters/IpAddress'
299291
tags:
300292
- purpose
301293
operationId: deletePurpose
@@ -324,7 +316,6 @@ paths:
324316
/purposes/{purposeId}/versions:
325317
parameters:
326318
- $ref: '#/components/parameters/CorrelationIdHeader'
327-
- $ref: '#/components/parameters/IpAddress'
328319
- name: purposeId
329320
in: path
330321
description: the purpose id
@@ -359,7 +350,6 @@ paths:
359350
/purposes/{purposeId}/versions/{versionId}:
360351
parameters:
361352
- $ref: '#/components/parameters/CorrelationIdHeader'
362-
- $ref: '#/components/parameters/IpAddress'
363353
- name: purposeId
364354
in: path
365355
required: true
@@ -396,7 +386,6 @@ paths:
396386
/purposes/{purposeId}/versions/{versionId}/documents/{documentId}:
397387
parameters:
398388
- $ref: '#/components/parameters/CorrelationIdHeader'
399-
- $ref: '#/components/parameters/IpAddress'
400389
get:
401390
security:
402391
- bearerAuth: []
@@ -460,7 +449,6 @@ paths:
460449
/purposes/{purposeId}/versions/{versionId}/activate:
461450
parameters:
462451
- $ref: '#/components/parameters/CorrelationIdHeader'
463-
- $ref: '#/components/parameters/IpAddress'
464452
- name: purposeId
465453
in: path
466454
required: true
@@ -501,7 +489,6 @@ paths:
501489
/purposes/{purposeId}/clone:
502490
parameters:
503491
- $ref: '#/components/parameters/CorrelationIdHeader'
504-
- $ref: '#/components/parameters/IpAddress'
505492
- name: purposeId
506493
in: path
507494
required: true
@@ -511,6 +498,12 @@ paths:
511498
post:
512499
summary: Clone Purpose
513500
operationId: clonePurpose
501+
requestBody:
502+
content:
503+
application/json:
504+
schema:
505+
$ref: '#/components/schemas/PurposeCloneSeed'
506+
required: true
514507
responses:
515508
'200':
516509
description: Purpose Cloned
@@ -542,7 +535,6 @@ paths:
542535
/purposes/{purposeId}/versions/{versionId}/suspend:
543536
parameters:
544537
- $ref: '#/components/parameters/CorrelationIdHeader'
545-
- $ref: '#/components/parameters/IpAddress'
546538
- name: purposeId
547539
in: path
548540
required: true
@@ -583,7 +575,6 @@ paths:
583575
/purposes/{purposeId}/versions/{versionId}/archive:
584576
parameters:
585577
- $ref: '#/components/parameters/CorrelationIdHeader'
586-
- $ref: '#/components/parameters/IpAddress'
587578
- name: purposeId
588579
in: path
589580
required: true
@@ -624,7 +615,6 @@ paths:
624615
/purposes/{purposeId}/versions/{versionId}/update/waitingForApproval:
625616
parameters:
626617
- $ref: '#/components/parameters/CorrelationIdHeader'
627-
- $ref: '#/components/parameters/IpAddress'
628618
- name: purposeId
629619
in: path
630620
required: true
@@ -676,7 +666,6 @@ paths:
676666
/purposes/riskAnalysis/latest:
677667
parameters:
678668
- $ref: '#/components/parameters/CorrelationIdHeader'
679-
- $ref: '#/components/parameters/IpAddress'
680669
- name: tenantKind
681670
in: query
682671
schema:
@@ -708,7 +697,6 @@ paths:
708697
/purposes/riskAnalysis/version/{riskAnalysisVersion}:
709698
parameters:
710699
- $ref: '#/components/parameters/CorrelationIdHeader'
711-
- $ref: '#/components/parameters/IpAddress'
712700
- name: riskAnalysisVersion
713701
in: path
714702
required: true
@@ -752,11 +740,6 @@ components:
752740
required: true
753741
schema:
754742
type: string
755-
IpAddress:
756-
in: header
757-
name: X-Forwarded-For
758-
schema:
759-
type: string
760743
schemas:
761744
TenantKind:
762745
type: string
@@ -1044,7 +1027,7 @@ components:
10441027
freeOfChargeReason:
10451028
type: string
10461029
riskAnalysisForm:
1047-
$ref: '#/components/schemas/RiskAnalysisForm'
1030+
$ref: '#/components/schemas/RiskAnalysisFormSeed'
10481031
dailyCalls:
10491032
description: 'maximum number of daily calls that this version can perform.'
10501033
type: integer
@@ -1154,6 +1137,14 @@ components:
11541137
createdAt:
11551138
type: string
11561139
format: date-time
1140+
PurposeCloneSeed:
1141+
type: object
1142+
properties:
1143+
eserviceId:
1144+
type: string
1145+
format: uuid
1146+
required:
1147+
- eserviceId
11571148
EServicePurposeSeed:
11581149
type: object
11591150
description: contains the expected payload for purpose creation.
@@ -1201,7 +1192,7 @@ components:
12011192
type: string
12021193
format: uuid
12031194
riskAnalysisForm:
1204-
$ref: '#/components/schemas/RiskAnalysisForm'
1195+
$ref: '#/components/schemas/RiskAnalysisFormSeed'
12051196
title:
12061197
type: string
12071198
minLength: 5
@@ -1255,6 +1246,23 @@ components:
12551246
required:
12561247
- version
12571248
- answers
1249+
RiskAnalysisFormSeed:
1250+
type: object
1251+
properties:
1252+
version:
1253+
type: string
1254+
minLength: 1
1255+
maxLength: 250
1256+
answers:
1257+
additionalProperties:
1258+
type: array
1259+
items:
1260+
type: string
1261+
minLength: 1
1262+
maxLength: 250
1263+
required:
1264+
- version
1265+
- answers
12581266
Problem:
12591267
properties:
12601268
type:

src/main/resources/riskAnalysisTemplate/index.html

+5
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ <h1>Analisi del rischio</h1>
6363
<div class="label">Numero chiamate API/giorno</div>
6464
<div class="value">${dailyCalls}</div>
6565
</div>
66+
67+
<div class="item">
68+
<div class="label">L’e-service riceve o eroga dati?</div>
69+
<div class="value">${eServiceMode}</div>
70+
</div>
6671
</div>
6772

6873
<!-- Blocco titolo gratuito -->

src/main/scala/it/pagopa/interop/purposeprocess/api/Adapters.scala

+7-2
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ object Adapters {
106106
.validate(risk.toTemplate, schemaOnlyValidation)(kind.toTemplate)
107107
.leftMap(RiskAnalysisValidationFailed(_))
108108
.toEither
109-
.map(_.toManagement(risk.riskAnalysisId))
109+
.map(_.toManagement(riskAnalysisId = None))
110110
)
111111
} yield Management.PurposeSeed(
112112
eserviceId = seed.eserviceId,
@@ -199,6 +199,11 @@ object Adapters {
199199
Template.RiskAnalysisForm(version = riskAnalysis.version, answers = riskAnalysis.answers)
200200
}
201201

202+
implicit class RiskAnalysisFormSeedWrapper(private val riskAnalysis: RiskAnalysisFormSeed) extends AnyVal {
203+
def toTemplate: Template.RiskAnalysisForm =
204+
Template.RiskAnalysisForm(version = riskAnalysis.version, answers = riskAnalysis.answers)
205+
}
206+
202207
implicit class TenantKindWrapper(private val kind: TenantKind) extends AnyVal {
203208
def toPersistent: PersistentTenantKind = kind match {
204209
case TenantKind.PA => PersistentTenantKind.PA
@@ -515,7 +520,7 @@ object Adapters {
515520
.validate(risk.toTemplate, schemaOnlyValidation = schemaOnlyValidation)(kind.toTemplate)
516521
.leftMap(RiskAnalysisValidationFailed(_))
517522
.toEither
518-
.map(_.toManagement(risk.riskAnalysisId))
523+
.map(_.toManagement(riskAnalysisId = None))
519524
)
520525
} yield Management.PurposeUpdateContent(
521526
title = content.title,

src/main/scala/it/pagopa/interop/purposeprocess/api/impl/PurposeApiMarshallerImpl.scala

+3
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,7 @@ object PurposeApiMarshallerImpl extends PurposeApiMarshaller with SprayJsonSuppo
4343
override implicit def fromEntityUnmarshallerReversePurposeUpdateContent
4444
: FromEntityUnmarshaller[ReversePurposeUpdateContent] =
4545
sprayJsonUnmarshaller[ReversePurposeUpdateContent]
46+
47+
override implicit def fromEntityUnmarshallerPurposeCloneSeed: FromEntityUnmarshaller[PurposeCloneSeed] =
48+
sprayJsonUnmarshaller[PurposeCloneSeed]
4649
}

src/main/scala/it/pagopa/interop/purposeprocess/api/impl/PurposeApiServiceImpl.scala

+35-11
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ import it.pagopa.interop.purposemanagement.model.purpose.{
2424
Draft,
2525
PersistentPurpose,
2626
PersistentPurposeVersion,
27+
PersistentRiskAnalysisForm,
28+
PersistentRiskAnalysisMultiAnswer,
29+
PersistentRiskAnalysisSingleAnswer,
2730
WaitingForApproval
2831
}
2932
import it.pagopa.interop.catalogmanagement.model.{CatalogItem, Deliver, Receive}
@@ -560,7 +563,7 @@ final case class PurposeApiServiceImpl(
560563
}
561564
}
562565

563-
override def clonePurpose(purposeId: String)(implicit
566+
override def clonePurpose(purposeId: String, seed: PurposeCloneSeed)(implicit
564567
contexts: Seq[(String, String)],
565568
toEntityMarshallerPurpose: ToEntityMarshaller[Purpose],
566569
toEntityMarshallerProblem: ToEntityMarshaller[Problem]
@@ -576,11 +579,35 @@ final case class PurposeApiServiceImpl(
576579
states != Seq(Draft)
577580
}
578581

579-
def createPurposeSeed(purpose: PersistentPurpose, dailyCalls: Int): PurposeSeed =
580-
PurposeSeed(
581-
eserviceId = purpose.eserviceId,
582+
def singleAnswerToSeed(
583+
answer: PersistentRiskAnalysisSingleAnswer
584+
): PurposeManagementDependency.RiskAnalysisSingleAnswerSeed =
585+
PurposeManagementDependency.RiskAnalysisSingleAnswerSeed(key = answer.key, value = answer.value)
586+
587+
def multiAnswerToSeed(
588+
answer: PersistentRiskAnalysisMultiAnswer
589+
): PurposeManagementDependency.RiskAnalysisMultiAnswerSeed =
590+
PurposeManagementDependency.RiskAnalysisMultiAnswerSeed(key = answer.key, values = answer.values)
591+
592+
def riskAnalysisToSeed(
593+
riskAnalysis: PersistentRiskAnalysisForm
594+
): PurposeManagementDependency.RiskAnalysisFormSeed =
595+
PurposeManagementDependency.RiskAnalysisFormSeed(
596+
riskAnalysisId = riskAnalysis.riskAnalysisId,
597+
version = riskAnalysis.version,
598+
singleAnswers = riskAnalysis.singleAnswers.map(singleAnswerToSeed),
599+
multiAnswers = riskAnalysis.multiAnswers.map(multiAnswerToSeed)
600+
)
601+
602+
def createPurposeSeed(
603+
purpose: PersistentPurpose,
604+
dailyCalls: Int,
605+
eserviceId: UUID
606+
): PurposeManagementDependency.PurposeSeed =
607+
PurposeManagementDependency.PurposeSeed(
608+
eserviceId = eserviceId,
582609
consumerId = purpose.consumerId,
583-
riskAnalysisForm = purpose.riskAnalysisForm.map(_.toApi),
610+
riskAnalysisForm = purpose.riskAnalysisForm.map(riskAnalysisToSeed),
584611
title = s"${purpose.title} - clone",
585612
description = purpose.description,
586613
isFreeOfCharge = purpose.isFreeOfCharge,
@@ -612,12 +639,9 @@ final case class PurposeApiServiceImpl(
612639
_ <-
613640
if (isClonable(purpose)) Future.successful(purpose)
614641
else Future.failed(PurposeCannotBeCloned(purposeId))
615-
dependencySeed = createPurposeSeed(purpose, dailyCalls)
616-
tenantKind <- tenant.kind.toFuture(TenantKindNotFound(tenant.id))
617-
purposeSeed <- dependencySeed
618-
.toManagement(schemaOnlyValidation = true)(tenantKind)
619-
.toFuture
620-
newPurpose <- purposeManagementService.createPurpose(purposeSeed)
642+
dependencySeed = createPurposeSeed(purpose, dailyCalls, seed.eserviceId)
643+
tenantKind <- tenant.kind.toFuture(TenantKindNotFound(tenant.id))
644+
newPurpose <- purposeManagementService.createPurpose(dependencySeed)
621645
isValidRiskAnalysisForm = isRiskAnalysisFormValid(newPurpose.riskAnalysisForm.map(_.toApi))(tenantKind)
622646
} yield newPurpose.toApi(isRiskAnalysisValid = isValidRiskAnalysisForm)
623647

src/main/scala/it/pagopa/interop/purposeprocess/api/impl/PurposeVersionActivation.scala

+1
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ final case class PurposeVersionActivation(
204204
(producer, consumer) <- getTenant(eService.producerId).zip(getTenant(purpose.consumerId))
205205
eServiceInfo = EServiceInfo(
206206
name = eService.name,
207+
mode = eService.mode,
207208
producerName = producer.name,
208209
producerOrigin = producer.externalId.origin,
209210
producerIPACode = producer.externalId.value,

src/main/scala/it/pagopa/interop/purposeprocess/api/impl/package.scala

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ package object impl extends SprayJsonSupport with DefaultJsonProtocol {
1515
implicit def agreementFormat: RootJsonFormat[Agreement] = jsonFormat2(Agreement)
1616

1717
implicit def riskAnalysisFormFormat: RootJsonFormat[RiskAnalysisForm] = jsonFormat3(RiskAnalysisForm)
18+
implicit def riskAnalysisFormSeedFormat: RootJsonFormat[RiskAnalysisFormSeed] = jsonFormat2(RiskAnalysisFormSeed)
1819
implicit def purposeVersionDocumentFormat: RootJsonFormat[PurposeVersionDocument] =
1920
jsonFormat4(PurposeVersionDocument)
2021
implicit def purposeFormat: RootJsonFormat[Purpose] = jsonFormat14(Purpose)
@@ -45,6 +46,7 @@ package object impl extends SprayJsonSupport with DefaultJsonProtocol {
4546
implicit def riskAnalysisFormConfigResponseFormat: RootJsonFormat[RiskAnalysisFormConfigResponse] =
4647
jsonFormat2(RiskAnalysisFormConfigResponse)
4748
implicit def eServicePurposeSeedFormat: RootJsonFormat[EServicePurposeSeed] = jsonFormat8(EServicePurposeSeed)
49+
implicit def purposeCloneSeedFormat: RootJsonFormat[PurposeCloneSeed] = jsonFormat1(PurposeCloneSeed)
4850

4951
final val entityMarshallerProblem: ToEntityMarshaller[Problem] = sprayJsonMarshaller[Problem]
5052
}

src/main/scala/it/pagopa/interop/purposeprocess/model/EServiceInfo.scala

+3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package it.pagopa.interop.purposeprocess.model
22

3+
import it.pagopa.interop.catalogmanagement.model.CatalogItemMode
4+
35
final case class EServiceInfo(
46
name: String,
7+
mode: CatalogItemMode,
58
producerName: String,
69
producerOrigin: String,
710
producerIPACode: String,

0 commit comments

Comments
 (0)