Skip to content

Conversation

@mikenikles
Copy link
Contributor

Summary

Refactors the ~1700-line UseDatabase God Object into 11 focused managers following the separation of concerns principle.

New managers created:

  • ConnectionManager - connection lifecycle (add, reconnect, remove, test)
  • PersistenceManager - state serialization and persistence
  • StateRestorationManager - state hydration on reconnect
  • TabOrderingManager - generic tab ordering and removal
  • QueryExecutionManager - SQL execution and CRUD operations
  • ErdTabManager - ERD tab management

Extended existing managers:

  • SchemaTabManager - added table metadata loading
  • ExplainTabManager - added execute and result conversion
  • QueryTabManager - added focusOrCreate, loadSaved, loadFromHistory

New API structure:

const db = useDatabase();

// State access (read-only)
db.state.activeConnection, db.state.queryTabs, db.state.schemas...

// Manager access
db.connections.add(), .reconnect(), .remove(), .test(), .setActive()
db.queries.execute(), .goToPage(), .updateCell(), .insertRow(), .deleteRow()
db.queryTabs.add(), .remove(), .rename(), .setActive(), .loadSaved()...
db.ui.toggleAI(), .setActiveView()
db.tabs.reorder(), .ordered
db.persistence.flush(), .cleanup()

Test plan

  • Verify database connections work (add, reconnect, remove)
  • Verify query execution and CRUD operations
  • Verify tab management (create, close, reorder, rename)
  • Verify persistence across app restarts
  • Verify all views render correctly (query, schema, explain, ERD)

🤖 Generated with Claude Code

Refactor the ~1700-line UseDatabase God Object into 11 focused managers:

**New managers created:**
- ConnectionManager - connection lifecycle (add, reconnect, remove, test)
- PersistenceManager - state serialization and persistence
- StateRestorationManager - state hydration on reconnect
- TabOrderingManager - generic tab ordering and removal
- QueryExecutionManager - SQL execution and CRUD operations
- ErdTabManager - ERD tab management

**Extended existing managers:**
- SchemaTabManager - added table metadata loading
- ExplainTabManager - added execute and result conversion
- QueryTabManager - added focusOrCreate, loadSaved, loadFromHistory

**New API structure:**
- db.state.* - read-only state access (activeConnection, queryTabs, etc.)
- db.connections.* - connection management
- db.queries.* - query execution and CRUD
- db.queryTabs.*, db.schemaTabs.*, db.explainTabs.*, db.erdTabs.* - tab management
- db.ui.* - UI state (toggleAI, setActiveView)
- db.tabs.* - tab ordering
- db.persistence.* - persistence control

Updated all 18 component files to use the new manager-based API.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@mikenikles mikenikles merged commit 1a7de40 into main Dec 30, 2025
1 check failed
@mikenikles mikenikles deleted the refactor/modularize-database-hooks branch December 30, 2025 08:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants