Skip to content

Commit 24b6e62

Browse files
author
nttdata-rtorsoli
committed
PIN-4879 Remove endpoint /purposes/{purposeId}/versions/{versionId}/update/waitingForApproval:
1 parent f8983f7 commit 24b6e62

12 files changed

+0
-264
lines changed

src/main/resources/interface-specification.yml

-61
Original file line numberDiff line numberDiff line change
@@ -660,57 +660,6 @@ paths:
660660
tags:
661661
- purpose
662662
description: archives the purpose version by id
663-
/purposes/{purposeId}/versions/{versionId}/update/waitingForApproval:
664-
parameters:
665-
- $ref: '#/components/parameters/CorrelationIdHeader'
666-
- name: purposeId
667-
in: path
668-
required: true
669-
schema:
670-
type: string
671-
format: uuid
672-
- name: versionId
673-
in: path
674-
required: true
675-
schema:
676-
type: string
677-
format: uuid
678-
post:
679-
tags:
680-
- purpose
681-
summary: Update a purpose version in waiting for approval
682-
operationId: updateWaitingForApprovalPurposeVersion
683-
requestBody:
684-
content:
685-
application/json:
686-
schema:
687-
$ref: '#/components/schemas/WaitingForApprovalPurposeVersionUpdateContent'
688-
required: true
689-
responses:
690-
'200':
691-
description: Purpose Version updated
692-
content:
693-
application/json:
694-
schema:
695-
$ref: '#/components/schemas/PurposeVersion'
696-
'400':
697-
description: Invalid input
698-
content:
699-
application/problem+json:
700-
schema:
701-
$ref: '#/components/schemas/Problem'
702-
'403':
703-
description: Purpose version not in waiting for approval state or the organization is not a producer
704-
content:
705-
application/problem+json:
706-
schema:
707-
$ref: '#/components/schemas/Problem'
708-
'404':
709-
description: Not Found
710-
content:
711-
application/problem+json:
712-
schema:
713-
$ref: '#/components/schemas/Problem'
714663
/purposes/riskAnalysis/latest:
715664
parameters:
716665
- $ref: '#/components/parameters/CorrelationIdHeader'
@@ -1122,16 +1071,6 @@ components:
11221071
- description
11231072
- isFreeOfCharge
11241073
- dailyCalls
1125-
WaitingForApprovalPurposeVersionUpdateContent:
1126-
type: object
1127-
description: contains the expected payload for purpose version update.
1128-
properties:
1129-
expectedApprovalDate:
1130-
description: 'Estimated expected approval date for a purpose version'
1131-
type: string
1132-
format: date-time
1133-
required:
1134-
- expectedApprovalDate
11351074
PurposeVersion:
11361075
type: object
11371076
properties:

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

-7
Original file line numberDiff line numberDiff line change
@@ -376,13 +376,6 @@ object Adapters {
376376
Management.PurposeVersionSeed(seed.dailyCalls, None)
377377
}
378378

