mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 10:11:09 -05:00
443
README.md
443
README.md
@@ -1,87 +1,200 @@
|
|||||||
# ThrillWiki Backend
|
# ThrillWiki Django + Vue.js Monorepo
|
||||||
|
|
||||||
Django REST API backend for the ThrillWiki monorepo.
|
A comprehensive theme park and roller coaster information system built with a modern monorepo architecture combining Django REST API backend with Vue.js frontend.
|
||||||
|
|
||||||
## 🏗️ Architecture
|
## 🏗️ Architecture Overview
|
||||||
|
|
||||||
This backend follows Django best practices with a modular app structure:
|
This project uses a monorepo structure that cleanly separates backend and frontend concerns while maintaining shared resources and documentation:
|
||||||
|
|
||||||
```
|
```
|
||||||
backend/
|
thrillwiki-monorepo/
|
||||||
├── apps/ # Django applications
|
├── backend/ # Django REST API (Port 8000)
|
||||||
│ ├── accounts/ # User management
|
│ ├── apps/ # Modular Django applications
|
||||||
│ ├── parks/ # Theme park data
|
│ ├── config/ # Django settings and configuration
|
||||||
│ ├── rides/ # Ride information
|
│ ├── templates/ # Django templates
|
||||||
│ ├── moderation/ # Content moderation
|
│ └── static/ # Static assets
|
||||||
│ ├── location/ # Geographic data
|
├── frontend/ # Vue.js SPA (Port 5174)
|
||||||
│ ├── media/ # File management
|
│ ├── src/ # Vue.js source code
|
||||||
│ ├── email_service/ # Email functionality
|
│ ├── public/ # Static assets
|
||||||
│ └── core/ # Core utilities
|
│ └── dist/ # Build output
|
||||||
├── config/ # Django configuration
|
├── shared/ # Shared resources and documentation
|
||||||
│ ├── django/ # Settings files
|
│ ├── docs/ # Comprehensive documentation
|
||||||
│ └── settings/ # Modular settings
|
│ ├── scripts/ # Development and deployment scripts
|
||||||
├── templates/ # Django templates
|
│ ├── config/ # Shared configuration
|
||||||
├── static/ # Static files
|
│ └── media/ # Shared media files
|
||||||
└── tests/ # Test files
|
├── architecture/ # Architecture documentation
|
||||||
|
└── profiles/ # Development profiles
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🛠️ Technology Stack
|
|
||||||
|
|
||||||
- **Django 5.0+** - Web framework
|
|
||||||
- **Django REST Framework** - API framework
|
|
||||||
- **PostgreSQL** - Primary database
|
|
||||||
- **Redis** - Caching and sessions
|
|
||||||
- **UV** - Python package management
|
|
||||||
- **Celery** - Background task processing
|
|
||||||
|
|
||||||
## 🚀 Quick Start
|
## 🚀 Quick Start
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
- Python 3.11+
|
- **Python 3.11+** with [uv](https://docs.astral.sh/uv/) for backend dependencies
|
||||||
- [uv](https://docs.astral.sh/uv/) package manager
|
- **Node.js 18+** with [pnpm](https://pnpm.io/) for frontend dependencies
|
||||||
- PostgreSQL 14+
|
- **PostgreSQL 14+** (optional, defaults to SQLite for development)
|
||||||
- Redis 6+
|
- **Redis 6+** (optional, for caching and sessions)
|
||||||
|
|
||||||
### Setup
|
### Development Setup
|
||||||
|
|
||||||
1. **Install dependencies**
|
1. **Clone the repository**
|
||||||
|
```bash
|
||||||
|
git clone <repository-url>
|
||||||
|
cd thrillwiki-monorepo
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Install dependencies**
|
||||||
|
```bash
|
||||||
|
# Install frontend dependencies
|
||||||
|
pnpm install
|
||||||
|
|
||||||
|
# Install backend dependencies
|
||||||
|
cd backend && uv sync && cd ..
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Environment configuration**
|
||||||
|
```bash
|
||||||
|
# Copy environment files
|
||||||
|
cp .env.example .env
|
||||||
|
cp backend/.env.example backend/.env
|
||||||
|
cp frontend/.env.development frontend/.env.local
|
||||||
|
|
||||||
|
# Edit .env files with your settings
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Database setup**
|
||||||
```bash
|
```bash
|
||||||
cd backend
|
cd backend
|
||||||
uv sync
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **Environment configuration**
|
|
||||||
```bash
|
|
||||||
cp .env.example .env
|
|
||||||
# Edit .env with your settings
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **Database setup**
|
|
||||||
```bash
|
|
||||||
uv run manage.py migrate
|
uv run manage.py migrate
|
||||||
uv run manage.py createsuperuser
|
uv run manage.py createsuperuser
|
||||||
|
cd ..
|
||||||
```
|
```
|
||||||
|
|
||||||
4. **Start development server**
|
5. **Start development servers**
|
||||||
```bash
|
```bash
|
||||||
uv run manage.py runserver
|
# Start both servers concurrently
|
||||||
|
pnpm run dev
|
||||||
|
|
||||||
|
# Or start individually
|
||||||
|
pnpm run dev:frontend # Vue.js on :5174
|
||||||
|
pnpm run dev:backend # Django on :8000
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 📁 Project Structure Details
|
||||||
|
|
||||||
|
### Backend (`/backend`)
|
||||||
|
- **Django 5.0+** with REST Framework for API development
|
||||||
|
- **Modular app architecture** with separate apps for parks, rides, accounts, etc.
|
||||||
|
- **UV package management** for fast, reliable Python dependency management
|
||||||
|
- **PostgreSQL/SQLite** database with comprehensive entity relationships
|
||||||
|
- **Redis** for caching, sessions, and background tasks
|
||||||
|
- **Comprehensive API** with frontend serializers for camelCase conversion
|
||||||
|
|
||||||
|
### Frontend (`/frontend`)
|
||||||
|
- **Vue 3** with Composition API and `<script setup>` syntax
|
||||||
|
- **TypeScript** for type safety and better developer experience
|
||||||
|
- **Vite** for lightning-fast development and optimized production builds
|
||||||
|
- **Tailwind CSS** with custom design system and dark mode support
|
||||||
|
- **Pinia** for state management with modular stores
|
||||||
|
- **Vue Router** for client-side routing
|
||||||
|
- **Comprehensive UI component library** with shadcn-vue components
|
||||||
|
|
||||||
|
### Shared Resources (`/shared`)
|
||||||
|
- **Documentation** - Comprehensive guides and API documentation
|
||||||
|
- **Development scripts** - Automated setup, build, and deployment scripts
|
||||||
|
- **Configuration** - Shared Docker, CI/CD, and infrastructure configs
|
||||||
|
- **Media management** - Centralized media file handling and optimization
|
||||||
|
|
||||||
|
## 🛠️ Development Workflow
|
||||||
|
|
||||||
|
### Available Scripts
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Development
|
||||||
|
pnpm run dev # Start both servers concurrently
|
||||||
|
pnpm run dev:frontend # Frontend only (:5174)
|
||||||
|
pnpm run dev:backend # Backend only (:8000)
|
||||||
|
|
||||||
|
# Building
|
||||||
|
pnpm run build # Build frontend for production
|
||||||
|
pnpm run build:staging # Build for staging environment
|
||||||
|
pnpm run build:production # Build for production environment
|
||||||
|
|
||||||
|
# Testing
|
||||||
|
pnpm run test # Run all tests
|
||||||
|
pnpm run test:frontend # Frontend unit and E2E tests
|
||||||
|
pnpm run test:backend # Backend unit and integration tests
|
||||||
|
|
||||||
|
# Code Quality
|
||||||
|
pnpm run lint # Lint all code
|
||||||
|
pnpm run type-check # TypeScript type checking
|
||||||
|
|
||||||
|
# Setup and Maintenance
|
||||||
|
pnpm run install:all # Install all dependencies
|
||||||
|
./shared/scripts/dev/setup-dev.sh # Full development setup
|
||||||
|
./shared/scripts/dev/start-all.sh # Start all services
|
||||||
|
```
|
||||||
|
|
||||||
|
### Backend Development
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd backend
|
||||||
|
|
||||||
|
# Django management commands
|
||||||
|
uv run manage.py migrate
|
||||||
|
uv run manage.py makemigrations
|
||||||
|
uv run manage.py createsuperuser
|
||||||
|
uv run manage.py collectstatic
|
||||||
|
|
||||||
|
# Testing and quality
|
||||||
|
uv run manage.py test
|
||||||
|
uv run black . # Format code
|
||||||
|
uv run flake8 . # Lint code
|
||||||
|
uv run isort . # Sort imports
|
||||||
|
```
|
||||||
|
|
||||||
|
### Frontend Development
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd frontend
|
||||||
|
|
||||||
|
# Vue.js development
|
||||||
|
pnpm run dev # Start dev server
|
||||||
|
pnpm run build # Production build
|
||||||
|
pnpm run preview # Preview production build
|
||||||
|
pnpm run test:unit # Vitest unit tests
|
||||||
|
pnpm run test:e2e # Playwright E2E tests
|
||||||
|
pnpm run lint # ESLint
|
||||||
|
pnpm run type-check # TypeScript checking
|
||||||
|
```
|
||||||
|
|
||||||
## 🔧 Configuration
|
## 🔧 Configuration
|
||||||
|
|
||||||
### Environment Variables
|
### Environment Variables
|
||||||
|
|
||||||
Required environment variables:
|
#### Root `.env`
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Database
|
# Database
|
||||||
DATABASE_URL=postgresql://user:pass@localhost/thrillwiki
|
DATABASE_URL=postgresql://user:pass@localhost/thrillwiki
|
||||||
|
REDIS_URL=redis://localhost:6379
|
||||||
|
|
||||||
# Django
|
# Security
|
||||||
SECRET_KEY=your-secret-key
|
SECRET_KEY=your-secret-key
|
||||||
DEBUG=True
|
DEBUG=True
|
||||||
|
|
||||||
|
# API Configuration
|
||||||
|
API_BASE_URL=http://localhost:8000/api
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Backend `.env`
|
||||||
|
```bash
|
||||||
|
# Django Settings
|
||||||
DJANGO_SETTINGS_MODULE=config.django.local
|
DJANGO_SETTINGS_MODULE=config.django.local
|
||||||
|
DEBUG=True
|
||||||
|
ALLOWED_HOSTS=localhost,127.0.0.1
|
||||||
|
|
||||||
|
# Database
|
||||||
|
DATABASE_URL=postgresql://user:pass@localhost/thrillwiki
|
||||||
|
|
||||||
# Redis
|
# Redis
|
||||||
REDIS_URL=redis://localhost:6379
|
REDIS_URL=redis://localhost:6379
|
||||||
@@ -90,140 +203,142 @@ REDIS_URL=redis://localhost:6379
|
|||||||
EMAIL_HOST=smtp.gmail.com
|
EMAIL_HOST=smtp.gmail.com
|
||||||
EMAIL_PORT=587
|
EMAIL_PORT=587
|
||||||
EMAIL_USE_TLS=True
|
EMAIL_USE_TLS=True
|
||||||
EMAIL_HOST_USER=your-email@gmail.com
|
|
||||||
EMAIL_HOST_PASSWORD=your-app-password
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Settings Structure
|
#### Frontend `.env.local`
|
||||||
|
|
||||||
- `config/django/base.py` - Base settings
|
|
||||||
- `config/django/local.py` - Development settings
|
|
||||||
- `config/django/production.py` - Production settings
|
|
||||||
- `config/django/test.py` - Test settings
|
|
||||||
|
|
||||||
## 📁 Apps Overview
|
|
||||||
|
|
||||||
### Core Apps
|
|
||||||
|
|
||||||
- **accounts** - User authentication and profile management
|
|
||||||
- **parks** - Theme park models and operations
|
|
||||||
- **rides** - Ride information and relationships
|
|
||||||
- **core** - Shared utilities and base classes
|
|
||||||
|
|
||||||
### Support Apps
|
|
||||||
|
|
||||||
- **moderation** - Content moderation workflows
|
|
||||||
- **location** - Geographic data and services
|
|
||||||
- **media** - File upload and management
|
|
||||||
- **email_service** - Email sending and templates
|
|
||||||
|
|
||||||
## 🔌 API Endpoints
|
|
||||||
|
|
||||||
Base URL: `http://localhost:8000/api/`
|
|
||||||
|
|
||||||
### Authentication
|
|
||||||
- `POST /auth/login/` - User login
|
|
||||||
- `POST /auth/logout/` - User logout
|
|
||||||
- `POST /auth/register/` - User registration
|
|
||||||
|
|
||||||
### Parks
|
|
||||||
- `GET /parks/` - List parks
|
|
||||||
- `GET /parks/{id}/` - Park details
|
|
||||||
- `POST /parks/` - Create park (admin)
|
|
||||||
|
|
||||||
### Rides
|
|
||||||
- `GET /rides/` - List rides
|
|
||||||
- `GET /rides/{id}/` - Ride details
|
|
||||||
- `GET /parks/{park_id}/rides/` - Rides by park
|
|
||||||
|
|
||||||
## 🧪 Testing
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Run all tests
|
# API Configuration
|
||||||
uv run manage.py test
|
VITE_API_BASE_URL=http://localhost:8000/api
|
||||||
|
|
||||||
# Run specific app tests
|
# Development
|
||||||
uv run manage.py test apps.parks
|
VITE_APP_TITLE=ThrillWiki (Development)
|
||||||
|
|
||||||
# Run with coverage
|
# Feature Flags
|
||||||
uv run coverage run manage.py test
|
VITE_ENABLE_DEBUG=true
|
||||||
uv run coverage report
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🔧 Management Commands
|
## 📊 Key Features
|
||||||
|
|
||||||
Custom management commands:
|
### Backend Features
|
||||||
|
- **Comprehensive Park Database** - Detailed information about theme parks worldwide
|
||||||
|
- **Extensive Ride Database** - Complete roller coaster and ride information
|
||||||
|
- **User Management** - Authentication, profiles, and permissions
|
||||||
|
- **Content Moderation** - Review and approval workflows
|
||||||
|
- **API Documentation** - Auto-generated OpenAPI/Swagger docs
|
||||||
|
- **Background Tasks** - Celery integration for long-running processes
|
||||||
|
- **Caching Strategy** - Redis-based caching for performance
|
||||||
|
- **Search Functionality** - Full-text search across all content
|
||||||
|
|
||||||
```bash
|
### Frontend Features
|
||||||
# Import park data
|
- **Responsive Design** - Mobile-first approach with Tailwind CSS
|
||||||
uv run manage.py import_parks data/parks.json
|
- **Dark Mode Support** - Complete dark/light theme system
|
||||||
|
- **Real-time Search** - Instant search with debouncing and highlighting
|
||||||
|
- **Interactive Maps** - Park and ride location visualization
|
||||||
|
- **Photo Galleries** - High-quality image management
|
||||||
|
- **User Dashboard** - Personalized content and contributions
|
||||||
|
- **Progressive Web App** - PWA capabilities for mobile experience
|
||||||
|
- **Accessibility** - WCAG 2.1 AA compliance
|
||||||
|
|
||||||
# Generate test data
|
## 📖 Documentation
|
||||||
uv run manage.py generate_test_data
|
|
||||||
|
|
||||||
# Clean up expired sessions
|
### Core Documentation
|
||||||
uv run manage.py clearsessions
|
- **[Backend Documentation](./backend/README.md)** - Django setup and API details
|
||||||
```
|
- **[Frontend Documentation](./frontend/README.md)** - Vue.js setup and development
|
||||||
|
- **[API Documentation](./shared/docs/api/README.md)** - Complete API reference
|
||||||
|
- **[Development Workflow](./shared/docs/development/workflow.md)** - Daily development processes
|
||||||
|
|
||||||
## 📊 Database
|
### Architecture & Deployment
|
||||||
|
- **[Architecture Overview](./architecture/)** - System design and decisions
|
||||||
|
- **[Deployment Guide](./shared/docs/deployment/)** - Production deployment instructions
|
||||||
|
- **[Development Scripts](./shared/scripts/)** - Automation and tooling
|
||||||
|
|
||||||
### Entity Relationships
|
### Additional Resources
|
||||||
|
- **[Contributing Guide](./CONTRIBUTING.md)** - How to contribute to the project
|
||||||
- **Parks** have Operators (required) and PropertyOwners (optional)
|
- **[Code of Conduct](./CODE_OF_CONDUCT.md)** - Community guidelines
|
||||||
- **Rides** belong to Parks and may have Manufacturers/Designers
|
- **[Security Policy](./SECURITY.md)** - Security reporting and policies
|
||||||
- **Users** can create submissions and moderate content
|
|
||||||
|
|
||||||
### Migrations
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Create migrations
|
|
||||||
uv run manage.py makemigrations
|
|
||||||
|
|
||||||
# Apply migrations
|
|
||||||
uv run manage.py migrate
|
|
||||||
|
|
||||||
# Show migration status
|
|
||||||
uv run manage.py showmigrations
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🔐 Security
|
|
||||||
|
|
||||||
- CORS configured for frontend integration
|
|
||||||
- CSRF protection enabled
|
|
||||||
- JWT token authentication
|
|
||||||
- Rate limiting on API endpoints
|
|
||||||
- Input validation and sanitization
|
|
||||||
|
|
||||||
## 📈 Performance
|
|
||||||
|
|
||||||
- Database query optimization
|
|
||||||
- Redis caching for frequent queries
|
|
||||||
- Background task processing with Celery
|
|
||||||
- Database connection pooling
|
|
||||||
|
|
||||||
## 🚀 Deployment
|
## 🚀 Deployment
|
||||||
|
|
||||||
See the [Deployment Guide](../shared/docs/deployment/) for production setup.
|
### Development Environment
|
||||||
|
```bash
|
||||||
|
# Quick start with all services
|
||||||
|
./shared/scripts/dev/start-all.sh
|
||||||
|
|
||||||
## 🐛 Debugging
|
# Full development setup
|
||||||
|
./shared/scripts/dev/setup-dev.sh
|
||||||
|
```
|
||||||
|
|
||||||
### Development Tools
|
### Production Deployment
|
||||||
|
```bash
|
||||||
|
# Build all components
|
||||||
|
./shared/scripts/build/build-all.sh
|
||||||
|
|
||||||
- Django Debug Toolbar
|
# Deploy to production
|
||||||
- Django Extensions
|
./shared/scripts/deploy/deploy.sh
|
||||||
- Silk profiler for performance analysis
|
```
|
||||||
|
|
||||||
### Logging
|
See [Deployment Guide](./shared/docs/deployment/) for detailed production setup instructions.
|
||||||
|
|
||||||
Logs are written to:
|
## 🧪 Testing Strategy
|
||||||
- Console (development)
|
|
||||||
- Files in `logs/` directory (production)
|
### Backend Testing
|
||||||
- External logging service (production)
|
- **Unit Tests** - Individual function and method testing
|
||||||
|
- **Integration Tests** - API endpoint and database interaction testing
|
||||||
|
- **E2E Tests** - Full user journey testing with Selenium
|
||||||
|
|
||||||
|
### Frontend Testing
|
||||||
|
- **Unit Tests** - Component and utility function testing with Vitest
|
||||||
|
- **Integration Tests** - Component interaction testing
|
||||||
|
- **E2E Tests** - User journey testing with Playwright
|
||||||
|
|
||||||
|
### Code Quality
|
||||||
|
- **Linting** - ESLint for JavaScript/TypeScript, Flake8 for Python
|
||||||
|
- **Type Checking** - TypeScript for frontend, mypy for Python
|
||||||
|
- **Code Formatting** - Prettier for frontend, Black for Python
|
||||||
|
|
||||||
## 🤝 Contributing
|
## 🤝 Contributing
|
||||||
|
|
||||||
1. Follow Django coding standards
|
We welcome contributions! Please see our [Contributing Guide](./CONTRIBUTING.md) for details on:
|
||||||
2. Write tests for new features
|
|
||||||
3. Update documentation
|
1. **Development Setup** - Getting your development environment ready
|
||||||
4. Run linting: `uv run flake8 .`
|
2. **Code Standards** - Coding conventions and best practices
|
||||||
5. Format code: `uv run black .`
|
3. **Pull Request Process** - How to submit your changes
|
||||||
|
4. **Issue Reporting** - How to report bugs and request features
|
||||||
|
|
||||||
|
### Quick Contribution Start
|
||||||
|
```bash
|
||||||
|
# Fork and clone the repository
|
||||||
|
git clone https://github.com/your-username/thrillwiki-monorepo.git
|
||||||
|
cd thrillwiki-monorepo
|
||||||
|
|
||||||
|
# Set up development environment
|
||||||
|
./shared/scripts/dev/setup-dev.sh
|
||||||
|
|
||||||
|
# Create a feature branch
|
||||||
|
git checkout -b feature/your-feature-name
|
||||||
|
|
||||||
|
# Make your changes and test
|
||||||
|
pnpm run test
|
||||||
|
|
||||||
|
# Submit a pull request
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📄 License
|
||||||
|
|
||||||
|
This project is licensed under the MIT License - see the [LICENSE](./LICENSE) file for details.
|
||||||
|
|
||||||
|
## 🙏 Acknowledgments
|
||||||
|
|
||||||
|
- **Theme Park Community** - For providing data and inspiration
|
||||||
|
- **Open Source Contributors** - For the amazing tools and libraries
|
||||||
|
- **Vue.js and Django Communities** - For excellent documentation and support
|
||||||
|
|
||||||
|
## 📞 Support
|
||||||
|
|
||||||
|
- **Issues** - [GitHub Issues](https://github.com/your-repo/thrillwiki-monorepo/issues)
|
||||||
|
- **Discussions** - [GitHub Discussions](https://github.com/your-repo/thrillwiki-monorepo/discussions)
|
||||||
|
- **Documentation** - [Project Wiki](https://github.com/your-repo/thrillwiki-monorepo/wiki)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Built with ❤️ for the theme park and roller coaster community**
|
||||||
|
|||||||
48
backend/.env.example
Normal file
48
backend/.env.example
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Django Configuration
|
||||||
|
SECRET_KEY=your-secret-key-here
|
||||||
|
DEBUG=True
|
||||||
|
DJANGO_SETTINGS_MODULE=config.django.local
|
||||||
|
|
||||||
|
# Database
|
||||||
|
DATABASE_URL=postgresql://user:password@localhost:5432/thrillwiki
|
||||||
|
|
||||||
|
# Redis
|
||||||
|
REDIS_URL=redis://localhost:6379
|
||||||
|
|
||||||
|
# Email Configuration (Optional)
|
||||||
|
EMAIL_HOST=smtp.gmail.com
|
||||||
|
EMAIL_PORT=587
|
||||||
|
EMAIL_USE_TLS=True
|
||||||
|
EMAIL_HOST_USER=your-email@gmail.com
|
||||||
|
EMAIL_HOST_PASSWORD=your-app-password
|
||||||
|
|
||||||
|
# ForwardEmail API Configuration
|
||||||
|
FORWARD_EMAIL_BASE_URL=https://api.forwardemail.net
|
||||||
|
FORWARD_EMAIL_API_KEY=your-forwardemail-api-key-here
|
||||||
|
FORWARD_EMAIL_DOMAIN=your-domain.com
|
||||||
|
|
||||||
|
# Media and Static Files
|
||||||
|
MEDIA_URL=/media/
|
||||||
|
STATIC_URL=/static/
|
||||||
|
|
||||||
|
# Security
|
||||||
|
ALLOWED_HOSTS=localhost,127.0.0.1
|
||||||
|
|
||||||
|
# API Configuration
|
||||||
|
CORS_ALLOWED_ORIGINS=http://localhost:3000
|
||||||
|
|
||||||
|
# Feature Flags
|
||||||
|
ENABLE_DEBUG_TOOLBAR=True
|
||||||
|
ENABLE_SILK_PROFILER=False
|
||||||
|
|
||||||
|
# Frontend Configuration
|
||||||
|
FRONTEND_DOMAIN=https://thrillwiki.com
|
||||||
|
|
||||||
|
# Cloudflare Images Configuration
|
||||||
|
CLOUDFLARE_IMAGES_ACCOUNT_ID=your-cloudflare-account-id
|
||||||
|
CLOUDFLARE_IMAGES_API_TOKEN=your-cloudflare-api-token
|
||||||
|
CLOUDFLARE_IMAGES_ACCOUNT_HASH=your-cloudflare-account-hash
|
||||||
|
CLOUDFLARE_IMAGES_WEBHOOK_SECRET=your-webhook-secret
|
||||||
|
|
||||||
|
# Road Trip Service Configuration
|
||||||
|
ROADTRIP_USER_AGENT=ThrillWiki/1.0 (https://thrillwiki.com)
|
||||||
229
backend/README.md
Normal file
229
backend/README.md
Normal file
@@ -0,0 +1,229 @@
|
|||||||
|
# ThrillWiki Backend
|
||||||
|
|
||||||
|
Django REST API backend for the ThrillWiki monorepo.
|
||||||
|
|
||||||
|
## 🏗️ Architecture
|
||||||
|
|
||||||
|
This backend follows Django best practices with a modular app structure:
|
||||||
|
|
||||||
|
```
|
||||||
|
backend/
|
||||||
|
├── apps/ # Django applications
|
||||||
|
│ ├── accounts/ # User management
|
||||||
|
│ ├── parks/ # Theme park data
|
||||||
|
│ ├── rides/ # Ride information
|
||||||
|
│ ├── moderation/ # Content moderation
|
||||||
|
│ ├── location/ # Geographic data
|
||||||
|
│ ├── media/ # File management
|
||||||
|
│ ├── email_service/ # Email functionality
|
||||||
|
│ └── core/ # Core utilities
|
||||||
|
├── config/ # Django configuration
|
||||||
|
│ ├── django/ # Settings files
|
||||||
|
│ └── settings/ # Modular settings
|
||||||
|
├── templates/ # Django templates
|
||||||
|
├── static/ # Static files
|
||||||
|
└── tests/ # Test files
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🛠️ Technology Stack
|
||||||
|
|
||||||
|
- **Django 5.0+** - Web framework
|
||||||
|
- **Django REST Framework** - API framework
|
||||||
|
- **PostgreSQL** - Primary database
|
||||||
|
- **Redis** - Caching and sessions
|
||||||
|
- **UV** - Python package management
|
||||||
|
- **Celery** - Background task processing
|
||||||
|
|
||||||
|
## 🚀 Quick Start
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
- Python 3.11+
|
||||||
|
- [uv](https://docs.astral.sh/uv/) package manager
|
||||||
|
- PostgreSQL 14+
|
||||||
|
- Redis 6+
|
||||||
|
|
||||||
|
### Setup
|
||||||
|
|
||||||
|
1. **Install dependencies**
|
||||||
|
```bash
|
||||||
|
cd backend
|
||||||
|
uv sync
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Environment configuration**
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
# Edit .env with your settings
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Database setup**
|
||||||
|
```bash
|
||||||
|
uv run manage.py migrate
|
||||||
|
uv run manage.py createsuperuser
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Start development server**
|
||||||
|
```bash
|
||||||
|
uv run manage.py runserver
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 Configuration
|
||||||
|
|
||||||
|
### Environment Variables
|
||||||
|
|
||||||
|
Required environment variables:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Database
|
||||||
|
DATABASE_URL=postgresql://user:pass@localhost/thrillwiki
|
||||||
|
|
||||||
|
# Django
|
||||||
|
SECRET_KEY=your-secret-key
|
||||||
|
DEBUG=True
|
||||||
|
DJANGO_SETTINGS_MODULE=config.django.local
|
||||||
|
|
||||||
|
# Redis
|
||||||
|
REDIS_URL=redis://localhost:6379
|
||||||
|
|
||||||
|
# Email (optional)
|
||||||
|
EMAIL_HOST=smtp.gmail.com
|
||||||
|
EMAIL_PORT=587
|
||||||
|
EMAIL_USE_TLS=True
|
||||||
|
EMAIL_HOST_USER=your-email@gmail.com
|
||||||
|
EMAIL_HOST_PASSWORD=your-app-password
|
||||||
|
```
|
||||||
|
|
||||||
|
### Settings Structure
|
||||||
|
|
||||||
|
- `config/django/base.py` - Base settings
|
||||||
|
- `config/django/local.py` - Development settings
|
||||||
|
- `config/django/production.py` - Production settings
|
||||||
|
- `config/django/test.py` - Test settings
|
||||||
|
|
||||||
|
## 📁 Apps Overview
|
||||||
|
|
||||||
|
### Core Apps
|
||||||
|
|
||||||
|
- **accounts** - User authentication and profile management
|
||||||
|
- **parks** - Theme park models and operations
|
||||||
|
- **rides** - Ride information and relationships
|
||||||
|
- **core** - Shared utilities and base classes
|
||||||
|
|
||||||
|
### Support Apps
|
||||||
|
|
||||||
|
- **moderation** - Content moderation workflows
|
||||||
|
- **location** - Geographic data and services
|
||||||
|
- **media** - File upload and management
|
||||||
|
- **email_service** - Email sending and templates
|
||||||
|
|
||||||
|
## 🔌 API Endpoints
|
||||||
|
|
||||||
|
Base URL: `http://localhost:8000/api/`
|
||||||
|
|
||||||
|
### Authentication
|
||||||
|
- `POST /auth/login/` - User login
|
||||||
|
- `POST /auth/logout/` - User logout
|
||||||
|
- `POST /auth/register/` - User registration
|
||||||
|
|
||||||
|
### Parks
|
||||||
|
- `GET /parks/` - List parks
|
||||||
|
- `GET /parks/{id}/` - Park details
|
||||||
|
- `POST /parks/` - Create park (admin)
|
||||||
|
|
||||||
|
### Rides
|
||||||
|
- `GET /rides/` - List rides
|
||||||
|
- `GET /rides/{id}/` - Ride details
|
||||||
|
- `GET /parks/{park_id}/rides/` - Rides by park
|
||||||
|
|
||||||
|
## 🧪 Testing
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run all tests
|
||||||
|
uv run manage.py test
|
||||||
|
|
||||||
|
# Run specific app tests
|
||||||
|
uv run manage.py test apps.parks
|
||||||
|
|
||||||
|
# Run with coverage
|
||||||
|
uv run coverage run manage.py test
|
||||||
|
uv run coverage report
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 Management Commands
|
||||||
|
|
||||||
|
Custom management commands:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Import park data
|
||||||
|
uv run manage.py import_parks data/parks.json
|
||||||
|
|
||||||
|
# Generate test data
|
||||||
|
uv run manage.py generate_test_data
|
||||||
|
|
||||||
|
# Clean up expired sessions
|
||||||
|
uv run manage.py clearsessions
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📊 Database
|
||||||
|
|
||||||
|
### Entity Relationships
|
||||||
|
|
||||||
|
- **Parks** have Operators (required) and PropertyOwners (optional)
|
||||||
|
- **Rides** belong to Parks and may have Manufacturers/Designers
|
||||||
|
- **Users** can create submissions and moderate content
|
||||||
|
|
||||||
|
### Migrations
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create migrations
|
||||||
|
uv run manage.py makemigrations
|
||||||
|
|
||||||
|
# Apply migrations
|
||||||
|
uv run manage.py migrate
|
||||||
|
|
||||||
|
# Show migration status
|
||||||
|
uv run manage.py showmigrations
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔐 Security
|
||||||
|
|
||||||
|
- CORS configured for frontend integration
|
||||||
|
- CSRF protection enabled
|
||||||
|
- JWT token authentication
|
||||||
|
- Rate limiting on API endpoints
|
||||||
|
- Input validation and sanitization
|
||||||
|
|
||||||
|
## 📈 Performance
|
||||||
|
|
||||||
|
- Database query optimization
|
||||||
|
- Redis caching for frequent queries
|
||||||
|
- Background task processing with Celery
|
||||||
|
- Database connection pooling
|
||||||
|
|
||||||
|
## 🚀 Deployment
|
||||||
|
|
||||||
|
See the [Deployment Guide](../shared/docs/deployment/) for production setup.
|
||||||
|
|
||||||
|
## 🐛 Debugging
|
||||||
|
|
||||||
|
### Development Tools
|
||||||
|
|
||||||
|
- Django Debug Toolbar
|
||||||
|
- Django Extensions
|
||||||
|
- Silk profiler for performance analysis
|
||||||
|
|
||||||
|
### Logging
|
||||||
|
|
||||||
|
Logs are written to:
|
||||||
|
- Console (development)
|
||||||
|
- Files in `logs/` directory (production)
|
||||||
|
- External logging service (production)
|
||||||
|
|
||||||
|
## 🤝 Contributing
|
||||||
|
|
||||||
|
1. Follow Django coding standards
|
||||||
|
2. Write tests for new features
|
||||||
|
3. Update documentation
|
||||||
|
4. Run linting: `uv run flake8 .`
|
||||||
|
5. Format code: `uv run black .`
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user