Skip to content

Commit

Permalink
feat(kielitesti): fetch suoritukset
Browse files Browse the repository at this point in the history
  • Loading branch information
wolverian committed Oct 16, 2024
1 parent caafe59 commit b6a16fe
Show file tree
Hide file tree
Showing 5 changed files with 127 additions and 13 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package fi.oph.kitu.kielitesti

import org.springframework.jdbc.core.simple.JdbcClient
import org.springframework.stereotype.Repository
import java.time.Instant

data class KielitestiSuoritus(
val id: Int?,
val first_name: String,
val last_name: String,
val oppija_oid: String,
val email: String,
val time_completed: Instant,
val luetun_ymmartaminen_result_system: Double,
val luetun_ymmartaminen_result_teacher: Double,
val kuullun_ymmartaminen_result_system: Double,
val kuullun_ymmartaminen_result_teacher: Double,
val puhe_result_system: Double,
val puhe_result_teacher: Double,
val kirjoittaminen_result_system: Double,
val kirjottaminen_result_teacher: Double,
val total_evaluation_teacher: String,
val total_evaluation_system: String,
)

@Repository
class KielitestiRepository(
private val jdbcClient: JdbcClient,
) {
fun insertSuoritukset(suoritukset: List<KielitestiSuoritus>) {
for (suoritus in suoritukset) {
jdbcClient
.sql(
"""insert into koto_suoritus (first_name, last_name, oppija_oid, email, time_completed, luetun_ymmartaminen_result_system, luetun_ymmartaminen_result_teacher, kuullun_ymmartaminen_result_system, kuullun_ymmartaminen_result_teacher, puhe_result_system, puhe_result_teacher, kirjoittaminen_result_system, kirjottaminen_result_teacher, total_evaluation_teacher, total_evaluation_system) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
).paramSource(suoritus)
.update()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package fi.oph.kitu.kielitesti

import com.github.kagkarlsson.scheduler.task.Task
import com.github.kagkarlsson.scheduler.task.helper.Tasks
import com.github.kagkarlsson.scheduler.task.schedule.Schedules
import org.springframework.beans.factory.annotation.Value
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
@ConditionalOnProperty(name = ["kitu.kielitesti.scheduling.enabled"], matchIfMissing = false)
class KielitestiScheduledTasks {
@Value("\${kitu.kielitesti.scheduling.import.schedule}")
lateinit var kielitestiImportSchedule: String

@Bean
fun dailyImport(moodleService: MoodleService): Task<Void> =
Tasks
.recurring("Kielitesti-import", Schedules.parseSchedule(kielitestiImportSchedule))
.execute { _, _ -> moodleService.importSuoritukset() }
}
64 changes: 64 additions & 0 deletions server/src/main/kotlin/fi/oph/kitu/kielitesti/MoodleService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,35 @@ data class MoodleErrorMessage(
val debuginfo: String?,
)

data class MoodleSuorituksetResponse(
val users: List<User>,
) {
data class User(
val firstname: String,
val lastname: String,
val OIDnumber: String,
val email: String,
val completion: Completion,
) {
data class Completion(
val results: List<Result>,
val timecompleted: Int,
val total_evaluation_teacher: String,
val total_evaluation_system: String,
) {
data class Result(
val name: String,
val quiz_result_system: Float,
val quiz_result_teacher: Float,
)
}
}
}

@Service
class MoodleService(
private val restClientBuilder: RestClient.Builder,
private val kielitestiRepository: KielitestiRepository,
) {
@Value("\${kitu.kielitesti.wstoken}")
lateinit var moodleToken: String
Expand All @@ -58,6 +84,44 @@ class MoodleService(

private val restClient by lazy { restClientBuilder.baseUrl(kielitestiBaseurl).build() }

fun importSuoritukset() {
val response =
restClient
.get()
.uri(
"/webservice/rest/server.php?wstoken={token}&wsfunction={function}&moodlewsrestformat=json&query=",
mapOf(
"token" to moodleToken,
"function" to "local_completion_export_get_completions",
),
).accept(MediaType.APPLICATION_JSON)
.retrieve()
.body(MoodleSuorituksetResponse::class.java)

kielitestiRepository.insertSuoritukset(
response?.users?.map { user ->
KielitestiSuoritus(
id = TODO(),
first_name = user.firstname,
last_name = user.lastname,
email = user.email,
oppija_oid = user.OIDnumber,
time_completed = TODO(),
luetun_ymmartaminen_result_system = TODO(),
luetun_ymmartaminen_result_teacher = TODO(),
kuullun_ymmartaminen_result_system = TODO(),
kuullun_ymmartaminen_result_teacher = TODO(),
puhe_result_system = TODO(),
puhe_result_teacher = TODO(),
kirjoittaminen_result_system = TODO(),
kirjottaminen_result_teacher = TODO(),
total_evaluation_teacher = TODO(),
total_evaluation_system = TODO(),
)
} ?: emptyList(),
)
}

fun getUsers(): List<Oppija> {
val response =
restClient
Expand Down
2 changes: 2 additions & 0 deletions server/src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ springdoc.swagger-ui.csrf.enabled=true
springdoc.api-docs.enabled=false

kitu.kielitesti.wstoken=${KIELITESTI_TOKEN}
kitu.kielitesti.scheduling.enabled=true
kitu.kielitesti.scheduling.import.schedule=

kitu.oppijanumero.username=
kitu.oppijanumero.password=
Expand Down

0 comments on commit b6a16fe

Please sign in to comment.