Backend

The backend is where all the logic of the Packtrain lives. It is implemented using Java Spring.

Key Responsibilities and Integrations

  • Framework: Developed using Java Spring, the backend handles routing, business rules, and external service management.

  • Message Queuing (RabbitMQ): Utilizes RabbitMQ to send raw scores to the policy server, enabling asynchronous communication from the backend and the policy server.

  • Database (PostgreSQL): Interfaces with a PostgreSQL database for storage of all application data, including assignment records, grading information, and configuration settings.

  • Frontend Communication via OpenAPI: Exposes REST endpoints through OpenAPI routes, allowing the frontend to interact with the backend for data retrieval and updates.

  • Authentication and Authorization: Acts as an OAuth Resource Server by validating Bearer JWTs. It relies on Authentik as the authentication server, offloading credential management and ensuring that only authorized requests are processed.

  • External Services Integration: - CSV Uploads: Supports the uploading of CSV files for systems like Runestone and PrairieLearn. - API Scraping: Integrates with external platforms such as Canvas and Gradescope by scraping their APIs.

Service Breakdown

AssignmentService

Handles everything related to assignments within a course, including syncing with Canvas and scheduling background sync tasks.

CourseMemberService

Manages enrollment data (students, instructors) within courses and syncing with Canvas

CourseService

Synchronization for course metadata, late‑request configurations, and course‑wide policies.

CredentialService

Per‑user or per‑course API credentials (e.g., Canvas/Gradescope API keys).

ExtensionService

Handles student requests for extensions and late‑pass applications on assignments.

MigrationService

Manages singular migrations, tying assignments to policies, importing raw scores, and sending results to the policy server via RabbitMQ.

RawScoreService

Imports CSV exports (Gradescope, PrairieLearn, Runestone), normalizes them into RawScore entities, and tracks import progress via MigrationService.

SectionService

Syncs Canvas course sections into the database.

TaskExecutorService

Service that listens for NewTaskEvent s and runs scheduled tasks asynchronously.

UserService

Manages users, linking CWIDs to OAuth IDs, creating new users from Canvas data, and handling admin/staff roles.

CanvasService

Provides authenticated access to Canvas APIs for courses, users, sections, assignments, and mapping enrollments to roles.

GradescopeService

Handles authentication and CSV download for Gradescope assignments.

PolicyServerService

Manages interactions with the grading policy server.

RabbitMqService

Orchestrates RabbitMQ connections and channels for raw grades and scored messages.

S3Service

Integrates with an S3 storage (MinIO in development) for course buckets and policy documents.