chore: remove deprecated horses, clubs, officials, and persons services

- Deleted obsolete modules related to horses, clubs, officials, and persons services, including their configurations, build files, and database provisioning scripts.
- Cleaned up associated references in the project structure (e.g., `settings.gradle.kts`).
- Removed unused database tables and Spring beans related to these domains.

Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
This commit is contained in:
2026-03-28 16:50:49 +01:00
parent 2cb3f0b125
commit c806660685
181 changed files with 4121 additions and 8694 deletions
@@ -3,7 +3,7 @@
package at.mocode.core.domain.event
import at.mocode.core.domain.model.*
import at.mocode.core.domain.serialization.KotlinxInstantSerializer
import at.mocode.core.domain.serialization.InstantSerializer
import kotlinx.serialization.Serializable
import kotlin.time.Clock as KtClock
import kotlin.time.Instant
@@ -33,7 +33,7 @@ abstract class BaseDomainEvent(
override val version: EventVersion,
override val eventId: EventId = EventId(Uuid.random()),
@Serializable(with = KotlinxInstantSerializer::class)
@Serializable(with = InstantSerializer::class)
override val timestamp: Instant,
override val correlationId: CorrelationId? = null,
override val causationId: CausationId? = null
@@ -1,10 +1,9 @@
package at.mocode.core.domain.model
import at.mocode.core.domain.serialization.KotlinxInstantSerializer
import kotlinx.serialization.Serializable
import at.mocode.core.domain.serialization.InstantSerializer
import kotlin.time.Clock
import kotlin.time.ExperimentalTime
import kotlin.time.Instant
import kotlinx.serialization.Serializable
/**
* Marker-Interface für alle Data-Transfer-Objekte (DTO).
@@ -18,10 +17,10 @@ interface BaseDto
abstract class EntityDto : BaseDto {
abstract val id: EntityId
@Serializable(with = KotlinxInstantSerializer::class)
@Serializable(with = InstantSerializer::class)
abstract val createdAt: Instant
@Serializable(with = KotlinxInstantSerializer::class)
@Serializable(with = InstantSerializer::class)
abstract val updatedAt: Instant
}
@@ -43,19 +42,17 @@ data class ApiResponse<T>(
val data: T?,
val success: Boolean,
val errors: List<ErrorDto> = emptyList(),
@Serializable(with = KotlinxInstantSerializer::class)
@Serializable(with = InstantSerializer::class)
val timestamp: Instant
) {
companion object {
@OptIn(ExperimentalTime::class)
fun <T> success(data: T): ApiResponse<T> =
ApiResponse(
data = data,
success = true,
timestamp = Instant.parse(Clock.System.now().toString())
timestamp = Clock.System.now()
)
@OptIn(ExperimentalTime::class)
fun <T> error(
code: ErrorCode,
message: String,
@@ -65,7 +62,7 @@ data class ApiResponse<T>(
data = null,
success = false,
errors = listOf(ErrorDto(code = code, message = message, field = field)),
timestamp = Instant.parse(Clock.System.now().toString())
timestamp = Clock.System.now()
)
}
@@ -77,13 +74,12 @@ data class ApiResponse<T>(
return error(ErrorCode(code), message, field)
}
@OptIn(ExperimentalTime::class)
fun <T> error(errors: List<ErrorDto>): ApiResponse<T> {
return ApiResponse(
data = null,
success = false,
errors = errors,
timestamp = Instant.parse(Clock.System.now().toString())
timestamp = Clock.System.now()
)
}
}
@@ -438,3 +438,21 @@ enum class AusschreibungsStatusE {
/** Ausschreibung veröffentlicht (für Reiter sichtbar) */
VEROEFFENTLICHT
}
/**
* Definiert den Typ eines Platzes auf einer Turnieranlage.
*/
@Serializable
enum class PlatzTypE {
/** Hauptplatz für Wettbewerbe */
AUSTRAGUNG,
/** Vorbereitungsplatz / Abreiteplatz */
VORBEREITUNG,
/** Longierplatz */
LONGIEREN,
/** Sonstige Fläche */
SONSTIGE
}
@@ -0,0 +1,30 @@
package at.mocode.core.domain.model
import kotlinx.serialization.Serializable
/**
* Representiert das Ergebnis einer Validierung.
*/
@Serializable
sealed class ValidationResult {
/**
* Gibt an, ob die Validierung erfolgreich war.
*/
abstract fun isValid(): Boolean
/**
* Repräsentiert eine erfolgreiche Validierung.
*/
@Serializable
object Valid : ValidationResult() {
override fun isValid(): Boolean = true
}
/**
* Repräsentiert eine fehlgeschlagene Validierung mit einer Liste von Fehlern.
*/
@Serializable
data class Invalid(val errors: List<ValidationError>) : ValidationResult() {
override fun isValid(): Boolean = false
}
}
@@ -1,32 +0,0 @@
package at.mocode.core.domain.serialization
import kotlinx.datetime.LocalDate
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerializationException
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
/**
* Kotlinx Serialization serializer for kotlinx.datetime.LocalDate.
* Serializes as ISO-8601 date string (yyyy-MM-dd).
*/
object KotlinLocalDateSerializer : KSerializer<LocalDate> {
override val descriptor: SerialDescriptor =
PrimitiveSerialDescriptor("KotlinLocalDate", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalDate) {
encoder.encodeString(value.toString())
}
override fun deserialize(decoder: Decoder): LocalDate {
val text = decoder.decodeString()
return try {
LocalDate.parse(text)
} catch (e: Exception) {
throw SerializationException("Invalid LocalDate format: '$text'", e)
}
}
}
@@ -1,25 +0,0 @@
package at.mocode.core.domain.serialization
import kotlin.time.Instant
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
/**
* Serializer for kotlin.time.Instant.
* Uses ISO-8601 string representation.
*/
object KotlinxInstantSerializer : KSerializer<Instant> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("KotlinxInstant", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: Instant) {
encoder.encodeString(value.toString())
}
override fun deserialize(decoder: Decoder): Instant {
return Instant.parse(decoder.decodeString())
}
}
@@ -1,99 +1,59 @@
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
package at.mocode.core.domain.serialization
import kotlinx.datetime.LocalDate
import kotlinx.datetime.LocalDateTime
import kotlinx.datetime.LocalTime
import kotlin.time.Instant
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlin.time.ExperimentalTime
import kotlin.time.Instant
import kotlin.uuid.ExperimentalUuidApi
import kotlin.uuid.Uuid
/**
* Serializer für kotlin.time. Instant Objekte.
* Konvertiert Instant zu/von ISO-8601 String-Repräsentation.
* Serializer für kotlin.time.Instant Objekte.
*/
@OptIn(ExperimentalTime::class)
object KotlinInstantSerializer : KSerializer<Instant> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Instant", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: Instant) {
encoder.encodeString(value.toString())
}
override fun deserialize(decoder: Decoder): Instant {
return Instant.parse(decoder.decodeString())
}
object InstantSerializer : KSerializer<Instant> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Instant", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: Instant) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): Instant = Instant.parse(decoder.decodeString())
}
// Note: Serializer for kotlinx.datetime.Instant is defined in a separate file
/**
* Serializer für UUID Objekte.
* Konvertiert UUID zu/von String-Repräsentation.
* Serializer für kotlin.uuid.Uuid Objekte.
*/
@OptIn(ExperimentalUuidApi::class)
object UuidSerializer : KSerializer<Uuid> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: Uuid) {
encoder.encodeString(value.toString())
}
override fun deserialize(decoder: Decoder): Uuid {
return Uuid.parse(decoder.decodeString())
}
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Uuid", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: Uuid) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): Uuid = Uuid.parse(decoder.decodeString())
}
/**
* Serializer für kotlinx.datetime.LocalDate Objekte.
* Konvertiert LocalDate zu/von ISO-8601 String-Repräsentation.
*/
object LocalDateSerializer : KSerializer<LocalDate> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDate", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalDate) {
encoder.encodeString(value.toString())
}
override fun deserialize(decoder: Decoder): LocalDate {
return LocalDate.parse(decoder.decodeString())
}
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDate", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalDate) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): LocalDate = LocalDate.parse(decoder.decodeString())
}
/**
* Serializer für kotlinx.datetime. LocalDateTime Objekte.
* Konvertiert LocalDateTime zu/von ISO-8601 String-Repräsentation.
* Serializer für kotlinx.datetime.LocalDateTime Objekte.
*/
object LocalDateTimeSerializer : KSerializer<LocalDateTime> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDateTime", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalDateTime) {
encoder.encodeString(value.toString())
}
override fun deserialize(decoder: Decoder): LocalDateTime {
return LocalDateTime.parse(decoder.decodeString())
}
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDateTime", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalDateTime) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): LocalDateTime = LocalDateTime.parse(decoder.decodeString())
}
/**
* Serializer für kotlinx.datetime.LocalTime Objekte.
* Konvertiert LocalTime zu/von ISO-8601 String-Repräsentation.
*/
object LocalTimeSerializer : KSerializer<LocalTime> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalTime", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalTime) {
encoder.encodeString(value.toString())
}
override fun deserialize(decoder: Decoder): LocalTime {
return LocalTime.parse(decoder.decodeString())
}
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalTime", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalTime) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): LocalTime = LocalTime.parse(decoder.decodeString())
}
@@ -15,8 +15,8 @@ class SerializersTest {
@Test
fun `Instant roundtrip`() {
val instant = kotlin.time.Instant.parse("2024-01-01T00:00:00Z")
val json = Json.encodeToString(KotlinInstantSerializer, instant)
val decoded = Json.decodeFromString(KotlinInstantSerializer, json)
val json = Json.encodeToString(InstantSerializer, instant)
val decoded = Json.decodeFromString(InstantSerializer, json)
assertEquals(instant, decoded)
}
+3 -3
View File
@@ -34,9 +34,9 @@ kotlin {
}
jvmMain {
dependencies {
// Removed Exposed dependencies to make this module KMP compatible
// implementation(libs.exposed.core)
// implementation(libs.exposed.jdbc)
implementation(libs.exposed.core)
implementation(libs.exposed.jdbc)
implementation(libs.exposed.kotlin.datetime)
}
}
}
@@ -0,0 +1,31 @@
package at.mocode.core.utils.database
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.jetbrains.exposed.v1.core.Transaction
import org.jetbrains.exposed.v1.jdbc.transactions.transaction
import org.jetbrains.exposed.v1.jdbc.transactions.experimental.newSuspendedTransaction
/**
* Utility for database operations using Exposed.
*/
object DatabaseFactory {
/**
* Executes a database query in a suspended transaction.
*/
suspend fun <T> dbQuery(block: suspend Transaction.() -> T): T =
withContext(Dispatchers.IO) {
newSuspendedTransaction {
block()
}
}
/**
* Executes a database query in a blocking transaction.
*/
fun <T> transaction(block: Transaction.() -> T): T =
org.jetbrains.exposed.v1.jdbc.transactions.transaction {
block()
}
}
+5 -5
View File
@@ -5,17 +5,17 @@ plugins {
kotlin {
jvm()
js(IR) {
browser()
}
sourceSets {
commonMain {
dependencies {
implementation(projects.core.coreDomain)
implementation(projects.core.coreUtils)
// Domänen-Modelle für das Parsing
implementation(projects.backend.services.clubs.clubsDomain)
implementation(projects.backend.services.persons.personsDomain)
implementation(projects.backend.services.horses.horsesDomain)
implementation(projects.backend.services.officials.officialsDomain)
// Domänen-Modelle für das Parsing aus dem Master-Data-Context
implementation(projects.backend.services.masterdata.masterdataDomain)
implementation(libs.kotlinx.serialization.json)
implementation(libs.kotlinx.datetime)
@@ -1,13 +1,13 @@
package at.mocode.zns.parser
import at.mocode.clubs.domain.model.DomVerein
import at.mocode.masterdata.domain.model.DomVerein
import at.mocode.masterdata.domain.model.DomReiter
import at.mocode.masterdata.domain.model.DomPferd
import at.mocode.masterdata.domain.model.DomFunktionaer
import at.mocode.core.domain.model.DatenQuelleE
import at.mocode.core.domain.model.LizenzKlasseE
import at.mocode.core.domain.model.PferdeGeschlechtE
import at.mocode.core.utils.parser.FixedWidthLineReader
import at.mocode.horses.domain.model.DomPferd
import at.mocode.officials.domain.model.DomFunktionaer
import at.mocode.persons.domain.model.DomReiter
import kotlinx.datetime.LocalDate
import kotlin.uuid.ExperimentalUuidApi
import kotlin.uuid.Uuid