Remove bloat

This commit is contained in:
Joakim Hellsén 2025-10-13 02:07:33 +02:00
commit 715cbf4bf0
51 changed files with 691 additions and 3032 deletions

View file

@ -1,115 +0,0 @@
# TTVDrops AI Coding Agent Instructions
## Project Overview
TTVDrops is a Django web application that tracks Twitch drop campaigns and sends notifications when new drops become available. It processes Twitch API data to monitor gaming drops, campaigns, and user subscriptions.
## Architecture & Key Components
### Core Django Structure
- **Config Package**: `config/` - Django settings, URLs, WSGI configuration
- **Twitch App**: `twitch/` - Main application handling drop campaigns, games, organizations
- **Accounts App**: `accounts/` - Custom user model extending Django's AbstractUser
- **Templates**: `templates/` - Django templates with base layout and app-specific views
- **Static Files**: `staticfiles/` - Collected static assets including admin and debug toolbar assets
### Data Model Hierarchy
The application follows a specific data flow: Organization → Game → DropCampaign → TimeBasedDrop → DropBenefit
Key models in `twitch/models.py`:
- `Organization`: Twitch organizations that own games
- `Game`: Games on Twitch with drop campaigns
- `DropCampaign`: Individual drop campaigns with start/end dates
- `TimeBasedDrop`: Time-based drops within campaigns (require watching X minutes)
- `DropBenefit`: Rewards earned from drops (connected via `DropBenefitEdge`)
- `NotificationSubscription`: User subscriptions to games/organizations for notifications
### Key Data Processing Patterns
#### JSON Import System
The project heavily uses the `import_drops.py` management command to process Twitch API responses:
- Handles various JSON response structures from Twitch GraphQL API
- Automatically categorizes and moves processed files to subdirectories
- Uses `json_repair` library for malformed JSON
- Implements transaction-based imports with error handling
```bash
# Import from single file or directory
uv run python manage.py import_drops path/to/json/file_or_directory
```
#### Development Workflow
Always use `uv` for dependency management and Python execution:
```bash
uv run python manage.py runserver # Start development server
uv run python manage.py migrate # Apply migrations
uv run python manage.py makemigrations # Create new migrations
uv run pytest # Run tests
uv run python manage.py import_drops responses/ # Import Twitch data
```
## Project-Specific Conventions
### Code Style & Linting
- **Ruff**: Comprehensive linting with extensive rule set (see `pyproject.toml`)
- **Type Annotations**: All functions require type hints with `from __future__ import annotations`
- **Google Docstring Style**: Use Google-style docstrings for functions/classes
- **Django Stubs**: mypy integration for Django type checking
### Database Configuration
- **SQLite with WAL mode**: Optimized SQLite configuration in `settings.py`
- **Custom data directory**: Uses `platformdirs` for OS-appropriate data storage
- **Timezone-aware**: All datetime fields use Django's timezone utilities
### Testing Setup
- **pytest-django**: Test configuration in `conftest.py` and `pyproject.toml`
- **Parallel execution**: Tests run with `pytest-xdist` using `--reuse-db --no-migrations`
- **Fast password hashing**: MD5 hasher for tests performance
## Important Development Notes
### Environment Variables
Required environment variables (use `.env` file):
- `DJANGO_SECRET_KEY`: Django secret key (required)
- `DEBUG`: Boolean for debug mode (default: "True")
- Email settings: `EMAIL_HOST_USER`, `EMAIL_HOST_PASSWORD`, etc.
### File Processing Patterns
When working with the import system:
- JSON files are automatically categorized and moved to `processed/` subdirectories
- Failed imports go to specific directories: `broken/`, `actual_error/`, `we_should_double_check/`
- The system handles multiple Twitch API response formats and GraphQL operation types
### Model Relationships
- Games can have multiple drop campaigns
- Drop campaigns contain time-based drops that unlock benefits
- Users can subscribe to games/organizations for notifications
- Organizations own games (nullable relationship)
### RSS Feeds
The application provides RSS feeds for organizations, games, and campaigns via `twitch/feeds.py`
### Development Tools
- **Debug Toolbar**: Enabled in development for database query analysis
- **Browser Reload**: Automatic page refresh during development
- **Django Extensions**: Consider using for shell_plus and other utilities
## Common Pitfalls
- Always use timezone-aware datetime objects with `django.utils.timezone`
- Import command requires specific JSON structures - check existing patterns in `import_drops.py`
- Model field updates should filter out None values to avoid overwriting existing data
- Use `update_or_create()` pattern consistently for data imports to handle duplicates
## Quick Reference Commands
```bash
# Development setup
uv run python manage.py createsuperuser
uv run python manage.py collectstatic
# Data processing
uv run python manage.py import_drops responses/
uv run python manage.py import_drops single_file.json
# Testing
uv run pytest -v # Verbose test output
uv run pytest twitch/tests/ # Test specific app
```