niposch / STExS

1 stars 1 forks source link

What is STExS

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.

Recommended Dev Setup

npm install -g yarn @angular/cli ng-openapi-gen;
dotnet tool install --global dotnet-ef

Helpful commands

in visual studio code

From Cli

Backend

Frontend

yarn quickstart;

How to use libraries

Entity Framework

Asp.Net Identity

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

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

Frontend