Skip to content

Commit 75d92c8

Browse files
committed
fix(frontend): updates for the upcoming semester
1 parent 581c32b commit 75d92c8

22 files changed

+91
-93
lines changed

backend/src/main/kotlin/de/sotterbeck/hbrscalcreator/Configuration.kt

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,14 @@ class Configuration {
5555

5656
@Bean
5757
fun evaHtmlCache(): Cache<String, String> {
58-
return cacheBuilder<String, String>() {
58+
return cacheBuilder<String, String> {
5959
expireAfterWrite = 1.hours
6060
}.build()
6161
}
6262

6363
@Bean
6464
fun timeTableCache(): Cache<String, ByteArray> {
65-
return cacheBuilder<String, ByteArray>() {
65+
return cacheBuilder<String, ByteArray> {
6666
expireAfterWrite = 24.hours
6767
}.build()
6868
}
@@ -85,12 +85,12 @@ class Configuration {
8585
}
8686

8787
@Bean
88-
fun parsingFactory(): TeachingEventParsingFactory {
89-
return DefaultTeachingEventParsingFactory()
88+
fun parsingFactory(teachingEventIdGenerator: TeachingEventKeyGenerator): TeachingEventParsingFactory {
89+
return DefaultTeachingEventParsingFactory(teachingEventIdGenerator)
9090
}
9191

9292
@Bean
93-
fun teachingEventIdGenerator(parsingFactory: TeachingEventParsingFactory): TeachingEventKeyGenerator {
93+
fun teachingEventIdGenerator(): TeachingEventKeyGenerator {
9494
return when (idGeneratorType) {
9595
"combined" -> CombinedTeachingEventKeyGenerator()
9696
"hash" -> HashTeachingEventKeyGenerator(idGeneratorAlgorithm)
@@ -104,11 +104,8 @@ class Configuration {
104104
}
105105

106106
@Bean
107-
fun teachingEventPresenter(
108-
parsingFactory: TeachingEventParsingFactory,
109-
teachingEventIdGenerator: TeachingEventKeyGenerator
110-
): TeachingEventPresenter {
111-
return TeachingEventPresenterImpl(parsingFactory, teachingEventIdGenerator)
107+
fun teachingEventPresenter(parsingFactory: TeachingEventParsingFactory): TeachingEventPresenter {
108+
return TeachingEventPresenterImpl(parsingFactory)
112109
}
113110

114111
@Bean

backend/src/main/kotlin/de/sotterbeck/hbrscalcreator/teachingEvent/TeachingEventDto.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import java.time.LocalDate
55
import java.time.LocalTime
66

77
data class TeachingEventDto(
8+
val id: String,
89
val semester: String,
910
val day: DayOfWeek,
1011
val startTime: LocalTime,

backend/src/main/kotlin/de/sotterbeck/hbrscalcreator/teachingEvent/TeachingEventPresenterImpl.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package de.sotterbeck.hbrscalcreator.teachingEvent
22

33
import de.sotterbeck.hbrscalcreator.teachingEvent.TeachingEventResponse.EventModel
4-
import de.sotterbeck.hbrscalcreator.teachingEvent.idGenerator.TeachingEventKeyGenerator
54
import de.sotterbeck.hbrscalcreator.teachingEvent.parsing.EventType
65
import de.sotterbeck.hbrscalcreator.teachingEvent.parsing.TeachingEventParsingFactory
76
import org.springframework.http.HttpStatus
@@ -11,7 +10,6 @@ import java.util.*
1110

1211
class TeachingEventPresenterImpl(
1312
parsingFactory: TeachingEventParsingFactory,
14-
private val keyGenerator: TeachingEventKeyGenerator
1513
) : TeachingEventPresenter {
1614

1715
private val moduleParser = parsingFactory.createModuleParser()
@@ -35,10 +33,8 @@ class TeachingEventPresenterImpl(
3533
val group = groupParser.parse(event.eventTitle).ifBlank { null }
3634
val module = moduleParser.parse(event.eventTitle)
3735

38-
val id = keyGenerator.generateKey(teachingEvent = event)
39-
4036
return EventModel(
41-
id = id,
37+
id = event.id,
4238
semester = event.semester,
4339
title = event.eventTitle,
4440
module = module,

backend/src/main/kotlin/de/sotterbeck/hbrscalcreator/teachingEvent/TeachingEventRepositoryImpl.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package de.sotterbeck.hbrscalcreator.teachingEvent
22

33
import de.sotterbeck.hbrscalcreator.eva.EvaInfoRepository
44
import de.sotterbeck.hbrscalcreator.reader.TimeTableReader
5-
import de.sotterbeck.hbrscalcreator.teachingEvent.idGenerator.TeachingEventKeyGenerator
65
import de.sotterbeck.hbrscalcreator.teachingEvent.parsing.TeachingEventMapper
76
import kotlinx.coroutines.async
87
import kotlinx.coroutines.awaitAll
@@ -13,7 +12,6 @@ import org.springframework.stereotype.Repository
1312
class TeachingEventRepositoryImpl(
1413
private val reader: TimeTableReader,
1514
private val mapper: TeachingEventMapper,
16-
private val idGenerator: TeachingEventKeyGenerator,
1715
private val evaInfoRepository: EvaInfoRepository
1816
) : TeachingEventRepository {
1917

@@ -36,7 +34,7 @@ class TeachingEventRepositoryImpl(
3634
val semesterIds = evaInfoRepository.findAllSemesters().map { it.evaId }
3735
val teachingEvents = findAllTeachingEvents(semesterIds)
3836

39-
return teachingEvents.find { idGenerator.generateKey(it) == id }
37+
return teachingEvents.find { it.id == id }
4038
}
4139

4240
}

backend/src/main/kotlin/de/sotterbeck/hbrscalcreator/teachingEvent/idGenerator/CombinedTeachingEventKeyGenerator.kt

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,14 @@
11
package de.sotterbeck.hbrscalcreator.teachingEvent.idGenerator
22

3-
import de.sotterbeck.hbrscalcreator.teachingEvent.TeachingEventDto
4-
import java.time.format.TextStyle
53
import java.util.*
64

75
class CombinedTeachingEventKeyGenerator : TeachingEventKeyGenerator {
86

9-
override fun generateKey(teachingEvent: TeachingEventDto): String {
10-
val segments = listOf(
11-
teachingEvent.semester.replace(" ", ""),
12-
teachingEvent.eventTitle.pascalCased().withoutUmlauts().withoutSpecialChars(),
13-
teachingEvent.instructor.pascalCased().withoutUmlauts().withoutSpecialChars(),
14-
teachingEvent.day.getDisplayName(TextStyle.SHORT, Locale.GERMAN).replace(".", ""),
15-
teachingEvent.startTime.toString().withoutSpecialChars(),
16-
teachingEvent.endTime.toString().withoutSpecialChars(),
17-
)
18-
return segments.joinToString(separator = "-").replace("Ü", "U")
19-
}
20-
21-
private fun String.pascalCased(): String {
22-
return this.split(" ").joinToString("") {
23-
it.replaceFirstChar { char -> char.uppercase() }
7+
override fun generateKey(teachingEvent: Map<String, String>): String {
8+
return teachingEvent.entries.joinToString(separator = "-") {
9+
it.value.withoutUmlauts()
10+
.withoutSpecialChars()
11+
.lowercase(Locale.getDefault())
2412
}
2513
}
2614

backend/src/main/kotlin/de/sotterbeck/hbrscalcreator/teachingEvent/idGenerator/HashTeachingEventKeyGenerator.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package de.sotterbeck.hbrscalcreator.teachingEvent.idGenerator
22

3-
import de.sotterbeck.hbrscalcreator.teachingEvent.TeachingEventDto
43
import java.security.MessageDigest
54

65
class HashTeachingEventKeyGenerator(private val algorithm: String) : TeachingEventKeyGenerator {
76

8-
override fun generateKey(teachingEvent: TeachingEventDto): String {
7+
override fun generateKey(teachingEvent: Map<String, String>): String {
98
val teachingEventString = teachingEvent.toString()
109

1110
return teachingEventString.hashed(algorithm)
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package de.sotterbeck.hbrscalcreator.teachingEvent.idGenerator
22

3-
import de.sotterbeck.hbrscalcreator.teachingEvent.TeachingEventDto
4-
53
interface TeachingEventKeyGenerator {
64

7-
fun generateKey(teachingEvent: TeachingEventDto): String
5+
fun generateKey(teachingEvent: Map<String, String>): String
86

97
}

backend/src/main/kotlin/de/sotterbeck/hbrscalcreator/teachingEvent/parsing/TeachingEventMapper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package de.sotterbeck.hbrscalcreator.teachingEvent.parsing
33
import de.sotterbeck.hbrscalcreator.teachingEvent.TeachingEventDto
44

55
/**
6-
* Maps a teaching event from the raw data to a DTO.
6+
* Maps a teaching event from the raw data to a DTO and assigns a unique ID.
77
* It only does the mapping, no validation or formatting.
88
*
99
* Formatting is the responsibility of the [TeachingEventPresenter].

backend/src/main/kotlin/de/sotterbeck/hbrscalcreator/teachingEvent/parsing/impl/DefaultTeachingEventMapper.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package de.sotterbeck.hbrscalcreator.teachingEvent.parsing.impl
22

33
import de.sotterbeck.hbrscalcreator.teachingEvent.TeachingEventDto
4+
import de.sotterbeck.hbrscalcreator.teachingEvent.idGenerator.TeachingEventKeyGenerator
45
import de.sotterbeck.hbrscalcreator.teachingEvent.parsing.TeachingEventMapper
56
import java.time.DayOfWeek
67
import java.time.LocalDate
@@ -13,7 +14,7 @@ import java.util.*
1314
*
1415
* This implementation assumes that the input map contains the following keys: day, startTime, endTime, room, event, period, instructor
1516
*/
16-
object DefaultTeachingEventMapper : TeachingEventMapper {
17+
class DefaultTeachingEventMapper(private val keyGenerator: TeachingEventKeyGenerator) : TeachingEventMapper {
1718

1819
private val weekDayFormatter = DateTimeFormatter.ofPattern("E", Locale.GERMAN)
1920
private val timeFormatter = DateTimeFormatter.ofPattern("H:mm")
@@ -31,6 +32,7 @@ object DefaultTeachingEventMapper : TeachingEventMapper {
3132
val endDateString = datePeriod.substringAfter("-").trim()
3233

3334
return TeachingEventDto(
35+
id = keyGenerator.generateKey(teachingEvent),
3436
semester = semesterName,
3537
day = DayOfWeek.from(day),
3638
startTime = LocalTime.parse(teachingEvent["startTime"] ?: error("Start time is missing"), timeFormatter),

backend/src/main/kotlin/de/sotterbeck/hbrscalcreator/teachingEvent/parsing/impl/DefaultTeachingEventParsingFactory.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.sotterbeck.hbrscalcreator.teachingEvent.parsing.impl
22

3+
import de.sotterbeck.hbrscalcreator.teachingEvent.idGenerator.TeachingEventKeyGenerator
34
import de.sotterbeck.hbrscalcreator.teachingEvent.parsing.EventPropertyParser
45
import de.sotterbeck.hbrscalcreator.teachingEvent.parsing.TeachingEventMapper
56
import de.sotterbeck.hbrscalcreator.teachingEvent.parsing.TeachingEventParsingFactory
@@ -12,7 +13,8 @@ import de.sotterbeck.hbrscalcreator.teachingEvent.parsing.TypeProvider
1213
*
1314
* To extend support for other terms, implement a new [TeachingEventParsingFactory] with updated parser and mapping implementations.
1415
*/
15-
class DefaultTeachingEventParsingFactory : TeachingEventParsingFactory {
16+
class DefaultTeachingEventParsingFactory(private val keyGenerator: TeachingEventKeyGenerator) :
17+
TeachingEventParsingFactory {
1618

1719
override fun createModuleParser(): EventPropertyParser {
1820
return DefaultModuleParser(
@@ -29,6 +31,6 @@ class DefaultTeachingEventParsingFactory : TeachingEventParsingFactory {
2931
}
3032

3133
override fun createDtoMapper(): TeachingEventMapper {
32-
return DefaultTeachingEventMapper
34+
return DefaultTeachingEventMapper(keyGenerator)
3335
}
3436
}

0 commit comments

Comments
 (0)