Files
khadhroony-bot3/kb-store/USAGE.md
2026-07-31 13:25:26 +02:00

89 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- file: kb-store/USAGE.md -->
<!-- version: 2 -->
# Utilisation de kb-store
## Connexion PostgreSQL
```rust
let options = match kb_store::PostgresStoreOptions::new(
database_url,
"public".to_string(),
10,
std::time::Duration::from_secs(10),
) {
Ok(value) => value,
Err(error) => return Err(error),
};
let store = match kb_store::PostgresStore::connect(options).await {
Ok(value) => value,
Err(error) => return Err(error),
};
if let Err(error) = store.initialize_store_schema().await {
return Err(error);
}
```
`PostgresStoreOptions::new` valide le DSN, le schéma, le nombre de connexions et le timeout. Utiliser `masked_dsn` ou `mask_postgres_dsn` dans les logs ; ne jamais journaliser le DSN brut.
## Diagnostics
```rust
let health = store.health_snapshot().await;
let migrations = store.migration_snapshot().await;
let backend = store.backend_diagnostics().await;
```
Les diagnostics de tables raw, Core et decode/materialization sont également disponibles par les méthodes `*_table_diagnostics`.
## Contrats de repositories
Les traits publics principaux sont :
- `StoreHealthStore` ;
- `RawTransactionStore` ;
- `CoreTransactionStore` ;
- `CoreExtractionStore` ;
- `DecodePipelineStore` ;
- `ProgramObservationStore` ;
- `DecodedEventStore` ;
- `MaterializedEventStore` ;
- `ProcessingLedgerStore`.
Ils permettent au pipeline de dépendre dun contrat async plutôt que dune requête SQL directe.
## Replay et requêtes bornées
```rust
let candidates = store.replay_transaction_candidates(filter).await;
let programs = store.replay_program_summaries(program_filter).await;
let entities = store.replay_entity_summaries(entity_filter).await;
```
Les filtres refusent les limites nulles ou supérieures aux bornes publiques. `PageRequest` impose également `DEFAULT_PAGE_SIZE` et `MAX_PAGE_SIZE`.
## Transactions atomiques
Les bundles `CoreExtractionBundle`, `DecodePersistenceBundle` et `MaterializationPersistenceBundle` regroupent les écritures qui doivent réussir ou être annulées ensemble. Les consommateurs ne doivent pas reproduire manuellement ces transactions avec des écritures isolées.
## Schéma et tables
Les constantes `RAW_STORE_TABLE_NAMES`, `CORE_STORE_TABLE_NAMES` et `DECODE_STORE_TABLE_NAMES` exposent les noms canoniques. Les fonctions `validate_*_table_names` et `is_valid_solana_table_name` servent aux audits et outils dadministration.
## Erreurs et invariants
Toutes les APIs utilisent `kb_core::Result`. Les DTO valident notamment les signatures, chemins, Program IDs, clés, montants, états de traitement et identités de ledger. Les erreurs de contrat peuvent être construites avec `storage_contract_error`.
## Tests instructifs
- les tests `*_rejects_*` documentent les invariants des DTO et filtres ;
- `decoded_events_and_ledger_roll_back_together` vérifie latomicité ;
- `optional_postgres_*_from_env` couvre les parcours réels lorsque lenvironnement PostgreSQL est configuré ;
- les tests de schéma vérifient les noms, index, contraintes et migrations.
## Limites
- backend actif : PostgreSQL ;
- les tests réels sont optionnels sans DSN de test ;
- la crate ne prend aucune décision de décodage ou de matérialisation.