STExS stands for Software Technology Examination System. This project is being developed by a group of students for the Software Technology Module at TU Chemnitz.
This project is not production ready (and it is really not supposed to be used in production) as it is developed by students as part of their course work.
npm install -g yarn @angular/cli ng-openapi-gen;
dotnet tool install --global dotnet-ef
yarn quickstart
dotnet dev-certs https
to enable the development https certificate (this only works on windows and
mac)dotnet run
yarn quickstart;
database update
and migrations add {new migration name}
set ASPNETCORE_ENVIRONMENT=Development
dotnet ef --project Repositories --startup-project STExS.Web {command} --context ApplicationDbContext
sequenceDiagram
participant user
participant exercise
participant grader
exercise --> exercise: state is new user ->> exercise: requests details activate user exercise ->> user: delivers details user -->> exercise: requests new time track to be created exercise --> exercise: state is now "in progress"
user ->> user: starts working on exercise user -->> exercise: submits temporary solutions + timetrack id exercise -->> exercise: updates time track exercise -->> exercise: updates temp submission user -->> exercise: closes time track deactivate user user --> user: stops working on solution activate user user --> user: starts working on exercise again user ->> exercise: queries last submitted temp solution exercise->> user: returns last submitted temp solution user -->> exercise: requests new time track to be created
user -->> exercise: submits temporary solutions + timetrack ids user ->> exercise: submits final solution + timetrack id exercise -->> exercise: closes time track exercise --> exercise: state is now submitted exercise -->> user: indicates success
deactivate user
exercise ->> grader: submits solutioon for grading activate grader grader ->> grader: grades solution grader ->> exercise: publishes grading result deactivate grader exercise ->> exercise: state is now graded user --> exercise: can always query their grading state
---
```mermaid
stateDiagram-v2
processing
notSubmitted
saveTemp
submitted
graded
[*] --> notSubmitted
[*] --> processing
processing --> submitted
processing --> saveTemp
saveTemp --> processing
submitted --> graded: happens automatically/manually
graded --> [*]
notSubmitted --> [*]
note left of processing: user works on a solution
classDiagram
direction TB
class Module{
- 🔑 id: guid
}
class Chapter{
- 🔑 id: guid
}
class Exercise{
- 🔑 id: guid
}
class GradingResult{
- 🔑 id: guid
- userId: guid
- exerciseId: Guid
- CreationDate: DateTime
- GradedSubmissionId: guid
}
class Submission{
- 🔑 id: guid
- 🔑 userSubmissionId: guid
- ExerciseType: enum, discriminator
- other data (per exercise type)
}
<<abstract>> Submission
class UserSubmission{
- 🔑 UserId: guid
- 🔑 ExerciseId: guid
- FinalSubmission: guid?
}
class TimeTrack{
- 🔑 id: Guid
- StartDate: DateTime
- ProcessingTime: TimeSpan
}
Module "1" --> "m" Chapter
Chapter "1" --> "m" Exercise
Exercise "1" --> "0..1 per user" UserSubmission
UserSubmission "1" --> "0..m" Submission
UserSubmission "1" --> "m" TimeTrack
UserSubmission "1" --> "0..m" GradingResult
GradingResult "1" --> "0..1" Submission
sequenceDiagram
participant user
participant exercise
user ->> exercise: requests new time track to be created exercise -->> exercise: creates time track exercise ->> user: returns time track id user ->> exercise: queries last submitted temp solution exercise->> user: 404 activate user user -->> user: starts working on solution new user ->> exercise: saves temporary solutions + timetrack id user ->> exercise: saves temporary solutions + timetrack id user ->> exercise: saves temporary solutions + timetrack id user ->> user: stops working on solution deactivate user user ->> exercise: closes time track
- diagram when temp solution exists
```mermaid
sequenceDiagram
participant user
participant exercise
user ->> exercise: requests new time track to be created
exercise -->> exercise: creates time track
exercise ->> user: returns time track id
user ->> exercise: queries last submitted temp solution
activate user
exercise->> user: returns last submitted temp solution
user -->> user: starts working on solution
user ->> exercise: saves temporary solutions + timetrack id
user ->> exercise: saves temporary solutions + timetrack id
user ->> exercise: submits final solution + timetrack id
deactivate user
start the backend
after the backend started successfully run (from the frontend directory): yarn quickstart
for Frontend documentation: yarn docs
for Frontend tests: yarn test
(chrome will open)
for Frontend test-coverage: yarn test-coverage
(see the generated .html file in /coverage/stex-s/)