diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..df829d9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +static/assets/diagrams/ diff --git a/utility/uml/generate_diagrams.ksh b/utility/uml/generate_diagrams.ksh new file mode 100755 index 0000000..631fe1c --- /dev/null +++ b/utility/uml/generate_diagrams.ksh @@ -0,0 +1,13 @@ +#!/bin/ksh + +targetdir="$(pwd)/static/assets/diagrams" + +rm -rf "$targetdir/*" +cp $(pwd)/writeup/diagrams/*.png $targetdir + +for diag in $(find . -path "node_modules" -prune -o -name "*.puml" -print); do + ofilename="$(basename $diag .puml).png" + + java -jar "utility/uml/plantuml-1.2021.13.jar" $diag -o $targetdir + echo "Compiled $diag to $targetdir/$ofilename" +done diff --git a/utility/uml/plantuml-1.2021.13.jar b/utility/uml/plantuml-1.2021.13.jar new file mode 100644 index 0000000..ae64c92 Binary files /dev/null and b/utility/uml/plantuml-1.2021.13.jar differ diff --git a/writeup/diagrams/.gitignore b/writeup/diagrams/.gitignore new file mode 100644 index 0000000..705ba85 --- /dev/null +++ b/writeup/diagrams/.gitignore @@ -0,0 +1,2 @@ +*.png +!stratosSchema.png diff --git a/writeup/diagrams/classDiagram.puml b/writeup/diagrams/classDiagram.puml new file mode 100644 index 0000000..2e80a4b --- /dev/null +++ b/writeup/diagrams/classDiagram.puml @@ -0,0 +1,132 @@ +@startuml +skinparam classAttributeIconSize 0 + +User <|-- Account +User <|-- Student +User <|-- Parent + +User -- PasswordReset + +Student -- Parent +Student -- Test +Student -- Class + +Account -- Class +Account -- TestTemplate + +Class -- Subject +Class -- Test + +TestTemplate -- Test +TestTemplate -- Class + +Test -- TestResult + +TestResult -- Student + +class User { + id: string + firstName: string + otherNames: string + lastName: string + email: string + password: string + type: string + getfullName(): string + verifyPassword(hash): boolean + changePassword(password): void + getPasswordReset(): PasswordReset + generatePasswordReset(): PasswordReset + {static} hashPassword(password): string + {static} createUser(...): Account|Student|Parent + {static} getUserByEmail(...): Account|Student|Parent +} + +class Account { + getClasses(): Class[] + getTests(): TestTemplate[] + createTestTemplate(...): TestTemplate + createClass(...): Class +} + +class Student { + getClasses(): Class[] + getTests(): Test[] + getParents(): Parent[] +} + +class Parent { + getChildren(): Student[] +} + +class PasswordReset { + userId: string + token: string + nonce: string + expires: Date + getUser(): User + {static} hashToken(): {string, string} + {static} generatePasswordReset(): PasswordReset +} + +class Subject { + subjectId: int + name: string +} + +class Class { + classId: string + subjectId: int + name: string + getSubject(): Subject + getTests(): Test[] + getTeachers(): Account[] + getTeacher(): Teacher + getStudents(): Student[] + getStudent(): Student + addTeacher(): void + removeTeacher(): void + addStudent(): void + removeStudent(): void + isAuthorised(User): boolean + calculateAverageMovement(): int + {static} createClass(): Class +} + +class TestTemplate { + testTemplateId: string + accountId: string + name: string + maxMark: int + assignClass(): Test + getClasses(): Class[] + isAuthorised(User): boolean + {static} createTestTemplate(): TestTemplate +} + +class Test { + testId: string + testTemplateId: string + classId: string + testDate: Date + getClass(): Class + getStudent(): TestResult + getStudents(): TestResult[] + getTestTemplate(): TestTemplate + calculateAverageScore(): int + calculateGradeBoundaries(): Object +} + +class TestResult { + studentId: string + accountId: string + testId: string + setMark(): void + getMark(): int + getPercentage(): int + getGrade(): string + getStudent(): Student + getTest(): Test +} + +@enduml diff --git a/writeup/diagrams/stratos.dbs b/writeup/diagrams/stratos.dbs new file mode 100755 index 0000000..94d5a1c --- /dev/null +++ b/writeup/diagrams/stratos.dbs @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/writeup/diagrams/stratosSchema.png b/writeup/diagrams/stratosSchema.png new file mode 100755 index 0000000..438015d Binary files /dev/null and b/writeup/diagrams/stratosSchema.png differ diff --git a/writeup/diagrams/systemsDiagram.puml b/writeup/diagrams/systemsDiagram.puml new file mode 100644 index 0000000..2d33653 --- /dev/null +++ b/writeup/diagrams/systemsDiagram.puml @@ -0,0 +1,49 @@ +@startwbs + ++ Stratos Online Markbook + + User accounts + + Creating accounts + + Logging in + + Resetting passwords + + Management + + Teacher based + + Accounts assigning teachers + + Accounts adding classes + + Assigning students to classes + + Assigning tests to classes + + Test based + + Assigning scores to students + + Calculating grade boundaries + + Generating graphs + + Setting global test values with reports generation + + Student/Parent based + + Contact teachers + + Generate graphs per student + + Generate local test values with reports generation + + Display dashboard + + Send emails + + Handling data + + Reports + + Test reports + + Average score + + Grade boundary chart + + Class reports + + Score movement over time + + Markbook + + Teacher reports + + Mass generate all classes/students + + Student reports + + Average score over time + + Score movement + + Average grade +@endwbs diff --git a/writeup/diagrams/test/testAggregated.puml b/writeup/diagrams/test/testAggregated.puml new file mode 100644 index 0000000..dcacf86 --- /dev/null +++ b/writeup/diagrams/test/testAggregated.puml @@ -0,0 +1,69 @@ + +@startuml +skinparam actorStyle awesome + +package Parents { + actor parent1 as p1 + actor parent2 as p2 + actor parent3 as p3 + actor parent4 as p4 + actor parent5 as p5 +} + +package Students { + actor student1 as s1 + actor student2 as s2 + actor student3 as s3 + actor student4 as s4 + actor student5 as s5 +} + +p1 --> s1 +p2 --> s2 +p3 --> s2 +p4 --> s3 +p4 --> s4 +p5 --> s4 +p5 --> s5 + +package Classes { + usecase "Class 1" as c1 + usecase "Class 2" as c2 + usecase "Class 3" as c3 + usecase "Class 4" as c4 +} + +s1 --> c1 +s2 --> c1 +s3 --> c1 +s4 --> c1 +s5 --> c1 + +s1 --> c2 +s2 --> c2 + +s1 --> c3 +s2 --> c3 +s3 --> c3 + +s4 --> c4 +s5 --> c4 + +package Accounts { + actor account1 as a1 + actor account2 as a2 + actor account3 as a3 +} + +c1 --> a1 + +c2 --> a1 +c2 --> a2 + +c3 --> a3 + +c4 --> a1 +c4 --> a2 +c4 --> a3 + +@enduml diff --git a/writeup/diagrams/test/testClassesAccounts.puml b/writeup/diagrams/test/testClassesAccounts.puml new file mode 100644 index 0000000..2689d1e --- /dev/null +++ b/writeup/diagrams/test/testClassesAccounts.puml @@ -0,0 +1,28 @@ +@startuml +skinparam actorStyle awesome + +package Classes { + usecase "Class 1" as c1 + usecase "Class 2" as c2 + usecase "Class 3" as c3 + usecase "Class 4" as c4 +} + +package Accounts { + actor account1 as a1 + actor account2 as a2 + actor account3 as a3 +} + +c1 --> a1 + +c2 --> a1 +c2 --> a2 + +c3 --> a3 + +c4 --> a1 +c4 --> a2 +c4 --> a3 + +@enduml diff --git a/writeup/diagrams/test/testParentsStudents.puml b/writeup/diagrams/test/testParentsStudents.puml new file mode 100644 index 0000000..2b22bf1 --- /dev/null +++ b/writeup/diagrams/test/testParentsStudents.puml @@ -0,0 +1,29 @@ +@startuml +skinparam actorStyle awesome + +package Parents { + actor parent1 as p1 + actor parent2 as p2 + actor parent3 as p3 + actor parent4 as p4 + actor parent5 as p5 +} + +package Students { + actor student1 as s1 + actor student2 as s2 + actor student3 as s3 + actor student4 as s4 + actor student5 as s5 +} + +p1 --> s1 +p2 --> s2 +p3 --> s2 +p4 --> s3 +p4 --> s4 +p5 --> s4 +p5 --> s5 + + +@enduml diff --git a/writeup/diagrams/test/testStudentsClasses.puml b/writeup/diagrams/test/testStudentsClasses.puml new file mode 100644 index 0000000..b3dfc0c --- /dev/null +++ b/writeup/diagrams/test/testStudentsClasses.puml @@ -0,0 +1,35 @@ +@startuml +skinparam actorStyle awesome + +package Students { + actor student1 as s1 + actor student2 as s2 + actor student3 as s3 + actor student4 as s4 + actor student5 as s5 +} + +package Classes { + usecase "Class 1" as c1 + usecase "Class 2" as c2 + usecase "Class 3" as c3 + usecase "Class 4" as c4 +} + +s1 --> c1 +s2 --> c1 +s3 --> c1 +s4 --> c1 +s5 --> c1 + +s1 --> c2 +s2 --> c2 + +s1 --> c3 +s2 --> c3 +s3 --> c3 + +s4 --> c4 +s5 --> c4 + +@enduml