Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adaptive learning: Extend learning path feature to recommend sequence of lecture units and exercises #7113

Merged
merged 356 commits into from
Oct 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
356 commits
Select commit Hold shift + click to select a range
7cb2c33
fix sidebar comments
MaximilianAnzinger Jul 29, 2023
09d48b4
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Jul 29, 2023
9b40fc6
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Jul 29, 2023
f36f3c6
resolve merge conflict
MaximilianAnzinger Jul 29, 2023
77fcfc7
Fix order of course management tab link
MaximilianAnzinger Jul 29, 2023
21f0c3d
fix minor style issues
MaximilianAnzinger Jul 29, 2023
c66f26e
add learning path health check endpoint
MaximilianAnzinger Jul 29, 2023
6a1ad9e
add learning path health check client side
MaximilianAnzinger Jul 30, 2023
ac46483
add LP generation on first request
MaximilianAnzinger Jul 30, 2023
1cd8687
integrate Tobias' suggestions
MaximilianAnzinger Jul 30, 2023
2a1368e
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Jul 30, 2023
b52e296
resolve merge conflict
MaximilianAnzinger Jul 30, 2023
52049e4
integrate Johannes' suggestions
MaximilianAnzinger Jul 30, 2023
3d30ab2
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Jul 30, 2023
6bf00ef
Merge branch 'develop' into feature/learning-path-generation
MaximilianAnzinger Jul 31, 2023
41f01a6
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Jul 31, 2023
dda2f31
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Jul 31, 2023
f94eb0c
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Jul 31, 2023
b246cfc
Update LearningPathServiceTest.java
MaximilianAnzinger Jul 31, 2023
8bf8904
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Jul 31, 2023
4a0adc3
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Jul 31, 2023
2f9d92b
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Jul 31, 2023
bfc0eee
fix enable learning paths button tooltip
MaximilianAnzinger Jul 31, 2023
0afac6f
fix position of learning paths tab in course managment
MaximilianAnzinger Jul 31, 2023
5e81cce
fix position of learning path tab in course overview
MaximilianAnzinger Jul 31, 2023
40b7b30
add whitespace below warning card
MaximilianAnzinger Jul 31, 2023
469bf35
fix translation
MaximilianAnzinger Jul 31, 2023
644fe02
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Jul 31, 2023
74509f8
fix health status stuck
MaximilianAnzinger Jul 31, 2023
77efd3a
generate learning path when student is added by instructor
MaximilianAnzinger Jul 31, 2023
8f76721
Update CourseService.java
MaximilianAnzinger Jul 31, 2023
7a1bdef
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Jul 31, 2023
47283c3
fix breadcrumbs
MaximilianAnzinger Jul 31, 2023
46e8c02
Merge branch 'feature/learning-path/participation/exercises' of https…
MaximilianAnzinger Jul 31, 2023
02a0c6e
refactor participation history
MaximilianAnzinger Aug 1, 2023
3085580
fix build fail
MaximilianAnzinger Aug 1, 2023
51265e6
fix wrong autocompletion
MaximilianAnzinger Aug 1, 2023
a55c88c
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Aug 1, 2023
6ef2755
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Aug 1, 2023
fdc6025
Merge branch 'feature/learning-path-generation' into feature/learning…
MaximilianAnzinger Aug 1, 2023
e64a327
fix codestyle issues
MaximilianAnzinger Aug 1, 2023
386366d
fix type issue after merge
MaximilianAnzinger Aug 1, 2023
e4dfd81
add feature toggle for learning paths
MaximilianAnzinger Aug 2, 2023
a30933d
Merge branch 'feature/learning-path/participation/exercises' into fea…
MaximilianAnzinger Aug 2, 2023
e2c507b
Merge branch 'feature/learning-path/graph' into feature/learning-path…
MaximilianAnzinger Aug 2, 2023
cc6ac91
fix merge conflict
MaximilianAnzinger Aug 2, 2023
9d5023d
Merge branch 'feature/learning-path/allmerge' into feature/learning-p…
MaximilianAnzinger Aug 2, 2023
10c3c0b
reduce size of pr
MaximilianAnzinger Aug 2, 2023
74fb7cf
undo dependency changes
MaximilianAnzinger Aug 2, 2023
a8c0f10
remove unused methods from repository
MaximilianAnzinger Aug 2, 2023
01a1258
remove unused
MaximilianAnzinger Aug 2, 2023
065757e
fix learning path module
MaximilianAnzinger Aug 2, 2023
c7f25fa
Revert "fix learning path module"
MaximilianAnzinger Aug 2, 2023
d912b82
remove unused DTOs
MaximilianAnzinger Aug 2, 2023
4236ead
add basic components
MaximilianAnzinger Aug 2, 2023
48058aa
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 2, 2023
7be6cc0
add client DTOs
MaximilianAnzinger Aug 2, 2023
ea27694
add modal to learning path management
MaximilianAnzinger Aug 2, 2023
cd36231
add server code and tests
MaximilianAnzinger Aug 2, 2023
5f34728
fix code style
MaximilianAnzinger Aug 2, 2023
b86beb2
add feature toggle annotation to endpoints
MaximilianAnzinger Aug 2, 2023
8055531
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 2, 2023
ea54c74
add feature toggle annotation to endpoint
MaximilianAnzinger Aug 2, 2023
4761096
remove unused and fix code style
MaximilianAnzinger Aug 3, 2023
92800e3
Merge branch 'develop' into feature/learning-path/feature-toggle
MaximilianAnzinger Aug 3, 2023
b6f734b
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 3, 2023
8bbc0c2
add sticky popover directive
MaximilianAnzinger Aug 3, 2023
abf8eac
add icon and hint retrieval to lecture unit model
MaximilianAnzinger Aug 3, 2023
e2ed5b7
add translations
MaximilianAnzinger Aug 3, 2023
3b15b29
add missing import
MaximilianAnzinger Aug 3, 2023
0625463
add dependencies for ngx graph
MaximilianAnzinger Aug 3, 2023
4dba57a
Merge branch 'develop' into feature/learning-path/feature-toggle
MaximilianAnzinger Aug 4, 2023
0c315a9
add suggestions by Tobias
MaximilianAnzinger Aug 4, 2023
a9e0321
add tests for error alert in learning path management
MaximilianAnzinger Aug 4, 2023
e547155
add suggenstions from review and testing session
MaximilianAnzinger Aug 4, 2023
03c8d06
adjust test cases
MaximilianAnzinger Aug 5, 2023
0848fc3
Update learning-path-management.component.html
MaximilianAnzinger Aug 5, 2023
cb78464
Merge branch 'develop' into feature/learning-path/managment-graph
MaximilianAnzinger Aug 5, 2023
1a8f586
adjust feature toggle for testing
MaximilianAnzinger Aug 5, 2023
1185a41
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 5, 2023
8107b72
improve competency health check and warnings
MaximilianAnzinger Aug 7, 2023
7a1be3d
Merge branch 'develop' into feature/learning-path/feature-toggle
MaximilianAnzinger Aug 7, 2023
b99ab10
Merge branch 'develop' into feature/learning-path/feature-toggle
MaximilianAnzinger Aug 8, 2023
5acd836
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 8, 2023
ec1fd79
Adjust testGenerateLearningPathOnEnrollment for changed return type o…
MaximilianAnzinger Aug 8, 2023
592adb2
remove clusters
MaximilianAnzinger Aug 8, 2023
f694156
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 8, 2023
a5b6817
fix matching node
MaximilianAnzinger Aug 8, 2023
dfc115a
initial commit
MaximilianAnzinger Aug 8, 2023
44ae860
update doc comment
MaximilianAnzinger Aug 8, 2023
68fbaf1
make Johannes happy
MaximilianAnzinger Aug 8, 2023
dd059e6
make Lucas happy
MaximilianAnzinger Aug 8, 2023
ba1b224
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 8, 2023
466dd4b
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Aug 8, 2023
97a11a6
undo change in generateLearningPathForUser
MaximilianAnzinger Aug 9, 2023
4aca397
Merge branch 'develop' into feature/learning-path/feature-toggle
MaximilianAnzinger Aug 9, 2023
ded8235
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 9, 2023
176b8c5
removed icons comment
MaximilianAnzinger Aug 9, 2023
cc287ec
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Aug 9, 2023
0979703
reduce rest calls for node details
MaximilianAnzinger Aug 9, 2023
c05ae3a
reduce payload for lecture unit node details
MaximilianAnzinger Aug 10, 2023
787830c
fix theme colors and popover width
MaximilianAnzinger Aug 10, 2023
8a3a282
Merge branch 'develop' into feature/learning-path/feature-toggle
MaximilianAnzinger Aug 11, 2023
114c107
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Aug 11, 2023
b0eadfa
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 11, 2023
7e0faa0
Merge branch 'develop' into feature/learning-path/participation-view
MaximilianAnzinger Aug 11, 2023
53830db
Merge branch 'develop' into feature/learning-path/feature-toggle
MaximilianAnzinger Aug 11, 2023
7841f19
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 11, 2023
443139d
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Aug 11, 2023
a7d0abd
Merge branch 'develop' into feature/learning-path/feature-toggle
MaximilianAnzinger Aug 13, 2023
63d5f81
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 13, 2023
f8640e8
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Aug 13, 2023
468e89f
remove arg from from todo method
MaximilianAnzinger Aug 13, 2023
2b846cf
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 13, 2023
9b690fe
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Aug 13, 2023
aeec03f
Revert "remove arg from from todo method"
MaximilianAnzinger Aug 13, 2023
c3142a5
temporarily remove unused argument in todo method
MaximilianAnzinger Aug 13, 2023
379230b
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 13, 2023
05c2a91
readd argument after removal in base pr
MaximilianAnzinger Aug 13, 2023
9c30e85
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Aug 13, 2023
f170a50
remove empty providers in client tests
MaximilianAnzinger Aug 14, 2023
e79f667
remove remaining empty providers
MaximilianAnzinger Aug 14, 2023
3b3a52c
rename getJsonSubTypeString method
MaximilianAnzinger Aug 14, 2023
5023af6
fix code style
MaximilianAnzinger Aug 14, 2023
8423819
fix d3-transition version
MaximilianAnzinger Aug 14, 2023
8699eb6
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Aug 14, 2023
062ebe0
improve learning path container
MaximilianAnzinger Aug 14, 2023
9f523be
remove console log
MaximilianAnzinger Aug 14, 2023
8c64e99
fix code style
MaximilianAnzinger Aug 14, 2023
0f6d92f
remove unused providers in tests
MaximilianAnzinger Aug 14, 2023
fc4e75a
Merge branch 'feature/learning-path/participation-view' into feature/…
MaximilianAnzinger Aug 14, 2023
78d5c31
Update learning-path-health-status-warning.component.ts
MaximilianAnzinger Aug 14, 2023
79d6535
fix type error
MaximilianAnzinger Aug 15, 2023
1f52ef6
fix code style
MaximilianAnzinger Aug 16, 2023
ced674a
refactor lecture unit view tests to be parameterized
MaximilianAnzinger Aug 17, 2023
02b766a
adjust translation?
MaximilianAnzinger Aug 17, 2023
295b44d
add comment to undefineAll
MaximilianAnzinger Aug 17, 2023
d5c99a8
adjust translation
MaximilianAnzinger Aug 17, 2023
30b6573
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Aug 17, 2023
0d3de49
Merge branch 'feature/learning-path/participation-view' into feature/…
MaximilianAnzinger Aug 17, 2023
2c6683a
add server code
MaximilianAnzinger Aug 21, 2023
46cdbc6
Merge branch 'feature/learning-path/health-status' into feature/learn…
MaximilianAnzinger Aug 21, 2023
57c79a0
add client code and documentation
MaximilianAnzinger Aug 21, 2023
ba8816c
apply client linter
MaximilianAnzinger Aug 21, 2023
7d3ba9b
apply prettier
MaximilianAnzinger Aug 21, 2023
3d9bd56
add server tests
MaximilianAnzinger Aug 22, 2023
5627937
fix graph rendering
MaximilianAnzinger Aug 22, 2023
e1d107b
add client tests
MaximilianAnzinger Aug 22, 2023
58de067
implement suggestions by johannes
MaximilianAnzinger Aug 23, 2023
20226ac
add comment and improve code quality
MaximilianAnzinger Aug 23, 2023
5c7ddd0
fix query indentations
MaximilianAnzinger Aug 24, 2023
57d5cec
optimize learning-path-graph tests
MaximilianAnzinger Aug 24, 2023
95fa535
add competencyIdMap to state
MaximilianAnzinger Aug 24, 2023
54e6f80
Merge branch 'feature/learning-path/recommendation' into feature/lear…
MaximilianAnzinger Aug 24, 2023
a03aff8
Merge branch 'develop' into feature/learning-path/feature-toggle
MaximilianAnzinger Aug 25, 2023
50d0d4b
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 28, 2023
a952046
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Aug 28, 2023
bf396ea
Merge branch 'feature/learning-path/participation-view' into feature/…
MaximilianAnzinger Aug 28, 2023
8bb6902
Merge branch 'feature/learning-path/health-status' into feature/learn…
MaximilianAnzinger Aug 28, 2023
cc6caca
Update src/main/java/de/tum/in/www1/artemis/service/CompetencyProgres…
MaximilianAnzinger Aug 28, 2023
5c9969c
Update src/main/java/de/tum/in/www1/artemis/domain/competency/Learnin…
MaximilianAnzinger Aug 28, 2023
496aadc
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Aug 28, 2023
56d3afc
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Aug 28, 2023
0de8cde
Merge branch 'feature/learning-path/participation-view' into feature/…
MaximilianAnzinger Aug 28, 2023
234dc77
Merge branch 'feature/learning-path/health-status' into feature/learn…
MaximilianAnzinger Aug 28, 2023
e9d772c
add server implementation and refactor
MaximilianAnzinger Aug 29, 2023
954d267
added tests
MaximilianAnzinger Aug 30, 2023
2ea0ec9
Merge branch 'feature/learning-path/recommendation' into feature/lear…
MaximilianAnzinger Aug 30, 2023
e21d8bc
cleanup
MaximilianAnzinger Aug 30, 2023
769cd0c
add code review suggestions
MaximilianAnzinger Sep 1, 2023
043b4ee
Merge branch 'develop' into feature/learning-path/feature-toggle
Sep 3, 2023
2a3c297
Merge branch 'develop' into feature/learning-path/feature-toggle
MaximilianAnzinger Sep 5, 2023
44cc1c0
merge cleanup
MaximilianAnzinger Sep 5, 2023
c07c498
Merge branch 'feature/learning-path/feature-toggle' into feature/lear…
MaximilianAnzinger Sep 5, 2023
d3effd5
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Sep 5, 2023
3c5ba79
Merge branch 'feature/learning-path/participation-view' into feature/…
MaximilianAnzinger Sep 5, 2023
a716dd8
Merge branch 'feature/learning-path/health-status' into feature/learn…
MaximilianAnzinger Sep 5, 2023
a99a7db
Merge branch 'feature/learning-path/recommendation' into feature/lear…
MaximilianAnzinger Sep 5, 2023
c2bb522
fix server style
MaximilianAnzinger Sep 6, 2023
c9437de
Merge branch 'develop' into feature/learning-path/managment-graph
MaximilianAnzinger Sep 6, 2023
8296c4a
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Sep 6, 2023
a9de355
Merge branch 'feature/learning-path/participation-view' into feature/…
MaximilianAnzinger Sep 6, 2023
6f03199
Merge branch 'feature/learning-path/health-status' into feature/learn…
MaximilianAnzinger Sep 6, 2023
a22473e
Merge branch 'feature/learning-path/recommendation' into feature/lear…
MaximilianAnzinger Sep 6, 2023
5285bb9
Merge branch 'develop' into feature/learning-path/managment-graph
MaximilianAnzinger Sep 7, 2023
f84d5a1
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Sep 7, 2023
40cc0cc
Merge branch 'feature/learning-path/participation-view' into feature/…
MaximilianAnzinger Sep 7, 2023
348bb59
Merge branch 'feature/learning-path/health-status' into feature/learn…
MaximilianAnzinger Sep 7, 2023
237765b
Merge branch 'feature/learning-path/recommendation' into feature/lear…
MaximilianAnzinger Sep 7, 2023
fd7399e
Merge branch 'develop' into feature/learning-path/managment-graph
MaximilianAnzinger Sep 10, 2023
289cfd2
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Sep 10, 2023
84bc3f0
Merge branch 'feature/learning-path/participation-view' into feature/…
MaximilianAnzinger Sep 10, 2023
a1ff479
Merge branch 'feature/learning-path/health-status' into feature/learn…
MaximilianAnzinger Sep 10, 2023
6ae0250
Merge branch 'feature/learning-path/recommendation' into feature/lear…
MaximilianAnzinger Sep 10, 2023
b878d09
apply spotless after merge
MaximilianAnzinger Sep 11, 2023
98fc15a
improve sticky popover
MaximilianAnzinger Sep 18, 2023
d84e6a3
Merge branch 'develop' into feature/learning-path/managment-graph
MaximilianAnzinger Sep 18, 2023
6433900
update tests
MaximilianAnzinger Sep 19, 2023
4fa6a85
Merge branch 'feature/learning-path/managment-graph' of https://githu…
MaximilianAnzinger Sep 19, 2023
002ab73
Merge branch 'develop' into feature/learning-path/managment-graph
MaximilianAnzinger Sep 19, 2023
c1261b1
fix test
MaximilianAnzinger Sep 19, 2023
40e88d8
remove constructor from DTO
MaximilianAnzinger Sep 19, 2023
e0cf0d2
Merge branch 'develop' into feature/learning-path/managment-graph
MaximilianAnzinger Sep 19, 2023
cf07def
Merge branch 'develop' into feature/learning-path/managment-graph
MaximilianAnzinger Sep 20, 2023
4cbeb3f
fix sticky popover closing after returning to node
MaximilianAnzinger Sep 20, 2023
a916099
Merge branch 'develop' into feature/learning-path/managment-graph
MaximilianAnzinger Sep 21, 2023
0c455cf
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Sep 21, 2023
4917773
Merge branch 'feature/learning-path/participation-view' into feature/…
MaximilianAnzinger Sep 21, 2023
b30579f
Merge branch 'feature/learning-path/health-status' into feature/learn…
MaximilianAnzinger Sep 21, 2023
8bffcc9
Merge branch 'feature/learning-path/recommendation' into feature/lear…
MaximilianAnzinger Sep 21, 2023
337b75d
Merge branch 'develop' into feature/learning-path/managment-graph
MaximilianAnzinger Sep 21, 2023
0fd0e47
Merge branch 'feature/learning-path/managment-graph' into feature/lea…
MaximilianAnzinger Sep 21, 2023
ef5f78e
Merge branch 'feature/learning-path/participation-view' into feature/…
MaximilianAnzinger Sep 21, 2023
ecd51a3
Merge branch 'feature/learning-path/health-status' into feature/learn…
MaximilianAnzinger Sep 21, 2023
5870837
Merge branch 'feature/learning-path/recommendation' into feature/lear…
MaximilianAnzinger Sep 21, 2023
6964bcd
Merge branch 'develop' into feature/learning-path/participation-view
MaximilianAnzinger Sep 21, 2023
66c8788
implement most of the feedback from Patrick
MaximilianAnzinger Sep 22, 2023
701eaee
Implement alternative solution for exercise styling
MaximilianAnzinger Sep 22, 2023
ce251f1
rename css class and remove view encapsulation
MaximilianAnzinger Sep 22, 2023
cfc22ef
Merge branch 'develop' into feature/learning-path/participation-view
MaximilianAnzinger Sep 22, 2023
35e6c83
Update LearningPathResource.java
MaximilianAnzinger Sep 22, 2023
310898d
Merge branch 'develop' into feature/learning-path/participation-view
MaximilianAnzinger Sep 23, 2023
8658652
Merge branch 'feature/learning-path/participation-view' into feature/…
MaximilianAnzinger Sep 23, 2023
22c6c61
Merge branch 'feature/learning-path/health-status' into feature/learn…
MaximilianAnzinger Sep 23, 2023
f416228
Merge branch 'feature/learning-path/recommendation' into feature/lear…
MaximilianAnzinger Sep 23, 2023
4b9704c
code style
MaximilianAnzinger Sep 25, 2023
4aa7898
Merge branch 'feature/learning-path/recommendation' into feature/lear…
MaximilianAnzinger Sep 25, 2023
b4c3a30
add doc comments from merge
MaximilianAnzinger Sep 25, 2023
b4a5704
java doc
MaximilianAnzinger Sep 25, 2023
0c19aaa
fix query for postgres
MaximilianAnzinger Sep 26, 2023
db7e87e
Merge branch 'develop' into feature/learning-path/participation-view
MaximilianAnzinger Sep 27, 2023
d24cd83
Merge branch 'feature/learning-path/participation-view' into feature/…
MaximilianAnzinger Sep 27, 2023
3695f4e
Merge branch 'feature/learning-path/health-status' into feature/learn…
MaximilianAnzinger Sep 27, 2023
b778e8f
add JavaDoc
MaximilianAnzinger Sep 27, 2023
b79141f
Merge branch 'feature/learning-path/recommendation' into feature/lear…
MaximilianAnzinger Sep 27, 2023
50da456
Merge branch 'develop' into feature/learning-path/health-status
MaximilianAnzinger Sep 29, 2023
c522378
implement maintainer feedback
MaximilianAnzinger Sep 29, 2023
c031082
Merge branch 'feature/learning-path/health-status' into feature/learn…
Strohgelaender Sep 29, 2023
c481d3f
Merge branch 'develop' into feature/learning-path/recommendation
MaximilianAnzinger Sep 29, 2023
0eef572
cleanup merge and add documentation
MaximilianAnzinger Sep 29, 2023
c344e38
Merge branch 'develop' into feature/learning-path/recommendation
MaximilianAnzinger Sep 30, 2023
f93d780
Merge branch 'feature/learning-path/recommendation' into feature/lear…
MaximilianAnzinger Sep 30, 2023
fc1013a
Merge branch 'develop' into feature/learning-path/learning-object-rec…
MaximilianAnzinger Oct 9, 2023
3a261e6
merge cleanup
MaximilianAnzinger Oct 9, 2023
1cb6613
make Lucas happy
MaximilianAnzinger Oct 9, 2023
04641e3
and even happier
MaximilianAnzinger Oct 9, 2023
e7c2aeb
Update LearningPathServiceTest.java
MaximilianAnzinger Oct 9, 2023
3b086c8
Merge branch 'develop' into feature/learning-path/learning-object-rec…
MaximilianAnzinger Oct 10, 2023
4c9d4e8
Merge branch 'develop' into feature/learning-path/learning-object-rec…
MaximilianAnzinger Oct 11, 2023
59bf6dd
Merge branch 'develop' into feature/learning-path/learning-object-rec…
MaximilianAnzinger Oct 13, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ SELECT u, SUM(sc.lastRatedPoints)
WHERE s.user = :user
AND s.exercise IN :exercises
""")
List<StudentScore> findAllByExercisesAndUser(@Param("exercises") List<Exercise> exercises, @Param("user") User user);
List<StudentScore> findAllByExercisesAndUser(@Param("exercises") Set<Exercise> exercises, @Param("user") User user);

@Query("""
SELECT s
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ SELECT t, SUM(s.lastRatedPoints)
WHERE s.exercise IN :exercises
AND :user MEMBER OF s.team.students
""")
List<TeamScore> findAllByExercisesAndUser(@Param("exercises") List<Exercise> exercises, @Param("user") User user);
List<TeamScore> findAllByExercisesAndUser(@Param("exercises") Set<Exercise> exercises, @Param("user") User user);

@Transactional // ok because of delete
@Modifying
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import java.time.Instant;
import java.util.*;
import java.util.stream.Stream;
import java.util.stream.Collectors;

import javax.validation.constraints.NotNull;

Expand All @@ -17,11 +17,10 @@
import de.tum.in.www1.artemis.domain.competency.CompetencyProgress;
import de.tum.in.www1.artemis.domain.lecture.ExerciseUnit;
import de.tum.in.www1.artemis.domain.lecture.LectureUnit;
import de.tum.in.www1.artemis.domain.lecture.LectureUnitCompletion;
import de.tum.in.www1.artemis.domain.participation.Participant;
import de.tum.in.www1.artemis.domain.scores.ParticipantScore;
import de.tum.in.www1.artemis.repository.*;
import de.tum.in.www1.artemis.security.SecurityUtils;
import de.tum.in.www1.artemis.service.learningpath.LearningPathService;
import de.tum.in.www1.artemis.service.util.RoundingUtil;

/**
Expand All @@ -36,10 +35,6 @@ public class CompetencyProgressService {

private final CompetencyProgressRepository competencyProgressRepository;

private final StudentScoreRepository studentScoreRepository;

private final TeamScoreRepository teamScoreRepository;

private final ExerciseRepository exerciseRepository;

private final LectureUnitRepository lectureUnitRepository;
Expand All @@ -48,17 +43,21 @@ public class CompetencyProgressService {

private final LearningPathService learningPathService;

public CompetencyProgressService(CompetencyRepository competencyRepository, CompetencyProgressRepository competencyProgressRepository,
StudentScoreRepository studentScoreRepository, TeamScoreRepository teamScoreRepository, ExerciseRepository exerciseRepository,
LectureUnitRepository lectureUnitRepository, UserRepository userRepository, LearningPathService learningPathService) {
private final ParticipantScoreService participantScoreService;

private final LearningObjectService learningObjectService;

public CompetencyProgressService(CompetencyRepository competencyRepository, CompetencyProgressRepository competencyProgressRepository, ExerciseRepository exerciseRepository,
LectureUnitRepository lectureUnitRepository, UserRepository userRepository, LearningPathService learningPathService, ParticipantScoreService participantScoreService,
LearningObjectService learningObjectService) {
this.competencyRepository = competencyRepository;
this.competencyProgressRepository = competencyProgressRepository;
this.studentScoreRepository = studentScoreRepository;
this.teamScoreRepository = teamScoreRepository;
this.exerciseRepository = exerciseRepository;
this.lectureUnitRepository = lectureUnitRepository;
this.userRepository = userRepository;
this.learningPathService = learningPathService;
this.participantScoreService = participantScoreService;
this.learningObjectService = learningObjectService;
}

/**
Expand Down Expand Up @@ -188,12 +187,12 @@ public CompetencyProgress updateCompetencyProgress(Long competencyId, User user)
}

var studentProgress = competencyProgress.orElse(new CompetencyProgress());
List<LearningObject> learningObjects = new ArrayList<>();
Set<LearningObject> learningObjects = new HashSet<>();

List<LectureUnit> allLectureUnits = competency.getLectureUnits().stream().filter(LectureUnit::isVisibleToStudents).toList();
Set<LectureUnit> allLectureUnits = competency.getLectureUnits().stream().filter(LectureUnit::isVisibleToStudents).collect(Collectors.toSet());

List<LectureUnit> lectureUnits = allLectureUnits.stream().filter(lectureUnit -> !(lectureUnit instanceof ExerciseUnit)).toList();
List<Exercise> exercises = competency.getExercises().stream().filter(Exercise::isVisibleToStudents).toList();
Set<LectureUnit> lectureUnits = allLectureUnits.stream().filter(lectureUnit -> !(lectureUnit instanceof ExerciseUnit)).collect(Collectors.toSet());
Set<Exercise> exercises = competency.getExercises().stream().filter(Exercise::isVisibleToStudents).collect(Collectors.toSet());

learningObjects.addAll(lectureUnits);
learningObjects.addAll(exercises);
Expand Down Expand Up @@ -233,8 +232,9 @@ public CompetencyProgress updateCompetencyProgress(Long competencyId, User user)
* @param user The user for which the progress should be calculated
* @return The percentage of completed learning objects by the user
*/
private double calculateProgress(@NotNull List<LearningObject> learningObjects, @NotNull User user) {
return learningObjects.stream().map(learningObject -> hasUserCompleted(user, learningObject)).mapToInt(completed -> completed ? 100 : 0).average().orElse(0.);
private double calculateProgress(@NotNull Set<LearningObject> learningObjects, @NotNull User user) {
return learningObjects.stream().map(learningObject -> learningObjectService.isCompletedByUser(learningObject, user)).mapToInt(completed -> completed ? 100 : 0).average()
.orElse(0.);
}

/**
Expand All @@ -244,29 +244,8 @@ private double calculateProgress(@NotNull List<LearningObject> learningObjects,
* @param user The user for which the confidence score should be calculated
* @return The average score of the user in all exercises linked to the competency
*/
private double calculateConfidence(@NotNull List<Exercise> exercises, @NotNull User user) {
var studentScores = studentScoreRepository.findAllByExercisesAndUser(exercises, user);
var teamScores = teamScoreRepository.findAllByExercisesAndUser(exercises, user);
return Stream.concat(studentScores.stream(), teamScores.stream()).map(ParticipantScore::getLastScore).mapToDouble(score -> score).summaryStatistics().getAverage();
}

/**
* Checks if the user has completed the learning object.
*
* @param user The user for which to check the completion status
* @param learningObject The lecture unit or exercise
* @return True if the user completed the lecture unit or has at least one result for the exercise, false otherwise
*/
private boolean hasUserCompleted(@NotNull User user, LearningObject learningObject) {
if (learningObject instanceof LectureUnit lectureUnit) {
return lectureUnit.getCompletedUsers().stream().map(LectureUnitCompletion::getUser).anyMatch(user1 -> user1.getId().equals(user.getId()));
}
else if (learningObject instanceof Exercise exercise) {
var studentScores = studentScoreRepository.findAllByExercisesAndUser(List.of(exercise), user);
var teamScores = teamScoreRepository.findAllByExercisesAndUser(List.of(exercise), user);
return Stream.concat(studentScores.stream(), teamScores.stream()).findAny().isPresent();
}
throw new IllegalArgumentException("Learning object must be either LectureUnit or Exercise");
private double calculateConfidence(@NotNull Set<Exercise> exercises, @NotNull User user) {
return participantScoreService.getStudentAndTeamParticipationScoresAsDoubleStream(user, exercises).summaryStatistics().getAverage();
}

/**
Expand Down Expand Up @@ -303,4 +282,16 @@ public static boolean isMastered(@NotNull CompetencyProgress competencyProgress)
return mastery >= competencyProgress.getCompetency().getMasteryThreshold();
}

/**
* Checks if the competency can be mastered without completing any exercises.
*
* @param competency the competency to check
* @return true if the competency can be mastered without completing any exercises, false otherwise
*/
public static boolean canBeMasteredWithoutExercises(@NotNull Competency competency) {
final var lectureUnits = competency.getLectureUnits().size();
final var numberOfLearningObjects = lectureUnits + competency.getExercises().size();
final var achievableMasteryScore = ((double) lectureUnits) / (3 * numberOfLearningObjects) * 100;
return achievableMasteryScore >= competency.getMasteryThreshold();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
import de.tum.in.www1.artemis.service.dto.StudentDTO;
import de.tum.in.www1.artemis.service.exam.ExamDeletionService;
import de.tum.in.www1.artemis.service.export.CourseExamExportService;
import de.tum.in.www1.artemis.service.learningpath.LearningPathService;
import de.tum.in.www1.artemis.service.notifications.GroupNotificationService;
import de.tum.in.www1.artemis.service.tutorialgroups.TutorialGroupService;
import de.tum.in.www1.artemis.service.user.UserService;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import java.util.*;
import java.util.stream.Collectors;

import javax.validation.constraints.NotNull;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.actuate.audit.AuditEvent;
Expand Down Expand Up @@ -80,13 +82,15 @@ public class ExerciseService {

private final QuizBatchService quizBatchService;

private final ParticipantScoreService participantScoreService;

public ExerciseService(ExerciseRepository exerciseRepository, AuthorizationCheckService authCheckService, QuizScheduleService quizScheduleService,
AuditEventRepository auditEventRepository, TeamRepository teamRepository, ProgrammingExerciseRepository programmingExerciseRepository,
LtiOutcomeUrlRepository ltiOutcomeUrlRepository, StudentParticipationRepository studentParticipationRepository, ResultRepository resultRepository,
SubmissionRepository submissionRepository, ParticipantScoreRepository participantScoreRepository, UserRepository userRepository,
ComplaintRepository complaintRepository, TutorLeaderboardService tutorLeaderboardService, ComplaintResponseRepository complaintResponseRepository,
GradingCriterionRepository gradingCriterionRepository, FeedbackRepository feedbackRepository, RatingService ratingService, ExerciseDateService exerciseDateService,
ExampleSubmissionRepository exampleSubmissionRepository, QuizBatchService quizBatchService) {
ExampleSubmissionRepository exampleSubmissionRepository, QuizBatchService quizBatchService, ParticipantScoreService participantScoreService) {
this.exerciseRepository = exerciseRepository;
this.resultRepository = resultRepository;
this.authCheckService = authCheckService;
Expand All @@ -108,6 +112,7 @@ public ExerciseService(ExerciseRepository exerciseRepository, AuthorizationCheck
this.ratingService = ratingService;
this.exampleSubmissionRepository = exampleSubmissionRepository;
this.quizBatchService = quizBatchService;
this.participantScoreService = participantScoreService;
}

/**
Expand Down Expand Up @@ -732,4 +737,20 @@ public List<Feedback> getFeedbackToBeDeletedAfterGradingInstructionUpdate(boolea
}
return feedbackToBeDeleted;
}

/**
* Checks if the user has achieved the minimum score.
*
* @param exercise the exercise that should be checked
* @param user the user for which to check the score
* @param minScore the minimum score that should be achieved
* @return true if the user achieved the minimum score, false otherwise
*/
public boolean hasScoredAtLeast(@NotNull Exercise exercise, @NotNull User user, double minScore) {
final var score = participantScoreService.getStudentAndTeamParticipationScoresAsDoubleStream(user, Set.of(exercise)).max();
if (score.isEmpty()) {
return false;
}
return score.getAsDouble() >= minScore;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package de.tum.in.www1.artemis.service;

import java.util.Set;

import javax.validation.constraints.NotNull;

import org.springframework.stereotype.Service;

import de.tum.in.www1.artemis.domain.Exercise;
import de.tum.in.www1.artemis.domain.LearningObject;
import de.tum.in.www1.artemis.domain.User;
import de.tum.in.www1.artemis.domain.lecture.LectureUnit;
import de.tum.in.www1.artemis.domain.lecture.LectureUnitCompletion;

/**
* Service implementation for interactions with learning objects.
* <p>
* The interface {@code LearningObject} is implemented by all {@code LectureUnit}s and {@code Exercise}s.
*
* @see LearningObject
* @see LectureUnit
* @see Exercise
*/
@Service
public class LearningObjectService {
MaximilianAnzinger marked this conversation as resolved.
Show resolved Hide resolved

private final ParticipantScoreService participantScoreService;

public LearningObjectService(ParticipantScoreService participantScoreService) {

Check warning on line 29 in src/main/java/de/tum/in/www1/artemis/service/LearningObjectService.java

View check run for this annotation

Teamscale / teamscale-findings

src/main/java/de/tum/in/www1/artemis/service/LearningObjectService.java#L29

Interface comment missing https://teamscale.io/findings.html#details/GitHub-ls1intum-Artemis?t=feature%2Flearning-path%2Flearning-object-recommendation%3AHEAD&id=206ADA8925E491F08DBE941C252E1B62
this.participantScoreService = participantScoreService;
}

/**
* Checks if the user has completed the learning object.
*
* @param learningObject the lecture unit or exercise
* @param user the user for which to check the completion status
* @return true if the user completed the lecture unit or has at least one result for the exercise, false otherwise
*/
public boolean isCompletedByUser(@NotNull LearningObject learningObject, @NotNull User user) {
if (learningObject instanceof LectureUnit lectureUnit) {
return lectureUnit.getCompletedUsers().stream().map(LectureUnitCompletion::getUser).anyMatch(user1 -> user1.getId().equals(user.getId()));
}
else if (learningObject instanceof Exercise exercise) {
return participantScoreService.getStudentAndTeamParticipations(user, Set.of(exercise)).findAny().isPresent();
}
throw new IllegalArgumentException("Learning object must be either LectureUnit or Exercise");
}
}
Loading
Loading