- 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>
63 lines
2.5 KiB
Markdown
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. |