feat(#4): Add comparison for versions, refactor version restoring

This commit is contained in:
2025-11-09 08:17:10 +01:00
parent 81f9f89d94
commit ef440d2970
10 changed files with 473 additions and 45 deletions

View File

@@ -1,5 +1,6 @@
package com.betriebsratkanzlei.legalconsenthub.application_form
import com.betriebsratkanzlei.legalconsenthub.application_form_version.ApplicationFormVersion
import com.betriebsratkanzlei.legalconsenthub.form_element.FormElementSection
import com.betriebsratkanzlei.legalconsenthub.user.User
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormStatus
@@ -30,6 +31,8 @@ class ApplicationForm(
var name: String = "",
@OneToMany(mappedBy = "applicationForm", cascade = [CascadeType.ALL], orphanRemoval = true)
var formElementSections: MutableList<FormElementSection> = mutableListOf(),
@OneToMany(mappedBy = "applicationForm", cascade = [CascadeType.ALL], orphanRemoval = true)
var versions: MutableList<ApplicationFormVersion> = mutableListOf(),
@Column(nullable = false)
var isTemplate: Boolean,
var organizationId: String = "",

View File

@@ -56,6 +56,7 @@ class ApplicationFormService(
}
fun updateApplicationForm(applicationFormDto: ApplicationFormDto): ApplicationForm {
val existingApplicationForm = getApplicationFormById(applicationFormDto.id)
val applicationForm = applicationFormMapper.toApplicationForm(applicationFormDto)
val updatedApplicationForm: ApplicationForm
@@ -66,7 +67,9 @@ class ApplicationFormService(
}
val currentUser = userService.getCurrentUser()
versionService.createVersion(updatedApplicationForm, currentUser)
if (versionService.hasChanges(existingApplicationForm, updatedApplicationForm)) {
versionService.createVersion(updatedApplicationForm, currentUser)
}
return updatedApplicationForm
}

View File

@@ -47,6 +47,15 @@ class ApplicationFormVersionService(
return versionRepository.save(version)
}
fun hasChanges(
existingForm: ApplicationForm,
newForm: ApplicationForm,
): Boolean {
val existingSnapshot = createSnapshot(existingForm)
val newSnapshot = createSnapshot(newForm)
return existingSnapshot != newSnapshot
}
fun getVersionsByApplicationFormId(applicationFormId: UUID): List<ApplicationFormVersion> =
versionRepository.findByApplicationFormIdOrderByVersionNumberDesc(applicationFormId)