- Fully decouple course quizzes from main quiz system (hidden from dashboard stats, history, search, results page) - Course quiz results show "Back to Course" instead of retake/delete - Add allow_review toggle for course creators to control answer review - Show quiz title on course page, hide pool size from students - Add course thumbnails to browse cards - Replace passlib with bcrypt directly (compatible with existing hashes) - Add HIBP breached password warnings on register/reset/change password - Add CLI management tools (reset-password, set-role, stats, etc.) - Fix quiz PATCH endpoint: ownership check instead of moderator-only - Add max_length validation on course/module/lesson titles - Fix score display bug on results page (0 of N when review disabled) - Fix question count on course quiz start (show per-attempt, not pool) - Improve suspend warning for timed course quizzes with max attempts - Clean up validation error messages (show "Invalid email" not Pydantic dump) - Add DDL migration for allow_review column Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
92 lines
2.1 KiB
YAML
92 lines
2.1 KiB
YAML
version: "3.8"
|
|
|
|
services:
|
|
postgres:
|
|
image: pgvector/pgvector:pg16
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_DB: pedquiz
|
|
POSTGRES_USER: pedquiz
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD}
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U pedquiz"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 10
|
|
|
|
frontend:
|
|
build: ./frontend
|
|
env_file:
|
|
- ./frontend/.env
|
|
ports:
|
|
- "127.0.0.1:8081:80"
|
|
depends_on:
|
|
- backend
|
|
restart: unless-stopped
|
|
|
|
backend:
|
|
build: ./backend
|
|
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
|
|
env_file:
|
|
- ./backend/.env
|
|
environment:
|
|
- ANONYMIZED_TELEMETRY=False
|
|
volumes:
|
|
- uploads_data:/app/uploads
|
|
- chroma_data:/app/chroma_data
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_started
|
|
restart: unless-stopped
|
|
|
|
celery:
|
|
build: ./backend
|
|
command: celery -A app.tasks worker --loglevel=info --concurrency=2
|
|
env_file:
|
|
- ./backend/.env
|
|
environment:
|
|
- ANONYMIZED_TELEMETRY=False
|
|
volumes:
|
|
- uploads_data:/app/uploads
|
|
- chroma_data:/app/chroma_data
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_started
|
|
restart: unless-stopped
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
volumes:
|
|
- redis_data:/data
|
|
restart: unless-stopped
|
|
|
|
db-backup:
|
|
image: prodrigestivill/postgres-backup-local:16
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_HOST: postgres
|
|
POSTGRES_DB: pedquiz
|
|
POSTGRES_USER: pedquiz
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD}
|
|
SCHEDULE: "@daily"
|
|
BACKUP_KEEP_DAYS: 14
|
|
BACKUP_KEEP_WEEKS: 4
|
|
BACKUP_KEEP_MONTHS: 6
|
|
HEALTHCHECK_PORT: 8080
|
|
volumes:
|
|
- ./backups:/backups
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
|
|
volumes:
|
|
uploads_data:
|
|
chroma_data:
|
|
postgres_data:
|
|
redis_data:
|