Files
projectmycelium/docs/dev/design/mc-base-currency-implementation.md

110 lines
4.9 KiB
Markdown

# MC Base Currency Implementation Plan
## Overview
Switch the Mycelium marketplace from USD to MC (Mycelium Credit) as the base currency while preserving identical UX for USD users through 1:1 exchange rate.
## Critical Requirements
- **MC as Base**: All internal calculations use MC as reference currency
- **USD UX Preservation**: Users selecting USD get identical experience to current system
- **1:1 Exchange Rate**: 1 MC = 1 USD to maintain UX equivalence
- **Backward Compatibility**: No breaking changes for existing functionality
## Implementation Phases
### Phase 1: Core Currency Service Overhaul
- [ ] Update `CurrencyService::get_supported_currencies()` to make MC base currency
- [ ] Change MC `is_base_currency: true` and `exchange_rate_to_base: dec!(1.0)`
- [ ] Update USD `is_base_currency: false` and `exchange_rate_to_base: dec!(1.0)`
- [ ] Recalculate all other currency rates relative to MC (not USD)
- [ ] Update `CurrencyService::get_base_currency()` to return MC
- [ ] Update `convert_amount()` method to use MC as base reference
- [ ] Update `get_exchange_rate_to_base()` to use MC as base
- [ ] Update `get_all_exchange_rates()` to use MC as base
- [ ] Update `get_currency_stats()` base currency reporting
### Phase 2: System-Wide Defaults Update
- [ ] Change `CurrencyService` default_display_currency from "USD" to "MC"
- [ ] Update user preference defaults in `UserPersistentData` from "USD" to "MC"
- [ ] Update model builders default currency from "USD" to "MC"
- [ ] Update controller response defaults from "USD" to "MC"
- [ ] Update template fallback values from "USD" to "MC"
- [ ] Update navbar service defaults from "USD" to "MC"
### Phase 3: Service Layer Updates
- [ ] Update `UserPersistence` default display_currency from "USD" to "MC"
- [ ] Update `AutoTopUpService` USD references to use base currency
- [ ] Update `InstantPurchaseService` USD references to use base currency
- [ ] Update `OrderService` base currency references
- [ ] Update `ProductService` base currency handling
- [ ] Update `Wallet` service currency defaults
- [ ] Update `PoolService` token references from "USD" to base currency
- [ ] Update `ResourceProvider` base currency references
### Phase 4: Controller Updates
- [ ] Update `CurrencyController` base currency responses
- [ ] Update `DashboardController` currency defaults and responses
- [ ] Update `WalletController` currency handling
- [ ] Update `OrderController` currency processing
- [ ] Update `MarketplaceController` currency defaults
- [ ] Update `PoolController` currency references
- [ ] Update all hardcoded "USD" strings in controller responses
### Phase 5: Model Updates
- [ ] Update `MarketplaceCurrencyConfig` base_currency default
- [ ] Update `Product` model base_currency defaults
- [ ] Update `Order` model base currency references
- [ ] Update `Transaction` model currency defaults
- [ ] Update builder patterns to use MC as default
- [ ] Update all model default values from "USD" to "MC"
### Phase 6: Template Updates
- [ ] Update hardcoded currency defaults in HTML templates
- [ ] Update JavaScript currency handling
- [ ] Update template variables and fallbacks
- [ ] Ensure dynamic currency selectors work with MC base
### Phase 7: Testing & Validation
- [ ] Update unit tests to expect MC as base currency
- [ ] Update integration tests for currency conversions
- [ ] Test USD user experience preservation
- [ ] Validate all currency conversion accuracy
- [ ] Test edge cases and error handling
- [ ] Performance test currency operations
### Phase 8: Documentation & Migration
- [ ] Update code comments referencing USD as base
- [ ] Update API documentation
- [ ] Create migration guide for existing data
- [ ] Update configuration examples
- [ ] Document exchange rate change process
## UX Preservation Validation Checklist
- [ ] USD users see identical prices to current system
- [ ] Currency conversion works bidirectionally
- [ ] All formatting remains consistent
- [ ] User preferences persist correctly
- [ ] Wallet balances display correctly
- [ ] Transaction history shows correct values
- [ ] Checkout process works identically
## Risk Mitigation
- **Data Migration**: Ensure existing user data migrates correctly
- **API Compatibility**: Maintain backward compatibility
- **Performance**: Monitor currency conversion performance
- **Error Handling**: Comprehensive error handling for edge cases
- **Rollback Plan**: Ability to rollback if issues arise
## Success Criteria
- [ ] MC is the internal base currency for all calculations
- [ ] USD users experience no functional differences
- [ ] All currency conversions work accurately
- [ ] System performance remains acceptable
- [ ] All tests pass
- [ ] Documentation is updated
- [ ] No breaking changes for existing integrations
## Future Considerations
- Exchange rate flexibility for future changes (1 MC = 10 USD, etc.)
- Additional currency support
- Multi-currency wallet support
- Advanced currency conversion features