3.6 KiB
3.6 KiB
Workflow State: Isar to PostgreSQL Migration
PLAN
Break down DB_PLAN.md into actionable todos and execute migration in stages:
- Infrastructure setup (PostgreSQL, dependencies, env)
- Create Drift schemas (all tables)
- Create DAOs (all data access objects)
- Refactor code (replace Isar with Drift)
- Testing (unit + integration)
- Deployment (Docker, migration scripts)
NEXT_ACTIONS
- Continue Stage 4: Refactor remaining managers and APIs
- UserManager (complex - needs model conversion)
- PackManager
- TestManager
- Other managers and API endpoints
- Update DI injector (regenerate after all managers updated)
- 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
- Слой конвертации НЕ нужен - правильный подход:
- Заменить Isar модели (UserModel) на Drift модели (User) везде в коде
- Создать extension User.toDto() который использует DAOs для получения связанных данных
- UserDto остается тем же (не зависит от БД)
- Это проще и чище чем поддерживать два типа моделей одновременно