This commit is contained in:
pacnpal
2025-09-21 20:04:42 -04:00
parent 42a3dc7637
commit 75cc618c2b
610 changed files with 1719 additions and 4816 deletions

443
README.md
View File

@@ -1,200 +1,87 @@
# ThrillWiki Django + Vue.js Monorepo # ThrillWiki Backend
A comprehensive theme park and roller coaster information system built with a modern monorepo architecture combining Django REST API backend with Vue.js frontend. Django REST API backend for the ThrillWiki monorepo.
## 🏗️ Architecture Overview ## 🏗️ Architecture
This project uses a monorepo structure that cleanly separates backend and frontend concerns while maintaining shared resources and documentation: This backend follows Django best practices with a modular app structure:
``` ```
thrillwiki-monorepo/ backend/
├── backend/ # Django REST API (Port 8000) ├── apps/ # Django applications
│ ├── apps/ # Modular Django applications │ ├── accounts/ # User management
│ ├── config/ # Django settings and configuration │ ├── parks/ # Theme park data
│ ├── templates/ # Django templates │ ├── rides/ # Ride information
── static/ # Static assets ── moderation/ # Content moderation
├── frontend/ # Vue.js SPA (Port 5174) │ ├── location/ # Geographic data
│ ├── src/ # Vue.js source code │ ├── media/ # File management
│ ├── public/ # Static assets │ ├── email_service/ # Email functionality
│ └── dist/ # Build output │ └── core/ # Core utilities
├── shared/ # Shared resources and documentation ├── config/ # Django configuration
│ ├── docs/ # Comprehensive documentation │ ├── django/ # Settings files
── scripts/ # Development and deployment scripts ── settings/ # Modular settings
│ ├── config/ # Shared configuration ├── templates/ # Django templates
│ └── media/ # Shared media files ├── static/ # Static files
── architecture/ # Architecture documentation ── tests/ # Test files
└── 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+** with [uv](https://docs.astral.sh/uv/) for backend dependencies - Python 3.11+
- **Node.js 18+** with [pnpm](https://pnpm.io/) for frontend dependencies - [uv](https://docs.astral.sh/uv/) package manager
- **PostgreSQL 14+** (optional, defaults to SQLite for development) - PostgreSQL 14+
- **Redis 6+** (optional, for caching and sessions) - Redis 6+
### Development Setup ### Setup
1. **Clone the repository** 1. **Install dependencies**
```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 ..
``` ```
5. **Start development servers** 4. **Start development server**
```bash ```bash
# Start both servers concurrently uv run manage.py runserver
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
#### Root `.env` Required environment variables:
```bash ```bash
# Database # Database
DATABASE_URL=postgresql://user:pass@localhost/thrillwiki DATABASE_URL=postgresql://user:pass@localhost/thrillwiki
REDIS_URL=redis://localhost:6379
# Security # Django
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
@@ -203,142 +90,140 @@ 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
``` ```
#### Frontend `.env.local` ### 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 ```bash
# API Configuration # Run all tests
VITE_API_BASE_URL=http://localhost:8000/api uv run manage.py test
# Development # Run specific app tests
VITE_APP_TITLE=ThrillWiki (Development) uv run manage.py test apps.parks
# Feature Flags # Run with coverage
VITE_ENABLE_DEBUG=true uv run coverage run manage.py test
uv run coverage report
``` ```
## 📊 Key Features ## 🔧 Management Commands
### Backend Features Custom management commands:
- **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
### Frontend Features ```bash
- **Responsive Design** - Mobile-first approach with Tailwind CSS # Import park data
- **Dark Mode Support** - Complete dark/light theme system uv run manage.py import_parks data/parks.json
- **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
## 📖 Documentation # Generate test data
uv run manage.py generate_test_data
### Core Documentation # Clean up expired sessions
- **[Backend Documentation](./backend/README.md)** - Django setup and API details uv run manage.py clearsessions
- **[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
### Architecture & Deployment ## 📊 Database
- **[Architecture Overview](./architecture/)** - System design and decisions
- **[Deployment Guide](./shared/docs/deployment/)** - Production deployment instructions
- **[Development Scripts](./shared/scripts/)** - Automation and tooling
### Additional Resources ### Entity Relationships
- **[Contributing Guide](./CONTRIBUTING.md)** - How to contribute to the project
- **[Code of Conduct](./CODE_OF_CONDUCT.md)** - Community guidelines - **Parks** have Operators (required) and PropertyOwners (optional)
- **[Security Policy](./SECURITY.md)** - Security reporting and policies - **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 ## 🚀 Deployment
### Development Environment See the [Deployment Guide](../shared/docs/deployment/) for production setup.
```bash
# Quick start with all services
./shared/scripts/dev/start-all.sh
# Full development setup ## 🐛 Debugging
./shared/scripts/dev/setup-dev.sh
```
### Production Deployment ### Development Tools
```bash
# Build all components
./shared/scripts/build/build-all.sh
# Deploy to production - Django Debug Toolbar
./shared/scripts/deploy/deploy.sh - Django Extensions
``` - Silk profiler for performance analysis
See [Deployment Guide](./shared/docs/deployment/) for detailed production setup instructions. ### Logging
## 🧪 Testing Strategy Logs are written to:
- Console (development)
### Backend Testing - Files in `logs/` directory (production)
- **Unit Tests** - Individual function and method testing - External logging service (production)
- **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
We welcome contributions! Please see our [Contributing Guide](./CONTRIBUTING.md) for details on: 1. Follow Django coding standards
2. Write tests for new features
1. **Development Setup** - Getting your development environment ready 3. Update documentation
2. **Code Standards** - Coding conventions and best practices 4. Run linting: `uv run flake8 .`
3. **Pull Request Process** - How to submit your changes 5. Format code: `uv run black .`
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**

Some files were not shown because too many files have changed in this diff Show More