Files
crowd-funder-from-jason/doc/circular-dependency-analysis.md
Matthew Raymer 64e78fdbce Finalize Dexie-to-SQLite migration prep: docs, circular dep removal, SQL helpers, tests
- Removed all vestigial Dexie/USE_DEXIE_DB references from code and docs
- Centralized DB logic in PlatformServiceMixin; resolved logger/databaseUtil circular dependency
- Modularized SQL helpers (`$generateInsertStatement`, `$generateUpdateStatement`) and added unit tests
- Created/updated migration tracking docs and helper script for cross-machine progress
- Confirmed all lint/type checks and tests pass; ready for systematic file migration
2025-07-06 09:44:20 +00:00

161 lines
5.8 KiB
Markdown

# Circular Dependency Analysis
## Overview
This document analyzes the current state of circular dependencies in the TimeSafari codebase, particularly focusing on the migration from Dexie to SQLite and the PlatformServiceMixin implementation.
## Current Circular Dependency Status
### ✅ **GOOD NEWS: No Active Circular Dependencies**
The codebase currently has **no active circular dependencies** that are causing runtime or compilation errors. The logger has been successfully refactored to be self-contained.
### 🔍 **Identified Dependency Patterns**
#### 1. **Logger → PlatformServiceFactory → Logger** (RESOLVED)
- **Status**: ✅ **RESOLVED**
- **Previous Issue**: Logger imported `logToDb` from databaseUtil, which imported logger
- **Solution**: Logger now uses direct database access via PlatformServiceFactory
- **Implementation**: Self-contained `logToDatabase()` function in logger.ts
#### 2. **PlatformServiceMixin → databaseUtil → logger → PlatformServiceMixin** (PARTIAL)
- **Status**: ⚠️ **PARTIAL RESOLUTION**
- **Current Issue**: PlatformServiceMixin imports `memoryLogs` from databaseUtil
- **Impact**: Not blocking, but creates unnecessary coupling
- **Solution**: Move `memoryLogs` to a separate utility or make it self-contained
#### 3. **databaseUtil → logger → PlatformServiceFactory → databaseUtil** (RESOLVED)
- **Status**: ✅ **RESOLVED**
- **Previous Issue**: databaseUtil imported logger, which could create loops
- **Solution**: Logger is now self-contained and doesn't import from databaseUtil
## Detailed Dependency Analysis
### 🔴 **Critical Dependencies (Blocking Migration)**
#### PlatformServiceMixin → databaseUtil
```typescript
// src/utils/PlatformServiceMixin.ts:50
import { memoryLogs } from "@/db/databaseUtil";
```
**Impact**: This prevents complete migration of databaseUtil functions to PlatformServiceMixin
**Solution**: Create self-contained memory logs implementation
### 🟡 **High-Usage Dependencies (Migration Targets)**
#### Files with databaseUtil imports (50+ files)
1. **Components** (15 files):
- `PhotoDialog.vue`
- `FeedFilters.vue`
- `UserNameDialog.vue`
- `ImageMethodDialog.vue`
- `OfferDialog.vue`
- `OnboardingDialog.vue`
- `PushNotificationPermission.vue`
- `GiftedPrompts.vue`
- `GiftedDialog.vue`
- `World/components/objects/landmarks.js`
- And 5 more...
2. **Views** (30+ files):
- `IdentitySwitcherView.vue`
- `ContactEditView.vue`
- `ContactGiftingView.vue`
- `ImportAccountView.vue`
- `OnboardMeetingMembersView.vue`
- `RecentOffersToUserProjectsView.vue`
- `ClaimCertificateView.vue`
- `NewActivityView.vue`
- `HelpView.vue`
- `NewEditProjectView.vue`
- And 20+ more...
3. **Services** (5 files):
- `deepLinks.ts`
- `endorserServer.ts`
- `libs/util.ts`
- `test/index.ts`
### 🟢 **Low-Impact Dependencies**
#### Logger Usage (80+ files)
- **Status**: ✅ **HEALTHY**
- **Pattern**: All files import logger from `@/utils/logger`
- **Impact**: No circular dependencies, logger is self-contained
- **Benefit**: Centralized logging with database integration
## Migration Blockers
### 1. **memoryLogs Dependency**
```typescript
// Current: PlatformServiceMixin imports from databaseUtil
import { memoryLogs } from "@/db/databaseUtil";
// Needed: Self-contained implementation
const memoryLogs: string[] = [];
```
### 2. **Utility Function Dependencies**
Common functions that need migration:
- `logConsoleAndDb()` - Used in 20+ files
- `parseJsonField()` - Used in 15+ files
- `mapColumnsToValues()` - Used in 30+ files
- `generateInsertStatement()` - Used in 10+ files
- `generateUpdateStatement()` - Used in 10+ files
## Resolution Strategy
### Phase 1: Complete PlatformServiceMixin Independence
1. **Remove memoryLogs import** from PlatformServiceMixin
2. **Create self-contained memoryLogs** implementation
3. **Add missing utility methods** to PlatformServiceMixin
### Phase 2: File-by-File Migration
1. **High-usage files first** (views, core components)
2. **Replace databaseUtil imports** with PlatformServiceMixin
3. **Update function calls** to use mixin methods
### Phase 3: Cleanup
1. **Remove unused databaseUtil functions**
2. **Update TypeScript interfaces**
3. **Remove databaseUtil imports** from all files
## Current Status Summary
### ✅ **Resolved Issues**
1. **Logger circular dependency** - Fixed with self-contained implementation
2. **TypeScript compilation** - No circular dependency errors
3. **Runtime stability** - No circular dependency crashes
### ⚠️ **Remaining Issues**
1. **PlatformServiceMixin → databaseUtil** - Single import blocking complete migration
2. **50+ files** still importing databaseUtil - Migration targets
3. **Utility function duplication** - Need consolidation
### 🎯 **Next Steps**
1. **Immediate**: Remove memoryLogs dependency from PlatformServiceMixin
2. **This Week**: Complete PlatformServiceMixin with all utility methods
3. **Next Week**: Start file-by-file migration of high-usage components
## Benefits of Current State
### ✅ **Achieved**
1. **No runtime circular dependencies** - Application runs without crashes
2. **Self-contained logger** - No more logger/databaseUtil loops
3. **PlatformServiceMixin ready** - Most methods implemented
4. **Clear migration path** - Well-defined targets and strategy
### 🎯 **Expected After Resolution**
1. **Complete databaseUtil migration** - Single source of truth
2. **Eliminated circular dependencies** - Clean architecture
3. **Improved performance** - Caching and optimization
4. **Better maintainability** - Centralized database operations
---
**Author**: Matthew Raymer
**Created**: 2025-07-05
**Status**: Analysis Complete
**Last Updated**: 2025-07-05
**Note**: No active circular dependencies blocking development, but PlatformServiceMixin needs one small fix to enable complete migration