Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 15 additions & 17 deletions backend/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
id("org.springframework.boot") version "3.5.5"
id("org.springframework.boot") version "4.0.0-M3"
id("io.spring.dependency-management") version "1.1.7"
id("org.owasp.dependencycheck") version "12.1.3"
kotlin("jvm") version "2.2.10"
kotlin("plugin.spring") version "2.2.10"
id("org.sonarqube") version "6.2.0.5505"
id("org.owasp.dependencycheck") version "12.1.6"
kotlin("jvm") version "2.2.20"
kotlin("plugin.spring") version "2.2.20"
id("org.sonarqube") version "6.3.1.5724"
}

group = "hu.bme.sch"
Expand Down Expand Up @@ -42,9 +42,9 @@ repositories {
}

dependencies {
implementation("com.google.firebase:firebase-admin:9.5.0")
implementation("software.amazon.awssdk:s3:2.32.29")
implementation("jakarta.xml.bind:jakarta.xml.bind-api:4.0.2")
implementation("com.google.firebase:firebase-admin:9.7.0")
implementation("software.amazon.awssdk:s3:2.35.5")
implementation("jakarta.xml.bind:jakarta.xml.bind-api:4.0.4")
implementation("org.springframework.boot:spring-boot-configuration-processor")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-oauth2-client")
Expand All @@ -55,15 +55,13 @@ dependencies {
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.session:spring-session-jdbc")
implementation("org.springframework.retry:spring-retry")
implementation("org.springframework.boot:spring-boot-starter-aop")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("com.squareup.okhttp3:okhttp:5.1.0")
implementation("com.itextpdf:itext-core:9.2.0")
implementation("com.squareup.okhttp3:okhttp:5.2.1")
implementation("com.itextpdf:itext-core:9.3.0")
implementation("com.github.spullara.mustache.java:compiler:0.9.14")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.11")
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.0-M1")
implementation("com.google.zxing:core:3.5.3")
implementation("com.google.zxing:javase:3.5.3")
implementation("org.jetbrains.kotlin:kotlin-scripting-common")
Expand All @@ -76,15 +74,15 @@ dependencies {
implementation("io.jsonwebtoken:jjwt-api")
runtimeOnly("io.jsonwebtoken:jjwt-impl")
runtimeOnly("io.jsonwebtoken:jjwt-jackson")
implementation("com.fasterxml.uuid:java-uuid-generator:5.1.0")
implementation("org.commonmark:commonmark:0.25.1")
implementation("org.commonmark:commonmark-ext-gfm-tables:0.25.1")
implementation("com.fasterxml.uuid:java-uuid-generator:5.1.1")
implementation("org.commonmark:commonmark:0.26.0")
implementation("org.commonmark:commonmark-ext-gfm-tables:0.26.0")
implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-csv")
developmentOnly("org.springframework.boot:spring-boot-devtools")
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
runtimeOnly("com.h2database:h2")
implementation("org.postgresql:postgresql")
implementation(platform("io.micrometer:micrometer-bom:1.15.3"))
implementation(platform("io.micrometer:micrometer-bom:1.15.4"))
implementation("io.micrometer:micrometer-core")
implementation("io.micrometer:micrometer-registry-prometheus")
implementation("io.micrometer:micrometer-observation")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import hu.bme.sch.cmsch.component.app.ApplicationComponent
import hu.bme.sch.cmsch.config.ComponentLoadConfig
import hu.bme.sch.cmsch.config.StartupPropertyConfig
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.autoconfigure.domain.EntityScan
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.boot.persistence.autoconfigure.EntityScan
import org.springframework.boot.runApplication

@SpringBootApplication
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ import hu.bme.sch.cmsch.repository.UserRepository
import hu.bme.sch.cmsch.service.TimeService
import org.slf4j.LoggerFactory
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.retry.annotation.Backoff
import org.springframework.retry.annotation.Retryable
import org.springframework.resilience.annotation.Retryable
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Isolation
import org.springframework.transaction.annotation.Transactional
Expand Down Expand Up @@ -46,7 +45,7 @@ class NovaIntegrationService(

private val log = LoggerFactory.getLogger(javaClass)

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

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

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

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

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

@Retryable(value = [ SQLException::class ], maxAttempts = 5, backoff = Backoff(delay = 500L, multiplier = 1.5))
@Retryable(value = [ SQLException::class ], maxAttempts = 5, delay = 500L, multiplier = 1.5)
@Transactional(readOnly = false, isolation = Isolation.SERIALIZABLE)
fun setCvStatus(email: String, status: Boolean, rejectionMessage: String?) {
val user = userRepository.findByEmail(email).orElse(null) ?: return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ class CsvParserUtil<T : Any>(private val type: KClass<T>) {
return writer.writeValue(outputStream, data)
}

fun importFromCsv(inputStream: InputStream): List<T> {
fun importFromCsv(inputStream: InputStream): MutableList<T> {
val reader = mapper.readerFor(type.java).with(readerSchema)
return reader.readValues<T>(inputStream).readAll()
}

}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package hu.bme.sch.cmsch.component.admission

import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
import org.springframework.boot.autoconfigure.domain.EntityScan
import org.springframework.boot.persistence.autoconfigure.EntityScan
import org.springframework.context.annotation.Configuration

@Configuration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ class ApplicationApiController(
return ApplicationConfigDto(
role = role,
menu = listOf(),
components = componentWriter.writeValueAsString(components)
components = components
)
}
}
Expand All @@ -74,7 +74,7 @@ class ApplicationApiController(
return ApplicationConfigDto(
role = role,
menu = menuService.getCachedMenuForRole(role),
components = componentWriter.writeValueAsString(components)
components = components
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,11 @@
package hu.bme.sch.cmsch.component.app

import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider
import com.fasterxml.jackson.databind.annotation.JsonSerialize
import hu.bme.sch.cmsch.model.RoleType

data class ApplicationConfigDto(
var role: RoleType,
var menu: List<MenuItem>,

// Components -> properties -> values: Map<String, Map<String, Any>>
@field:JsonSerialize(using = ApplicationConfigFastSerializer::class)
var components: String
var components: Map<String, Any>
)

class ApplicationConfigFastSerializer : JsonSerializer<String>() {
override fun serialize(value: String?, gen: JsonGenerator?, serializers: SerializerProvider?) {
gen?.writeRawValue(value ?: "")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@ import org.slf4j.LoggerFactory
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
import org.springframework.context.event.ContextRefreshedEvent
import org.springframework.context.event.EventListener
import org.springframework.retry.annotation.Backoff
import org.springframework.retry.annotation.Retryable
import org.springframework.resilience.annotation.Retryable
import org.springframework.stereotype.Service
import org.springframework.transaction.PlatformTransactionManager
import org.springframework.transaction.annotation.Isolation
Expand Down Expand Up @@ -131,7 +130,7 @@ class MenuService(
}
}

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

@Retryable(value = [ SQLException::class ], maxAttempts = 5, backoff = Backoff(delay = 500L, multiplier = 1.5))
@Retryable(value = [ SQLException::class ], maxAttempts = 5, delay = 500L, multiplier = 1.5)
@Transactional(readOnly = false, isolation = Isolation.SERIALIZABLE)
fun importMenu(entries: List<MenuImportEntry>, rolesToInclude: List<RoleType>): Pair<Int, Int> {
var imported = 0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package hu.bme.sch.cmsch.component.bmejegy

import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
import org.springframework.boot.autoconfigure.domain.EntityScan
import org.springframework.boot.persistence.autoconfigure.EntityScan
import org.springframework.context.annotation.Configuration

@Configuration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import org.springframework.stereotype.Repository
interface BmejegyRecordRepository : CrudRepository<BmejegyRecordEntity, Int>,
EntityPageDataSource<BmejegyRecordEntity, Int> {

override fun findAll(): List<BmejegyRecordEntity>
override fun findAll(): MutableIterable<BmejegyRecordEntity>

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,11 @@ import hu.bme.sch.cmsch.service.TimeService
import org.slf4j.LoggerFactory
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.retry.annotation.Backoff
import org.springframework.retry.annotation.Retryable
import org.springframework.resilience.annotation.Retryable
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Isolation
import org.springframework.transaction.annotation.Transactional
import java.sql.SQLException
import java.util.Optional

@Service
@ConditionalOnBean(BmejegyComponent::class)
Expand Down Expand Up @@ -70,7 +68,7 @@ class CheersBmejegyService(
}
}

@Retryable(value = [ SQLException::class ], maxAttempts = 5, backoff = Backoff(delay = 500L, multiplier = 1.5))
@Retryable(value = [ SQLException::class ], maxAttempts = 5, delay = 500L, multiplier = 1.5)
@Transactional(readOnly = false, isolation = Isolation.SERIALIZABLE)
fun updateUserStatuses() {
val unmatched = bmejegyRecordRepository.findAllByMatchedUserId(0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ import org.springframework.http.HttpHeaders
import org.springframework.http.MediaType
import org.springframework.http.ResponseEntity
import org.springframework.http.client.reactive.ReactorClientHttpConnector
import org.springframework.retry.annotation.Backoff
import org.springframework.retry.annotation.Retryable
import org.springframework.resilience.annotation.Retryable
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Isolation
import org.springframework.transaction.annotation.Transactional
Expand Down Expand Up @@ -65,7 +64,7 @@ class LegacyBmejegyService(
return Optional.ofNullable(bmejegyRecordRepository.findAllByQrCode(qr).firstOrNull())
}

@Retryable(value = [ SQLException::class ], maxAttempts = 5, backoff = Backoff(delay = 500L, multiplier = 1.5))
@Retryable(value = [ SQLException::class ], maxAttempts = 5, delay = 500L, multiplier = 1.5)
@Transactional(readOnly = false, isolation = Isolation.SERIALIZABLE)
fun updateTickets(tickets: BmeJegyResponse) {
val registered = bmejegyRecordRepository.findAll().associateBy { it.itemId }
Expand Down Expand Up @@ -101,7 +100,7 @@ class LegacyBmejegyService(
}
}

@Retryable(value = [ SQLException::class ], maxAttempts = 5, backoff = Backoff(delay = 500L, multiplier = 1.5))
@Retryable(value = [ SQLException::class ], maxAttempts = 5, delay = 500L, multiplier = 1.5)
@Transactional(readOnly = false, isolation = Isolation.SERIALIZABLE)
fun updateUserStatuses() {
val unmatched = bmejegyRecordRepository.findAllByMatchedUserId(0)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package hu.bme.sch.cmsch.component.challenge

import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
import org.springframework.boot.autoconfigure.domain.EntityScan
import org.springframework.boot.persistence.autoconfigure.EntityScan
import org.springframework.context.annotation.Configuration

@Configuration
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package hu.bme.sch.cmsch.component.communities

import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
import org.springframework.boot.autoconfigure.domain.EntityScan
import org.springframework.boot.persistence.autoconfigure.EntityScan
import org.springframework.context.annotation.Configuration

@Configuration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ interface CommunityRepository : CrudRepository<CommunityEntity, Int>,

override fun findById(id: Int): Optional<CommunityEntity>

override fun findAll(): List<CommunityEntity>
override fun findAll(): MutableList<CommunityEntity>

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ interface OrganizationRepository : CrudRepository<OrganizationEntity, Int>,

override fun findById(id: Int): Optional<OrganizationEntity>

override fun findAll(): List<OrganizationEntity>
override fun findAll(): MutableList<OrganizationEntity>

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package hu.bme.sch.cmsch.component.conference

import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
import org.springframework.boot.autoconfigure.domain.EntityScan
import org.springframework.boot.persistence.autoconfigure.EntityScan
import org.springframework.context.annotation.Configuration

@Configuration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import org.springframework.stereotype.Repository
@Repository
@ConditionalOnBean(ConferenceComponent::class)
interface ConferenceRepository : CrudRepository<ConferenceEntity, Int>, EntityPageDataSource<ConferenceEntity, Int> {
override fun findAll(): List<ConferenceEntity>
override fun findAll(): MutableList<ConferenceEntity>
}

@Repository
Expand All @@ -35,4 +35,4 @@ interface ConferencePresentationRepository : CrudRepository<ConferencePresentati
@ConditionalOnBean(ConferenceComponent::class)
interface ConferenceOrganizerRepository : CrudRepository<ConferenceOrganizerEntity, Int>, EntityPageDataSource<ConferenceOrganizerEntity, Int> {
fun findAllByVisibleTrue(): List<ConferenceOrganizerEntity>
}
}
Loading
Loading