Skip to content

Commit 75af494

Browse files
committed
Migrate to Sprint Boot 4
1 parent 4777e66 commit 75af494

File tree

100 files changed

+235
-282
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+235
-282
lines changed

backend/build.gradle.kts

Lines changed: 39 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
22
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
33

44
plugins {
5-
id("org.springframework.boot") version "3.5.5"
5+
id("org.springframework.boot") version "4.0.0-RC2"
66
id("io.spring.dependency-management") version "1.1.7"
7-
id("org.owasp.dependencycheck") version "12.1.3"
8-
kotlin("jvm") version "2.2.10"
9-
kotlin("plugin.spring") version "2.2.10"
10-
id("org.sonarqube") version "6.2.0.5505"
7+
id("org.owasp.dependencycheck") version "12.1.8"
8+
kotlin("jvm") version "2.2.21"
9+
kotlin("plugin.spring") version "2.2.21"
10+
id("org.sonarqube") version "7.0.1.6134"
1111
}
1212

1313
group = "hu.bme.sch"
@@ -42,52 +42,49 @@ repositories {
4242
}
4343

4444
dependencies {
45-
implementation("com.google.firebase:firebase-admin:9.5.0")
46-
implementation("software.amazon.awssdk:s3:2.32.29")
47-
implementation("jakarta.xml.bind:jakarta.xml.bind-api:4.0.2")
48-
implementation("org.springframework.boot:spring-boot-configuration-processor")
49-
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
50-
implementation("org.springframework.boot:spring-boot-starter-oauth2-client")
51-
implementation("org.springframework.boot:spring-boot-starter-security")
52-
implementation("org.springframework.boot:spring-boot-starter-web")
53-
implementation("org.springframework.boot:spring-boot-starter-webflux")
54-
implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
55-
implementation("org.springframework.boot:spring-boot-starter-actuator")
56-
implementation("org.springframework.boot:spring-boot-starter-validation")
57-
implementation("org.springframework.session:spring-session-jdbc")
58-
implementation("org.springframework.retry:spring-retry")
59-
implementation("org.springframework.boot:spring-boot-starter-aop")
45+
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
46+
developmentOnly("org.springframework.boot:spring-boot-devtools")
47+
implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-csv")
6048
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
61-
implementation("com.squareup.okhttp3:okhttp:5.1.0")
62-
implementation("com.itextpdf:itext-core:9.2.0")
49+
implementation("com.fasterxml.uuid:java-uuid-generator:5.1.1")
6350
implementation("com.github.spullara.mustache.java:compiler:0.9.14")
64-
implementation("org.jetbrains.kotlin:kotlin-reflect")
65-
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
66-
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.11")
51+
implementation("com.google.firebase:firebase-admin:9.7.0")
6752
implementation("com.google.zxing:core:3.5.3")
6853
implementation("com.google.zxing:javase:3.5.3")
69-
implementation("org.jetbrains.kotlin:kotlin-scripting-common")
70-
implementation("org.jetbrains.kotlin:kotlin-scripting-jvm")
71-
implementation("org.jetbrains.kotlin:kotlin-scripting-jvm-host")
72-
implementation("org.jetbrains.kotlin:kotlin-scripting-dependencies")
73-
implementation("org.jetbrains.kotlin:kotlin-scripting-dependencies-maven")
74-
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
54+
implementation("com.itextpdf:itext-core:9.3.0")
55+
implementation("com.squareup.okhttp3:okhttp:5.3.0")
7556
implementation(platform("io.jsonwebtoken:jjwt-bom:0.13.0"))
76-
implementation("io.jsonwebtoken:jjwt-api")
7757
runtimeOnly("io.jsonwebtoken:jjwt-impl")
7858
runtimeOnly("io.jsonwebtoken:jjwt-jackson")
79-
implementation("com.fasterxml.uuid:java-uuid-generator:5.1.0")
80-
implementation("org.commonmark:commonmark:0.25.1")
81-
implementation("org.commonmark:commonmark-ext-gfm-tables:0.25.1")
82-
implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-csv")
83-
developmentOnly("org.springframework.boot:spring-boot-devtools")
84-
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
85-
runtimeOnly("com.h2database:h2")
86-
implementation("org.postgresql:postgresql")
87-
implementation(platform("io.micrometer:micrometer-bom:1.15.3"))
59+
implementation("io.jsonwebtoken:jjwt-api")
60+
implementation(platform("io.micrometer:micrometer-bom:1.15.5"))
8861
implementation("io.micrometer:micrometer-core")
89-
implementation("io.micrometer:micrometer-registry-prometheus")
9062
implementation("io.micrometer:micrometer-observation")
63+
implementation("io.micrometer:micrometer-registry-prometheus")
64+
implementation("org.commonmark:commonmark-ext-gfm-tables:0.27.0")
65+
implementation("org.commonmark:commonmark:0.27.0")
66+
implementation("org.jetbrains.kotlin:kotlin-reflect")
67+
implementation("org.jetbrains.kotlin:kotlin-scripting-common")
68+
implementation("org.jetbrains.kotlin:kotlin-scripting-dependencies")
69+
implementation("org.jetbrains.kotlin:kotlin-scripting-dependencies-maven")
70+
implementation("org.jetbrains.kotlin:kotlin-scripting-jvm")
71+
implementation("org.jetbrains.kotlin:kotlin-scripting-jvm-host")
72+
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
73+
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
74+
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.0-M1")
75+
implementation("org.springframework.boot:spring-boot-configuration-processor")
76+
implementation("org.springframework.boot:spring-boot-starter-actuator")
77+
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
78+
implementation("org.springframework.boot:spring-boot-starter-oauth2-client")
79+
implementation("org.springframework.boot:spring-boot-starter-security")
80+
implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
81+
implementation("org.springframework.boot:spring-boot-starter-validation")
82+
implementation("org.springframework.boot:spring-boot-starter-web")
83+
implementation("org.springframework.boot:spring-boot-starter-webclient")
84+
implementation("org.springframework.session:spring-session-jdbc")
85+
implementation("software.amazon.awssdk:s3:2.37.1")
86+
runtimeOnly("com.h2database:h2")
87+
runtimeOnly("org.postgresql:postgresql")
9188
testApi("org.springframework.boot:spring-boot-starter-test")
9289
testApi("org.springframework.security:spring-security-test")
9390
}

