Redesign
This commit is contained in:
156
docs/redesign/PHASE-08-PLATFORM-SERVICE.md
Normal file
156
docs/redesign/PHASE-08-PLATFORM-SERVICE.md
Normal file
@@ -0,0 +1,156 @@
|
||||
# Phase 8: Platform Service Simplification
|
||||
|
||||
## Agent Assignment
|
||||
**Primary Agent:** platform-agent
|
||||
**Duration:** 35-45 minutes
|
||||
|
||||
## Prerequisites
|
||||
- Phase 1 (Docker Compose) must be complete
|
||||
|
||||
## Objectives
|
||||
1. Remove MSSQL database dependency
|
||||
2. Remove ETL container and pipeline
|
||||
3. Update to use mvp-postgres and mvp-redis
|
||||
4. Load VPIC data at startup (not weekly ETL)
|
||||
5. Simplify to single container
|
||||
|
||||
## Step-by-Step Instructions
|
||||
|
||||
### Step 1: Update Platform Service Config
|
||||
Modify `mvp-platform-services/vehicles/config.py`:
|
||||
|
||||
```python
|
||||
# Update database connection
|
||||
DATABASE_URL = os.getenv(
|
||||
'DATABASE_URL',
|
||||
'postgresql://postgres:password@mvp-postgres:5432/motovaultpro'
|
||||
)
|
||||
|
||||
# Update Redis connection
|
||||
REDIS_URL = os.getenv(
|
||||
'REDIS_URL',
|
||||
'redis://mvp-redis:6379'
|
||||
)
|
||||
|
||||
# Use vehicles_platform schema for isolation
|
||||
SCHEMA = 'vehicles_platform'
|
||||
```
|
||||
|
||||
### Step 2: Update requirements.txt
|
||||
Remove MSSQL dependencies:
|
||||
```
|
||||
# REMOVE:
|
||||
# pymssql
|
||||
# pyodbc
|
||||
|
||||
# KEEP:
|
||||
psycopg2-binary
|
||||
redis
|
||||
fastapi
|
||||
uvicorn
|
||||
```
|
||||
|
||||
### Step 3: Remove ETL Code
|
||||
```bash
|
||||
cd mvp-platform-services/vehicles/
|
||||
|
||||
# Remove ETL scripts
|
||||
rm -rf etl/
|
||||
|
||||
# Remove MSSQL migration scripts
|
||||
rm -rf migrations/mssql/
|
||||
```
|
||||
|
||||
### Step 4: Create Startup Data Loader
|
||||
Create `mvp-platform-services/vehicles/startup_loader.py`:
|
||||
|
||||
```python
|
||||
"""Load VPIC data at service startup"""
|
||||
import asyncio
|
||||
from database import get_db
|
||||
from vpic_client import VPICClient
|
||||
|
||||
async def load_initial_data():
|
||||
"""Load vehicle data from VPIC API at startup"""
|
||||
db = await get_db()
|
||||
vpic = VPICClient()
|
||||
|
||||
# Check if data already loaded
|
||||
result = await db.fetch_one("SELECT COUNT(*) FROM vehicles_platform.makes")
|
||||
if result[0] > 0:
|
||||
print("Data already loaded, skipping...")
|
||||
return
|
||||
|
||||
# Load makes, models, etc. from VPIC
|
||||
print("Loading initial vehicle data...")
|
||||
# Implementation here...
|
||||
```
|
||||
|
||||
### Step 5: Update main.py
|
||||
```python
|
||||
from startup_loader import load_initial_data
|
||||
|
||||
@app.on_event("startup")
|
||||
async def startup_event():
|
||||
"""Run on service startup"""
|
||||
await load_initial_data()
|
||||
```
|
||||
|
||||
### Step 6: Update Dockerfile
|
||||
```dockerfile
|
||||
FROM python:3.11-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
COPY . .
|
||||
|
||||
# No ETL dependencies needed
|
||||
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||
```
|
||||
|
||||
### Step 7: Rebuild and Test
|
||||
```bash
|
||||
# Rebuild platform service
|
||||
docker compose build mvp-platform
|
||||
|
||||
# Restart
|
||||
docker compose up -d mvp-platform
|
||||
|
||||
# Check logs
|
||||
docker compose logs mvp-platform
|
||||
|
||||
# Test API
|
||||
curl http://localhost:8000/health
|
||||
curl http://localhost:8000/vehicles/makes?year=2024
|
||||
```
|
||||
|
||||
## Validation Criteria
|
||||
- [ ] No MSSQL dependencies in requirements.txt
|
||||
- [ ] No ETL code remains
|
||||
- [ ] Uses mvp-postgres for database
|
||||
- [ ] Uses mvp-redis for cache
|
||||
- [ ] Service starts successfully
|
||||
- [ ] API endpoints work
|
||||
- [ ] VIN decode functional
|
||||
|
||||
**Validation Commands:**
|
||||
```bash
|
||||
grep -r "mssql\|pymssql\|pyodbc" mvp-platform-services/vehicles/
|
||||
# Expected: 0 results
|
||||
|
||||
docker compose exec mvp-platform python -c "import psycopg2; print('OK')"
|
||||
# Expected: OK
|
||||
|
||||
curl http://localhost:8000/vehicles/makes?year=2024
|
||||
# Expected: JSON response with makes
|
||||
```
|
||||
|
||||
## Update EXECUTION-STATE.json
|
||||
```json
|
||||
{
|
||||
"phases": {"8": {"status": "completed", "validation_passed": true}}
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user