All Classes and Interfaces

Class
Description
 
 
 
 
 
Wraps calls to an external REST API (GitHub, PrairieLearn) with three defenses: Pacing: consecutive calls are kept at least paceMs apart, to stay under rate limits in the first place.
Thrown when the API is still failing after all retries; carries a clean one-line message.
 
 
 
 
 
 
 
 
 
 
Graph algorithms for the prerequisite structure of a course's top-level concepts (subconcepts have no position in this graph).
 
 
The YAML document exchanged by the concept-graph download/upload endpoints.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Download and upload a course's entire concept-graph content (concepts, subconcepts, prerequisite edges, and practice problems) as a YAML file.
Exports and imports a course's entire concept-graph content (concepts, subconcepts, prerequisite edges, and practice problems) as a human-editable YAML document.
 
 
 
 
 
 
 
 
 
DTO representing a course along with the ways in which the current user has access to it.
 
 
Projection of Course entity with fields that are relevant for instructors and admins
 
 
CourseSecurity provides methods to check permissions for managing courses and roster students.
 
 
 
 
Request body for POST /api/concept (creates a top-level concept).
Request body for POST /api/concept/subconcept.
 
 
 
 
Thrown when a request is refused for a reason the client can fix (e.g. a missing PAT or a repo the stored PAT cannot reach).
 
 
Thin wrapper around the GitHub REST API, authenticated per call with a user's personal access token.
One entry of a directory listing: type is "dir", "file", etc.
 
 
 
 
 
 
 
 
Launch endpoints for this app's concrete jobs, plus the course-scoped jobs listing (which uses this app's CourseSecurity rule).
Bridge between the lib-jobs library and this app's notion of "current user"; lib-jobs uses it to stamp createdById/createdByEmail on Job records.
 
 
 
 
 
 
 
 
 
 
 
 
Cleans user-supplied Markdown before it is stored.
Thrown when a stored PAT was encrypted under a key version for which no key material is currently configured (e.g.
The `OpenAPIConfig` class is annotated with OpenAPI definitions including information about the API and server configuration.
A user's encrypted personal access token (PAT) for one platform (GitHub or PrairieLearn).
Lets each admin or instructor store one personal access token (PAT) per platform: a GitHub PAT at /api/pat/github and a PrairieLearn PAT at /api/pat/pl.
 
Encrypts and decrypts users' GitHub personal access tokens (PATs) with AES-256-GCM so the database only ever sees ciphertext.
Result of encrypting a PAT: the base64 ciphertext and the key version that produced it.
Which service a stored personal access token belongs to.
 
Read-only: PlAssessments are populated by sync jobs mirroring the repo on GitHub — not by POST/DELETE endpoints.
Join table: which PlQuestions appear in a PlAssessment, in the order they appear in the assessment's zones (infoAssessment.json).
 
 
A named color used by PrairieLearn (e.g.
 
 
Read-only: PlInstances are created, updated, and deleted by the SyncPlRepo job (issues #45/#47), which mirrors the repo's courseInstances directory on GitHub — not by POST/DELETE endpoints.
 
 
Read-only: PlQuestions are created, updated, and deleted by the SyncPlRepo job (issues #45/#47), which mirrors the repo's questions directory on GitHub — not by POST/DELETE endpoints.
 
 
 
 
 
Read-only: PlScaffoldAssessments are populated by sync jobs mirroring the repo on GitHub — not by POST/DELETE endpoints.
 
 
 
 
Thin wrapper around the PrairieLearn REST API (see https://docs.prairielearn.com/api/), authenticated per call with a user's PrairieLearn personal access token.
One assessment from the /course_instances/{id}/assessments response — the fields PlAssessment stores (issue #71).
The parts of a course instance response this app uses; the numeric id is the crucial one, since it cannot be obtained from the GitHub repo.
 
 
 
 
 
Reads PrairieLearn's badge color map from GitHub (issue #96) and upserts the pl_color table with any colors that are new or whose hex code has changed.
Reloads a user's security context on each request so that role changes (admin/instructor added or removed in the database) take effect without requiring re-login.
 
 
This is a DTO class that represents a student in the roster.
 
 
 
 
Re-encrypts every stored PAT under the current PAT_ENCRYPTION_KEY.
 
 
 
 
 
 
 
 
Syncs one course's PrairieLearn state (issue #69), replacing the repo-wide SyncPlRepoJob.
Assembles a SyncCourseWithPlRepoJob with its many repository/service dependencies, so the two launch sites (the JobsController endpoint and the automatic launch after a successful PUT /api/courses/updatePLInstance) don't each duplicate the wiring.
 
 
 
 
 
 
Request body for PUT /api/concept/put (updates a top-level concept).
Request body for PUT /api/concept/subconcept/put (updates a subconcept).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Registers a YAML HttpMessageConverter so that endpoints can accept application/yaml request bodies (e.g.