backend/src/main/kotlin/hu/bme/sch/cmsch/CMSchApplication.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import hu.bme.sch.cmsch.component.app.ApplicationComponent
44
import hu.bme.sch.cmsch.config.ComponentLoadConfig
55
import hu.bme.sch.cmsch.config.StartupPropertyConfig
66
import org.springframework.boot.autoconfigure.SpringBootApplication
7-
import org.springframework.boot.autoconfigure.domain.EntityScan
87
import org.springframework.boot.context.properties.EnableConfigurationProperties
8+
import org.springframework.boot.persistence.autoconfigure.EntityScan
99
import org.springframework.boot.runApplication
1010

1111
@SpringBootApplication

backend/src/main/kotlin/hu/bme/sch/cmsch/addon/nova/NovaIntegrationService.kt

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ import hu.bme.sch.cmsch.repository.UserRepository
1616
import hu.bme.sch.cmsch.service.TimeService
1717
import org.slf4j.LoggerFactory
1818
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
19-
import org.springframework.retry.annotation.Backoff
20-
import org.springframework.retry.annotation.Retryable
19+
import org.springframework.resilience.annotation.Retryable
2120
import org.springframework.stereotype.Service
2221
import org.springframework.transaction.annotation.Isolation
2322
import org.springframework.transaction.annotation.Transactional
@@ -46,7 +45,7 @@ class NovaIntegrationService(
4645

4746
private val log = LoggerFactory.getLogger(javaClass)
4847

49-
@Retryable(value = [ SQLException::class ], maxAttempts = 5, backoff = Backoff(delay = 500L, multiplier = 1.5))
48+
@Retryable(value = [ SQLException::class ], maxAttempts = 5, delay = 500L, multiplier = 1.5)
5049
@Transactional(readOnly = false, isolation = Isolation.SERIALIZABLE)
5150
fun updateSubmissions(emails: List<String>): Int {
5251
val form = formRepository.findAll().firstOrNull { it.selected }
@@ -74,7 +73,7 @@ class NovaIntegrationService(
7473
return successful
7574
}
7675

77-
@Retryable(value = [ SQLException::class ], maxAttempts = 5, backoff = Backoff(delay = 500L, multiplier = 1.5))
76+
@Retryable(value = [ SQLException::class ], maxAttempts = 5, delay = 500L, multiplier = 1.5)
7877
@Transactional(readOnly = true, isolation = Isolation.READ_COMMITTED)
7978
fun fetchSubmissions(): List<FilledOutFormDto> {
8079
val form = formRepository.findAll().firstOrNull { it.selected }
@@ -151,7 +150,7 @@ class NovaIntegrationService(
151150
}
152151
}
153152

154-
@Retryable(value = [ SQLException::class ], maxAttempts = 5, backoff = Backoff(delay = 500L, multiplier = 1.5))
153+
@Retryable(value = [ SQLException::class ], maxAttempts = 5, delay = 500L, multiplier = 1.5)
155154
@Transactional(readOnly = false, isolation = Isolation.SERIALIZABLE)
156155
fun setPaymentStatus(email: String, status: Boolean, rejectionMessage: String?) {
157156
val form = formRepository.findAll().firstOrNull { it.selected }
@@ -173,7 +172,7 @@ class NovaIntegrationService(
173172
}
174173
}
175174

176-
@Retryable(value = [ SQLException::class ], maxAttempts = 5, backoff = Backoff(delay = 500L, multiplier = 1.5))
175+
@Retryable(value = [ SQLException::class ], maxAttempts = 5, delay = 500L, multiplier = 1.5)
177176
@Transactional(readOnly = false, isolation = Isolation.SERIALIZABLE)
178177
fun setDetailsStatus(email: String, status: Boolean, rejectionMessage: String?) {
179178
val form = formRepository.findAll().firstOrNull { it.selected }
@@ -195,7 +194,7 @@ class NovaIntegrationService(
195194
}
196195
}
197196

198-
@Retryable(value = [ SQLException::class ], maxAttempts = 5, backoff = Backoff(delay = 500L, multiplier = 1.5))
197+
@Retryable(value = [ SQLException::class ], maxAttempts = 5, delay = 500L, multiplier = 1.5)
199198
@Transactional(readOnly = false, isolation = Isolation.SERIALIZABLE)
200199
fun setAvatarStatus(email: String, status: Boolean, rejectionMessage: String?) {
201200
val user = userRepository.findByEmail(email).orElse(null) ?: return
@@ -218,7 +217,7 @@ class NovaIntegrationService(
218217
}
219218
}
220219

221-
@Retryable(value = [ SQLException::class ], maxAttempts = 5, backoff = Backoff(delay = 500L, multiplier = 1.5))
220+
@Retryable(value = [ SQLException::class ], maxAttempts = 5, delay = 500L, multiplier = 1.5)
222221
@Transactional(readOnly = false, isolation = Isolation.SERIALIZABLE)
223222
fun setCvStatus(email: String, status: Boolean, rejectionMessage: String?) {
224223
val user = userRepository.findByEmail(email).orElse(null) ?: return

backend/src/main/kotlin/hu/bme/sch/cmsch/admin/CsvParserUtil.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ class CsvParserUtil<T : Any>(private val type: KClass<T>) {
5757
return writer.writeValue(outputStream, data)
5858
}
5959

60-
fun importFromCsv(inputStream: InputStream): List<T> {
60+
fun importFromCsv(inputStream: InputStream): MutableList<T> {
6161
val reader = mapper.readerFor(type.java).with(readerSchema)
6262
return reader.readValues<T>(inputStream).readAll()
6363
}
6464

65-
}
65+
}

backend/src/main/kotlin/hu/bme/sch/cmsch/component/admission/AdmissionComponentEntityConfiguration.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package hu.bme.sch.cmsch.component.admission
22

33
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
4-
import org.springframework.boot.autoconfigure.domain.EntityScan
4+
import org.springframework.boot.persistence.autoconfigure.EntityScan
55
import org.springframework.context.annotation.Configuration
66

77
@Configuration

backend/src/main/kotlin/hu/bme/sch/cmsch/component/app/ApplicationApiController.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class ApplicationApiController(
6464
return ApplicationConfigDto(
6565
role = role,
6666
menu = listOf(),
67-
components = componentWriter.writeValueAsString(components)
67+
components = components
6868
)
6969
}
7070
}
@@ -74,7 +74,7 @@ class ApplicationApiController(
7474
return ApplicationConfigDto(
7575
role = role,
7676
menu = menuService.getCachedMenuForRole(role),
77-
components = componentWriter.writeValueAsString(components)
77+
components = components
7878
)
7979
}
8080

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,11 @@
11
package hu.bme.sch.cmsch.component.app
22

3-
import com.fasterxml.jackson.core.JsonGenerator
4-
import com.fasterxml.jackson.databind.JsonSerializer
5-
import com.fasterxml.jackson.databind.SerializerProvider
6-
import com.fasterxml.jackson.databind.annotation.JsonSerialize
73
import hu.bme.sch.cmsch.model.RoleType
84

95
data class ApplicationConfigDto(
106
var role: RoleType,
117
var menu: List<MenuItem>,
128

139
// Components -> properties -> values: Map<String, Map<String, Any>>
14-
@field:JsonSerialize(using = ApplicationConfigFastSerializer::class)
15-
var components: String
10+
var components: Map<String, Any>
1611
)
17-
18-
class ApplicationConfigFastSerializer : JsonSerializer<String>() {
19-
override fun serialize(value: String?, gen: JsonGenerator?, serializers: SerializerProvider?) {
20-
gen?.writeRawValue(value ?: "")
21-
}
22-
}

backend/src/main/kotlin/hu/bme/sch/cmsch/component/app/MenuService.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ import org.slf4j.LoggerFactory
1414
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
1515
import org.springframework.context.event.ContextRefreshedEvent
1616
import org.springframework.context.event.EventListener
17-
import org.springframework.retry.annotation.Backoff
18-
import org.springframework.retry.annotation.Retryable
17+
import org.springframework.resilience.annotation.Retryable
1918
import org.springframework.stereotype.Service
2019
import org.springframework.transaction.PlatformTransactionManager
2120
import org.springframework.transaction.annotation.Isolation
@@ -131,7 +130,7 @@ class MenuService(
131130
}
132131
}
133132

