Skip to content

Commit 4a534d3

Browse files
authored
Merge pull request #388 from elimu-ai/375-upload-rest-api
feat(rest): upload number assessment events
2 parents 0e8eed7 + dbc107e commit 4a534d3

File tree

4 files changed

+59
-3
lines changed

4 files changed

+59
-3
lines changed

app/src/main/java/ai/elimu/analytics/enum/EventType.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ fun EventType.getUploadCsvFile(context: Context,
6666
date: String): File {
6767

6868
val csvFileName = androidId + "_" + versionCode + "_${this.type}_" + date + ".csv"
69-
Timber.i("csvFilename: $csvFileName")
7069

7170
val filesDir = context.filesDir
7271
val language = SharedPreferencesHelper.getLanguage(context)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package ai.elimu.analytics.rest
2+
3+
import okhttp3.MultipartBody
4+
import okhttp3.ResponseBody
5+
import retrofit2.Call
6+
import retrofit2.http.Multipart
7+
import retrofit2.http.POST
8+
import retrofit2.http.Part
9+
10+
interface NumberAssessmentEventService: UploadService {
11+
@Multipart
12+
@POST("analytics/number-assessment-events/csv")
13+
override fun uploadCsvFile(@Part part: MultipartBody.Part): Call<ResponseBody?>
14+
}

app/src/main/java/ai/elimu/analytics/task/UploadEventsWorker.kt

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import ai.elimu.analytics.BaseApplication
44
import ai.elimu.analytics.BuildConfig
55
import ai.elimu.analytics.enum.EventType
66
import ai.elimu.analytics.enum.toServiceClass
7+
import ai.elimu.analytics.rest.NumberAssessmentEventService
78
import ai.elimu.analytics.util.SharedPreferencesHelper
89
import ai.elimu.analytics.util.VersionHelper.extractVersionCode
10+
import ai.elimu.model.v2.enums.Language
911
import android.content.Context
1012
import androidx.work.Worker
1113
import androidx.work.WorkerParameters
@@ -28,6 +30,7 @@ class UploadEventsWorker(context: Context, workerParams: WorkerParameters) :
2830
for (eventType in EventType.entries) {
2931
uploadLearningEvents(eventType = eventType)
3032
}
33+
uploadNumberAssessmentEvents()
3134

3235
return Result.success()
3336
}
@@ -86,4 +89,46 @@ class UploadEventsWorker(context: Context, workerParams: WorkerParameters) :
8689
}
8790
}
8891
}
92+
93+
// Upload CSV files generated by the current version of the app, e.g:
94+
// lang-THA/number-assessment-events/5b7c682a12ecbe2e_4000021_number-assessment-events_2025-06-29.csv
95+
// lang-THA/number-assessment-events/5b7c682a12ecbe2e_4000021_number-assessment-events_2025-06-30.csv
96+
private fun uploadNumberAssessmentEvents() {
97+
Timber.i("uploadNumberAssessmentEvents")
98+
99+
val languageDir = File(applicationContext.filesDir, "lang-${SharedPreferencesHelper.getLanguage(applicationContext)}")
100+
val eventsDir = File(languageDir, "number-assessment-events")
101+
for (csvFile in eventsDir.listFiles()) {
102+
Timber.i("csvFile: ${csvFile}")
103+
104+
// Skip files that were not generated by the current app version, e.g. "_4000021_"
105+
if (!csvFile.name.contains("_${BuildConfig.VERSION_CODE}_")) {
106+
continue
107+
}
108+
109+
// Prepare upload service
110+
val baseApplication = applicationContext as BaseApplication
111+
val retrofit = baseApplication.retrofit
112+
val uploadService = retrofit.create(NumberAssessmentEventService::class.java)
113+
114+
// Prepare upload request
115+
val requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), csvFile)
116+
val part = MultipartBody.Part.createFormData("file", csvFile.name, requestBody)
117+
val call = uploadService.uploadCsvFile(part)
118+
Timber.i("call.request(): ${call.request()}")
119+
120+
// Upload file
121+
val response = call.execute()
122+
Timber.i("response: $response")
123+
if (response.isSuccessful) {
124+
val bodyString = response.body()?.string()
125+
Timber.i("bodyString: $bodyString")
126+
} else {
127+
val errorBodyString = response.errorBody()?.string()
128+
Timber.e("errorBodyString: $errorBodyString")
129+
}
130+
}
131+
132+
Timber.i("uploadNumberAssessmentEvents complete!")
133+
}
89134
}

app/src/main/java/ai/elimu/analytics/util/VersionHelper.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ object VersionHelper {
1717
*/
1818
@JvmStatic
1919
fun getAppVersionCode(context: Context): Int {
20-
Timber.i("getAppVersionCode")
21-
2220
try {
2321
val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0)
2422
return packageInfo.versionCode

0 commit comments

Comments
 (0)