forked from jsnbuchanan/crowd-funder-for-time-pwa
docs: comprehensive documentation updates and modernization
- Update BUILDING.md with current build system information - Modernize various README files across the project - Update CHANGELOG.md with recent changes - Improve documentation consistency and formatting - Update platform-specific documentation (iOS, Electron, Docker) - Enhance test documentation and build guides
This commit is contained in:
@@ -29,12 +29,15 @@ This document outlines the migration process from Dexie.js to absurd-sql for the
|
||||
## Migration Architecture
|
||||
|
||||
### Migration Fence
|
||||
|
||||
The migration fence is now defined by the **PlatformServiceMixin** in `src/utils/PlatformServiceMixin.ts`:
|
||||
|
||||
- **PlatformServiceMixin**: Centralized database access with caching and utilities
|
||||
- **Migration Tools**: Exclusive interface between legacy and new databases
|
||||
- **Service Layer**: All database operations go through PlatformService
|
||||
|
||||
### Migration Order
|
||||
|
||||
The migration follows a specific order to maintain data integrity:
|
||||
|
||||
1. **Accounts** (foundational - contains DIDs)
|
||||
@@ -45,9 +48,11 @@ The migration follows a specific order to maintain data integrity:
|
||||
## ActiveDid Migration ⭐ **NEW FEATURE**
|
||||
|
||||
### Problem Solved
|
||||
|
||||
Previously, the `activeDid` setting was not migrated from Dexie to SQLite, causing users to lose their active identity after migration.
|
||||
|
||||
### Solution Implemented
|
||||
|
||||
The migration now includes a dedicated step for migrating the `activeDid`:
|
||||
|
||||
1. **Detection**: Identifies the `activeDid` from Dexie master settings
|
||||
@@ -58,6 +63,7 @@ The migration now includes a dedicated step for migrating the `activeDid`:
|
||||
### Implementation Details
|
||||
|
||||
#### New Function: `migrateActiveDid()`
|
||||
|
||||
```typescript
|
||||
export async function migrateActiveDid(): Promise<MigrationResult> {
|
||||
// 1. Get Dexie settings to find the activeDid
|
||||
@@ -76,13 +82,17 @@ export async function migrateActiveDid(): Promise<MigrationResult> {
|
||||
```
|
||||
|
||||
#### Enhanced `migrateSettings()` Function
|
||||
|
||||
The settings migration now includes activeDid handling:
|
||||
|
||||
- Extracts `activeDid` from Dexie master settings
|
||||
- Validates account existence in SQLite
|
||||
- Updates SQLite master settings with the `activeDid`
|
||||
|
||||
#### Updated `migrateAll()` Function
|
||||
|
||||
The complete migration now includes a dedicated step for activeDid:
|
||||
|
||||
```typescript
|
||||
// Step 3: Migrate ActiveDid (depends on accounts and settings)
|
||||
logger.info("[MigrationService] Step 3: Migrating activeDid...");
|
||||
@@ -90,6 +100,7 @@ const activeDidResult = await migrateActiveDid();
|
||||
```
|
||||
|
||||
### Benefits
|
||||
|
||||
- ✅ **User Identity Preservation**: Users maintain their active identity
|
||||
- ✅ **Seamless Experience**: No need to manually select identity after migration
|
||||
- ✅ **Data Consistency**: Ensures all identity-related settings are preserved
|
||||
@@ -98,17 +109,20 @@ const activeDidResult = await migrateActiveDid();
|
||||
## Migration Process
|
||||
|
||||
### Phase 1: Preparation ✅
|
||||
|
||||
- [x] PlatformServiceMixin implementation
|
||||
- [x] Implement data comparison tools
|
||||
- [x] Create migration service structure
|
||||
|
||||
### Phase 2: Core Migration ✅
|
||||
|
||||
- [x] Account migration with `importFromMnemonic`
|
||||
- [x] Settings migration (excluding activeDid)
|
||||
- [x] **ActiveDid migration** ⭐ **COMPLETED**
|
||||
- [x] Contact migration framework
|
||||
|
||||
### Phase 3: Validation and Cleanup 🔄
|
||||
|
||||
- [ ] Comprehensive data validation
|
||||
- [ ] Performance testing
|
||||
- [ ] User acceptance testing
|
||||
@@ -117,6 +131,7 @@ const activeDidResult = await migrateActiveDid();
|
||||
## Usage
|
||||
|
||||
### Manual Migration
|
||||
|
||||
```typescript
|
||||
import { migrateAll, migrateActiveDid } from '../services/indexedDBMigrationService';
|
||||
|
||||
@@ -128,6 +143,7 @@ const activeDidResult = await migrateActiveDid();
|
||||
```
|
||||
|
||||
### Migration Verification
|
||||
|
||||
```typescript
|
||||
import { compareDatabases } from '../services/indexedDBMigrationService';
|
||||
|
||||
@@ -136,7 +152,9 @@ console.log('Migration differences:', comparison.differences);
|
||||
```
|
||||
|
||||
### PlatformServiceMixin Integration
|
||||
|
||||
After migration, use the mixin for all database operations:
|
||||
|
||||
```typescript
|
||||
// Use mixin methods for database access
|
||||
const contacts = await this.$contacts();
|
||||
@@ -147,11 +165,13 @@ const result = await this.$db("SELECT * FROM contacts WHERE did = ?", [accountDi
|
||||
## Error Handling
|
||||
|
||||
### ActiveDid Migration Errors
|
||||
|
||||
- **Missing Account**: If the `activeDid` from Dexie doesn't exist in SQLite accounts
|
||||
- **Database Errors**: Connection or query failures
|
||||
- **Settings Update Failures**: Issues updating SQLite master settings
|
||||
|
||||
### Recovery Strategies
|
||||
|
||||
1. **Automatic Recovery**: Migration continues even if activeDid migration fails
|
||||
2. **Manual Recovery**: Users can manually select their identity after migration
|
||||
3. **Fallback**: System creates new identity if none exists
|
||||
@@ -159,11 +179,13 @@ const result = await this.$db("SELECT * FROM contacts WHERE did = ?", [accountDi
|
||||
## Security Considerations
|
||||
|
||||
### Data Protection
|
||||
|
||||
- All sensitive data (mnemonics, private keys) are encrypted
|
||||
- Migration preserves encryption standards
|
||||
- No plaintext data exposure during migration
|
||||
|
||||
### Identity Verification
|
||||
|
||||
- ActiveDid migration validates account existence
|
||||
- Prevents setting non-existent identities as active
|
||||
- Maintains cryptographic integrity
|
||||
@@ -171,6 +193,7 @@ const result = await this.$db("SELECT * FROM contacts WHERE did = ?", [accountDi
|
||||
## Testing
|
||||
|
||||
### Migration Testing
|
||||
|
||||
```bash
|
||||
# Run migration
|
||||
npm run migrate
|
||||
@@ -180,6 +203,7 @@ npm run test:migration
|
||||
```
|
||||
|
||||
### ActiveDid Testing
|
||||
|
||||
```typescript
|
||||
// Test activeDid migration specifically
|
||||
const result = await migrateActiveDid();
|
||||
@@ -188,6 +212,7 @@ expect(result.warnings).toContain('Successfully migrated activeDid');
|
||||
```
|
||||
|
||||
### PlatformServiceMixin Testing
|
||||
|
||||
```typescript
|
||||
// Test mixin integration
|
||||
describe('PlatformServiceMixin', () => {
|
||||
@@ -224,6 +249,7 @@ describe('PlatformServiceMixin', () => {
|
||||
- Verify caching and error handling work correctly
|
||||
|
||||
### Debugging
|
||||
|
||||
```typescript
|
||||
// Debug migration process
|
||||
import { logger } from '../utils/logger';
|
||||
@@ -245,6 +271,7 @@ logger.debug('[Migration] Migration completed:', result);
|
||||
## Migration Status Checklist
|
||||
|
||||
### ✅ Completed
|
||||
|
||||
- [x] PlatformServiceMixin implementation
|
||||
- [x] SQLite database service
|
||||
- [x] Migration tools
|
||||
@@ -253,11 +280,13 @@ logger.debug('[Migration] Migration completed:', result);
|
||||
- [x] ActiveDid migration
|
||||
|
||||
### 🔄 In Progress
|
||||
|
||||
- [ ] Contact migration
|
||||
- [ ] DatabaseUtil to PlatformServiceMixin migration
|
||||
- [ ] File-by-file migration
|
||||
|
||||
### ❌ Not Started
|
||||
|
||||
- [ ] Legacy Dexie removal
|
||||
- [ ] Final cleanup and validation
|
||||
|
||||
@@ -267,4 +296,4 @@ logger.debug('[Migration] Migration completed:', result);
|
||||
**Created**: 2025-07-05
|
||||
**Status**: Active Migration Phase
|
||||
**Last Updated**: 2025-07-05
|
||||
**Note**: Migration fence now implemented through PlatformServiceMixin instead of USE_DEXIE_DB constant
|
||||
**Note**: Migration fence now implemented through PlatformServiceMixin instead of USE_DEXIE_DB constant
|
||||
|
||||
Reference in New Issue
Block a user