11package de .unistuttgart .iste .meitrex .skilllevel_service .service ;
22
3+ import de .unistuttgart .iste .meitrex .common .dapr .TopicPublisher ;
4+ import de .unistuttgart .iste .meitrex .common .event .skilllevels .UserSkillLevelChangedEvent ;
35import de .unistuttgart .iste .meitrex .generated .dto .*;
46import de .unistuttgart .iste .meitrex .common .event .ItemResponse ;
57import de .unistuttgart .iste .meitrex .skilllevel_service .persistence .entity .AllSkillLevelsEntity ;
@@ -34,6 +36,8 @@ public class SkillLevelService {
3436 private final ItemDifficultyRepository itemDifficultyRepository ;
3537
3638 private final SkillsForCourseRepository skillsForCourseRepository ;
39+
40+ private final TopicPublisher topicPublisher ;
3741
3842 /**
3943 * Recalculates the skill levels for a given user and responses.
@@ -170,4 +174,41 @@ private SkillLevelEntity initializeSkillLevelEntity(final float initialValue) {
170174 skillLevelEntity .setLog (new ArrayList <>());
171175 return skillLevelEntity ;
172176 }
177+
178+ /**
179+ * Publishes UserSkillLevelChangedEvent for all skill levels of a given user.
180+ * This is used to respond to RequestUserSkillLevelEvent.
181+ *
182+ * @param userId The ID of the user to publish skill levels for
183+ */
184+ public void publishAllSkillLevelsForUser (final UUID userId ) {
185+ List <AllSkillLevelsEntity > allSkillLevels = skillLevelsRepository .findByIdUserId (userId );
186+
187+ for (AllSkillLevelsEntity skillLevelEntity : allSkillLevels ) {
188+ UUID skillId = skillLevelEntity .getId ().getSkillId ();
189+
190+ publishSkillLevelEvent (userId , skillId , BloomLevel .REMEMBER , skillLevelEntity .getRemember ().getValue ());
191+ publishSkillLevelEvent (userId , skillId , BloomLevel .UNDERSTAND , skillLevelEntity .getUnderstand ().getValue ());
192+ publishSkillLevelEvent (userId , skillId , BloomLevel .APPLY , skillLevelEntity .getApply ().getValue ());
193+ publishSkillLevelEvent (userId , skillId , BloomLevel .ANALYZE , skillLevelEntity .getAnalyze ().getValue ());
194+ publishSkillLevelEvent (userId , skillId , BloomLevel .EVALUATE , skillLevelEntity .getEvaluate ().getValue ());
195+ publishSkillLevelEvent (userId , skillId , BloomLevel .CREATE , skillLevelEntity .getCreate ().getValue ());
196+ }
197+ }
198+
199+ /**
200+ * Method to publish a single UserSkillLevelChangedEvent.
201+ * oldValue and newValue are set to the same value since this is just for publishing existing skill levels and not for indicating a change
202+ */
203+ private void publishSkillLevelEvent (UUID userId , UUID skillId , BloomLevel bloomLevel , float value ) {
204+ UserSkillLevelChangedEvent event = UserSkillLevelChangedEvent .builder ()
205+ .userId (userId )
206+ .skillId (skillId )
207+ .bloomLevel (bloomLevel )
208+ .oldValue (value )
209+ .newValue (value )
210+ .build ();
211+
212+ topicPublisher .notifyUserSkillLevelChanged (event );
213+ }
173214}
0 commit comments