383 lines
7.1 KiB
Markdown
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 |