2026-08-12 22:55:36 +02:00
|
|
|
//! Plain NATS publish of every submission/decision - fire and forget,
|
|
|
|
|
//! no stream bookkeeping. The n8n automations subscribe to
|
|
|
|
|
//! `portal.answers.submitted` and gate on `question_id`/`alternative`.
|
2026-07-29 19:38:40 +02:00
|
|
|
#![cfg(feature = "ssr")]
|
|
|
|
|
|
2026-08-06 08:52:29 +02:00
|
|
|
pub mod store;
|
|
|
|
|
|
2026-07-29 19:38:40 +02:00
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
|
|
|
|
pub struct AnswerSubmitted {
|
|
|
|
|
pub chain_hash: String,
|
|
|
|
|
pub parent_hashes: Vec<String>,
|
|
|
|
|
pub question_id: String,
|
|
|
|
|
pub alternative: String,
|
|
|
|
|
pub responses: serde_json::Value,
|
|
|
|
|
pub timestamp_ms: i64,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub const ANSWERS_SUBJECT: &str = "portal.answers.submitted";
|
|
|
|
|
|
|
|
|
|
pub async fn emit_answer_submitted(
|
|
|
|
|
nats: &async_nats::Client,
|
|
|
|
|
payload: &AnswerSubmitted,
|
|
|
|
|
) -> anyhow::Result<()> {
|
|
|
|
|
let data = serde_json::to_vec(payload)?;
|
|
|
|
|
nats.publish(ANSWERS_SUBJECT, data.into()).await?;
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|