161 lines
5.4 KiB
Markdown
161 lines
5.4 KiB
Markdown
# Project Refactoring Plan
|
|
|
|
## Current Status
|
|
|
|
### ✅ Completed
|
|
1. **Moved unused files to `old/` folder**:
|
|
- `bot/` - Old Telegram bot code (no longer used)
|
|
- `web-map/` - Old map editor
|
|
- All `.md` documentation files
|
|
- Old migration scripts
|
|
- Old Dockerfiles
|
|
|
|
2. **Created new API module structure**:
|
|
```
|
|
api/
|
|
├── core/ # Core functionality (config, security, websockets)
|
|
├── routers/ # API route handlers
|
|
├── services/ # Business logic services
|
|
└── ...existing files...
|
|
```
|
|
|
|
3. **Created core modules**:
|
|
- ✅ `api/core/config.py` - All configuration and constants
|
|
- ✅ `api/core/security.py` - JWT, auth, password hashing
|
|
- ✅ `api/core/websockets.py` - WebSocket ConnectionManager
|
|
|
|
### 🔄 Next Steps
|
|
|
|
#### Backend API Refactoring
|
|
|
|
**Router Files to Create** (in `api/routers/`):
|
|
1. `auth.py` - `/api/auth/*` endpoints (register, login, me)
|
|
2. `characters.py` - `/api/characters/*` endpoints (list, create, select, delete)
|
|
3. `game.py` - `/api/game/*` endpoints (state, location, profile, move, inspect, interact, pickup, use_item)
|
|
4. `combat.py` - `/api/game/combat/*` endpoints (initiate, action) + PvP combat
|
|
5. `equipment.py` - `/api/game/equip/*` endpoints (equip, unequip, repair)
|
|
6. `crafting.py` - `/api/game/craft/*` endpoints (craftable, craft_item)
|
|
7. `corpses.py` - `/api/game/corpses/*` and `/api/internal/corpses/*` endpoints
|
|
8. `websocket.py` - `/ws/game/*` WebSocket endpoint
|
|
|
|
**Helper Files to Create** (in `api/services/`):
|
|
1. `helpers.py` - Utility functions (distance calculation, stamina cost, armor durability, etc.)
|
|
2. `models.py` - Pydantic models (all request/response models)
|
|
|
|
**Final `api/main.py`** will contain ONLY:
|
|
- FastAPI app initialization
|
|
- Middleware setup (CORS)
|
|
- Static file mounting
|
|
- Router registration
|
|
- Lifespan context (startup/shutdown)
|
|
- ~100 lines instead of 5500+
|
|
|
|
#### Frontend Refactoring
|
|
|
|
**Components to Extract from Game.tsx**:
|
|
|
|
In `pwa/src/components/game/`:
|
|
1. `Compass.tsx` - Navigation compass with stamina costs
|
|
2. `LocationView.tsx` - Location description and image
|
|
3. `Surroundings.tsx` - NPCs, players, items, corpses, interactables
|
|
4. `InventoryPanel.tsx` - Inventory management
|
|
5. `EquipmentPanel.tsx` - Equipment slots
|
|
6. `CombatView.tsx` - Combat interface (PvE and PvP)
|
|
7. `ProfilePanel.tsx` - Player stats and info
|
|
8. `CraftingPanel.tsx` - Crafting interface
|
|
9. `DeathOverlay.tsx` - Death screen
|
|
|
|
**Shared hooks** (in `pwa/src/hooks/`):
|
|
1. `useWebSocket.ts` - WebSocket connection and message handling
|
|
2. `useGameState.ts` - Game state management
|
|
3. `useCombat.ts` - Combat state and actions
|
|
|
|
**Type definitions** (in `pwa/src/types/`):
|
|
1. `game.ts` - Game entities (Player, Location, Item, NPC, etc.)
|
|
2. `combat.ts` - Combat-related types
|
|
3. `websocket.ts` - WebSocket message types
|
|
|
|
**Final `Game.tsx`** will contain ONLY:
|
|
- Component composition
|
|
- State management coordination
|
|
- WebSocket message routing
|
|
- ~300-400 lines instead of 3300+
|
|
|
|
### 📋 Estimated File Count
|
|
|
|
**Before**:
|
|
- Backend: 1 massive file (5574 lines)
|
|
- Frontend: 1 massive file (3315 lines)
|
|
- Total: 2 files, ~9000 lines
|
|
|
|
**After**:
|
|
- Backend: ~15 files, average ~200-400 lines each
|
|
- Frontend: ~15 files, average ~100-300 lines each
|
|
- Total: ~30 files, all maintainable and focused
|
|
|
|
### 🎯 Benefits
|
|
|
|
1. **Easier to navigate** - Each file has a single responsibility
|
|
2. **Easier to test** - Isolated components and functions
|
|
3. **Easier to maintain** - Changes don't affect unrelated code
|
|
4. **Easier to understand** - Clear module boundaries
|
|
5. **Better IDE support** - Faster autocomplete, better error detection
|
|
6. **Team-friendly** - Multiple developers can work without conflicts
|
|
|
|
## Implementation Strategy
|
|
|
|
### Phase 1: Backend (4-5 hours)
|
|
1. Create all router files with endpoints
|
|
2. Create service/helper files
|
|
3. Extract Pydantic models
|
|
4. Refactor main.py to just registration
|
|
5. Test all endpoints still work
|
|
|
|
### Phase 2: Frontend (3-4 hours)
|
|
1. Create type definitions
|
|
2. Extract hooks
|
|
3. Create component files
|
|
4. Refactor Game.tsx to use components
|
|
5. Test all functionality still works
|
|
|
|
### Phase 3: TypeScript Configuration (30 minutes)
|
|
1. Create/update `tsconfig.json`
|
|
2. Add proper type definitions
|
|
3. Fix VSCode errors
|
|
|
|
### Phase 4: Testing & Documentation (1 hour)
|
|
1. Verify all features work
|
|
2. Update README with new structure
|
|
3. Create architecture diagram
|
|
|
|
## Questions Before Proceeding
|
|
|
|
1. **Should I continue with the full refactoring now?**
|
|
- This will take significant time (8-10 hours of work)
|
|
- Will create 30+ new files
|
|
- Will require thorough testing
|
|
|
|
2. **Do you want me to do it all at once or in phases?**
|
|
- All at once: Complete transformation
|
|
- Phases: Backend first, then frontend, then testing
|
|
|
|
3. **Any specific preferences for file organization?**
|
|
- Current plan follows standard FastAPI/React best practices
|
|
- Open to adjustments
|
|
|
|
## Recommendation
|
|
|
|
I recommend doing this in **phases with testing after each**:
|
|
1. **Phase 1**: Backend refactoring (today) - Most critical, easier to test
|
|
2. **Phase 2**: Frontend refactoring (next session) - Can verify backend works first
|
|
3. **Phase 3**: TypeScript fixes (quick win)
|
|
4. **Phase 4**: Final testing and documentation
|
|
|
|
This approach:
|
|
- Allows for testing and validation at each step
|
|
- Reduces risk of breaking everything at once
|
|
- Gives you time to review and provide feedback
|
|
- Easier to roll back if issues arise
|
|
|
|
Would you like me to proceed with **Phase 1: Backend Refactoring** now?
|