Можем ли мы проверить двойное создание государства в Корде? - PullRequest
0 голосов
/ 10 мая 2019

В моем случае использования у меня есть учащийся, записывающийся в определенную программу, которая, в свою очередь, создает состояние учащегося в бухгалтерской книге.

Теперь, если один и тот же студент зачисляется снова с теми же учетными данными, я хочу избежатьэто и выдает какое-то исключение или сообщение.

Одно решение, о котором я могу подумать, это то, что я могу запросить хранилище перед созданием состояния ученика, и если этот ученик не найден в бухгалтерской книге, ему разрешено записаться только ему..

Но это кажется смутной идеей.Может кто-нибудь предложить лучший подход или каким-то другим способом, о котором я не знаю?

1 Ответ

1 голос
/ 24 мая 2019

Вы должны реализовать схему для своего состояния, как в этом примере:

class CashState(
        val owner: AbstractParty,
        val pennies: Long) : ContractState, QueryableState {
    override val participants get() = listOf(owner)

    override fun generateMappedObject(schema: MappedSchema): PersistentState {
        return when (schema) {
            is CashSchemaV1 -> CashSchemaV1.PersistentCashState(
                    this.owner,
                    this.pennies
            )
            else -> throw IllegalArgumentException("Unrecognised schema $schema")
        }
    }

    override fun supportedSchemas(): Iterable<MappedSchema> = listOf(CashSchemaV1)
}

Сама схема:

object CashSchema

@CordaSerializable
object CashSchemaV1 : MappedSchema(schemaFamily = CashSchema.javaClass, version = 1, mappedTypes = listOf(PersistentCashState::class.java)) {

    @Entity
    @Table(name = "contract_cash_states")
    class PersistentCashState(
            @Column(name = "owner_name", unique=true, nullable = true)
            var owner: AbstractParty?,

            @Column(name = "pennies", nullable = false)
            var pennies: Long

            ) : PersistentState()
}

Ключевой момент заключается в том, чтобы сделать столбцы уникальными, поэтому, когда выдобавить дублирующее значение, исключение выдается.

документы

...