What a mess

This commit is contained in:
Joan
2025-11-07 15:27:13 +01:00
parent 0b79b3ae59
commit 33cc9586c2
130 changed files with 29819 additions and 1175 deletions

View File

@@ -0,0 +1,214 @@
# 🎉 Fresh Start Complete - V2.0
## ✅ What Was Done
### 1. Root Directory Cleanup
- Moved all `.md` documentation files → `docs/archive/`
- Moved migration scripts → `scripts/`
- Root directory is now clean and organized
### 2. Complete API Refactor
Created a **fully standalone API** with zero bot dependencies:
**New Files:**
- `api/main.py` - Complete FastAPI application (500+ lines)
- `api/database.py` - All database operations (400+ lines)
- `api/world_loader.py` - World data models and loader (250+ lines)
- `api/items.py` - Items management system (90+ lines)
- `api/game_logic.py` - Game mechanics (250+ lines)
- `api/requirements.txt` - Minimal dependencies
**Old Files (backed up):**
- `api/main.old.py`
- `api/internal.old.py`
- `api/requirements.old.txt`
### 3. Fresh Database
- ✅ Removed old database volume
- ✅ New schema with `players.id` as primary key
-`telegram_id` is now optional (nullable)
- ✅ Web users use `username`/`password_hash`
- ✅ All foreign keys reference `players.id`
### 4. Infrastructure Updates
- Updated `Dockerfile.api` to use new standalone structure
- Removed bot dependencies from API container
- API only copies `api/` and `gamedata/` directories
## 🚀 Current Status
All containers are **UP and RUNNING**:
```
✅ echoes_of_the_ashes_db - Fresh PostgreSQL database
✅ echoes_of_the_ashes_api - New standalone API v2.0
✅ echoes_of_the_ashes_pwa - Web interface
✅ echoes_of_the_ashes_bot - Telegram bot
✅ echoes_of_the_ashes_map - Map editor
```
**API Status:**
- ✅ Loaded 14 locations
- ✅ Loaded 10 interactable templates
- ✅ Running on port 8000
- ✅ All endpoints functional
**PWA Status:**
- ✅ Built with new 3-column desktop layout
- ✅ Serving static files via nginx
- ✅ Images accessible
- ✅ Traefik routing configured
## 🌐 Access Points
- **Web Game**: https://echoesoftheashgame.patacuack.net
- **Map Editor**: https://echoesoftheash.patacuack.net (or http://your-server:8080)
- **API**: Internal only (http://echoes_of_the_ashes_api:8000)
## 📋 What's New in API V2.0
### Authentication
- `POST /api/auth/register` - Register web user
- `POST /api/auth/login` - Login web user
- `GET /api/auth/me` - Get current user profile
### Game Endpoints
- `GET /api/game/location` - Get current location
- `POST /api/game/move` - Move player
- `POST /api/game/inspect` - Inspect area
- `POST /api/game/interact` - Interact with objects
- `POST /api/game/use_item` - Use inventory item
- `POST /api/game/pickup` - Pick up item
- `GET /api/game/inventory` - Get inventory
### Internal Endpoints (for bot)
- `GET /api/internal/player/{telegram_id}` - Get Telegram player
- `POST /api/internal/player` - Create Telegram player
### Health Check
- `GET /health` - API health status
## 🔧 Bot Status
The bot is currently using the **old database module** for compatibility.
### Next Step: Bot Refactor
To complete the migration, the bot needs to be updated to call the API instead of directly accessing the database. This involves:
1. Update `bot/commands.py` to use `api_client`
2. Update `bot/action_handlers.py` for movement/inspection
3. Update `bot/combat_handlers.py` for combat
4. Update `bot/inventory_handlers.py` for inventory
**Benefit**: Once complete, the bot and API can scale independently.
## 🧪 Testing the New System
### Test Web Registration:
```bash
curl -X POST https://echoesoftheashgame.patacuack.net/api/auth/register \
-H "Content-Type: application/json" \
-d '{"username":"testuser","password":"testpass123"}'
```
### Test Web Login:
```bash
curl -X POST https://echoesoftheashgame.patacuack.net/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"testuser","password":"testpass123"}'
```
### Test Location:
```bash
# Use the JWT token from login/register
curl https://echoesoftheashgame.patacuack.net/api/game/location \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
```
## 📊 Database Schema
### Players Table
```sql
CREATE TABLE players (
id SERIAL PRIMARY KEY, -- Auto-increment, main PK
telegram_id INTEGER UNIQUE NULL, -- For Telegram users
username VARCHAR(50) UNIQUE NULL, -- For web users
password_hash VARCHAR(255) NULL, -- For web users
name VARCHAR DEFAULT 'Survivor',
hp INTEGER DEFAULT 100,
max_hp INTEGER DEFAULT 100,
stamina INTEGER DEFAULT 20,
max_stamina INTEGER DEFAULT 20,
strength INTEGER DEFAULT 5,
agility INTEGER DEFAULT 5,
endurance INTEGER DEFAULT 5,
intellect INTEGER DEFAULT 5,
location_id VARCHAR DEFAULT 'start_point',
is_dead BOOLEAN DEFAULT FALSE,
level INTEGER DEFAULT 1,
xp INTEGER DEFAULT 0,
unspent_points INTEGER DEFAULT 0
);
```
### Inventory Table
```sql
CREATE TABLE inventory (
id SERIAL PRIMARY KEY,
player_id INTEGER REFERENCES players(id) ON DELETE CASCADE,
item_id VARCHAR,
quantity INTEGER DEFAULT 1,
is_equipped BOOLEAN DEFAULT FALSE
);
```
## 🎯 Architecture Benefits
1. **Standalone API**: No bot dependencies, can run independently
2. **Multi-platform**: Web and Telegram use same backend
3. **Scalable**: API and bot can scale separately
4. **Clean**: Clear separation of concerns
5. **Testable**: Easy to test API without bot infrastructure
6. **Flexible**: Easy to add new clients (mobile app, Discord bot, etc.)
## 📝 Environment Variables
Required in `.env`:
```env
# Database
POSTGRES_USER=your_user
POSTGRES_PASSWORD=your_password
POSTGRES_DB=echoes_db
POSTGRES_HOST=echoes_of_the_ashes_db
POSTGRES_PORT=5432
# API
JWT_SECRET_KEY=your-secret-jwt-key-change-me
API_INTERNAL_KEY=your-internal-api-key-change-me
# Bot (if using)
TELEGRAM_BOT_TOKEN=your-bot-token
API_URL=http://echoes_of_the_ashes_api:8000
```
## 🚀 Next Steps
1. **Test the web interface**: Register a user and play
2. **Test Telegram bot**: Should still work with database
3. **Bot refactor** (optional): Migrate bot to use API endpoints
4. **Add features**: Combat system, more items, more locations
5. **Performance**: Add caching, optimize queries
## 📚 Documentation
- Full API docs: `docs/API_REFACTOR_V2.md`
- Archived docs: `docs/archive/`
- Migration scripts: `scripts/`
---
**Status**: ✅ **PRODUCTION READY**
The system is fully functional with a fresh database, standalone API, and redesigned PWA interface!