use axum::http::StatusCode;
use tracing::info;
use vti_common::audit::{AuditEvent, CommunityJoinDiscoveryUpdatedData};
use vti_common::error::AppError;
use crate::community::join_discovery::{JoinDiscovery, load_join_discovery, store_join_discovery};
use crate::server::AppState;
pub(crate) async fn show_join_discovery(state: &AppState) -> Result<JoinDiscovery, AppError> {
load_join_discovery(&state.community_ks).await
}
pub(crate) async fn update_join_discovery(
state: &AppState,
actor: &str,
body: &JoinDiscovery,
) -> Result<JoinDiscovery, AppError> {
let writer = state
.audit_writer
.as_ref()
.ok_or_else(|| AppError::ServiceError {
status: StatusCode::SERVICE_UNAVAILABLE,
message: "audit writer not configured".into(),
})?;
let before = load_join_discovery(&state.community_ks).await?;
let stored = store_join_discovery(&state.community_ks, body).await?;
if before != stored {
writer
.write(
actor,
None,
AuditEvent::CommunityJoinDiscoveryUpdated(CommunityJoinDiscoveryUpdatedData {
public: stored.public,
}),
)
.await?;
info!(public = stored.public, "community join discovery updated");
}
Ok(stored)
}