pdf-quiz-generator/backend/app/routers
Daniel db242d7e83 feat: link a whole topic to an article in one action
One question at a time is right for a cross-reference and wrong for "every
Cardiology question belongs to the Cardiology article", which is most of what
an educator is doing in that panel.

Choose a category and every question filed under it — primary category or
additional, and its subtopics unless you say otherwise — is linked in one go.
The count is fetched first so the button carries the number: "Link 43
questions" is a decision, "Link this topic" is a guess, and the difference
matters when the topic turns out to be the whole of Cardiology. Capped at 300,
with a refusal that names the number and suggests a subtopic.

Ordinary link rows, not a rule. The article does not "claim" the category; it
gains the questions in it now. A rule would be a second answer to "which
questions belong to this article" — one the counts, the QBank button, the
mirror panel on each question and the AI Mode boost would each have to learn to
ask — and it would silently attach tomorrow's questions to an article nobody
has looked at since.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TqXevQJhxFrM7jJg82cgZN
2026-09-12 19:31:28 +02:00
..
__init__.py
access.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00
admin.py feat: rerank what a learner is shown, with Cohere through the proxy 2026-09-12 18:23:06 +02:00
ai_mode.py fix: a greeting does not name the thread 2026-09-12 19:09:55 +02:00
articles.py feat: link a whole topic to an article in one action 2026-09-12 19:31:28 +02:00
attempts.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00
auth.py feat: an account may have no password, and may set one later 2026-09-12 17:39:29 +02:00
categories.py
collections.py feat: articles are collectible, and Summary is a toggle 2026-09-12 14:52:20 +02:00
contact.py feat: the exam player as the reference has it 2026-09-12 05:43:25 +02:00
courses.py fix: WebP figures, the openai SDK removed, and a voice a site can add to 2026-09-12 17:13:05 +02:00
documents.py Tag filtering, multi-category, bug fixes, image validation, docs 2026-04-04 22:48:26 +02:00
drafts.py feat: extracted questions are staged, and only acceptance takes an id 2026-09-11 22:57:08 +02:00
exams.py feat: exams are a group you can build, with the board's own blueprint 2026-09-11 20:27:48 +02:00
favorites.py
feedback.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00
flashcards.py feat: hybrid search for articles and cards; full-page question editor 2026-09-10 02:01:35 +02:00
folders.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00
login_code.py feat: sign in with a code sent by email 2026-09-12 17:29:28 +02:00
media.py feat: cross-link the articles, and strip what the analysis page replaced 2026-09-11 03:44:44 +02:00
mobile.py feat: the exam player as the reference has it 2026-09-12 05:43:25 +02:00
mynote.py Add persistent MyNote for quizzes 2026-05-12 17:51:23 +02:00
nextcloud.py Security hardening, async TeachChat, rate limit UX, unthrottle 2026-04-04 01:09:42 +02:00
public.py feat: the objective is not optional, and the site can count itself 2026-09-12 06:40:48 +02:00
question_categories.py feat: retire the tags, and stop settings from hiding from the page that 2026-09-12 05:06:58 +02:00
questions.py fix: an upload is what its bytes say, not what its name claims 2026-09-12 19:05:12 +02:00
quizzes.py feat: AMBOSS exam chrome, review as a study session, and no silent submissions 2026-09-12 07:37:58 +02:00
search.py feat: rerank what a learner is shown, with Cohere through the proxy 2026-09-12 18:23:06 +02:00
share.py feat: shareable quiz links, moderated comments and AI authoring 2026-09-07 17:10:08 +02:00
study_plans.py feat: study plans built to the board's content outline 2026-09-11 21:40:17 +02:00
study_tools.py feat: Cap on its own host, hints per topic, and an objective is asked for 2026-09-12 06:24:23 +02:00
tags.py fix: put the disciplines and diseases back, and order Performance as shown 2026-09-12 05:39:22 +02:00
teach.py fix: WebP figures, the openai SDK removed, and a voice a site can add to 2026-09-12 17:13:05 +02:00
tts.py fix: WebP figures, the openai SDK removed, and a voice a site can add to 2026-09-12 17:13:05 +02:00
uploads.py fix: figures a browser will actually draw, and two requests that could hang 2026-09-12 16:29:45 +02:00