61 lines
3.6 KiB
Markdown
61 lines
3.6 KiB
Markdown
|
|
# Workflow State: Isar to PostgreSQL Migration
|
|||
|
|
|
|||
|
|
## PLAN
|
|||
|
|
Break down DB_PLAN.md into actionable todos and execute migration in stages:
|
|||
|
|
1. Infrastructure setup (PostgreSQL, dependencies, env)
|
|||
|
|
2. Create Drift schemas (all tables)
|
|||
|
|
3. Create DAOs (all data access objects)
|
|||
|
|
4. Refactor code (replace Isar with Drift)
|
|||
|
|
5. Testing (unit + integration)
|
|||
|
|
6. Deployment (Docker, migration scripts)
|
|||
|
|
|
|||
|
|
## NEXT_ACTIONS
|
|||
|
|
1. Continue Stage 4: Refactor remaining managers and APIs
|
|||
|
|
- UserManager (complex - needs model conversion)
|
|||
|
|
- PackManager
|
|||
|
|
- TestManager
|
|||
|
|
- Other managers and API endpoints
|
|||
|
|
2. Update DI injector (regenerate after all managers updated)
|
|||
|
|
3. Fix remaining isar references in codebase
|
|||
|
|
|
|||
|
|
## ASSUMPTIONS
|
|||
|
|
- Using Docker Compose for local PostgreSQL
|
|||
|
|
- PostgreSQL 16-alpine image
|
|||
|
|
- Development environment first, production later
|
|||
|
|
- All existing Isar models have equivalent PostgreSQL tables
|
|||
|
|
|
|||
|
|
## PROGRESS_LOG
|
|||
|
|
- [2025-01-XX] Started migration planning
|
|||
|
|
- Created project_config.md and workflow_state.md
|
|||
|
|
- Breaking down DB_PLAN.md into actionable todos
|
|||
|
|
- ✅ Stage 1: Infrastructure setup complete (docker-compose, pubspec.yaml, .env.example)
|
|||
|
|
- ✅ Stage 2: All Drift table schemas created (users, auth, packs, relations, subscriptions, payments, tests, tasks, promo_codes, discounts, statistics, telegram)
|
|||
|
|
- ✅ Stage 2.6: Created main database.dart file with AppDatabase class
|
|||
|
|
- ✅ Stage 2.7: Generated Drift code successfully
|
|||
|
|
- ✅ Stage 3: All DAOs created and fixed (UserDao, PackDao, TestDao, PaymentDao, SubscriptionDao, TaskDao, PromoCodeDao, DiscountDao, StatisticsDao)
|
|||
|
|
- ✅ All DAOs code generation successful
|
|||
|
|
- ✅ Testing completed: Structure verified, all files present
|
|||
|
|
- ⚠️ Some analyzer warnings remain (non-critical, code generates successfully)
|
|||
|
|
- ✅ Stage 4 started: Refactor code to use Drift
|
|||
|
|
- ✅ Stage 4.1: main.dart updated - replaced Isar with AppDatabase, updated initialization and shutdown (compiles)
|
|||
|
|
- ✅ Stage 4.4: jwt_service.dart updated - replaced Isar refresh tokens with Drift UserDao methods (compiles, no errors)
|
|||
|
|
- ✅ Stage 4.3: auth_api_v2.dart updated - added AppDatabase to constructor (matches injector config, compiles)
|
|||
|
|
- 🔄 Stage 4.6: pack_manager.dart - AppDatabase added to constructor, but full conversion pending (31 isar calls, needs CardPackModel→CardPack conversion and PackDtoConverter update)
|
|||
|
|
- 🔄 Stage 4.5: payment_manager.dart - AppDatabase added to constructor, but full conversion pending (34 isar calls need Isar→Drift model conversion)
|
|||
|
|
- 🔄 Stage 4.2: UserManager refactoring pending (complex - needs replacement of UserModel with Drift User throughout codebase)
|
|||
|
|
|
|||
|
|
**Key Insight:** Слой конвертации между Isar и Drift моделями НЕ нужен. Правильный подход:
|
|||
|
|
- Заменить Isar модели (UserModel) на Drift модели (User) везде в коде
|
|||
|
|
- Создать extension User.toDto() который использует DAOs для получения связанных данных
|
|||
|
|
- UserDto остается тем же (не зависит от БД)
|
|||
|
|
|
|||
|
|
## OPEN_ISSUES
|
|||
|
|
- None yet
|
|||
|
|
|
|||
|
|
## NOTES
|
|||
|
|
- **Слой конвертации НЕ нужен** - правильный подход:
|
|||
|
|
1. Заменить Isar модели (UserModel) на Drift модели (User) везде в коде
|
|||
|
|
2. Создать extension User.toDto() который использует DAOs для получения связанных данных
|
|||
|
|
3. UserDto остается тем же (не зависит от БД)
|
|||
|
|
- Это проще и чище чем поддерживать два типа моделей одновременно
|