forked from jsnbuchanan/crowd-funder-for-time-pwa
- 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
161 lines
5.8 KiB
Markdown
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 |