Skip to content

Commit

Permalink
Use jooq batch queries
Browse files Browse the repository at this point in the history
  • Loading branch information
mattupstate committed Dec 8, 2023
1 parent 04c1b16 commit 92cbb9f
Showing 1 changed file with 23 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,18 @@ suspend fun onPractitionerCreated(event: PractitionerCreatedEvent, uow: Scheduli
with(uow.dsl) {
val practitioner = event.practitioner

insertInto(
val insertResult = insertInto(
PRACTITIONERS,
PRACTITIONERS.ID,
PRACTITIONERS.GENDER
).values(
practitioner.id.value,
practitioner.gender.toString()
).returningResult(PRACTITIONERS.ID).awaitFirst()
).returningResult(PRACTITIONERS.ID)
.awaitFirst()

practitioner.names.map {
val batchQueries = practitioner.names.map {
val (start, end) = it.period.getTimeValues()

insertInto(
PRACTITIONER_NAMES,
PRACTITIONER_NAMES.PRACTITIONER_ID,
Expand All @@ -50,83 +50,80 @@ suspend fun onPractitionerCreated(event: PractitionerCreatedEvent, uow: Scheduli
PRACTITIONER_NAMES.PERIOD_START,
PRACTITIONER_NAMES.PERIOD_END
).values(
practitioner.id.value,
insertResult[PRACTITIONERS.ID],
it.given.value,
it.family.value,
it.suffix.value,
it.prefix.value,
start,
end,
)
}.forEach {
it.returning().awaitFirst()
}

practitioner.contactPoints.map {
} + practitioner.contactPoints.map {
insertInto(
PRACTITIONER_CONTACT_POINTS,
PRACTITIONER_CONTACT_POINTS.PRACTITIONER_ID,
PRACTITIONER_CONTACT_POINTS.VALUE,
PRACTITIONER_CONTACT_POINTS.SYSTEM,
PRACTITIONER_CONTACT_POINTS.VERIFIED_AT,
).values(
practitioner.id.value,
insertResult[PRACTITIONERS.ID],
it.value,
it.toSystemString(),
it.getVerifiedAtValue()
)
}.forEach {
it.returning().awaitFirst()
}

batch(batchQueries).awaitFirst()
}
}

suspend fun onPracticeCreated(event: PracticeCreatedEvent, uow: SchedulingJooqUnitOfWork) {
with(uow.dsl) {
val practice = event.practice

insertInto(
val insertResult = insertInto(
PRACTICES,
PRACTICES.ID,
PRACTICES.NAME
).values(
practice.id.value,
practice.name.value
).returning().awaitFirst()
).returning(PRACTICES.ID)
.awaitFirst()

practice.contactPoints.map {
val batchQueries = practice.contactPoints.map {
insertInto(
PRACTICE_CONTACT_POINTS,
PRACTICE_CONTACT_POINTS.PRACTICE_ID,
PRACTICE_CONTACT_POINTS.VALUE,
PRACTICE_CONTACT_POINTS.SYSTEM,
PRACTICE_CONTACT_POINTS.VERIFIED_AT,
).values(
practice.id.value,
insertResult[PRACTICES.ID],
it.value,
it.toSystemString(),
it.getVerifiedAtValue(),
)
}.forEach {
it.returning().awaitFirst()
}

batch(batchQueries).awaitFirst()
}
}

suspend fun onClientCreated(event: ClientCreatedEvent, uow: SchedulingJooqUnitOfWork) {
with(uow.dsl) {
val client = event.client

insertInto(
val insertResult = insertInto(
CLIENTS,
CLIENTS.ID,
CLIENTS.GENDER
).values(
client.id.value,
client.gender.toString()
).returning().awaitFirst()
).returning(CLIENTS.ID).awaitFirst()

client.names.map {
val batchQueries = client.names.map {
val (start, end) = it.period.getTimeValues()

insertInto(
Expand All @@ -139,19 +136,15 @@ suspend fun onClientCreated(event: ClientCreatedEvent, uow: SchedulingJooqUnitOf
CLIENT_NAMES.PERIOD_START,
CLIENT_NAMES.PERIOD_END
).values(
client.id.value,
insertResult[CLIENTS.ID],
it.given.value,
it.family.value,
it.suffix.value,
it.prefix.value,
start,
end,
)
}.forEach {
it.returning().awaitFirst()
}

client.contactPoints.map {
} + client.contactPoints.map {
insertInto(
CLIENT_CONTACT_POINTS,
CLIENT_CONTACT_POINTS.CLIENT_ID,
Expand All @@ -164,9 +157,9 @@ suspend fun onClientCreated(event: ClientCreatedEvent, uow: SchedulingJooqUnitOf
it.toSystemString(),
it.getVerifiedAtValue(),
)
}.forEach {
it.returning().awaitFirst()
}

batch(batchQueries).awaitFirst()
}
}

Expand Down

0 comments on commit 92cbb9f

Please sign in to comment.