Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cas2v2/cba 85 add bail hearing dates #2846

Merged
merged 12 commits into from
Jan 22, 2025
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,20 @@ import uk.gov.justice.digital.hmpps.approvedpremisesapi.api.model.Application
import uk.gov.justice.digital.hmpps.approvedpremisesapi.api.model.NewCas2v2Application
import uk.gov.justice.digital.hmpps.approvedpremisesapi.api.model.SortDirection
import uk.gov.justice.digital.hmpps.approvedpremisesapi.api.model.UpdateApplication
import uk.gov.justice.digital.hmpps.approvedpremisesapi.api.model.UpdateCas2v2Application
import uk.gov.justice.digital.hmpps.approvedpremisesapi.jpa.entity.cas2v2.Cas2v2ApplicationEntity
import uk.gov.justice.digital.hmpps.approvedpremisesapi.jpa.entity.cas2v2.Cas2v2ApplicationSummaryEntity
import uk.gov.justice.digital.hmpps.approvedpremisesapi.problem.BadRequestProblem
import uk.gov.justice.digital.hmpps.approvedpremisesapi.problem.ConflictProblem
import uk.gov.justice.digital.hmpps.approvedpremisesapi.problem.ForbiddenProblem
import uk.gov.justice.digital.hmpps.approvedpremisesapi.problem.NotFoundProblem
import uk.gov.justice.digital.hmpps.approvedpremisesapi.results.AuthorisableActionResult
import uk.gov.justice.digital.hmpps.approvedpremisesapi.results.ValidatableActionResult
import uk.gov.justice.digital.hmpps.approvedpremisesapi.service.NomisUserService
import uk.gov.justice.digital.hmpps.approvedpremisesapi.service.cas2.OffenderService
import uk.gov.justice.digital.hmpps.approvedpremisesapi.service.cas2v2.Cas2v2ApplicationService
import uk.gov.justice.digital.hmpps.approvedpremisesapi.transformer.cas2v2.Cas2v2ApplicationsTransformer
import uk.gov.justice.digital.hmpps.approvedpremisesapi.util.PageCriteria
import uk.gov.justice.digital.hmpps.approvedpremisesapi.util.ensureEntityFromCasResultIsSuccess
import uk.gov.justice.digital.hmpps.approvedpremisesapi.util.extractEntityFromCasResult
import java.net.URI
import java.util.UUID
import uk.gov.justice.digital.hmpps.approvedpremisesapi.api.model.Cas2v2ApplicationSummary as ModelCas2v2ApplicationSummary
Expand Down Expand Up @@ -58,23 +59,14 @@ class Cas2v2ApplicationController(
override fun applicationsApplicationIdGet(applicationId: UUID): ResponseEntity<Application> {
val user = nomisUserService.getUserForRequest()

val application = when (
val applicationResult = cas2v2ApplicationService
.getCas2v2ApplicationForUser(
applicationId,
user,
)

) {
is AuthorisableActionResult.NotFound -> null
is AuthorisableActionResult.Unauthorised -> throw ForbiddenProblem()
is AuthorisableActionResult.Success -> applicationResult.entity
}
val applicationResult = cas2v2ApplicationService
.getCas2v2ApplicationForUser(
applicationId,
user,
)

if (application != null) {
return ResponseEntity.ok(getPersonDetailAndTransform(application))
}
throw NotFoundProblem(applicationId, "Application")
val application = extractEntityFromCasResult(applicationResult)
return ResponseEntity.ok(getPersonDetailAndTransform(application))
}

@Transactional
Expand All @@ -87,6 +79,7 @@ class Cas2v2ApplicationController(
body.crn,
user,
body.applicationOrigin,
body.bailHearingDate,
)

val application = when (applicationResult) {
Expand All @@ -101,6 +94,7 @@ class Cas2v2ApplicationController(
.body(cas2v2ApplicationsTransformer.transformJpaToApi(application, personInfo))
}

@Suppress("TooGenericExceptionThrown")
@Transactional
override fun applicationsApplicationIdPut(
applicationId: UUID,
Expand All @@ -110,46 +104,27 @@ class Cas2v2ApplicationController(

val serializedData = objectMapper.writeValueAsString(body.data)

val applicationResult = cas2v2ApplicationService.updateCas2v2Application(
applicationId =
applicationId,
data = serializedData,
user,
)

val validationResult = when (applicationResult) {
is AuthorisableActionResult.NotFound -> throw NotFoundProblem(applicationId, "Application")
is AuthorisableActionResult.Unauthorised -> throw ForbiddenProblem()
is AuthorisableActionResult.Success -> applicationResult.entity
}
val applicationResult = when (body) {
is UpdateCas2v2Application -> cas2v2ApplicationService.updateCas2v2Application(
applicationId = applicationId,
data = serializedData,
user,
body.bailHearingDate,
)

val updatedApplication = when (validationResult) {
is ValidatableActionResult.GeneralValidationError -> throw BadRequestProblem(errorDetail = validationResult.message)
is ValidatableActionResult.FieldValidationError -> throw BadRequestProblem(invalidParams = validationResult.validationMessages)
is ValidatableActionResult.ConflictError -> throw ConflictProblem(id = validationResult.conflictingEntityId, conflictReason = validationResult.message)
is ValidatableActionResult.Success -> validationResult.entity
else -> throw RuntimeException("Unsupported UpdateApplication type: ${body::class.qualifiedName}")
}

return ResponseEntity.ok(getPersonDetailAndTransform(updatedApplication))
val entity = extractEntityFromCasResult(applicationResult)
return ResponseEntity.ok(getPersonDetailAndTransform(entity))
}

@Transactional
override fun applicationsApplicationIdAbandonPut(applicationId: UUID): ResponseEntity<Unit> {
val user = nomisUserService.getUserForRequest()

val validationResult = when (val applicationResult = cas2v2ApplicationService.abandonCas2v2Application(applicationId, user)) {
is AuthorisableActionResult.NotFound -> throw NotFoundProblem(applicationId, "Application")
is AuthorisableActionResult.Unauthorised -> throw ForbiddenProblem()
is AuthorisableActionResult.Success -> applicationResult.entity
}

when (validationResult) {
is ValidatableActionResult.GeneralValidationError -> throw BadRequestProblem(errorDetail = validationResult.message)
is ValidatableActionResult.FieldValidationError -> throw BadRequestProblem(invalidParams = validationResult.validationMessages)
is ValidatableActionResult.ConflictError -> throw ConflictProblem(id = validationResult.conflictingEntityId, conflictReason = validationResult.message)
is ValidatableActionResult.Success -> validationResult.entity
}

val applicationResult = cas2v2ApplicationService.abandonCas2v2Application(applicationId, user)
ensureEntityFromCasResultIsSuccess(applicationResult)
return ResponseEntity.ok(Unit)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,15 @@ import uk.gov.justice.digital.hmpps.approvedpremisesapi.api.model.SortDirection
import uk.gov.justice.digital.hmpps.approvedpremisesapi.api.model.SubmitCas2v2Application
import uk.gov.justice.digital.hmpps.approvedpremisesapi.jpa.entity.cas2v2.Cas2v2ApplicationEntity
import uk.gov.justice.digital.hmpps.approvedpremisesapi.jpa.entity.cas2v2.Cas2v2ApplicationSummaryEntity
import uk.gov.justice.digital.hmpps.approvedpremisesapi.problem.BadRequestProblem
import uk.gov.justice.digital.hmpps.approvedpremisesapi.problem.ConflictProblem
import uk.gov.justice.digital.hmpps.approvedpremisesapi.problem.ForbiddenProblem
import uk.gov.justice.digital.hmpps.approvedpremisesapi.problem.NotFoundProblem
import uk.gov.justice.digital.hmpps.approvedpremisesapi.results.AuthorisableActionResult
import uk.gov.justice.digital.hmpps.approvedpremisesapi.results.CasResult
import uk.gov.justice.digital.hmpps.approvedpremisesapi.service.ExternalUserService
import uk.gov.justice.digital.hmpps.approvedpremisesapi.service.HttpAuthService
import uk.gov.justice.digital.hmpps.approvedpremisesapi.service.NomisUserService
import uk.gov.justice.digital.hmpps.approvedpremisesapi.service.cas2.OffenderService
import uk.gov.justice.digital.hmpps.approvedpremisesapi.service.cas2v2.Cas2v2ApplicationService
import uk.gov.justice.digital.hmpps.approvedpremisesapi.transformer.cas2v2.Cas2v2SubmissionsTransformer
import uk.gov.justice.digital.hmpps.approvedpremisesapi.util.PageCriteria
import uk.gov.justice.digital.hmpps.approvedpremisesapi.util.ensureEntityFromCasResultIsSuccess
import uk.gov.justice.digital.hmpps.approvedpremisesapi.util.extractEntityFromCasResult
import java.util.UUID

@Service("Cas2v2SubmissionsController")
Expand Down Expand Up @@ -62,18 +58,10 @@ class Cas2v2SubmissionsController(
ensureNomisUserPersisted()
}

val application = when (
val applicationResult = cas2v2ApplicationService.getSubmittedCas2v2ApplicationForAssessor(applicationId)
) {
is AuthorisableActionResult.NotFound -> null
is AuthorisableActionResult.Unauthorised -> throw ForbiddenProblem()
is AuthorisableActionResult.Success -> applicationResult.entity
}
val applicationResult = cas2v2ApplicationService.getSubmittedCas2v2ApplicationForAssessor(applicationId)
val application = extractEntityFromCasResult(applicationResult)

if (application != null) {
return ResponseEntity.ok(getPersonDetailAndTransform(application))
}
throw NotFoundProblem(applicationId, "Application")
return ResponseEntity.ok(getPersonDetailAndTransform(application))
}

@Transactional
Expand All @@ -82,15 +70,9 @@ class Cas2v2SubmissionsController(
): ResponseEntity<Unit> {
val user = nomisUserService.getUserForRequest()
val submitResult = cas2v2ApplicationService.submitCas2v2Application(submitCas2v2Application, user)
ensureEntityFromCasResultIsSuccess(submitResult)

when (submitResult) {
is CasResult.NotFound -> throw NotFoundProblem(submitCas2v2Application.applicationId, "Application")
is CasResult.Unauthorised -> throw ForbiddenProblem()
is CasResult.ConflictError -> throw ConflictProblem(id = submitResult.conflictingEntityId, conflictReason = submitResult.message)
is CasResult.FieldValidationError -> throw BadRequestProblem(invalidParams = submitResult.validationMessages)
is CasResult.GeneralValidationError -> throw BadRequestProblem(errorDetail = submitResult.message)
is CasResult.Success -> return ResponseEntity(HttpStatus.OK)
}
return ResponseEntity(HttpStatus.OK)
}

private fun ensureExternalUserPersisted() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ data class Cas2v2ApplicationEntity(
var hdcEligibilityDate: LocalDate? = null,
var conditionalReleaseDate: LocalDate? = null,
var telephoneNumber: String? = null,
var bailHearingDate: LocalDate? = null,
@Enumerated(EnumType.STRING)
var applicationOrigin: ApplicationOrigin,
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ data class Cas2v2ApplicationSummaryEntity(
var abandonedAt: OffsetDateTime? = null,
@Column(name = "hdc_eligibility_date")
var hdcEligibilityDate: LocalDate? = null,
@Column(name = "bail_hearing_date")
var bailHearingDate: LocalDate? = null,
@Column(name = "label")
var latestStatusUpdateLabel: String? = null,
@Column(name = "status_id")
Expand Down
Loading
Loading