- JWT auth (
/auth/login,/auth/whoami) +@require_roleguard. - Findability:
GET /questionswithq(LIKE),qs(FTS ranked),course,q_type,ext,difficulty,tags,used_after,used_before, paging. - Fast indexes: GIN FTS + common BTrees (created idempotently on start).
- Solutions:
POST /questions/<qid>/solutions. - Assembly:
POST /assemblies/auto_build(balanced diff mix; prefers not-recently-used).GET /assemblies/<id>/export?fmt=md|qti(includestimes_used/last_used, writesusage_log+ bumps counters).
- Conversion: minimal IMS QTI v2.1 XML export.
- Adaptive difficulty:
POST /metrics/ingestPOST /metrics/recompute_difficulty(weighted avg → easy/medium/hard; stores incalibrated_difficultyand updatesquestions.difficulty).
- History:
question_revisions(scaffold) +usage_log.
- Python 3.9+
- PostgreSQL 16+
- Streamlit 1.38+
- Git, Docker
- Node.js 18+ (for optional frontend features)
Run the following commands in your terminal:
git clone https://github.com/tengquanhan687/dsa3101-2510-quiz-bank-4.git
cd dsa3101-2510-quiz-bank-4In the terminal, run the following command at the root of the repository:
docker compose upThis will begin the construction of the database, backend and frontend containers.
Note: During the building process of the containers, you will see messages like:
INFO:__main__:Waiting for DB to be available…
INFO:backend.app:Waiting for DB to be available…
This does not affect the functionalities of the containers; allow the containers some time to build.
Once you see:
INFO:werkzeug:Press CTRL+C to quit
it means the containers are done building. You can then access the application at: