Skip to content

Commit

Permalink
PRSD-689: Refactors UpdateJourney
Browse files Browse the repository at this point in the history
  • Loading branch information
isobel-softwire committed Feb 28, 2025
1 parent 9cdf547 commit 6814679
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import uk.gov.communities.prsdb.webapp.constants.UPDATE_PATH_SEGMENT
import uk.gov.communities.prsdb.webapp.exceptions.PrsdbWebException
import uk.gov.communities.prsdb.webapp.forms.journeys.PageData
import uk.gov.communities.prsdb.webapp.forms.journeys.UpdateLandlordDetailsJourney
import uk.gov.communities.prsdb.webapp.forms.steps.UpdateLandlordDetailsStepId
import uk.gov.communities.prsdb.webapp.helpers.DateTimeHelper
import uk.gov.communities.prsdb.webapp.models.viewModels.summaryModels.LandlordViewModel
import uk.gov.communities.prsdb.webapp.services.AddressDataService
Expand All @@ -39,14 +38,12 @@ class LandlordDetailsController(
model: Model,
principal: Principal,
): String {
updateDetailsJourney.initialiseJourneyDataIfNotInitialised(principal.name)
addLandlordDetailsToModel(model, principal, includeChangeLinks = true)
// TODO: PRSD-355 Remove this way of showing submit button
model.addAttribute("shouldShowSubmitButton", true)
addLandlordDetailsToModel(model, principal, includeChangeLinks = true)
return updateDetailsJourney.populateModelAndGetViewName(
UpdateLandlordDetailsStepId.UpdateDetails,
model,
null,
return updateDetailsJourney.populateModelAndGetViewNameForUpdateStep(
updateEntityId = principal.name,
model = model,
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package uk.gov.communities.prsdb.webapp.forms.journeys

import org.springframework.ui.Model
import org.springframework.validation.Validator
import uk.gov.communities.prsdb.webapp.constants.enums.JourneyType
import uk.gov.communities.prsdb.webapp.forms.steps.StepDetails
Expand All @@ -14,10 +15,31 @@ abstract class UpdateJourney<T : StepId>(
) : Journey<T>(journeyType, validator, journeyDataService) {
abstract val updateStepId: T

protected val originalDataKey = "ORIGINAL_${journeyType.name}"
private val originalDataKey = "ORIGINAL_${journeyType.name}"

protected abstract fun createOriginalJourneyData(updateEntityId: String): JourneyData

protected open fun initialiseJourneyDataIfNotInitialised(updateEntityId: String) {
val journeyData = journeyDataService.getJourneyDataFromSession(defaultJourneyDataKey)
if (!isJourneyDataInitialised(journeyData)) {
val newJourneyData = journeyData + (originalDataKey to createOriginalJourneyData(updateEntityId))
journeyDataService.setJourneyDataInSession(newJourneyData)
}
}

fun populateModelAndGetViewNameForUpdateStep(
updateEntityId: String,
model: Model,
subPageNumber: Int? = null,
submittedPageData: PageData? = null,
journeyDataKey: String? = null,
): String {
initialiseJourneyDataIfNotInitialised(updateEntityId)
return super.populateModelAndGetViewName(updateStepId, model, subPageNumber, submittedPageData, journeyDataKey)
}

override fun getUnreachableStepRedirect(journeyData: JourneyData) =
if (!journeyData.containsKey(originalDataKey)) {
if (!isJourneyDataInitialised(journeyData)) {
updateStepId.urlPathSegment
} else {
last().step.id.urlPathSegment
Expand All @@ -38,4 +60,6 @@ abstract class UpdateJourney<T : StepId>(

return ReachableStepDetailsIterator(updatedData, steps, initialStepId, validator)
}

private fun isJourneyDataInitialised(journeyData: JourneyData): Boolean = journeyData.containsKey(originalDataKey)
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import uk.gov.communities.prsdb.webapp.constants.UPDATE_LANDLORD_DETAILS_URL
import uk.gov.communities.prsdb.webapp.constants.enums.JourneyType
import uk.gov.communities.prsdb.webapp.controllers.LandlordDetailsController
import uk.gov.communities.prsdb.webapp.database.entity.Address
import uk.gov.communities.prsdb.webapp.database.entity.Landlord
import uk.gov.communities.prsdb.webapp.forms.pages.Page
import uk.gov.communities.prsdb.webapp.forms.pages.SelectAddressPage
import uk.gov.communities.prsdb.webapp.forms.steps.Step
Expand Down Expand Up @@ -42,7 +41,7 @@ class UpdateLandlordDetailsJourney(
validator = validator,
journeyDataService = journeyDataService,
) {
override val initialStepId = UpdateLandlordDetailsStepId.UpdateEmail
final override val initialStepId = UpdateLandlordDetailsStepId.UpdateEmail
override val updateStepId = UpdateLandlordDetailsStepId.UpdateDetails

override val journeyPathSegment: String = UPDATE_LANDLORD_DETAILS_URL
Expand Down Expand Up @@ -244,18 +243,9 @@ class UpdateLandlordDetailsJourney(
return LandlordDetailsController.LANDLORD_DETAILS_ROUTE
}

fun initialiseJourneyDataIfNotInitialised(landlordId: String) {
val journeyData = journeyDataService.getJourneyDataFromSession(defaultJourneyDataKey)
if (!journeyData.containsKey(originalDataKey)) {
val landlord = landlordService.retrieveLandlordByBaseUserId(landlordId)!!
val newJourneyData =
journeyData + (originalDataKey to createOriginalLandlordJourneyData(landlord))
journeyDataService.setJourneyDataInSession(newJourneyData)
addressDataService.setAddressData(listOf(AddressDataModel.fromAddress(landlord.address)))
}
}
override fun createOriginalJourneyData(updateEntityId: String): JourneyData {
val landlord = landlordService.retrieveLandlordByBaseUserId(updateEntityId)!!

private fun createOriginalLandlordJourneyData(landlord: Landlord): JourneyData {
val originalLandlordData =
mutableMapOf(
UpdateLandlordDetailsStepId.UpdateEmail.urlPathSegment to mapOf("emailAddress" to landlord.email),
Expand All @@ -280,9 +270,19 @@ class UpdateLandlordDetailsJourney(
"postcode" to landlord.address.getPostcodeSearchTerm(),
)
}

return originalLandlordData
}

override fun initialiseJourneyDataIfNotInitialised(updateEntityId: String) {
super.initialiseJourneyDataIfNotInitialised(updateEntityId)

val landlord = landlordService.retrieveLandlordByBaseUserId(updateEntityId)!!
if (addressDataService.getAddressData(landlord.address.singleLineAddress) == null) {
addressDataService.setAddressData(listOf(AddressDataModel.fromAddress(landlord.address)))
}
}

private fun Address.getHouseNameOrNumber(): String = buildingName ?: buildingNumber ?: singleLineAddress

private fun Address.getPostcodeSearchTerm(): String = postcode ?: singleLineAddress
Expand Down

0 comments on commit 6814679

Please sign in to comment.