2026-07-29 19:38:40 +02:00
|
|
|
//! Plain NATS event publishing - ported from dodrenett's lib/nats.ts
|
|
|
|
|
//! (AnswerSubmitted). Deliberately just a publish, no stream/consumer
|
|
|
|
|
//! bookkeeping here: whoever reads `portal.answers.submitted` today is a
|
|
|
|
|
//! person watching the subject; a future LLM-driven follow-up poster
|
|
|
|
|
//! reads the exact same subject and shape, so this doesn't need to
|
|
|
|
|
//! change shape when that shows up, only gain a second subscriber.
|
|
|
|
|
#![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(())
|
|
|
|
|
}
|