All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.provenance.p8e.shared.extension.ProtoExtension.kt Maven / Gradle / Ivy

package io.provenance.p8e.shared.extension

import com.google.protobuf.Timestamp
import io.p8e.proto.Affiliate
import io.p8e.proto.ContractScope
import io.p8e.proto.Contracts
import io.p8e.util.toOffsetDateTimeProv
import io.p8e.util.toProtoUuidProv
import java.time.OffsetDateTime
import java.util.*

/**
 * Determine if a contract whitelist object is active.
 */
fun Affiliate.AffiliateContractWhitelist.isActive() = OffsetDateTime.now().let { now ->
    !startTime.toOffsetDateTimeProv().isAfter(now) &&
            (!hasEndTime() || endTime.toOffsetDateTimeProv().isAfter(now))
}

/**
 * Find all the record groups by group id.
 *
 * @param [groupUuid] Group identifier to filter by
 */
fun ContractScope.Scope.filterByGroup(groupUuid: UUID): List = recordGroupList.filter { it.groupUuid == groupUuid.toProtoUuidProv() }

/**
 * Get all the consideration that are still pending/not complete.
 */
fun ContractScope.Envelope.Builder.pendingConsiderationBuilders(): List = contractBuilder.considerationsBuilderList
    .filter { it.result != Contracts.ExecutionResult.getDefaultInstance() && it.result.recordedAt == Timestamp.getDefaultInstance() }

/**
 * Record consideration protos with scope group results.
 *
 * @param [recordGroups] Groups to merge with considerations
 */
fun List.record(recordGroups: List) {
    val records = recordGroups.flatMap { it.recordsList.map { record -> Pair(record, it.audit.updatedDate) } }

    forEach { builder ->
        records.firstOrNull { (record, _) ->
            record.resultName == builder.result.output.name &&
            record.hash == builder.result.output.hash &&
            record.classname == builder.result.output.classname &&
            record.name == builder.considerationName
        }
            ?.let { builder.resultBuilder.recordedAt = it.second }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy