Skip to content

Commit

Permalink
feat(yki): csv-parser read works
Browse files Browse the repository at this point in the history
With this implementation, it can parse CSV string to a data class.
The data class though requires some annotation...
  • Loading branch information
saku-koodari committed Oct 16, 2024
1 parent 9e1ec3d commit 18e58d3
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 16 deletions.
32 changes: 27 additions & 5 deletions server/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
<kotlin.version>2.0.21</kotlin.version>
<flyway.version>10.19.0</flyway.version>
<springdoc.version>2.6.0</springdoc.version>
<jackson.version>2.18.0</jackson.version>

<local-env.datasource.url>jdbc:postgresql://localhost:5432/kitu-dev</local-env.datasource.url>
<local-env.datasource.user>kitu</local-env.datasource.user>
Expand Down Expand Up @@ -94,10 +95,6 @@
<artifactId>cloudwatchlogs</artifactId>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-kotlin</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
Expand Down Expand Up @@ -163,10 +160,35 @@
<artifactId>db-scheduler-spring-boot-starter</artifactId>
<version>14.1.0</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-kotlin</artifactId>
<version>${jackson.version}</version>
</dependency>

<!-- dependencies of CSV parser -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>

<!-- CSV parser -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
<version>2.18.0</version>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>

Expand Down
44 changes: 33 additions & 11 deletions server/src/main/kotlin/fi/oph/kitu/yki/YkiService.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package fi.oph.kitu.yki

import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonPropertyOrder
import fi.oph.kitu.csvBody
import fi.oph.kitu.generated.model.YkiSuoritus
import com.fasterxml.jackson.dataformat.csv.CsvMapper
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Qualifier
Expand All @@ -19,21 +19,29 @@ class YkiService(
private val logger: Logger = LoggerFactory.getLogger(javaClass)

fun importYkiSuoritukset(lastSeen: LocalDate? = null) {
val suoritukset =
val spec =
ykiRestClient
.get()
.uri("suoritukset")
.retrieve()
.csvBody<Suoritus>()

if (suoritukset == null) {
logger.info("No YKI suoritukset found")
return
}
val csvMapper = CsvMapper()
val schema =
csvMapper
.typedSchemaFor(Suoritus::class.java)
.withColumnSeparator(',')
.withUseHeader(false)
.withQuoteChar('"')

val repData: List<YkiSuoritus> = throw NotImplementedError()
repository.insertSuoritukset(repData)
logger.info("YKI Suoritukset was added to repository")
val bodyAsString = spec.body(String::class.java)
val suoritus =
csvMapper
.readerFor(Suoritus::class.java)
.with(schema)
.readValue<Suoritus>(bodyAsString)

println(suoritus)
throw NotImplementedError()
}

@JsonPropertyOrder(
Expand All @@ -53,19 +61,33 @@ class YkiService(
"yleisarvosana",
)
data class Suoritus(
@JsonProperty("suorittajanOppijanumero")
val suorittajanOppijanumero: String,
@JsonProperty("sukunimi")
val sukunimi: String,
@JsonProperty("etunimet")
val etunimet: String,
@JsonProperty("tutkintopaiva")
val tutkintopaiva: String, // ISO-8601-muodossa
@JsonProperty("tutkintokieli")
val tutkintokieli: String, // ISO 649-2 alpha-3 -muodossa
@JsonProperty("tutkintotaso")
val tutkintotaso: String, // ("PT"=perustaso, "KT"=keskitaso, "YT"=ylin taso)
@JsonProperty("jarjestajanTunnusOid")
val jarjestajanTunnusOid: String,
@JsonProperty("jarjestajanNimi")
val jarjestajanNimi: String,
@JsonProperty("tekstinYmmartaminen")
val tekstinYmmartaminen: Number,
@JsonProperty("kirjoittaminen")
val kirjoittaminen: Number,
@JsonProperty("rakenteetJaSanasto")
val rakenteetJaSanasto: Number,
@JsonProperty("puheenYmmartaminen")
val puheenYmmartaminen: Number,
@JsonProperty("puhuminen")
val puhuminen: Number,
@JsonProperty("yleisarvosana")
val yleisarvosana: Number,
)
}

0 comments on commit 18e58d3

Please sign in to comment.