Skip to main content

VN Market Assets Synchronization

Overview​

The VN Market Assets Synchronization system provides comprehensive market data integration for Vietnamese financial instruments. This feature enables WealthVN to automatically fetch, cache, and synchronize asset information from multiple Vietnamese market data providers.

Architecture​

Data Providers​

The system integrates with two primary Vietnamese market data providers:

  1. VCI (Vietnam Capital Investments)

    • Provides stocks and indices data
    • Real-time market information
    • Comprehensive symbol listings
  2. FMarket

    • Provides mutual funds data
    • Fund performance and pricing information
    • NAV (Net Asset Value) calculations

Core Components​

1. Asset Models (src-core/src/vn_market/assets_model.rs)​

pub struct VnAsset {
pub id: String,
pub symbol: String,
pub name: String,
pub asset_type: String,
pub exchange: String,
pub currency: String,
pub created_at: String,
pub updated_at: String,
}

2. Synchronization Service (src-core/src/vn_market/assets_sync_service.rs)​

The VnAssetsSyncService handles:

  • Fetching assets from multiple providers
  • Data normalization and validation
  • Bulk database operations
  • Sync metadata tracking

3. Repository Layer (src-core/src/vn_market/assets_repository.rs)​

Provides database operations for:

  • Asset CRUD operations
  • Bulk upsert operations
  • Query optimization

Database Schema​

vn_assets Table​

ColumnTypeDescription
idTEXTPrimary key (symbol-timestamp)
symbolTEXTTrading symbol
nameTEXTFull asset name
asset_typeTEXTStock, Index, or Fund
exchangeTEXTExchange identifier
currencyTEXTTrading currency (VND)
created_atTEXTCreation timestamp
updated_atTEXTLast update timestamp

vn_assets_sync Table​

Tracks synchronization metadata:

  • Last sync timestamp
  • Sync count
  • Error tracking

Usage​

Manual Synchronization​

// Trigger sync from frontend
import { syncVnAssets } from "@/commands/settings";

await syncVnAssets();

Automatic Synchronization​

The system supports automatic sync scheduling:

  • Configurable sync intervals
  • Error retry mechanisms
  • Background processing

Asset Types Supported​

  1. Stocks: Vietnamese company stocks
  2. Indices: Market indices (VN30, HNX30, etc.)
  3. Funds: Mutual funds and ETFs

Configuration​

Environment Variables​

# VCI API Configuration
VCI_API_BASE_URL=https://api.vci.vn
VCI_API_KEY=your_api_key

# FMarket Configuration
FMARKET_API_BASE_URL=https://fmarket.vn
FMARKET_API_KEY=your_api_key

Sync Settings​

interface VnMarketSettings {
autoSync: boolean;
syncInterval: number; // minutes
enableStocks: boolean;
enableIndices: boolean;
enableFunds: boolean;
}

API Integration​

VCI Client​

pub struct VciClient;

impl VciClient {
pub async fn get_all_symbols(&self) -> Result<Vec<VciSymbol>>;
pub async fn get_market_data(&self, symbol: &str) -> Result<MarketData>;
}

FMarket Client​

pub struct FMarketClient;

impl FMarketClient {
pub async fn get_funds_listing(&self) -> Result<Vec<Fund>>;
pub async fn get_fund_nav(&self, fund_id: &str) -> Result<NavData>;
}

Performance Considerations​

Caching Strategy​

  • Local SQLite cache for fast lookups
  • Configurable cache TTL
  • Incremental sync updates

Bulk Operations​

  • Batch database inserts
  • Transaction management
  • Error recovery mechanisms

Rate Limiting​

  • Provider API rate limits
  • Exponential backoff retry
  • Concurrent request management

Error Handling​

Common Error Scenarios​

  1. API Unavailability

    • Automatic retry with exponential backoff
    • Fallback to cached data
    • User notification system
  2. Data Validation Errors

    • Schema validation
    • Data sanitization
    • Error logging and monitoring
  3. Database Connection Issues

    • Connection pooling
    • Transaction rollback
    • Data consistency checks

Monitoring and Logging​

Sync Metrics​

  • Total assets synced
  • Sync duration
  • Error rates
  • Provider-specific statistics

Log Levels​

// Information logging
info!("Starting VN assets sync from VCI and FMarket...");

// Debug logging
debug!("Inserted {} stocks/indices", count);

// Warning logging
warn!("Failed to sync stocks: {}", e);

Frontend Integration​

Settings UI​

The market data settings page allows users to:

  • Configure sync preferences
  • View sync status
  • Manual sync triggers
  • Provider-specific settings

Data Display​

  • Asset search and selection
  • Real-time price updates
  • Historical data visualization

Testing​

Unit Tests​

#[cfg(test)]
mod tests {
use super::*;

#[tokio::test]
async fn test_vn_asset_creation() {
let asset = NewVnAsset::new(
"VNM".to_string(),
"Vingroup Joint Stock Company".to_string(),
"Stock".to_string(),
"HOSE".to_string(),
);

assert_eq!(asset.symbol, "VNM");
assert_eq!(asset.currency, "VND");
}
}

Integration Tests​

  • End-to-end sync workflows
  • API client mocking
  • Database transaction testing

Future Enhancements​

Planned Features​

  1. Real-time Streaming: WebSocket connections for live price updates
  2. Additional Providers: Integration with more Vietnamese data providers
  3. Advanced Analytics: Technical indicators and market analysis tools
  4. Mobile Optimization: Enhanced mobile app support

Scalability Improvements​

  • Distributed caching
  • Microservices architecture
  • Load balancing

Troubleshooting​

Common Issues​

  1. Sync Failures

    • Check API key configuration
    • Verify network connectivity
    • Review error logs
  2. Data Inconsistencies

    • Run manual sync
    • Clear cache and resync
    • Validate data sources
  3. Performance Issues

    • Optimize database queries
    • Adjust sync intervals
    • Monitor resource usage

Support​

For technical support and questions:

  • Review the error logs in the application
  • Check the GitHub issues page
  • Contact the development team

Security Considerations​

API Key Management​

  • Secure storage of API credentials
  • Regular key rotation
  • Access logging and monitoring

Data Privacy​

  • Local data encryption
  • User data anonymization
  • Compliance with Vietnamese data protection regulations