载入中...
搜索中...
未找到
DialoguePayment.cpp
浏览该文件的文档.
15 return eve::Result<std::int64_t>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument,
20 return eve::Result<std::int64_t>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument,
31eve::Result<std::vector<AccountCost>> buildCosts(const DialogueAccountBindings& bindings, const PaymentSpec& payment) {
82 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue money payment must be positive", "money", {}, "dialogue.payment"));
85 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue reputation payment must be positive", "reputation", {}, "dialogue.payment"));
91 return eve::Result<PaymentSpec>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument,
125eve::Result<void> DialogueStateMutationParticipant::prepare(const eve::transaction::TransactionContext& context) {
128 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue state transaction requires a transaction id", "transactionId", {}, "dialogue.payment"));
130 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "dialogue state participant is not idle", "transaction.lifecycle", {}, "dialogue.payment"));
135eve::Result<void> DialogueStateMutationParticipant::commit(const eve::transaction::TransactionContext& context) {
137 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "dialogue state participant has no prepared stage", "transaction.lifecycle", {}, "dialogue.payment"));
139 mutations_, eve::MutationContext{context.transactionId(), context.correlationId(), context.causationId()});
146eve::Result<void> DialogueStateMutationParticipant::rollback(const eve::transaction::TransactionContext&) {
149 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "dialogue state participant has no prepared stage to roll back", "transaction.lifecycle", {}, "dialogue.payment"));
154eve::Result<void> DialogueStateMutationParticipant::compensate(const eve::transaction::TransactionContext&) {
156 eve::Diagnostic::error(eve::DiagnosticCode::Unsupported, "dialogue state mutation has no generic inverse; it must be last", "transaction.compensation", {}, "dialogue.payment"));
159DialoguePaymentAdapter::DialoguePaymentAdapter(DialogueAccountBindings bindings) : bindings_(std::move(bindings)) {}
161void DialoguePaymentAdapter::setBindings(DialogueAccountBindings bindings) { bindings_ = std::move(bindings); }
168 eve::DiagnosticCode::InvalidArgument, "dialogue payment transaction id must not be empty", "transactionId",
174 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue payment effect must not be null",
179 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "dialogue payment effects must be unique",
201 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue payment has no account or effect",
205 return coordinator.execute(eve::transaction::TransactionContext(std::move(transactionId)), participants);
Dialogue payment specifications and transaction composition.
Transaction participant for an atomic resource debit.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
Value * find(const std::string &key) noexcept
Return an object member, or nullptr when absent.
Definition Value.cpp:124
DialoguePaymentAdapter(DialogueAccountBindings bindings={})
Construct an adapter with borrowed account bindings.
Definition DialoguePayment.cpp:159
void setBindings(DialogueAccountBindings bindings)
Replace borrowed account bindings; no balance is copied.
Definition DialoguePayment.cpp:161
const DialogueAccountBindings & bindings() const noexcept
Return the current borrowed bindings for diagnostics.
Definition DialoguePayment.h:138
eve::Result< eve::transaction::TransactionReceipt > executeStateMutation(std::string transactionId, const PaymentSpec &payment, eve::IStateMutation &provider, std::span< const eve::StateMutation > mutations) const
Execute a payment together with one StatePatch-compatible mutation set.
Definition DialoguePayment.cpp:208
eve::Result< eve::transaction::TransactionReceipt > execute(std::string transactionId, const PaymentSpec &payment, std::span< eve::transaction::ITransactionParticipant * > effects) const
Execute a payment and zero or more staged domain effects atomically.
Definition DialoguePayment.cpp:163
Transaction participant that delegates an atomic state mutation.
Definition DialoguePayment.h:81
eve::Result< void > compensate(const eve::transaction::TransactionContext &context) override
Undo an already committed external effect by compensation.
Definition DialoguePayment.cpp:154
eve::Result< void > commit(const eve::transaction::TransactionContext &context) override
Publish this participant's staged changes.
Definition DialoguePayment.cpp:135
eve::Result< void > rollback(const eve::transaction::TransactionContext &context) override
Discard a prepared but not committed stage.
Definition DialoguePayment.cpp:146
eve::Result< void > prepare(const eve::transaction::TransactionContext &context) override
Validate and stage local changes for the transaction.
Definition DialoguePayment.cpp:125
DialogueStateMutationParticipant(eve::IStateMutation &provider, std::span< const eve::StateMutation > mutations)
Bind a copied mutation set to one borrowed mutation provider.
Definition DialoguePayment.cpp:121
static eve::Result< CostSpec > create(std::vector< ResourceCost > items)
Validate and canonicalize resource items.
Definition ResourceAccount.cpp:74
Provider-neutral resource account contract.
Definition ResourceAccount.h:316
All-or-nothing mutation boundary owned by the consumer.
Definition StateAccess.h:107
virtual eve::Result< MutationReceipt > apply(std::span< const StateMutation > mutations, const MutationContext &context)=0
Apply a complete mutation set atomically.
Coordinates participant lifecycles with deterministic ordering.
Definition Transaction.h:178
Result< TransactionReceipt > execute(const TransactionContext &context, std::span< ITransactionParticipant * > participants) const
Atomically execute borrowed participants for one context.
Definition Transaction.cpp:176
Immutable context shared by every participant of one transaction.
Definition Transaction.h:30
Definition ConversationAuthoring.cpp:12
@ InvalidArgument
@ Unsupported
@ Conflict
@ Applied
Definition Container.h:602
Borrowed account bindings used by one DialogueFlow integration.
Definition DialoguePayment.h:61
Canonical money/reputation cost attached to a dialogue choice or command.
Definition DialoguePayment.h:36
std::optional< std::int64_t > money
Optional money amount, in the configured money resource.
Definition DialoguePayment.h:38
eve::Result< void > validate() const
Validate that every present amount is a positive integer.
Definition DialoguePayment.cpp:79
eve::Value toValue() const
Project this payment into a deterministic canonical Value object.
Definition DialoguePayment.cpp:114
static eve::Result< PaymentSpec > fromValue(const eve::Value &value)
Parse { "money": n, "reputation": n } from canonical Value.
Definition DialoguePayment.cpp:89
std::optional< std::int64_t > reputation
Optional reputation amount, in the configured reputation resource.
Definition DialoguePayment.h:40
static eve::Result< ResourceCost > create(std::string_view resourceId, std::int64_t amountValue)
Construct and validate one cost item.
Definition ResourceAccount.cpp:63
Correlation metadata shared by a mutation transaction.
Definition StateAccess.h:57