5.7 KiB
5.7 KiB
Mariavel Implementation Plan
Mariavel is a modern, high-performance database management tool designed to bridge the gap between the power of Laravel and the elegance of React. It aims to replace traditional, clunky database management interfaces with a sleek, developer-centric experience.
1. Technical Architecture
| Layer | Technology | Responsibility |
|---|---|---|
| Backend | Laravel 11 + Sanctum | API Management (SOLID), Dynamic Schema Discovery, CLI Bridge, Authentication. |
| Frontend | React (TSX) + Vite | High-performance SPA adhering to SOLID component principles. |
| UI Library | Material UI (MUI) | Dashboard Layout, Navigation, Modals, and consistent Design System. |
| Data Engine | DevExtreme DataGrid | Virtual Scrolling for millions of rows, Excel-like cell editing. |
| CLI Engine | Laravel Process | Asynchronous mysqldump and mysql command execution. |
| Real-time | Laravel Reverb | WebSocket notifications for long-running CLI tasks (Import/Export). |
2. Design Principles (SOLID)
To ensure long-term maintainability and scalability, Mariavel follows SOLID principles across both stacks:
Backend (Laravel)
- Single Responsibility (SRP): Controllers handle requests, Services handle business logic, and Repositories handle data access.
- Open/Closed (OCP): Database connection and schema discovery logic are abstracted behind interfaces, allowing support for new DB engines (PostgreSQL, SQLite) without changing core code.
- Liskov Substitution (LSP): All database driver implementations adhere to a strict
DatabaseDriverInterface. - Interface Segregation (ISP): Clients don't depend on methods they don't use; interfaces are split into
SchemaDiscoveryInterface,DataManipulationInterface, etc. - Dependency Inversion (DIP): High-level modules (Controllers) depend on abstractions (Interfaces), not low-level implementations.
Frontend (React)
- Single Responsibility: Logic is extracted into Custom Hooks (
useSchema,useDataGrid), while components focus purely on rendering. - Component Composition: Building complex UIs from small, specialized components rather than monolithic ones.
- Prop Typing & Interfaces: Strict TypeScript interfaces for all component props and API responses to ensure type safety and predictability.
3. Implementation Phases
Phase 1: Backend Core & Dynamic Connectivity
The backend must handle database connections dynamically rather than relying on a static config/database.php.
- Dynamic Connection Middleware: Develop a middleware that injects database credentials (host, user, password) into the application container at runtime based on the authenticated request.
- Schema Discovery Engine:
GET /api/databases: List all available databases.GET /api/tables/{db}: List tables within a database.GET /api/schema/{table}: Retrieve column definitions, data types, and Foreign Key relationships.
- Sanctum Integration: Secure API endpoints with token-based authentication.
Phase 2: Frontend Foundation & MUI Shell
Establishing the "Shell" of the application with a focus on modern UX.
- MUI Dashboard Layout:
- Collapsible
Drawerfor database/table tree navigation. Tabssystem for managing multiple open tables or SQL editors.
- Collapsible
- State Management (Zustand): Efficiently manage global states like
activeDatabase,activeTable, andconnectionStatus. - Theming & Aesthetics:
- Custom Material UI theme with Dark/Light mode support.
- Injection of
dx.material.custom-scheme.cssto align DevExtreme components with MUI styles.
Phase 3: High-Performance DataGrid Integration
The heart of Mariavel is the data management interface.
- DevExtreme CustomStore:
- Implement
remoteOperations(paging, filtering, sorting) to ensure the backend does the heavy lifting. - Server-side filtering mapping DevExtreme filters to Eloquent/Query Builder.
- Implement
- Advanced Editing Features:
editing.mode = 'cell'for rapid, Excel-style data entry.- Bulk actions (Multi-select delete, batch updates).
- Virtual Scrolling: Enable high-performance rendering for tables with 100k+ records.
Phase 4: CLI-Powered Import/Export (The Power Engine)
Bypassing PHP's memory and execution limits for large data operations.
- Async Export Tool:
- Trigger
mysqldump --opt --user={user} --password={pass} {db} > {path}.sqlviaLaravel Process. - Run in the background to avoid timeout issues.
- Trigger
- Async Import Tool:
- Multipart file upload support for large
.sqlfiles. - Execute
mysql --user={user} --password={pass} {db} < {path}.sql.
- Multipart file upload support for large
- Real-time Feedback: Use Laravel Reverb (WebSockets) to stream progress and completion status back to the React UI.
4. Key Differentiators (Killer Features)
- Zero-Lag Performance: Leverage DevExtreme's virtual scrolling to navigate massive datasets without browser lag.
- Smart SQL Editor: Integrate Monaco Editor (the engine behind VS Code) for an intelligent SQL authoring experience with syntax highlighting and autocomplete.
- Security First: Database credentials are never stored in plain text; connection strings are ephemeral or encrypted.
- Desktop Ready: The decoupled architecture allows for easy packaging into Electron or NativePHP for a native desktop experience.
5. Next Steps & Priorities
- Repository Setup: Initialize Laravel 11 and React/Vite projects.
- Database Connection Factory: Implement the logic to create
PDOconnections on the fly. - Initial UI Prototype: Build the MUI sidebar with a mock database tree.