paper-dynasty-gameplay-webapp/app/README.md
Cal Corum 1c24161e76 CLAUDE: Achieve 100% test pass rate with comprehensive AI service testing
- Fix TypeError in check_steal_opportunity by properly mocking catcher defense
- Correct tag_from_third test calculation to account for all adjustment conditions
- Fix pitcher replacement test by setting appropriate allowed runners threshold
- Add comprehensive test coverage for AI service business logic
- Implement VS Code testing panel configuration with pytest integration
- Create pytest.ini for consistent test execution and warning management
- Add test isolation guidelines and factory pattern implementation
- Establish 102 passing tests with zero failures

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-28 17:55:34 -05:00

63 lines
2.5 KiB
Markdown

# App Directory
This directory contains the main application code for the Paper Dynasty web app, following the **Model/Service Architecture** pattern.
## Architecture Overview
The app follows a clean separation of concerns:
- **Models** (`models/`) - Pure data models using SQLModel
- **Services** (`services/`) - Business logic layer with dependency injection
- **Controllers** (`routers/`) - Thin FastAPI route handlers
- **Engine** (`engine/`) - Stateless game simulation functions
- **Configuration** (`config/`) - Application settings and constants
## Key Files
- `main.py` - FastAPI application setup and configuration
- Entry point for the web application
## Directory Structure
```
app/
├── main.py # FastAPI application setup
├── config/ # Configuration and constants
├── models/ # SQLModel data models
├── services/ # Business logic layer (⭐ Core of architecture)
├── repositories/ # Optional data access layer
├── routers/ # FastAPI route handlers
├── engine/ # Stateless game simulation
├── static/ # Static web assets
└── templates/ # Jinja2 HTML templates
```
## Service-First Development
When adding new features:
1. **Start with services** - implement business logic in the service layer
2. **Test services independently** - unit test with mocked dependencies
3. **Create thin routes** - delegate to services via dependency injection
4. **Keep engine stateless** - pure functions for game calculations
## Migration Context
This application is migrated from a Discord bot (`../discord-app/`) with the goal of extracting Discord-specific business logic into clean, testable services that can support multiple interfaces (web, API, mobile, etc.).
### Current Migration Status
**Phase 1: Foundation Data Models** - ✅ **COMPLETE**
-`ManagerAi` - AI configuration (→ AIService with 9 methods)
-`Cardset` - Card set metadata (pure data, no extraction needed)
**Phase 2: Player and Card Data** - 🚧 **NEXT**
- 📋 `Team` - Team identity data (→ UIService for embed property)
- 📋 `Player` - Player metadata (→ UIService for Discord markdown)
**Testing Infrastructure** - ✅ **COMPLETE**
- ✅ Transaction rollback pattern for test isolation
- ✅ Factory pattern for unique test data generation
- ✅ Comprehensive test coverage (23 tests passing)
See `.claude/model-migration-plan.md` for detailed migration tracking.