diff --git a/pom-dependency-tree.txt b/pom-dependency-tree.txt index a98a97fd5..aceb60d68 100644 --- a/pom-dependency-tree.txt +++ b/pom-dependency-tree.txt @@ -1,4 +1,4 @@ -ai.elimu:webapp:war:2.6.103-SNAPSHOT +ai.elimu:webapp:war:2.6.105-SNAPSHOT +- ai.elimu:model:jar:model-2.0.114:compile | \- com.google.code.gson:gson:jar:2.13.1:compile | \- com.google.errorprone:error_prone_annotations:jar:2.38.0:compile diff --git a/src/main/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelper.java b/src/main/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelper.java index 863612080..40130ddd1 100644 --- a/src/main/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelper.java +++ b/src/main/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelper.java @@ -338,11 +338,15 @@ public static List extractNumberLearningEvents(File csvFile Integer numberValue = Integer.valueOf(csvRecord.get("number_value")); numberLearningEvent.setNumberValue(numberValue); - String numberSymbol = csvRecord.get("number_symbol"); - numberLearningEvent.setNumberSymbol(numberSymbol); + if (StringUtils.isNotBlank(csvRecord.get("number_symbol"))) { + String numberSymbol = csvRecord.get("number_symbol"); + numberLearningEvent.setNumberSymbol(numberSymbol); + } - Long numberId = Long.valueOf(csvRecord.get("number_id")); - numberLearningEvent.setNumberId(numberId); + if (StringUtils.isNotBlank(csvRecord.get("number_id"))) { + Long numberId = Long.valueOf(csvRecord.get("number_id")); + numberLearningEvent.setNumberId(numberId); + } numberLearningEvents.add(numberLearningEvent); } diff --git a/src/test/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelperTest.java b/src/test/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelperTest.java index fea9826f2..45cab7c70 100644 --- a/src/test/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelperTest.java +++ b/src/test/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelperTest.java @@ -17,6 +17,7 @@ import ai.elimu.entity.analytics.LetterSoundLearningEvent; import ai.elimu.entity.analytics.NumberAssessmentEvent; +import ai.elimu.entity.analytics.NumberLearningEvent; import ai.elimu.entity.analytics.StoryBookLearningEvent; import ai.elimu.entity.analytics.VideoLearningEvent; import ai.elimu.entity.analytics.WordAssessmentEvent; @@ -189,6 +190,30 @@ public void testExtractWordLearningEvents_v3005009() throws IOException { } + /** + * Test extraction of data from CSV files generated by version 4000028 of the Analytics app: + * https://github.com/elimu-ai/analytics/releases/tag/4.0.28 + */ + @Test + public void testExtractNumberLearningEvents_v4000028() throws IOException { + ResourceLoader resourceLoader = new ClassRelativeResourceLoader(CsvAnalyticsExtractionHelper.class); + Resource resource = resourceLoader.getResource("5b7c682a12ecbe2e_4000028_number-learning-events_2025-07-04.csv"); + File csvFile = resource.getFile(); + + List numberLearningEvents = CsvAnalyticsExtractionHelper.extractNumberLearningEvents(csvFile); + assertEquals(1, numberLearningEvents.size()); + + NumberLearningEvent numberLearningEvent = numberLearningEvents.get(0); + assertEquals(1751610361 * 1_000L, numberLearningEvent.getTimestamp().getTimeInMillis()); + assertEquals("5b7c682a12ecbe2e", numberLearningEvent.getAndroidId()); + assertEquals("ai.elimu.calculator.debug", numberLearningEvent.getPackageName()); + assertEquals(numberLearningEvent.getResearchExperiment(), ResearchExperiment.EXP_0_WORD_EMOJIS); + assertEquals(numberLearningEvent.getExperimentGroup(), ExperimentGroup.TREATMENT); + assertEquals(5, numberLearningEvent.getNumberValue()); + assertNull(numberLearningEvent.getNumberSymbol()); + assertNull(numberLearningEvent.getNumberId()); + } + /** * Test extraction of data from CSV files generated by version 4000028 of the Analytics app: * https://github.com/elimu-ai/analytics/releases/tag/4.0.28 diff --git a/src/test/resources/ai/elimu/util/csv/5b7c682a12ecbe2e_4000028_number-learning-events_2025-07-04.csv b/src/test/resources/ai/elimu/util/csv/5b7c682a12ecbe2e_4000028_number-learning-events_2025-07-04.csv new file mode 100644 index 000000000..7b9dc25b4 --- /dev/null +++ b/src/test/resources/ai/elimu/util/csv/5b7c682a12ecbe2e_4000028_number-learning-events_2025-07-04.csv @@ -0,0 +1,2 @@ +id,timestamp,package_name,additional_data,learning_event_type,research_experiment,experiment_group,number_value,number_symbol,number_id +46,1751610361,ai.elimu.calculator.debug,,,0,1,5,,