134-
@Retryable(value = [ SQLException::class ], maxAttempts = 5, backoff = Backoff(delay = 500L, multiplier = 1.5))
133+
@Retryable(value = [ SQLException::class ], maxAttempts = 5, delay = 500L, multiplier = 1.5)
135134
@Transactional(readOnly = false, isolation = Isolation.SERIALIZABLE)
136135
fun persistSettings(menus: List<MenuSettingItem>, role: RoleType) {
137136
menuRepository.deleteAllByRole(role)
@@ -197,7 +196,7 @@ class MenuService(
197196
var external: Boolean = false,
198197
)
199198

200-
@Retryable(value = [ SQLException::class ], maxAttempts = 5, backoff = Backoff(delay = 500L, multiplier = 1.5))
199+
@Retryable(value = [ SQLException::class ], maxAttempts = 5, delay = 500L, multiplier = 1.5)
201200
@Transactional(readOnly = false, isolation = Isolation.SERIALIZABLE)
202201
fun importMenu(entries: List<MenuImportEntry>, rolesToInclude: List<RoleType>): Pair<Int, Int> {
203202
var imported = 0

backend/src/main/kotlin/hu/bme/sch/cmsch/component/bmejegy/BmejegyComponentEntityConfiguration.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package hu.bme.sch.cmsch.component.bmejegy
22

33
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
4-
import org.springframework.boot.autoconfigure.domain.EntityScan
4+
import org.springframework.boot.persistence.autoconfigure.EntityScan
55
import org.springframework.context.annotation.Configuration
66

77
@Configuration

backend/src/main/kotlin/hu/bme/sch/cmsch/component/bmejegy/BmejegyRecordRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import org.springframework.stereotype.Repository
1010
interface BmejegyRecordRepository : CrudRepository<BmejegyRecordEntity, Int>,
1111
EntityPageDataSource<BmejegyRecordEntity, Int> {
1212

13-
override fun findAll(): List<BmejegyRecordEntity>
13+
override fun findAll(): MutableIterable<BmejegyRecordEntity>
1414

1515
fun findAllByQrCode(qr: String): List<BmejegyRecordEntity>
1616

0 commit comments

Comments
 (0)