pdf-quiz-generator/backend/app/models
Daniel cf2f42975e
Some checks failed
Tests / backend (push) Failing after 8s
Tests / frontend (push) Successful in 33s
Tests / e2e (push) Failing after 33s
feat: no invite codes and no email sign-in codes — that is the provider's job
Both were this app doing an identity provider's work. Sign-in and
sign-up happen at sso.pedshub.com now: it takes the address, sends the
code, checks it, and knows about second factors — none of which belongs
here, and two of which were never done here at all.

Gone: services/invites.py, services/login_codes.py,
routers/login_code.py, the two models, the three admin invite routes,
the invite_only flag and its switch, the invite field on both sign-up
forms, and the code half of the sign-in page — which was the primary way
in and is now a button that says "Sign in with PedsHub SSO". The
password form stays for a site with no provider configured.

Migration r7b8c9d0e1f2 drops invite_codes (three spent rows) and
login_codes (empty). The dump beside it has both.

585 tests, and the contract snapshot is 320 routes — five fewer, all
five named in the diff so the removal is reviewable rather than
discovered later by a client.

Also: "Make a deck" in the signed-in menu and on the landing page, going
to the scribe's My Resources at app.pedshub.com/#resources. Same
sign-in on both sides; the arrow says it leaves.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TqXevQJhxFrM7jJg82cgZN
2026-09-13 13:56:48 +02:00
..
__init__.py feat: no invite codes and no email sign-in codes — that is the provider's job 2026-09-13 13:56:48 +02:00
ai_model_config.py
article.py feat: an article follows a topic, rather than copying it once 2026-09-12 19:57:06 +02:00
attempt.py feat: right after a tip is its own slice 2026-09-12 01:51:03 +02:00
category_grant.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00
collection.py feat: articles are collectible, and Summary is a toggle 2026-09-12 14:52:20 +02:00
conversation.py feat: AI Mode — a chat that cannot cite what it did not find 2026-09-10 15:19:24 +02:00
draft_question.py feat: extracted questions are staged, and only acceptance takes an id 2026-09-11 22:57:08 +02:00
email_verification.py
embeddable.py
exam.py feat: exams are a group you can build, with the board's own blueprint 2026-09-11 20:27:48 +02:00
favorite.py
feedback.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00
flashcard.py feat: the bank belongs to a role, not to a person 2026-09-13 13:26:25 +02:00
folder.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00
lab_reference.py
media.py feat: figures are thumbnails that open into a viewer, with source and overlay 2026-09-12 20:33:00 +02:00
password_reset.py
pdf_document.py feat: the bank belongs to a role, not to a person 2026-09-13 13:26:25 +02:00
question.py refactor: remove per-question sharing 2026-09-12 08:42:51 +02:00
question_category.py feat: the bank belongs to a role, not to a person 2026-09-13 13:26:25 +02:00
question_media.py feat: figures as records, question-centred dashboard, fewer hints mid-quiz 2026-09-11 03:18:49 +02:00
quiz.py feat: the bank belongs to a role, not to a person 2026-09-13 13:26:25 +02:00
quiz_category.py
quiz_question_link.py
refresh_token.py feat: a versioned API, refresh tokens, and an end-to-end stack that found four bugs 2026-09-13 01:23:38 +02:00
section.py
study_plan.py feat: study plans you can open, work through, and edit 2026-09-10 12:10:39 +02:00
user.py feat: an account may have no password, and may set one later 2026-09-12 17:39:29 +02:00
user_note.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00