379-
implicit class WaitingForApprovalPurposeVersionUpdateContentWrapper(
380-
private val updateContent: WaitingForApprovalPurposeVersionUpdateContent
381-
) extends AnyVal {
382-
def toManagement: Management.WaitingForApprovalPurposeVersionUpdateContent =
383-
Management.WaitingForApprovalPurposeVersionUpdateContent(updateContent.expectedApprovalDate)
384-
}
385-
386379
implicit class ManagementPurposeVersionWrapper(private val version: Management.PurposeVersion) extends AnyVal {
387380

388381
def toApi: PurposeVersion =

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

-4
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,6 @@ object PurposeApiMarshallerImpl extends PurposeApiMarshaller with SprayJsonSuppo
2525
override implicit def fromEntityUnmarshallerPurposeUpdateContent: FromEntityUnmarshaller[PurposeUpdateContent] =
2626
sprayJsonUnmarshaller[PurposeUpdateContent]
2727

28-
override implicit def fromEntityUnmarshallerWaitingForApprovalPurposeVersionUpdateContent
29-
: FromEntityUnmarshaller[WaitingForApprovalPurposeVersionUpdateContent] =
30-
sprayJsonUnmarshaller[WaitingForApprovalPurposeVersionUpdateContent]
31-
3228
override implicit def toEntityMarshallerPurpose: ToEntityMarshaller[Purpose] = sprayJsonMarshaller[Purpose]
3329

3430
override implicit def toEntityMarshallerPurposeVersionDocument: ToEntityMarshaller[PurposeVersionDocument] =

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

-33
Original file line numberDiff line numberDiff line change
@@ -562,39 +562,6 @@ final case class PurposeApiServiceImpl(
562562
onComplete(result) { archivePurposeVersionResponse[PurposeVersion](operationLabel)(archivePurposeVersion200) }
563563
}
564564

565-
override def updateWaitingForApprovalPurposeVersion(
566-
purposeId: String,
567-
versionId: String,
568-
updateContent: WaitingForApprovalPurposeVersionUpdateContent
569-
)(implicit
570-
contexts: Seq[(String, String)],
571-
toEntityMarshallerPurposeVersion: ToEntityMarshaller[PurposeVersion],
572-
toEntityMarshallerProblem: ToEntityMarshaller[Problem]
573-
): Route = authorize(ADMIN_ROLE) {
574-
val operationLabel = s"Updating Waiting For Approval Version $versionId of Purpose $purposeId"
575-
logger.info(operationLabel)
576-
577-
val result: Future[PurposeVersion] = for {
578-
purposeUUID <- purposeId.toFutureUUID
579-
versionUUID <- versionId.toFutureUUID
580-
organizationId <- getOrganizationIdFutureUUID(contexts)
581-
purpose <- purposeManagementService.getPurposeById(purposeUUID)
582-
_ <- assertOrganizationIsAProducer(organizationId, purpose.eserviceId)
583-
_ <- getVersion(purpose, versionUUID)
584-
purposeVersion <- purposeManagementService.updateWaitingForApprovalPurposeVersion(
585-
purposeUUID,
586-
versionUUID,
587-
updateContent.toManagement
588-
)
589-
} yield purposeVersion.toApi
590-
591-
onComplete(result) {
592-
updateWaitingForApprovalPurposeVersionResponse[PurposeVersion](operationLabel)(
593-
updateWaitingForApprovalPurposeVersion200
594-
)
595-
}
596-
}
597-
598565
override def clonePurpose(purposeId: String, seed: PurposeCloneSeed)(implicit
599566
contexts: Seq[(String, String)],
600567
toEntityMarshallerPurpose: ToEntityMarshaller[Purpose],

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

-11
Original file line numberDiff line numberDiff line change
@@ -229,15 +229,4 @@ object ResponseHandlers extends AkkaResponses {
229229
case Failure(ex: PurposeVersionNotFound) => notFound(ex, logMessage)
230230
case Failure(ex) => internalServerError(ex, logMessage)
231231
}
232-
233-
def updateWaitingForApprovalPurposeVersionResponse[T](logMessage: String)(
234-
success: T => Route
235-
)(result: Try[T])(implicit contexts: Seq[(String, String)], logger: LoggerTakingImplicit[ContextFieldsToLog]): Route =
236-
result match {
237-
case Success(s) => success(s)
238-
case Failure(ex: OrganizationIsNotTheProducer) => forbidden(ex, logMessage)
239-
case Failure(ex: PurposeNotFound) => notFound(ex, logMessage)
240-
case Failure(ex: PurposeVersionNotFound) => notFound(ex, logMessage)
241-
case Failure(ex) => internalServerError(ex, logMessage)
242-
}
243232
}

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

-3
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@ package object impl extends SprayJsonSupport with DefaultJsonProtocol {
2828
implicit def purposeVersionSeedFormat: RootJsonFormat[PurposeVersionSeed] = jsonFormat1(PurposeVersionSeed)
2929
implicit def problemErrorFormat: RootJsonFormat[ProblemError] = jsonFormat2(ProblemError)
3030
implicit def problemFormat: RootJsonFormat[Problem] = jsonFormat6(Problem)
31-
implicit def waitingForApprovalPurposeVersionUpdateFormat
32-
: RootJsonFormat[WaitingForApprovalPurposeVersionUpdateContent] =
33-
jsonFormat1(WaitingForApprovalPurposeVersionUpdateContent)
3431
implicit def rejectPurposeVersionPayloadFormat: RootJsonFormat[RejectPurposeVersionPayload] =
3532
jsonFormat1(RejectPurposeVersionPayload)
3633
implicit def dependencyResponseFormat: RootJsonFormat[DependencyResponse] =

src/main/scala/it/pagopa/interop/purposeprocess/service/PurposeManagementService.scala

-6
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,6 @@ trait PurposeManagementService {
6060
contexts: Seq[(String, String)]
6161
): Future[PurposeVersion]
6262

63-
def updateWaitingForApprovalPurposeVersion(
64-
purposeId: UUID,
65-
versionId: UUID,
66-
updateContent: WaitingForApprovalPurposeVersionUpdateContent
67-
)(implicit contexts: Seq[(String, String)]): Future[PurposeVersion]
68-
6963
def deletePurpose(purposeId: UUID)(implicit contexts: Seq[(String, String)]): Future[Unit]
7064

7165
def deletePurposeVersion(purposeId: UUID, versionId: UUID)(implicit contexts: Seq[(String, String)]): Future[Unit]

src/main/scala/it/pagopa/interop/purposeprocess/service/impl/PurposeManagementServiceImpl.scala

-15
Original file line numberDiff line numberDiff line change
@@ -170,21 +170,6 @@ final case class PurposeManagementServiceImpl(invoker: PurposeManagementInvoker,
170170
invoker.invoke(request, s"Archiving Version $versionId of Purpose $purposeId by ${stateChangeDetails.changedBy}")
171171
}
172172

173-
override def updateWaitingForApprovalPurposeVersion(
174-
purposeId: UUID,
175-
versionId: UUID,
176-
updateContent: WaitingForApprovalPurposeVersionUpdateContent
177-
)(implicit contexts: Seq[(String, String)]): Future[PurposeVersion] = withHeaders { (bearerToken, correlationId) =>
178-
val request =
179-
api.updateWaitingForApprovalPurposeVersion(xCorrelationId = correlationId, purposeId, versionId, updateContent)(
180-
BearerToken(bearerToken)
181-
)
182-
invoker.invoke(
183-
request,
184-
s"Updating waiting for approval version $versionId of Purpose $purposeId with $updateContent"
185-
)
186-
}
187-
188173
override def deletePurpose(purposeId: UUID)(implicit contexts: Seq[(String, String)]): Future[Unit] = withHeaders {
189174
(bearerToken, correlationId) =>
190175
val request =

src/test/scala/it/pagopa/interop/purposeprocess/PurposeApiServiceSpec.scala

-98
Original file line numberDiff line numberDiff line change
@@ -2425,104 +2425,6 @@ class PurposeApiServiceSpec extends AnyWordSpecLike with SpecHelper with Scalate
24252425

24262426
}
24272427

2428-
"Purpose waiting for approval version update" should {
2429-
2430-
"succeed" in {
2431-
2432-
val producerId = UUID.randomUUID()
2433-
val purposeId = UUID.randomUUID()
2434-
val purposeVersionId = UUID.randomUUID()
2435-
val eserviceId = UUID.randomUUID()
2436-
2437-
implicit val context: Seq[(String, String)] =
2438-
Seq("bearer" -> bearerToken, USER_ROLES -> "admin", ORGANIZATION_ID_CLAIM -> producerId.toString)
2439-
2440-
val version = SpecData.purposeVersion.copy(id = purposeVersionId)
2441-
val expected =
2442-
SpecData.dependencyPurposeVersion.copy(id = purposeVersionId, expectedApprovalDate = Some(SpecData.timestamp))
2443-
2444-
mockPurposeRetrieve(purposeId, SpecData.purpose.copy(eserviceId = eserviceId, versions = Seq(version)))
2445-
mockEServiceRetrieve(eserviceId, SpecData.eService.copy(id = eserviceId, producerId = producerId))
2446-
2447-
(
2448-
mockPurposeManagementService
2449-
.updateWaitingForApprovalPurposeVersion(
2450-
_: UUID,
2451-
_: UUID,
2452-
_: PurposeManagementDependency.WaitingForApprovalPurposeVersionUpdateContent
2453-
)(_: Seq[(String, String)])
2454-
)
2455-
.expects(
2456-
purposeId,
2457-
purposeVersionId,
2458-
PurposeManagementDependency.WaitingForApprovalPurposeVersionUpdateContent(SpecData.timestamp),
2459-
context
2460-
)
2461-
.once()
2462-
.returns(Future.successful[PurposeManagementDependency.PurposeVersion](expected))
2463-
2464-
Post() ~> service.updateWaitingForApprovalPurposeVersion(
2465-
purposeId.toString,
2466-
purposeVersionId.toString,
2467-
SpecData.waitingForApprovalUpdate
2468-
) ~> check {
2469-
status shouldEqual StatusCodes.OK
2470-
responseAs[PurposeVersion] shouldEqual expected.toApi
2471-
}
2472-
}
2473-
2474-
"fail if Purpose Version does not exist" in {
2475-
2476-
val purposeId = UUID.randomUUID()
2477-
val purposeVersionId = UUID.randomUUID()
2478-
2479-
implicit val context: Seq[(String, String)] =
2480-
Seq("bearer" -> bearerToken, USER_ROLES -> "admin", ORGANIZATION_ID_CLAIM -> UUID.randomUUID().toString)
2481-
2482-
(mockPurposeManagementService
2483-
.getPurposeById(_: UUID)(_: ExecutionContext, _: ReadModelService))
2484-
.expects(purposeId, *, *)
2485-
.once()
2486-
.returns(Future.failed(PurposeNotFound(purposeId)))
2487-
2488-
Post() ~> service.updateWaitingForApprovalPurposeVersion(
2489-
purposeId.toString,
2490-
purposeVersionId.toString,
2491-
SpecData.waitingForApprovalUpdate
2492-
) ~> check {
2493-
status shouldEqual StatusCodes.NotFound
2494-
val problem = responseAs[Problem]
2495-
problem.status shouldBe StatusCodes.NotFound.intValue
2496-
problem.errors.head.code shouldBe "012-0012"
2497-
}
2498-
}
2499-
2500-
"fail if User is not a Producer" in {
2501-
2502-
val producerId = UUID.randomUUID()
2503-
val purposeId = UUID.randomUUID()
2504-
val purposeVersionId = UUID.randomUUID()
2505-
val eserviceId = UUID.randomUUID()
2506-
2507-
implicit val context: Seq[(String, String)] =
2508-
Seq("bearer" -> bearerToken, USER_ROLES -> "admin", ORGANIZATION_ID_CLAIM -> UUID.randomUUID().toString)
2509-
2510-
mockPurposeRetrieve(purposeId, SpecData.purpose.copy(eserviceId = eserviceId))
2511-
mockEServiceRetrieve(eserviceId, SpecData.eService.copy(id = eserviceId, producerId = producerId))
2512-
2513-
Post() ~> service.updateWaitingForApprovalPurposeVersion(
2514-
purposeId.toString,
2515-
purposeVersionId.toString,
2516-
SpecData.waitingForApprovalUpdate
2517-
) ~> check {
2518-
status shouldEqual StatusCodes.Forbidden
2519-
val problem = responseAs[Problem]
2520-
problem.status shouldBe StatusCodes.Forbidden.intValue
2521-
problem.errors.head.code shouldBe "012-0002"
2522-
}
2523-
}
2524-
}
2525-
25262428
"Purpose Risk Analysis Configuration latest version retrieve" should {
25272429
"succeed when Tenant kind is PA" in {
25282430

src/test/scala/it/pagopa/interop/purposeprocess/SpecData.scala

-3
Original file line numberDiff line numberDiff line change
@@ -410,9 +410,6 @@ object SpecData {
410410
freeOfChargeReason = None
411411
)
412412

413-
def waitingForApprovalUpdate: WaitingForApprovalPurposeVersionUpdateContent =
414-
WaitingForApprovalPurposeVersionUpdateContent(timestamp)
415-
416413
val purposes: Seq[PersistentPurpose] = Seq(purpose)
417414

418415
val agreement: PersistentAgreement =

src/test/scala/it/pagopa/interop/purposeprocess/authz/PurposeApiAuthzSpec.scala

-10
Original file line numberDiff line numberDiff line change
@@ -201,16 +201,6 @@ class PurposeApiAuthzSpec extends AnyWordSpecLike with BeforeAndAfterAll with Au
201201
{ implicit c: Seq[(String, String)] => service.updateReversePurpose("fake", fakeContent) }
202202
)
203203
}
204-
"accept authorized roles for updateWaitingForApprovalPurposeVersion" in {
205-
val endpoint = AuthorizedRoutes.endpoints("updateWaitingForApprovalPurposeVersion")
206-
val fakeContent = WaitingForApprovalPurposeVersionUpdateContent(OffsetDateTime.now())
207-
validateAuthorization(
208-
endpoint,
209-
{ implicit c: Seq[(String, String)] =>
210-
service.updateWaitingForApprovalPurposeVersion("fakeSeed", "fake", fakeContent)
211-
}
212-
)
213-
}
214204

215205
"accept authorized roles for getRiskAnalysisDocument" in {
216206
val endpoint = AuthorizedRoutes.endpoints("getRiskAnalysisDocument")

src/test/scala/it/pagopa/interop/purposeprocess/util/FakeDependencies.scala

-13
Original file line numberDiff line numberDiff line change
@@ -170,19 +170,6 @@ object FakeDependencies {
170170
)
171171
)
172172

173-
override def updateWaitingForApprovalPurposeVersion(
174-
purposeId: UUID,
175-
versionId: UUID,
176-
updateContent: Management.WaitingForApprovalPurposeVersionUpdateContent
177-
)(implicit contexts: Seq[(String, String)]): Future[Management.PurposeVersion] = Future.successful(
178-
Management.PurposeVersion(
179-
id = UUID.randomUUID(),
180-
state = Management.PurposeVersionState.DRAFT,
181-
createdAt = OffsetDateTime.now(),
182-
dailyCalls = 1
183-
)
184-
)
185-
186173
override def deletePurpose(purposeId: UUID)(implicit contexts: Seq[(String, String)]): Future[Unit] =
187174
Future.successful(())
188175

0 commit comments

Comments
 (0)