## Authentication Implementation ### Backend - Implemented complete Discord OAuth flow in auth.py: * POST /api/auth/discord/callback - Exchange code for tokens * POST /api/auth/refresh - Refresh JWT tokens * GET /api/auth/me - Get authenticated user info * GET /api/auth/verify - Verify auth status - JWT token creation with 7-day expiration - Refresh token support for session persistence - Bearer token authentication for Discord API calls ### Frontend - Created auth/login.vue - Discord OAuth initiation page - Created auth/callback.vue - OAuth callback handler with states - Integrated with existing auth store (already implemented) - LocalStorage persistence for tokens and user data - Full error handling and loading states ### Configuration - Updated backend .env with Discord OAuth credentials - Updated frontend .env with Discord Client ID - Fixed redirect URI to port 3001 ## SBA API Integration ### Backend - Extended SbaApiClient with get_teams(season, active_only=True) - Added bearer token auth support (_get_headers method) - Created /api/teams route with TeamResponse model - Registered teams router in main.py - Filters out IL (Injured List) teams automatically - Returns team data: id, abbrev, names, color, gmid, division ### Integration - Connected to production SBA API: https://api.sba.manticorum.com - Bearer token authentication working - Successfully fetches ~16 active Season 3 teams ## Documentation - Created SESSION_NOTES.md - Current session accomplishments - Created NEXT_SESSION.md - Game creation implementation guide - Updated implementation/NEXT_SESSION.md ## Testing - ✅ Discord OAuth flow tested end-to-end - ✅ User authentication and session persistence verified - ✅ Teams API returns real data from production - ✅ All services running and communicating ## What Works Now - User can sign in with Discord - Sessions persist across reloads - Backend fetches real teams from SBA API - Ready for game creation implementation ## Next Steps See .claude/NEXT_SESSION.md for detailed game creation implementation plan. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
131 lines
2.9 KiB
Markdown
131 lines
2.9 KiB
Markdown
# Next Session - Game Creation Implementation
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
# Backend
|
|
cd backend && uv run python -m app.main
|
|
|
|
# Frontend
|
|
cd frontend-sba && bun run dev
|
|
|
|
# Redis (if not running)
|
|
cd backend && docker compose up -d redis
|
|
```
|
|
|
|
Services will be at:
|
|
- Backend: http://localhost:8000
|
|
- Frontend: http://localhost:3001
|
|
- API Docs: http://localhost:8000/docs
|
|
|
|
## Current State
|
|
|
|
✅ **Complete:**
|
|
- Discord OAuth authentication (full flow)
|
|
- SBA API integration (teams endpoint)
|
|
- User can sign in and stay authenticated
|
|
|
|
## Immediate Next Steps
|
|
|
|
### 1. Update Frontend Create Game Page (~15 min)
|
|
|
|
**File:** `frontend-sba/pages/games/create.vue`
|
|
|
|
**Changes needed:**
|
|
- Add `onMounted` hook to fetch teams from `/api/teams/?season=3`
|
|
- Populate team dropdowns with real data
|
|
- Remove placeholder message
|
|
- Add loading states
|
|
|
|
**Reference:** See existing auth store pattern in `store/auth.ts`
|
|
|
|
### 2. Implement Game Creation Endpoint (~20 min)
|
|
|
|
**File:** `backend/app/api/routes/games.py`
|
|
|
|
**Implement:** `POST /api/games`
|
|
```python
|
|
class CreateGameRequest(BaseModel):
|
|
name: str
|
|
home_team_id: int
|
|
away_team_id: int
|
|
is_ai_opponent: bool
|
|
season: int = 3
|
|
league_id: str = "sba"
|
|
|
|
@router.post("/")
|
|
async def create_game(request: CreateGameRequest):
|
|
# Use existing game engine to create game
|
|
# Return game_id
|
|
```
|
|
|
|
**Reference:** See `backend/terminal_client/` for game creation examples
|
|
|
|
### 3. Test Game Creation Flow (~10 min)
|
|
|
|
1. Sign in at http://localhost:3001/auth/login
|
|
2. Navigate to /games/create
|
|
3. Select two teams
|
|
4. Create game
|
|
5. Verify game appears in backend
|
|
|
|
### 4. Implement Game View Page (~30 min)
|
|
|
|
Once games can be created, implement:
|
|
- `frontend-sba/pages/games/[id].vue` - Display live game
|
|
- WebSocket connection to game
|
|
- Use existing components from Phase F2
|
|
|
|
## Technical Context
|
|
|
|
### SBA Teams Endpoint
|
|
|
|
```bash
|
|
curl "http://localhost:8000/api/teams/?season=3"
|
|
```
|
|
|
|
Returns ~16 active teams with:
|
|
- id, abbrev, sname, lname
|
|
- color (hex), gmid, gmid2
|
|
- division info
|
|
|
|
### Game Engine
|
|
|
|
Backend has complete game engine ready:
|
|
- `app/core/game_engine.py` - Main engine
|
|
- `app/core/state_manager.py` - State management
|
|
- `app/websocket/handlers.py` - 15 event handlers
|
|
- All tested with 730/731 tests passing
|
|
|
|
### Frontend Components
|
|
|
|
Phase F2 components ready to use:
|
|
- `components/Game/ScoreBoard.vue`
|
|
- `components/Game/GameBoard.vue`
|
|
- `components/Game/CurrentSituation.vue`
|
|
- `components/Game/PlayByPlay.vue`
|
|
|
|
See `frontend-sba/components/CLAUDE.md` for usage.
|
|
|
|
## Known Issues
|
|
|
|
- None currently
|
|
|
|
## Environment
|
|
|
|
**Backend .env configured:**
|
|
- Discord OAuth credentials
|
|
- SBA API URL and token
|
|
- Database connection working
|
|
|
|
**Frontend .env configured:**
|
|
- Discord Client ID
|
|
- API URL pointing to localhost:8000
|
|
|
|
## Resources
|
|
|
|
- **PRD:** `../prd-web-scorecard-1.1.md`
|
|
- **Backend Impl:** `../.claude/implementation/`
|
|
- **WebSocket Protocol:** See backend WebSocket handlers
|
|
- **Component Examples:** `frontend-sba/pages/demo.vue`
|