Readur/docs/quickstart/development.md

383 lines
7.1 KiB
Markdown

# Development Quick Start
## Purpose
Set up a Readur development environment in 10 minutes. This guide helps developers contribute to Readur or build custom integrations.
## Prerequisites
- Python 3.10+ installed
- Node.js 18+ and npm installed
- PostgreSQL 14+ running locally
- Redis server installed
- Git configured with GitHub access
- 8GB RAM recommended for development
## Step 1: Clone and Setup
Clone the repository and create a virtual environment:
```bash
# Clone repository
git clone https://github.com/readur/readur.git
cd readur
# Create Python virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install Python dependencies
pip install -r requirements.txt
pip install -r requirements-dev.txt
```
## Step 2: Database Setup
Create and initialize the database:
```bash
# Create database
createdb readur_dev
# Set environment variables
export DATABASE_URL=postgresql://localhost/readur_dev
export REDIS_URL=redis://localhost:6379
# Run migrations
alembic upgrade head
# Create test user
python scripts/create_user.py --username dev --password dev123 --admin
```
## Step 3: Frontend Setup
Install and build frontend assets:
```bash
# Navigate to frontend directory
cd frontend
# Install dependencies
npm install
# Start development server
npm run dev
```
Keep this terminal running - the frontend will auto-reload on changes.
## Step 4: Backend Development Server
In a new terminal, start the backend:
```bash
# Activate virtual environment
source venv/bin/activate
# Set development environment
export FLASK_ENV=development
export FLASK_DEBUG=1
# Start backend server
python run.py
```
## Step 5: Start Background Workers
In another terminal, start the OCR worker:
```bash
# Activate virtual environment
source venv/bin/activate
# Start Celery worker
celery -A readur.worker worker --loglevel=info --concurrency=2
```
## Step 6: Access Development Instance
Your development environment is now running:
- **Frontend**: http://localhost:3000 (with hot reload)
- **Backend API**: http://localhost:5000
- **API Documentation**: http://localhost:5000/api/docs
Login with:
- Username: `dev`
- Password: `dev123`
## Development Workflow
### Code Structure
```
readur/
├── backend/ # Python Flask application
│ ├── api/ # REST API endpoints
│ ├── models/ # Database models
│ ├── services/ # Business logic
│ └── workers/ # Background tasks
├── frontend/ # React application
│ ├── src/
│ │ ├── components/
│ │ ├── pages/
│ │ └── services/
│ └── public/
├── tests/ # Test suites
└── scripts/ # Development utilities
```
### Making Changes
1. **Create feature branch**:
```bash
git checkout -b feature/your-feature
```
2. **Backend changes**:
- Edit Python files
- Backend auto-reloads with Flask debug mode
- Run tests: `pytest tests/`
3. **Frontend changes**:
- Edit React components
- Frontend auto-reloads with webpack dev server
- Run tests: `npm test`
4. **Database changes**:
```bash
# Create migration
alembic revision --autogenerate -m "Description"
# Apply migration
alembic upgrade head
```
## Testing
### Run All Tests
```bash
# Backend tests
pytest tests/ -v
# Frontend tests
cd frontend && npm test
# End-to-end tests
pytest tests/e2e/ --browser chromium
```
### Test Coverage
```bash
# Generate coverage report
pytest --cov=readur --cov-report=html
open htmlcov/index.html
```
### Linting
```bash
# Python linting
flake8 readur/
black readur/ --check
mypy readur/
# JavaScript linting
cd frontend
npm run lint
npm run format:check
```
## Debugging
### Backend Debugging
Using VS Code:
```json
// .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Flask",
"type": "python",
"request": "launch",
"module": "flask",
"env": {
"FLASK_APP": "readur:create_app",
"FLASK_ENV": "development"
},
"args": ["run", "--no-debugger", "--no-reload"],
"jinja": true
}
]
}
```
Using pdb:
```python
# Add breakpoint in code
import pdb; pdb.set_trace()
```
### Frontend Debugging
React Developer Tools:
1. Install browser extension
2. Open Developer Tools → Components tab
3. Inspect component state and props
Redux DevTools:
1. Install browser extension
2. View action history and state changes
### Database Debugging
```bash
# Connect to database
psql readur_dev
# View query logs
export DATABASE_ECHO=true
```
## Local Development Tools
### Mock Data
Generate test documents:
```bash
python scripts/generate_test_data.py --documents 100
```
### Performance Profiling
```bash
# Profile API endpoint
python -m cProfile -o profile.stats run.py
# Analyze results
python -m pstats profile.stats
```
### API Testing
Using httpie:
```bash
# Login
http POST localhost:5000/api/auth/login username=dev password=dev123
# Upload document
http POST localhost:5000/api/documents file@test.pdf \
"Authorization: Bearer $TOKEN"
```
## Common Development Tasks
### Add New API Endpoint
1. Create route in `backend/api/`
2. Add service logic in `backend/services/`
3. Write tests in `tests/api/`
4. Update OpenAPI schema
### Add Frontend Feature
1. Create component in `frontend/src/components/`
2. Add route in `frontend/src/routes.js`
3. Create API service in `frontend/src/services/`
4. Write component tests
### Add Background Task
1. Define task in `backend/workers/tasks.py`
2. Add to task queue in service layer
3. Write worker tests
4. Update worker documentation
## Troubleshooting
### Dependencies Won't Install
```bash
# Update pip and setuptools
pip install --upgrade pip setuptools wheel
# Clear pip cache
pip cache purge
# Use specific Python version
python3.10 -m venv venv
```
### Database Connection Failed
```bash
# Check PostgreSQL is running
pg_isready
# Check connection
psql -U postgres -c "SELECT 1"
# Reset database
dropdb readur_dev
createdb readur_dev
alembic upgrade head
```
### Frontend Build Errors
```bash
# Clear node modules
rm -rf node_modules package-lock.json
npm install
# Clear build cache
npm run clean
npm run build
```
### OCR Worker Not Processing
```bash
# Check Redis connection
redis-cli ping
# Monitor worker logs
celery -A readur.worker worker --loglevel=debug
# Purge task queue
celery -A readur.worker purge
```
## Contributing
### Before Submitting PR
1. **Run all tests**: Ensure all tests pass
2. **Check linting**: Fix any style issues
3. **Update documentation**: Document new features
4. **Add tests**: Cover new functionality
5. **Test migrations**: Verify database changes
### Code Style
Follow project conventions:
- Python: PEP 8 with Black formatting
- JavaScript: ESLint + Prettier
- Commits: Conventional commits format
- Documentation: Markdown with proper headings
## Related Documentation
- [Architecture Overview](../architecture.md) - System design and components
- [API Reference](../api-reference.md) - Complete API documentation
- [Testing Guide](../dev/TESTING.md) - Comprehensive testing strategies
- [Contributing Guide](../dev/README.md) - Contribution guidelines