kaccy-db
Comprehensive database layer for Kaccy Protocol with enterprise-grade features.
Version: 0.2.0 | Tests: 520 passing
Overview
This crate provides a complete PostgreSQL database solution with:
- Connection pooling with autoscaling, retry logic, and health monitoring
- Repository pattern for all domain entities (15 repositories)
- Redis caching layer with rate limiting and distributed locks
- Multi-tier cache (DashMap + Redis) for hot-path acceleration
- Read replica support with automatic query routing, load balancing, and failover
- Database sharding with consistent hashing
- Multi-region replication with automatic failover and proximity routing
- TimescaleDB integration for time-series analytics
- Query performance monitoring, index analysis, and cursor pagination
- Query streaming and dynamic query builder
- Transaction management with savepoints
- Comprehensive audit logging with OpenTelemetry and Prometheus
- AES-256-GCM encryption and Argon2 password hashing
- Input sanitization (regex-based)
- Backup/recovery automation with PITR support
- Database partitioning support
Core Modules
Connection Management
pool- Connection pool with retry logic and health checksreplica- Read replica management with load balancing strategiesmulti_region- Geographic replication with proximity-based routingsharding- Database sharding with consistent hashing
Repositories
All repositories provide type-safe, async database operations:
UserRepository- User accounts, profiles, KYC, reputationTokenRepository- Personal tokens with bonding curvesBalanceRepository- Token balances with locking supportOrderRepository- Buy/sell orders with BTC integrationTradeRepository- Trade execution and analyticsReputationEventRepository- Reputation scoring and historyCommitmentRepository- User commitments with deadlinesAuditRepository- Compliance reporting and audit logsApiKeyRepository- API key lifecycle managementApiKeyUsageRepository- Per-key usage trackingAuditEventRepository- Structured audit event recordsSessionRepository- User session managementBackgroundJobRepository- Async job queue persistenceNotificationPreferencesRepository- Per-user notification settingsSystemConfigRepository- Dynamic system configuration
Performance & Analytics
cache- Multi-tier caching (DashMap + Redis) with rate limiting and distributed locksquery_logger- Query performance monitoring and slow query detectionquery_stream- Streaming result sets for large query outputquery_builder- Dynamic, composable query constructioncursor_pagination- Cursor-based pagination for stable result setsindex_analyzer- Index optimization recommendationsanalytics- TimescaleDB integration with materialized views for dashboardspartitioning- Table partitioning strategies
Security
encryption- AES-256-GCM field-level encryptionpassword- Argon2 password hashing and verificationsanitization- Input sanitization using regex-based validationaudit_logging- Structured audit trails with OpenTelemetry and Prometheus
Operations
backup- Automated backups with pg_dump/restore and PITRtransaction- Transaction management with isolation levels and savepoints
Quick Start
use ;
async
Advanced Features
Redis Caching
use ;
let cache_config = default;
let cache = connect.await?;
// Cache user sessions
cache.set_session.await?;
// Rate limiting
let allowed = cache.check_rate_limit.await?;
Read Replicas
use ;
let manager = new.await?;
let client = new.build;
// Automatically routes SELECTs to replicas, writes to primary
Database Sharding
use ;
let shard_manager = new.await?;
// Route queries to appropriate shard
let user = shard_manager.execute_on_shard.await?;
Analytics & Time-Series
use AnalyticsService;
let analytics = new;
// Get dashboard metrics from materialized views
let metrics = analytics.get_dashboard_metrics.await?;
// Query time-series data (requires TimescaleDB)
let prices = analytics.get_price_history.await?;
Configuration
Environment variables:
DATABASE_URL- PostgreSQL connection stringREDIS_URL- Redis connection string (optional)
Architecture
kaccy-db/
├── src/
│ ├── lib.rs # Public API
│ ├── pool.rs # Connection pooling with autoscaling
│ ├── cache.rs # Multi-tier cache (DashMap + Redis)
│ ├── replica.rs # Read replicas with load balancing
│ ├── sharding.rs # Consistent-hash sharding
│ ├── multi_region.rs # Geographic replication & failover
│ ├── partitioning.rs # Table partitioning
│ ├── analytics.rs # TimescaleDB & materialized views
│ ├── query_logger.rs # Performance monitoring
│ ├── query_stream.rs # Streaming query results
│ ├── query_builder.rs # Dynamic query construction
│ ├── cursor_pagination.rs # Cursor-based pagination
│ ├── index_analyzer.rs # Index optimization
│ ├── backup.rs # Backup/recovery & PITR
│ ├── transaction.rs # Transaction management
│ ├── encryption.rs # AES-256-GCM encryption
│ ├── password.rs # Argon2 hashing
│ ├── sanitization.rs # Input sanitization
│ ├── audit_logging.rs # Audit trails & observability
│ ├── error.rs # Error types
│ └── repositories/
│ ├── user.rs
│ ├── token.rs
│ ├── balance.rs
│ ├── order.rs
│ ├── trade.rs
│ ├── reputation_event.rs
│ ├── commitment.rs
│ ├── audit.rs
│ ├── api_key.rs
│ ├── api_key_usage.rs
│ ├── audit_event.rs
│ ├── session.rs
│ ├── background_job.rs
│ ├── notification_preferences.rs
│ └── system_config.rs
├── migrations/ # SQL migrations
└── Cargo.toml
Dependencies
sqlx- Async SQL with compile-time checkingredis- Async Redis clienttokio- Async runtimeserde- Serializationchrono- Date/time handlinguuid- UUID supportrust_decimal- Decimal arithmetic
Database Schema
See migrations/ directory for the current schema. Key tables:
users- User accounts with DID, KYC status, reputationtokens- Personal tokens with bonding curve parametersbalances- User token balancesorders- Buy/sell orders with BTC payment infotrades- Executed trade recordsreputation_events- Reputation score changesoutput_commitments- User commitments with deadlines
Testing
The crate ships with 520 passing tests covering all repositories, connection management, caching, sharding, encryption, and observability.
# Run with test database
DATABASE_URL=postgresql://test@localhost/kaccy_test
# Run with nextest
DATABASE_URL=postgresql://test@localhost/kaccy_test
# Run migrations