Files
gh-christianlouis-leagueledger/docs/development/architecture.md
T
Christian Krakau-Louis 6306abf6d9 Add comprehensive documentation for LeagueLedger
- Created architecture overview in development/architecture.md
- Added installation guide in getting-started/installation.md
- Developed user guide with detailed instructions in user-guide/overview.md, user-guide/teams.md, user-guide/qr-codes.md
- Implemented social login setup documentation in social_login_setup.md
- Updated index.md to include links to new documentation sections
- Configured mkdocs.yml for site structure and theme
- Added requirements.txt for documentation dependencies
2025-04-15 12:32:03 +02:00

188 lines
6.2 KiB
Markdown

# System Architecture
This document provides an overview of the LeagueLedger system architecture to help developers understand the system's structure and components.
## Overview
LeagueLedger is built with a modern web architecture using FastAPI as the backend framework and a combination of server-rendered templates and JavaScript for the frontend. The system follows a modular design pattern to maintain separation of concerns and enable easy extension.
## Architecture Diagram
```mermaid
graph TD
Client[Client Browser] --> FastAPI[FastAPI Application]
FastAPI --> Templates[Jinja2 Templates]
FastAPI --> Static[Static Files]
FastAPI --> Auth[Authentication]
FastAPI --> DB[Database]
Auth --> OAuth[OAuth Providers]
Auth --> Local[Local Auth]
FastAPI --> Email[Email Service]
FastAPI --> QR[QR Code Generation]
subgraph "Data Layer"
DB --> SQLAlchemy[SQLAlchemy ORM]
SQLAlchemy --> Models[Data Models]
end
subgraph "Application Layer"
FastAPI --> Routes[API Routes]
Routes --> Views[View Controllers]
Views --> Services[Services]
end
```
## Core Components
### Backend Framework
LeagueLedger uses [FastAPI](https://fastapi.tiangolo.com/), a modern, high-performance web framework for building APIs with Python 3.7+ based on standard Python type hints.
Key FastAPI components used:
- **Dependency Injection**: For database sessions, authentication, and other services
- **Pydantic Models**: For data validation and serialization
- **Middleware**: For session management, authentication, and error handling
### Database
The system uses SQLAlchemy as an ORM (Object-Relational Mapper) to interact with the database. Key database components include:
- **SQLAlchemy Models**: Defined in `app/models/`
- **Database Configuration**: Found in `app/db.py`
- **Migrations**: Handled through custom migration scripts in `app/db_migrations.py`
The data model centers around these core entities:
- **Users**: User accounts and authentication
- **Teams**: Groups of users competing together
- **TeamMemberships**: Relationship between users and teams
- **QRCodes**: Generated codes for awarding points
- **QRSets**: Collections of QR codes for specific events
- **Events**: Scheduled activities
- **TeamAchievements**: Recognitions earned by teams
### Authentication System
Authentication is handled through multiple mechanisms:
- **Session-based Authentication**: For traditional username/password login
- **OAuth Authentication**: For social login via multiple providers
- **Authentication Middleware**: Integrated with Starlette's authentication system
OAuth providers are implemented as pluggable components, allowing easy addition of new providers.
### Frontend
The frontend is primarily built with:
- **Jinja2 Templates**: For server-side rendering of HTML
- **Tailwind CSS**: For responsive styling
- **JavaScript**: For interactive elements
- **Static Assets**: CSS, JS, images stored in `app/static/`
### Template Engine
[Jinja2](https://jinja.palletsprojects.com/) is used as the template engine with:
- **Base Templates**: Providing layout scaffolding
- **Template Inheritance**: Enabling consistent UI across pages
- **Template Globals**: For user context and common functions
### QR Code System
QR codes are central to the application's functionality:
- **Generation**: Creating unique QR codes with the `qrcode` library
- **Scanning**: Web-based scanning using the device camera
- **Points Attribution**: Mapping scanned codes to point values and teams
### Internationalization
The application supports multiple languages through:
- **Babel**: For i18n infrastructure
- **Translation Files**: Stored in `app/i18n/locales/`
- **Language Selection**: User-configurable preferences
## Data Flow
### Request Lifecycle
1. **Client Request**: Browser sends HTTP request
2. **Middleware Processing**: Session, authentication, template globals
3. **Route Handling**: Matching URL to appropriate handler
4. **View Controller**: Processing business logic
5. **Database Interactions**: Through SQLAlchemy models
6. **Template Rendering**: Creating HTML with Jinja2
7. **Response**: Returning HTML or redirect to client
### Authentication Flow
1. **Login Request**: User submits credentials
2. **Verification**: Checking against stored hash
3. **Session Creation**: Creating session on successful auth
4. **OAuth Flow** (for social login):
- Redirect to provider
- Provider authentication
- Callback with authorization code
- Token exchange
- User info retrieval
- Account creation or linking
## Directory Structure
```
leagueledger/
├── app/ # Application code
│ ├── auth/ # Authentication components
│ ├── i18n/ # Internationalization
│ ├── models/ # Database models
│ ├── static/ # Static files
│ ├── templates/ # HTML templates
│ ├── utils/ # Utility functions
│ └── views/ # View controllers
├── docs/ # Documentation
├── scripts/ # Helper scripts
└── tests/ # Test suite
```
## Development Patterns
### Dependency Injection
FastAPI's dependency injection system is used extensively to:
- Provide database sessions
- Ensure authentication
- Validate permissions
- Supply configuration
Example:
```python
@router.get("/secure-endpoint")
async def secure_endpoint(db: Session = Depends(get_db),
current_user: User = Depends(get_current_user)):
# Function implementation
```
### Service Pattern
Business logic is organized into service modules to separate concerns:
- **Data access**: Database operations
- **Business rules**: Application logic
- **Presentation**: View rendering and response formatting
### Error Handling
Centralized error handling through:
- **Exception handlers**: For API errors
- **Custom templates**: For user-friendly error pages
- **Logging**: Comprehensive error logging
## Next Steps
For more detailed information about the development aspects, refer to:
- [API Reference](api-reference.md)
- [Database Schema](database-schema.md)
- [Frontend Development](frontend-dev.md)
- [Backend Development](backend-dev.md)
- [Testing](testing.md)