Skip to content

Instantly share code, notes, and snippets.

@wplong11
Last active March 16, 2022 14:42
Show Gist options
  • Save wplong11/6d1d1fc0faf4c5784cd93bf62cdda414 to your computer and use it in GitHub Desktop.
Save wplong11/6d1d1fc0faf4c5784cd93bf62cdda414 to your computer and use it in GitHub Desktop.
QueryDSL.kt
fun anyOf(
items: Collection<Predicate>,
): BooleanBuilder = BooleanBuilder().andAnyOf(*items.toTypedArray())
fun anyOf(
vararg args: Predicate?,
): BooleanBuilder = andAnyOf(args.filterNotNull())
fun allOf(
items: Collection<Predicate>,
): BooleanBuilder = BooleanBuilder().and(
items.fold(
initial = BooleanBuilder(),
operation = BooleanBuilder::and::invoke,
)
)
fun allOf(
vararg args: Predicate?,
): BooleanBuilder = andAllOf(args.filterNotNull())
@wplong11
Copy link
Author

wplong11 commented Mar 16, 2022

example:

object PackageCriteriaTranslator {
    private val entity = QPackage.`package$`

    fun translate(criteria: PackageCriteria): BooleanBuilder =
        anyOf(
            criteria.conditions.map { condition ->
                allOf(
                    condition.packageCodes?.let {
                        entity.packageCode.`in`(it)
                    },
                    condition.packagePlanCodes?.let {
                        entity.packagePlanCode.`in`(it)
                    },
                    condition.departurePeriod?.let {
                        allOf(
                            entity.itinerarySummary.departureLocalDateTime.goe(it.startDateTime),
                            entity.itinerarySummary.departureLocalDateTime.loe(it.endDateTime),
                        )
                    },
                    condition.packageKinds?.let {
                        entity.kind.`in`(it)
                    },
                )
            }
        )
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment