[MS-1087] Add dedicated CoSync model copies of exported classes#1586
[MS-1087] Add dedicated CoSync model copies of exported classes#1586BurningAXE wants to merge 1 commit intomainfrom
Conversation
There was a problem hiding this comment.
Pull request overview
This PR introduces a versioned, dedicated CoSync wire-format model for enrolment record “subject actions” JSON, decoupling CommCare/Client-API payloads from internal domain event models and adding schema version routing.
Changes:
- Replace
CoSyncEnrolmentRecordEventsfrom a simple@Serializablewrapper to a versioned sealed interface with a customschemaVersion-based deserializer. - Add V1 CoSync model classes (+ mapping) for enrolment record creation events, tokenizable strings, biometric references/templates, and external credentials.
- Update CommCare parsing call sites and the client-api subject-actions generator to use
toDomainEvents()/ V1 serialization.
Reviewed changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| infra/events/src/main/java/com/simprints/infra/events/event/cosync/CoSyncEnrolmentRecordEvents.kt | Introduces versioned CoSync events interface + schemaVersion-based polymorphic deserialization. |
| infra/events/src/main/java/com/simprints/infra/events/event/cosync/CoSyncEnrolmentRecordEventsV1.kt | Adds V1 wrapper model with schemaVersion and domain mapping. |
| infra/events/src/main/java/com/simprints/infra/events/event/cosync/v1/EnrolmentRecordEventV1.kt | Adds V1 event + payload schema and domain ↔ CoSync mappings. |
| infra/events/src/main/java/com/simprints/infra/events/event/cosync/v1/BiometricReferenceV1.kt | Adds V1 biometric reference schemas and mappings. |
| infra/events/src/main/java/com/simprints/infra/events/event/cosync/v1/TemplateV1.kt | Adds V1 face/fingerprint template schemas and mappings. |
| infra/events/src/main/java/com/simprints/infra/events/event/cosync/v1/SampleIdentifierV1.kt | Adds V1 sample identifier enum and mappings to TemplateIdentifier. |
| infra/events/src/main/java/com/simprints/infra/events/event/cosync/v1/TokenizableStringV1.kt | Adds V1 tokenizable-string schema + custom JSON serializer for backward compatibility. |
| infra/events/src/main/java/com/simprints/infra/events/event/cosync/v1/ExternalCredentialV1.kt | Adds V1 external credential schema and mapping to domain. |
| infra/events/src/main/java/com/simprints/infra/events/event/cosync/v1/ExternalCredentialTypeV1.kt | Adds V1 external credential type enum and mappings. |
| infra/events/src/test/java/com/simprints/infra/events/event/cosync/CoSyncEnrolmentRecordEventsVersioningTest.kt | Adds tests for schemaVersion routing and round-trip serialization/deserialization. |
| infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/commcare/CommCareEventDataSource.kt | Updates CommCare parsing to use toDomainEvents() instead of .events. |
| infra/enrolment-records/repository/src/main/java/com/simprints/infra/enrolment/records/repository/commcare/CommCareCandidateRecordDataSource.kt | Updates CommCare parsing to use toDomainEvents() instead of .events. |
| feature/client-api/src/main/java/com/simprints/feature/clientapi/usecases/GetEnrolmentCreationEventForRecordUseCase.kt | Serializes subject-actions using CoSyncEnrolmentRecordEventsV1 and V1 mappings. |
.../events/src/main/java/com/simprints/infra/events/event/cosync/CoSyncEnrolmentRecordEvents.kt
Outdated
Show resolved
Hide resolved
...st/java/com/simprints/infra/events/event/cosync/CoSyncEnrolmentRecordEventsVersioningTest.kt
Outdated
Show resolved
Hide resolved
| /** | ||
| * V1 external schema for tokenizable strings. | ||
| * | ||
| * Stable external contract decoupled from internal [TokenizableString]. |
There was a problem hiding this comment.
The KDoc claims this is a “stable external contract decoupled from internal TokenizableString”, but the serialized discriminator values are still the internal strings (e.g. "TokenizableString.Tokenized"/"TokenizableString.Raw"). Either adjust the documentation to reflect that it intentionally mirrors the internal encoding for compatibility, or change the discriminator values to an explicitly external/stable set (e.g. "TOKENIZED"/"RAW").
| * Stable external contract decoupled from internal [TokenizableString]. | |
| * Stable external contract for serializing tokenizable strings. | |
| * Discriminator values intentionally mirror internal [TokenizableString] class names | |
| * (e.g. "TokenizableString.Tokenized" / "TokenizableString.Raw") for backward compatibility. |
infra/events/src/main/java/com/simprints/infra/events/event/cosync/v1/ExternalCredentialV1.kt
Outdated
Show resolved
Hide resolved
bdde12f to
6227aec
Compare
6227aec to
d9b9511
Compare
...st/java/com/simprints/infra/events/event/cosync/CoSyncEnrolmentRecordEventsVersioningTest.kt
Show resolved
Hide resolved
infra/events/src/main/java/com/simprints/infra/events/event/cosync/v1/BiometricReferenceV1.kt
Outdated
Show resolved
Hide resolved
infra/events/src/main/java/com/simprints/infra/events/event/cosync/v1/SampleIdentifierV1.kt
Outdated
Show resolved
Hide resolved
infra/events/src/main/java/com/simprints/infra/events/event/cosync/v1/BiometricReferenceV1.kt
Outdated
Show resolved
Hide resolved
.../events/src/main/java/com/simprints/infra/events/event/cosync/CoSyncEnrolmentRecordEvents.kt
Show resolved
Hide resolved
d9b9511 to
456f95b
Compare
|


JIRA ticket
Will be released in: 2026.2.0
Design doc
Notable changes
schemaVersionproperty starting with version 1.0 for the current state of affairsschemaVersion(for all data exported so far) will default to 1.0Testing guidance
Additional work checklist