envelope_cli/audit/mod.rs
1//! Audit logging system for EnvelopeCLI
2//!
3//! Records all create, update, delete operations with before/after values
4//! in an append-only audit log.
5//!
6//! # Architecture
7//!
8//! The audit system consists of three components:
9//!
10//! - `AuditEntry`: Represents a single audit log entry with timestamp, operation,
11//! entity information, and optional before/after values.
12//! - `AuditLogger`: Handles writing entries to the audit log file using a
13//! line-delimited JSON format (JSONL).
14//! - `generate_diff`: Utility function to create human-readable diffs between
15//! entity states.
16//!
17//! # Example
18//!
19//! ```rust,ignore
20//! use envelope::audit::{AuditEntry, AuditLogger, EntityType, generate_diff};
21//! use serde_json::json;
22//!
23//! let logger = AuditLogger::new(audit_log_path);
24//!
25//! // Log a create operation
26//! let entry = AuditEntry::create(
27//! EntityType::Account,
28//! "acc-12345678",
29//! Some("Checking".to_string()),
30//! &account,
31//! );
32//! logger.log(&entry)?;
33//!
34//! // Log an update with diff
35//! let diff = generate_diff(&before_json, &after_json);
36//! let entry = AuditEntry::update(
37//! EntityType::Account,
38//! "acc-12345678",
39//! Some("Checking".to_string()),
40//! &before,
41//! &after,
42//! diff,
43//! );
44//! logger.log(&entry)?;
45//! ```
46
47mod diff;
48mod entry;
49mod logger;
50
51pub use diff::{generate_detailed_diff, generate_diff};
52pub use entry::{AuditEntry, EntityType, Operation};
53pub use logger::AuditLogger;