use nodedb_types::Surrogate;
use nodedb_types::geometry::Geometry;
use nodedb_types::sync::wire::SyncProvenance;
use crate::types::{DatabaseId, TenantId, VShardId};
use crate::wal::manager::WalManager;
pub(crate) fn encode_spatial_put_payload(
collection: &str,
field: &str,
surrogate: Surrogate,
geometry: &Geometry,
provenance: &SyncProvenance,
) -> crate::Result<nodedb_wal::record::SpatialPutPayload> {
let doc_id = crate::engine::document::store::surrogate_to_doc_id(surrogate);
let geometry_bytes =
zerompk::to_msgpack_vec(geometry).map_err(|e| crate::Error::Serialization {
format: "msgpack".into(),
detail: format!("spatial put: encode geometry for WAL: {e}"),
})?;
Ok(nodedb_wal::record::SpatialPutPayload::new(
provenance.clone(),
collection,
field,
doc_id,
geometry_bytes,
))
}
pub(crate) fn encode_spatial_delete_payload(
collection: &str,
field: &str,
surrogate: Surrogate,
provenance: &SyncProvenance,
) -> nodedb_wal::record::SpatialDeletePayload {
let doc_id = crate::engine::document::store::surrogate_to_doc_id(surrogate);
nodedb_wal::record::SpatialDeletePayload::new(provenance.clone(), collection, field, doc_id)
}
pub fn wal_append_fts_index(
wal: &WalManager,
tenant_id: TenantId,
vshard_id: VShardId,
database_id: DatabaseId,
payload: &nodedb_wal::record::FtsIndexPayload,
) -> crate::Result<nodedb_types::Lsn> {
let bytes = payload.to_bytes().map_err(crate::Error::Wal)?;
let lsn = wal.append_fts_index(tenant_id, vshard_id, database_id, &bytes)?;
Ok(lsn)
}
pub fn wal_append_fts_delete(
wal: &WalManager,
tenant_id: TenantId,
vshard_id: VShardId,
database_id: DatabaseId,
payload: &nodedb_wal::record::FtsDeletePayload,
) -> crate::Result<nodedb_types::Lsn> {
let bytes = payload.to_bytes().map_err(crate::Error::Wal)?;
let lsn = wal.append_fts_delete(tenant_id, vshard_id, database_id, &bytes)?;
Ok(lsn)
}
pub fn wal_append_spatial_put(
wal: &WalManager,
tenant_id: TenantId,
vshard_id: VShardId,
database_id: DatabaseId,
payload: &nodedb_wal::record::SpatialPutPayload,
) -> crate::Result<nodedb_types::Lsn> {
let bytes = payload.to_bytes().map_err(crate::Error::Wal)?;
let lsn = wal.append_spatial_put(tenant_id, vshard_id, database_id, &bytes)?;
Ok(lsn)
}
pub fn wal_append_spatial_delete(
wal: &WalManager,
tenant_id: TenantId,
vshard_id: VShardId,
database_id: DatabaseId,
payload: &nodedb_wal::record::SpatialDeletePayload,
) -> crate::Result<nodedb_types::Lsn> {
let bytes = payload.to_bytes().map_err(crate::Error::Wal)?;
let lsn = wal.append_spatial_delete(tenant_id, vshard_id, database_id, &bytes)?;
Ok(lsn)
}