diff --git a/infra/enrolment-records/repository/src/main/java/com/simprints/infra/enrolment/records/repository/remote/models/face/ApiFaceReference.kt b/infra/enrolment-records/repository/src/main/java/com/simprints/infra/enrolment/records/repository/remote/models/face/ApiFaceReference.kt index 6eb6e5f811..41d0ac2807 100644 --- a/infra/enrolment-records/repository/src/main/java/com/simprints/infra/enrolment/records/repository/remote/models/face/ApiFaceReference.kt +++ b/infra/enrolment-records/repository/src/main/java/com/simprints/infra/enrolment/records/repository/remote/models/face/ApiFaceReference.kt @@ -1,15 +1,22 @@ package com.simprints.infra.enrolment.records.repository.remote.models.face import androidx.annotation.Keep +import com.fasterxml.jackson.annotation.JsonTypeInfo +import com.simprints.core.ExcludedFromGeneratedTestCoverageReports import com.simprints.core.domain.face.FaceSample import com.simprints.core.tools.utils.EncodingUtils import com.simprints.infra.enrolment.records.repository.remote.models.ApiBiometricReference @Keep +@ExcludedFromGeneratedTestCoverageReports("API model") internal data class ApiFaceReference( val id: String, val templates: List, val format: String, + // [MS-1076] The parent 'ApiBiometricReference' class should have its JsonSubTypes annotation updated to + // @JsonSubTypes.Type([...], looseHandling = true) once we update to SDK => 25 and Jackson => 2.16.0. + // Then, this annotation should be removed + @JsonTypeInfo(use = JsonTypeInfo.Id.NONE) val metadata: HashMap? = null, ) : ApiBiometricReference(ApiBiometricReferenceType.FaceReference) diff --git a/infra/enrolment-records/repository/src/main/java/com/simprints/infra/enrolment/records/repository/remote/models/fingerprint/ApiFingerprintReference.kt b/infra/enrolment-records/repository/src/main/java/com/simprints/infra/enrolment/records/repository/remote/models/fingerprint/ApiFingerprintReference.kt index 434f1d9be3..f301bffe29 100644 --- a/infra/enrolment-records/repository/src/main/java/com/simprints/infra/enrolment/records/repository/remote/models/fingerprint/ApiFingerprintReference.kt +++ b/infra/enrolment-records/repository/src/main/java/com/simprints/infra/enrolment/records/repository/remote/models/fingerprint/ApiFingerprintReference.kt @@ -1,15 +1,22 @@ package com.simprints.infra.enrolment.records.repository.remote.models.fingerprint import androidx.annotation.Keep +import com.fasterxml.jackson.annotation.JsonTypeInfo +import com.simprints.core.ExcludedFromGeneratedTestCoverageReports import com.simprints.core.domain.fingerprint.FingerprintSample import com.simprints.core.tools.utils.EncodingUtils import com.simprints.infra.enrolment.records.repository.remote.models.ApiBiometricReference @Keep +@ExcludedFromGeneratedTestCoverageReports("API model") internal data class ApiFingerprintReference( val id: String, val templates: List, val format: String, + // [MS-1076] The parent 'ApiBiometricReference' class should have its JsonSubTypes annotation updated to + // @JsonSubTypes.Type([...], looseHandling = true) once we update to SDK => 25 and Jackson => 2.16.0. + // Then, this annotation should be removed + @JsonTypeInfo(use = JsonTypeInfo.Id.NONE) val metadata: HashMap? = null, ) : ApiBiometricReference(ApiBiometricReferenceType.FingerprintReference) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/subject/biometricref/ApiBiometricReference.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/subject/biometricref/ApiBiometricReference.kt index be36c02770..46e5ba36a6 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/subject/biometricref/ApiBiometricReference.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/subject/biometricref/ApiBiometricReference.kt @@ -3,6 +3,7 @@ package com.simprints.infra.eventsync.event.remote.models.subject.biometricref import androidx.annotation.Keep import com.fasterxml.jackson.annotation.JsonSubTypes import com.fasterxml.jackson.annotation.JsonTypeInfo +import com.simprints.core.ExcludedFromGeneratedTestCoverageReports import com.simprints.core.domain.fingerprint.IFingerIdentifier import com.simprints.infra.events.event.domain.models.subject.FaceTemplate import com.simprints.infra.events.event.domain.models.subject.FingerprintTemplate @@ -16,8 +17,12 @@ import com.simprints.infra.events.event.domain.models.subject.FingerprintReferen private const val FACE_REFERENCE_KEY = "FaceReference" private const val FINGERPRINT_REFERENCE_KEY = "FingerprintReference" +@ExcludedFromGeneratedTestCoverageReports("API model") @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type", visible = true) @JsonSubTypes( + // [MS-1076] Annotations should have 'looseHandling' parameter passed to it to allow loose type handling of the nested fields (metadata) + // @JsonSubTypes.Type([...], looseHandling = true) once we update to SDK => 25 and Jackson => 2.16.0. + // Ref: https://github.com/FasterXML/jackson-databind/issues/3877#issuecomment-1508508854 JsonSubTypes.Type(value = ApiFaceReference::class, name = FACE_REFERENCE_KEY), JsonSubTypes.Type(value = ApiFingerprintReference::class, name = FINGERPRINT_REFERENCE_KEY), ) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/subject/biometricref/face/ApiFaceReference.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/subject/biometricref/face/ApiFaceReference.kt index f932252a9e..7ffb71250e 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/subject/biometricref/face/ApiFaceReference.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/subject/biometricref/face/ApiFaceReference.kt @@ -1,17 +1,24 @@ package com.simprints.infra.eventsync.event.remote.models.subject.biometricref.face import androidx.annotation.Keep +import com.fasterxml.jackson.annotation.JsonTypeInfo +import com.simprints.core.ExcludedFromGeneratedTestCoverageReports import com.simprints.infra.eventsync.event.remote.models.subject.biometricref.ApiBiometricReference import com.simprints.infra.eventsync.event.remote.models.subject.biometricref.ApiBiometricReferenceType import com.simprints.infra.eventsync.event.remote.models.subject.biometricref.ApiBiometricReferenceType.FaceReference import java.util.UUID @Keep +@ExcludedFromGeneratedTestCoverageReports("API model") internal data class ApiFaceReference( override val id: String = UUID.randomUUID().toString(), val templates: List, val format: String, - val metadata: HashMap? = null, + // [MS-1076] The parent 'ApiBiometricReference' class should have its JsonSubTypes annotation updated to + // @JsonSubTypes.Type([...], looseHandling = true) once we update to SDK => 25 and Jackson => 2.16.0. + // Then, this annotation should be removed + @JsonTypeInfo(use = JsonTypeInfo.Id.NONE) + val metadata: Map? = null, ) : ApiBiometricReference { override val type: ApiBiometricReferenceType = FaceReference } diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/subject/biometricref/fingerprint/ApiFingerprintReference.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/subject/biometricref/fingerprint/ApiFingerprintReference.kt index d439d03da3..58fb8243ac 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/subject/biometricref/fingerprint/ApiFingerprintReference.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/subject/biometricref/fingerprint/ApiFingerprintReference.kt @@ -1,17 +1,24 @@ package com.simprints.infra.eventsync.event.remote.models.subject.biometricref.fingerprint import androidx.annotation.Keep +import com.fasterxml.jackson.annotation.JsonTypeInfo +import com.simprints.core.ExcludedFromGeneratedTestCoverageReports import com.simprints.infra.eventsync.event.remote.models.subject.biometricref.ApiBiometricReference import com.simprints.infra.eventsync.event.remote.models.subject.biometricref.ApiBiometricReferenceType import com.simprints.infra.eventsync.event.remote.models.subject.biometricref.ApiBiometricReferenceType.FingerprintReference import java.util.UUID @Keep +@ExcludedFromGeneratedTestCoverageReports("API model") internal data class ApiFingerprintReference( override val id: String = UUID.randomUUID().toString(), val templates: List, val format: String, - val metadata: HashMap? = null, + // [MS-1076] The parent 'ApiBiometricReference' class should have its JsonSubTypes annotation updated to + // @JsonSubTypes.Type([...], looseHandling = true) once we update to SDK => 25 and Jackson => 2.16.0. + // Then, this annotation should be removed + @JsonTypeInfo(use = JsonTypeInfo.Id.NONE) + val metadata: Map? = null, ) : ApiBiometricReference { override val type: ApiBiometricReferenceType = FingerprintReference } diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/subject/BiometricReference.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/subject/BiometricReference.kt index fe5e6b0b09..c8eed959ce 100644 --- a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/subject/BiometricReference.kt +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/subject/BiometricReference.kt @@ -3,9 +3,11 @@ package com.simprints.infra.events.event.domain.models.subject import androidx.annotation.Keep import com.fasterxml.jackson.annotation.JsonSubTypes import com.fasterxml.jackson.annotation.JsonTypeInfo +import com.simprints.core.ExcludedFromGeneratedTestCoverageReports import com.simprints.infra.events.event.domain.models.subject.BiometricReferenceType.Companion.FACE_REFERENCE_KEY import com.simprints.infra.events.event.domain.models.subject.BiometricReferenceType.Companion.FINGERPRINT_REFERENCE_KEY +@ExcludedFromGeneratedTestCoverageReports("Domain model") @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type") @JsonSubTypes( JsonSubTypes.Type(value = FaceReference::class, name = FACE_REFERENCE_KEY), @@ -17,18 +19,20 @@ sealed class BiometricReference( val type: BiometricReferenceType, ) +@ExcludedFromGeneratedTestCoverageReports("Domain model") data class FaceReference( override val id: String, val templates: List, val format: String, - val metadata: HashMap? = null, + val metadata: Map? = null, ) : BiometricReference(id, BiometricReferenceType.FACE_REFERENCE) +@ExcludedFromGeneratedTestCoverageReports("Domain model") data class FingerprintReference( override val id: String, val templates: List, val format: String, - val metadata: HashMap? = null, + val metadata: Map? = null, ) : BiometricReference(id, BiometricReferenceType.FINGERPRINT_REFERENCE) enum class BiometricReferenceType {