Applications
The Labrador project consists of several projects:
- Queue: for enqueueing in labs
- Submit: for submitting work
- TAM: for applying to become a TA
- Portal: a frontend to the database
- Plagiarism Detection (Fraudweiler): for detecting fraud
- AuTA: for analyzing, grading and giving feedback on programming projects
- LabraCore: the central database with all shared data
- LibraDoor: a library that allows applications to connect to the core database
- Librador: a library with common functionality
Libraries / Frameworks / Technologies
We try to use the same libraries among the different applications. Every application is a Spring Boot application with a gradle kts build script and the following libraries:
Database
- Liquibase: for migrations.
- Hibernate: for database.
- H2: for an in-memory database when developing.
- QueryDSL: for complex queries.
Developing
- Lombok: provides annotations for generating getters/setters/constructors/etc.
- Guava: provies some useful methods for working with collections.
- ModelMapper: allows easy mapping between different classes with the same fields.
- Spotless: formats code and complains if code is not nicely formatted.
- Licence: makes sure there is a licence at the top of every file.
Frontend
- Thymeleaf: template processing, allows writing html pages with custom tags to provide template functionality.
- JQuery: simplifies a lot of javascript.
- Font Awesome: used for icons
- ChartJS: for graphs and charts.
Deploy
- Jaeger: allows tracking of requests through the different applications.
- Sentry: logs errors and provides a web interface to see them.
Testing
- JUnit: general testing framework.
- AssertJ: provies a nicer way of writing assertions.
Roles
Labrador applications have four main roles, these are defined on course edition level:
- Teacher
- Head TA
- TA
- Student
On edition level, two more roles exist:
- Teacher Read-Only: This is used for archived editions, a user with this role still has all read permissions, but cannot edit or delete anything anymore.
- Blocked: A user with this role is not part of an edition and is also not allowed to enrol in that edition anymore.
In addition to these, there is an Admin role, which is global. A user is an admin when their defaultRole
is admin.