From 2bcdc38f09844e7a8ff3010d055905894a0beae8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Brage=20Skj=C3=B8nborg?= Date: Fri, 16 Jan 2026 20:18:29 +0100 Subject: [PATCH] Migrated database stuff to seperate module --- apps/converter/build.gradle.kts | 2 + .../converter/ConverterApplication.kt | 6 +- .../mediaprocessing/converter/TaskPoller.kt | 6 +- .../converter/ConverterApplicationTest.kt | 5 +- apps/coordinator/build.gradle.kts | 2 + .../coordinator/CoordinatorApplication.kt | 6 +- .../coordinator/EventPoller.kt | 2 +- .../coordinator/controller/FilesController.kt | 2 +- .../events/MediaCreateConvertTaskListener.kt | 2 +- .../MediaCreateCoverDownloadTaskListener.kt | 3 +- .../events/MediaCreateEncodeTaskListener.kt | 3 +- .../events/MediaCreateExtractTaskListener.kt | 3 +- .../MediaCreateMetadataSearchTaskListener.kt | 3 +- .../MediaReadStreamsTaskCreatedListener.kt | 3 +- .../events/MigrateCreateStoreTaskListener.kt | 3 +- .../events/StoreContentAndMetadataListener.kt | 3 +- .../coordinator/services/CommandService.kt | 2 +- .../services/EventPagingService.kt | 2 +- .../services/SequenceAggregatorService.kt | 2 +- .../ListenerInformOrderTest.kt | 2 +- .../no/iktdev/mediaprocessing/TestBase.kt | 3 +- .../MediaCreateConvertTaskListenerTest.kt | 5 +- ...ediaCreateCoverDownloadTaskListenerTest.kt | 3 +- .../MediaCreateEncodeTaskListenerTest.kt | 3 +- .../MediaCreateExtractTaskListenerTest.kt | 3 +- ...diaCreateMetadataSearchTaskListenerTest.kt | 3 +- .../MigrateCreateStoreTaskListenerTest.kt | 3 +- .../StoreContentAndMetadataListenerTest.kt | 3 +- apps/processer/build.gradle.kts | 2 + .../processer/ProcesserApplication.kt | 6 +- .../mediaprocessing/processer/TaskPoller.kt | 5 +- settings.gradle.kts | 4 +- shared/common/build.gradle.kts | 19 ---- ...ation.kt => MediaProcessingApplication.kt} | 26 +---- .../common/src/main/resources/application.yml | 12 -- .../mediaprocessing/shared/common/TestBase.kt | 3 - shared/database/build.gradle.kts | 104 ++++++++++++++++++ .../shared/database/DatabaseApplication.kt | 40 +++++++ .../shared}/database/DatabaseConfig.kt | 2 +- .../shared}/database/DatabaseConfiguration.kt | 6 +- .../shared}/database/DatabaseEnv.kt | 4 +- .../database/DatabaseHealthIndicator.kt | 2 +- .../shared}/database/DatabaseTypes.kt | 2 +- .../shared}/database/DatabaseUtil.kt | 2 +- .../database/queries/FilesTableQueries.kt | 6 +- .../shared/database}/stores/EventStore.kt | 9 +- .../shared/database}/stores/TaskStore.kt | 7 +- .../shared}/database/tables/EventsTable.kt | 4 +- .../shared}/database/tables/FilesTable.kt | 5 +- .../shared}/database/tables/TasksTable.kt | 9 +- .../src/main/resources/application.yml | 5 + .../flyway/V1__create_events_table.sql | 0 .../flyway/V2__create_tasks_table.sql | 0 .../flyway/V3__create_file_registry_table.sql | 0 .../shared/database}/TestBaseWithDatabase.kt | 28 +++-- .../config/DatasourceConfiguration.kt | 8 +- 56 files changed, 269 insertions(+), 139 deletions(-) rename shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/{DatabaseApplication.kt => MediaProcessingApplication.kt} (57%) create mode 100644 shared/database/build.gradle.kts create mode 100644 shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseApplication.kt rename shared/{common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common => database/src/main/kotlin/no/iktdev/mediaprocessing/shared}/database/DatabaseConfig.kt (75%) rename shared/{common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common => database/src/main/kotlin/no/iktdev/mediaprocessing/shared}/database/DatabaseConfiguration.kt (96%) rename shared/{common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common => database/src/main/kotlin/no/iktdev/mediaprocessing/shared}/database/DatabaseEnv.kt (94%) rename shared/{common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common => database/src/main/kotlin/no/iktdev/mediaprocessing/shared}/database/DatabaseHealthIndicator.kt (93%) rename shared/{common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common => database/src/main/kotlin/no/iktdev/mediaprocessing/shared}/database/DatabaseTypes.kt (52%) rename shared/{common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common => database/src/main/kotlin/no/iktdev/mediaprocessing/shared}/database/DatabaseUtil.kt (89%) rename shared/{common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common => database/src/main/kotlin/no/iktdev/mediaprocessing/shared}/database/queries/FilesTableQueries.kt (74%) rename shared/{common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common => database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database}/stores/EventStore.kt (90%) rename shared/{common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common => database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database}/stores/TaskStore.kt (96%) rename shared/{common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common => database/src/main/kotlin/no/iktdev/mediaprocessing/shared}/database/tables/EventsTable.kt (88%) rename shared/{common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common => database/src/main/kotlin/no/iktdev/mediaprocessing/shared}/database/tables/FilesTable.kt (67%) rename shared/{common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common => database/src/main/kotlin/no/iktdev/mediaprocessing/shared}/database/tables/TasksTable.kt (73%) create mode 100644 shared/database/src/main/resources/application.yml rename shared/{common => database}/src/main/resources/flyway/V1__create_events_table.sql (100%) rename shared/{common => database}/src/main/resources/flyway/V2__create_tasks_table.sql (100%) rename shared/{common => database}/src/main/resources/flyway/V3__create_file_registry_table.sql (100%) rename shared/{common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common => database/src/test/kotlin/no/iktdev/mediaprocessing/shared/database}/TestBaseWithDatabase.kt (67%) rename shared/{common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common => database/src/test/kotlin/no/iktdev/mediaprocessing/shared/database}/config/DatasourceConfiguration.kt (84%) diff --git a/apps/converter/build.gradle.kts b/apps/converter/build.gradle.kts index 76071c00..b75ab79b 100644 --- a/apps/converter/build.gradle.kts +++ b/apps/converter/build.gradle.kts @@ -49,12 +49,14 @@ dependencies { implementation("com.github.pgreze:kotlin-process:1.4.1") implementation(project(mapOf("path" to ":shared:common"))) + implementation(project(mapOf("path" to ":shared:database"))) implementation(kotlin("stdlib-jdk8")) testImplementation("io.mockk:mockk:1.12.0") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation(project(":shared:common", configuration = "testArtifacts")) + testImplementation(project(":shared:database", configuration = "testArtifacts")) testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2") val exposedVersion = "0.61.0" diff --git a/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplication.kt b/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplication.kt index 7468cbc4..68767978 100644 --- a/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplication.kt +++ b/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplication.kt @@ -6,15 +6,15 @@ import no.iktdev.eventi.tasks.TaskTypeRegistry import no.iktdev.exfl.coroutines.CoroutinesDefault import no.iktdev.exfl.coroutines.CoroutinesIO import no.iktdev.exfl.observable.Observables -import no.iktdev.mediaprocessing.shared.common.DatabaseApplication -import no.iktdev.mediaprocessing.shared.common.MediaProcessingApp import no.iktdev.mediaprocessing.shared.common.event_task_contract.EventRegistry import no.iktdev.mediaprocessing.shared.common.event_task_contract.TaskRegistry import no.iktdev.mediaprocessing.shared.common.getAppVersion +import no.iktdev.mediaprocessing.shared.database.DatabaseApplication +import no.iktdev.mediaprocessing.shared.database.DatabasebasedMediaProcessingApp import org.springframework.boot.runApplication import org.springframework.context.annotation.Configuration -@MediaProcessingApp +@DatabasebasedMediaProcessingApp open class ConverterApplication: DatabaseApplication() { } diff --git a/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/TaskPoller.kt b/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/TaskPoller.kt index 85098023..b499eb96 100644 --- a/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/TaskPoller.kt +++ b/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/TaskPoller.kt @@ -7,11 +7,11 @@ import no.iktdev.eventi.models.Event import no.iktdev.eventi.models.store.TaskStatus import no.iktdev.eventi.tasks.TaskPollerImplementation import no.iktdev.eventi.tasks.TaskReporter -import no.iktdev.mediaprocessing.shared.common.stores.EventStore -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.EventStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.springframework.boot.ApplicationArguments import org.springframework.boot.ApplicationRunner -import org.springframework.context.annotation.Bean import org.springframework.stereotype.Component import org.springframework.stereotype.Service import java.util.UUID diff --git a/apps/converter/src/test/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplicationTest.kt b/apps/converter/src/test/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplicationTest.kt index 477bed99..c62a03af 100644 --- a/apps/converter/src/test/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplicationTest.kt +++ b/apps/converter/src/test/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplicationTest.kt @@ -6,8 +6,9 @@ import io.mockk.mockkObject import io.mockk.verify import no.iktdev.eventi.models.Task import no.iktdev.mediaprocessing.shared.common.TestBase -import no.iktdev.mediaprocessing.shared.common.config.DatasourceConfiguration -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.config.DatasourceConfiguration +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.jetbrains.exposed.sql.Database import org.junit.jupiter.api.Assertions.assertNotNull import org.junit.jupiter.api.Test diff --git a/apps/coordinator/build.gradle.kts b/apps/coordinator/build.gradle.kts index 18194d22..e44bfd03 100644 --- a/apps/coordinator/build.gradle.kts +++ b/apps/coordinator/build.gradle.kts @@ -48,6 +48,7 @@ dependencies { implementation(project(mapOf("path" to ":shared:ffmpeg"))) implementation(project(mapOf("path" to ":shared:common"))) + implementation(project(mapOf("path" to ":shared:database"))) @@ -81,6 +82,7 @@ dependencies { testImplementation("org.mockito.kotlin:mockito-kotlin:5.2.1") testImplementation("org.mockito:mockito-junit-jupiter:5.11.0") testImplementation(project(":shared:common", configuration = "testArtifacts")) + testImplementation(project(":shared:database", configuration = "testArtifacts")) testImplementation("org.springframework.boot:spring-boot-starter-test") val exposedVersion = "0.61.0" testImplementation("org.jetbrains.exposed:exposed-core:${exposedVersion}") diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/CoordinatorApplication.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/CoordinatorApplication.kt index f0ae80af..4735ebb4 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/CoordinatorApplication.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/CoordinatorApplication.kt @@ -7,16 +7,16 @@ import no.iktdev.exfl.coroutines.CoroutinesDefault import no.iktdev.exfl.coroutines.CoroutinesIO import no.iktdev.exfl.observable.Observables import no.iktdev.mediaprocessing.coordinator.config.ExecutablesConfig -import no.iktdev.mediaprocessing.shared.common.DatabaseApplication -import no.iktdev.mediaprocessing.shared.common.MediaProcessingApp import no.iktdev.mediaprocessing.shared.common.event_task_contract.EventRegistry import no.iktdev.mediaprocessing.shared.common.event_task_contract.TaskRegistry import no.iktdev.mediaprocessing.shared.common.getAppVersion +import no.iktdev.mediaprocessing.shared.database.DatabaseApplication +import no.iktdev.mediaprocessing.shared.database.DatabasebasedMediaProcessingApp import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.boot.runApplication import org.springframework.context.annotation.Configuration -@MediaProcessingApp +@DatabasebasedMediaProcessingApp class CoordinatorApplication: DatabaseApplication() { } diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/EventPoller.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/EventPoller.kt index 1a8d113b..f857d4c4 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/EventPoller.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/EventPoller.kt @@ -7,7 +7,7 @@ import kotlinx.coroutines.launch import no.iktdev.eventi.events.EventDispatcher import no.iktdev.eventi.events.EventPollerImplementation import no.iktdev.eventi.events.SequenceDispatchQueue -import no.iktdev.mediaprocessing.shared.common.stores.EventStore +import no.iktdev.mediaprocessing.shared.database.stores.EventStore import org.springframework.context.SmartLifecycle import org.springframework.context.annotation.DependsOn import org.springframework.stereotype.Component diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/controller/FilesController.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/controller/FilesController.kt index ca8a11fa..eeaa8c19 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/controller/FilesController.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/controller/FilesController.kt @@ -1,7 +1,7 @@ package no.iktdev.mediaprocessing.coordinator.controller -import no.iktdev.mediaprocessing.shared.common.database.queries.FilesTableQueries import no.iktdev.mediaprocessing.shared.common.dto.FileTableItem +import no.iktdev.mediaprocessing.shared.database.queries.FilesTableQueries import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateConvertTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateConvertTaskListener.kt index 0c7547e5..5151f57c 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateConvertTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateConvertTaskListener.kt @@ -9,7 +9,7 @@ import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.Operat import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.ProcesserExtractResultEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartProcessingEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.ConvertTask -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore import org.springframework.stereotype.Component import java.io.File import java.nio.file.Files diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateCoverDownloadTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateCoverDownloadTaskListener.kt index 4236e31a..41fc9c0a 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateCoverDownloadTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateCoverDownloadTaskListener.kt @@ -7,7 +7,8 @@ import no.iktdev.eventi.models.store.TaskStatus import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.CoverDownloadTaskCreatedEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.MetadataSearchResultEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.CoverDownloadTask -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.springframework.stereotype.Component @Component diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateEncodeTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateEncodeTaskListener.kt index baa11153..8aadb3a7 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateEncodeTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateEncodeTaskListener.kt @@ -7,7 +7,8 @@ import no.iktdev.mediaprocessing.ffmpeg.dsl.* import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.* import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.EncodeData import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.EncodeTask -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.springframework.stereotype.Component import java.io.File diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateExtractTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateExtractTaskListener.kt index 9b95188a..57f3eac7 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateExtractTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateExtractTaskListener.kt @@ -11,7 +11,8 @@ import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.Proces import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartProcessingEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.ExtractSubtitleData import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.ExtractSubtitleTask -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.springframework.stereotype.Component import java.io.File import java.util.UUID diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateMetadataSearchTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateMetadataSearchTaskListener.kt index 90add50f..37fc7bc2 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateMetadataSearchTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateMetadataSearchTaskListener.kt @@ -8,7 +8,8 @@ import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.MediaP import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.MetadataSearchResultEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.MetadataSearchTaskCreatedEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.MetadataSearchTask -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.jetbrains.annotations.VisibleForTesting import org.springframework.stereotype.Component import java.util.* diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaReadStreamsTaskCreatedListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaReadStreamsTaskCreatedListener.kt index 1a7c94ec..2aeabf65 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaReadStreamsTaskCreatedListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaReadStreamsTaskCreatedListener.kt @@ -7,7 +7,8 @@ import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.Coordi import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.MediaParsedInfoEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartProcessingEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.MediaReadTask -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.springframework.stereotype.Component @ListenerOrder(3) diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MigrateCreateStoreTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MigrateCreateStoreTaskListener.kt index 80afa7b1..5da7a0db 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MigrateCreateStoreTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MigrateCreateStoreTaskListener.kt @@ -9,7 +9,8 @@ import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.Migrat import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.MigrateToContentStoreTask import no.iktdev.mediaprocessing.shared.common.projection.CollectProjection import no.iktdev.mediaprocessing.shared.common.projection.MigrateContentProject -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.springframework.stereotype.Component @Component diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/StoreContentAndMetadataListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/StoreContentAndMetadataListener.kt index 60bea0ed..b14c3b5c 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/StoreContentAndMetadataListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/StoreContentAndMetadataListener.kt @@ -9,7 +9,8 @@ import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StoreC import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.StoreContentAndMetadataTask import no.iktdev.mediaprocessing.shared.common.model.ContentExport import no.iktdev.mediaprocessing.shared.common.projection.StoreProjection -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.springframework.stereotype.Component @Component diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/CommandService.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/CommandService.kt index 368d9116..a1d88ff3 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/CommandService.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/CommandService.kt @@ -5,7 +5,7 @@ import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartD import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartFlow import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartProcessingEvent import no.iktdev.mediaprocessing.shared.common.notExist -import no.iktdev.mediaprocessing.shared.common.stores.EventStore +import no.iktdev.mediaprocessing.shared.database.stores.EventStore import org.springframework.stereotype.Service import java.io.File import java.util.* diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/EventPagingService.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/EventPagingService.kt index fbbc9b9b..edd2edbb 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/EventPagingService.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/EventPagingService.kt @@ -3,7 +3,7 @@ package no.iktdev.mediaprocessing.coordinator.services import no.iktdev.eventi.ZDS.toEvent import no.iktdev.mediaprocessing.shared.common.dto.SequenceEvent import no.iktdev.mediaprocessing.shared.common.dto.toDto -import no.iktdev.mediaprocessing.shared.common.stores.EventStore +import no.iktdev.mediaprocessing.shared.database.stores.EventStore import org.springframework.stereotype.Service import java.util.* diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/SequenceAggregatorService.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/SequenceAggregatorService.kt index 571cd5c3..34568bc5 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/SequenceAggregatorService.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/services/SequenceAggregatorService.kt @@ -6,7 +6,7 @@ import no.iktdev.mediaprocessing.shared.common.LocalDateTimeEpoch import no.iktdev.mediaprocessing.shared.common.dto.SequenceSummary import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.CollectedEvent import no.iktdev.mediaprocessing.shared.common.projection.CollectProjection -import no.iktdev.mediaprocessing.shared.common.stores.EventStore +import no.iktdev.mediaprocessing.shared.database.stores.EventStore import org.springframework.stereotype.Service @Service diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/ListenerInformOrderTest.kt b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/ListenerInformOrderTest.kt index c8558dcb..b91031ba 100644 --- a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/ListenerInformOrderTest.kt +++ b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/ListenerInformOrderTest.kt @@ -5,7 +5,7 @@ import no.iktdev.eventi.ListenerOrder import no.iktdev.eventi.events.EventListenerRegistry import no.iktdev.mediaprocessing.coordinator.CoordinatorApplication import no.iktdev.mediaprocessing.coordinator.listeners.events.* -import no.iktdev.mediaprocessing.shared.common.config.DatasourceConfiguration +import no.iktdev.mediaprocessing.shared.database.config.DatasourceConfiguration import no.iktdev.mediaprocessing.shared.common.event_task_contract.EventRegistry import no.iktdev.mediaprocessing.shared.common.event_task_contract.TaskRegistry import org.assertj.core.api.Assertions.assertThat diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/TestBase.kt b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/TestBase.kt index a499c2d4..5c3dd202 100644 --- a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/TestBase.kt +++ b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/TestBase.kt @@ -9,7 +9,8 @@ import no.iktdev.mediaprocessing.ffmpeg.dsl.VideoCodec import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.OperationType import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartData import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartProcessingEvent -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.junit.jupiter.api.BeforeEach import java.io.File import java.util.* diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateConvertTaskListenerTest.kt b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateConvertTaskListenerTest.kt index 0048bc8d..f2693882 100644 --- a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateConvertTaskListenerTest.kt +++ b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateConvertTaskListenerTest.kt @@ -9,7 +9,6 @@ import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartD import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartProcessingEvent import org.junit.jupiter.api.Assertions.* -import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test import java.io.File @@ -17,10 +16,10 @@ import java.io.File import io.mockk.* import no.iktdev.eventi.models.Event import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.ConvertTask -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.mockito.Mockito.mockStatic import org.mockito.kotlin.any -import org.mockito.kotlin.whenever import java.nio.file.Files import java.nio.file.Path diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateCoverDownloadTaskListenerTest.kt b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateCoverDownloadTaskListenerTest.kt index cded3f54..1250109d 100644 --- a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateCoverDownloadTaskListenerTest.kt +++ b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateCoverDownloadTaskListenerTest.kt @@ -6,7 +6,8 @@ import no.iktdev.mediaprocessing.MockData.metadataEvent import no.iktdev.mediaprocessing.TestBase import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.CoverDownloadTaskCreatedEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.CoverDownloadTask -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateEncodeTaskListenerTest.kt b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateEncodeTaskListenerTest.kt index f99a2f72..e341a6b9 100644 --- a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateEncodeTaskListenerTest.kt +++ b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateEncodeTaskListenerTest.kt @@ -10,7 +10,8 @@ import no.iktdev.mediaprocessing.ffmpeg.dsl.AudioCodec import no.iktdev.mediaprocessing.ffmpeg.dsl.VideoCodec import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.* import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.EncodeTask -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateExtractTaskListenerTest.kt b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateExtractTaskListenerTest.kt index 12a439f5..870e3ecf 100644 --- a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateExtractTaskListenerTest.kt +++ b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateExtractTaskListenerTest.kt @@ -20,7 +20,8 @@ import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.Proces import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartData import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartProcessingEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.ExtractSubtitleTask -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.DisplayName diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateMetadataSearchTaskListenerTest.kt b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateMetadataSearchTaskListenerTest.kt index e526fe24..b3d3f65e 100644 --- a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateMetadataSearchTaskListenerTest.kt +++ b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MediaCreateMetadataSearchTaskListenerTest.kt @@ -11,7 +11,8 @@ import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.Metada import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.MetadataSearchTaskCreatedEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.MetadataSearchTask import no.iktdev.mediaprocessing.shared.common.model.MediaType -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MigrateCreateStoreTaskListenerTest.kt b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MigrateCreateStoreTaskListenerTest.kt index e267673f..48479550 100644 --- a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MigrateCreateStoreTaskListenerTest.kt +++ b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/MigrateCreateStoreTaskListenerTest.kt @@ -15,7 +15,8 @@ import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.Migrat import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.MigrateToContentStoreTask import no.iktdev.mediaprocessing.shared.common.model.MediaType import no.iktdev.mediaprocessing.shared.common.model.MigrateStatus -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/StoreContentAndMetadataListenerTest.kt b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/StoreContentAndMetadataListenerTest.kt index ce254429..61ddb1a7 100644 --- a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/StoreContentAndMetadataListenerTest.kt +++ b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/listeners/events/StoreContentAndMetadataListenerTest.kt @@ -12,7 +12,8 @@ import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StoreC import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.StoreContentAndMetadataTask import no.iktdev.mediaprocessing.shared.common.model.MediaType import no.iktdev.mediaprocessing.shared.common.model.MigrateStatus -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test diff --git a/apps/processer/build.gradle.kts b/apps/processer/build.gradle.kts index 87596127..6fa8f88a 100644 --- a/apps/processer/build.gradle.kts +++ b/apps/processer/build.gradle.kts @@ -47,6 +47,7 @@ dependencies { //implementation(project(mapOf("path" to ":shared"))) implementation(project(mapOf("path" to ":shared:ffmpeg"))) implementation(project(mapOf("path" to ":shared:common"))) + implementation(project(mapOf("path" to ":shared:database"))) implementation(kotlin("stdlib-jdk8")) @@ -73,6 +74,7 @@ dependencies { // --- Hvis du trenger test artifacts fra shared:common --- testImplementation(project(":shared:common", configuration = "testArtifacts")) + testImplementation(project(":shared:database", configuration = "testArtifacts")) val exposedVersion = "0.61.0" testImplementation("org.jetbrains.exposed:exposed-core:${exposedVersion}") diff --git a/apps/processer/src/main/kotlin/no/iktdev/mediaprocessing/processer/ProcesserApplication.kt b/apps/processer/src/main/kotlin/no/iktdev/mediaprocessing/processer/ProcesserApplication.kt index 70c440c8..58a8bfbf 100644 --- a/apps/processer/src/main/kotlin/no/iktdev/mediaprocessing/processer/ProcesserApplication.kt +++ b/apps/processer/src/main/kotlin/no/iktdev/mediaprocessing/processer/ProcesserApplication.kt @@ -6,16 +6,16 @@ import no.iktdev.eventi.tasks.TaskTypeRegistry import no.iktdev.exfl.coroutines.CoroutinesDefault import no.iktdev.exfl.coroutines.CoroutinesIO import no.iktdev.exfl.observable.Observables -import no.iktdev.mediaprocessing.shared.common.DatabaseApplication -import no.iktdev.mediaprocessing.shared.common.MediaProcessingApp import no.iktdev.mediaprocessing.shared.common.event_task_contract.EventRegistry import no.iktdev.mediaprocessing.shared.common.event_task_contract.TaskRegistry import no.iktdev.mediaprocessing.shared.common.getAppVersion +import no.iktdev.mediaprocessing.shared.database.DatabaseApplication +import no.iktdev.mediaprocessing.shared.database.DatabasebasedMediaProcessingApp import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.boot.runApplication import org.springframework.context.annotation.Configuration -@MediaProcessingApp +@DatabasebasedMediaProcessingApp class ProcesserApplication: DatabaseApplication() { } diff --git a/apps/processer/src/main/kotlin/no/iktdev/mediaprocessing/processer/TaskPoller.kt b/apps/processer/src/main/kotlin/no/iktdev/mediaprocessing/processer/TaskPoller.kt index 6a4aa96e..d7d65c91 100644 --- a/apps/processer/src/main/kotlin/no/iktdev/mediaprocessing/processer/TaskPoller.kt +++ b/apps/processer/src/main/kotlin/no/iktdev/mediaprocessing/processer/TaskPoller.kt @@ -7,8 +7,9 @@ import no.iktdev.eventi.models.Event import no.iktdev.eventi.models.store.TaskStatus import no.iktdev.eventi.tasks.TaskPollerImplementation import no.iktdev.eventi.tasks.TaskReporter -import no.iktdev.mediaprocessing.shared.common.stores.EventStore -import no.iktdev.mediaprocessing.shared.common.stores.TaskStore +import no.iktdev.mediaprocessing.shared.database.stores.EventStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore + import org.springframework.boot.ApplicationArguments import org.springframework.boot.ApplicationRunner import org.springframework.stereotype.Component diff --git a/settings.gradle.kts b/settings.gradle.kts index fd83091e..e537e8b4 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -23,4 +23,6 @@ include("shared") include("shared:common") include("shared:ffmpeg") -include("shared:event-task-contract") \ No newline at end of file +include("shared:event-task-contract") +include("shared:database") +include("shared:database") \ No newline at end of file diff --git a/shared/common/build.gradle.kts b/shared/common/build.gradle.kts index fa032781..66a8aa6e 100644 --- a/shared/common/build.gradle.kts +++ b/shared/common/build.gradle.kts @@ -23,13 +23,10 @@ repositories { } } -val exposedVersion = "0.61.0" - dependencies { implementation("org.springframework.boot:spring-boot-starter-actuator") implementation("org.springframework.boot:spring-boot-starter-websocket") - implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("com.github.pgreze:kotlin-process:1.3.1") @@ -45,24 +42,9 @@ dependencies { implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.5.0") - implementation("org.jetbrains.exposed:exposed-core:$exposedVersion") - implementation("org.jetbrains.exposed:exposed-dao:$exposedVersion") - implementation("org.jetbrains.exposed:exposed-jdbc:$exposedVersion") - implementation("org.jetbrains.exposed:exposed-java-time:$exposedVersion") - - - - - - implementation ("mysql:mysql-connector-java:8.0.33") - implementation("org.postgresql:postgresql:42.7.7") - implementation("org.xerial:sqlite-jdbc:3.43.2.0") - implementation("org.apache.commons:commons-lang3:3.12.0") - implementation("com.zaxxer:HikariCP:7.0.2") - implementation(project(":shared:ffmpeg")) implementation(libs.eventi) @@ -72,7 +54,6 @@ dependencies { testImplementation("org.springframework.boot:spring-boot-starter-test") - implementation("com.h2database:h2:2.2.220") testImplementation("org.assertj:assertj-core:3.24.2") testImplementation("io.kotest:kotest-assertions-core:5.7.2") diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/DatabaseApplication.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/MediaProcessingApplication.kt similarity index 57% rename from shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/DatabaseApplication.kt rename to shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/MediaProcessingApplication.kt index ef151215..9da62a9f 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/DatabaseApplication.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/MediaProcessingApplication.kt @@ -1,44 +1,28 @@ package no.iktdev.mediaprocessing.shared.common -import mu.KotlinLogging import no.iktdev.mediaprocessing.shared.common.configs.MediaPaths import no.iktdev.mediaprocessing.shared.common.configs.StreamItConfig -import org.jetbrains.exposed.sql.Database -import org.springframework.beans.factory.InitializingBean import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.boot.runApplication import org.springframework.context.annotation.ComponentScan import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.Import -import org.springframework.stereotype.Component -import javax.sql.DataSource -abstract class DatabaseApplication { +abstract class MediaProcessingApplication { companion object { - inline fun launch(args: Array) { + inline fun launch(args: Array) { runApplication(*args) } } } -@Component("ExposedInit") -class ExposedInitializer( - private val dataSource: DataSource -) : InitializingBean { - private val log = KotlinLogging.logger {} - - override fun afterPropertiesSet() { - log.info { "Starting database connection" } - Database.connect(dataSource) - } -} - - @Target(AnnotationTarget.CLASS) @Retention(AnnotationRetention.RUNTIME) @SpringBootApplication -@ComponentScan("no.iktdev.mediaprocessing") // sikrer at common beans blir plukket opp +@ComponentScan( + basePackages = ["no.iktdev.mediaprocessing.shared.common"] +) // sikrer at common beans blir plukket opp @Import(SharedConfig::class) annotation class MediaProcessingApp diff --git a/shared/common/src/main/resources/application.yml b/shared/common/src/main/resources/application.yml index ff0f9282..daa71794 100644 --- a/shared/common/src/main/resources/application.yml +++ b/shared/common/src/main/resources/application.yml @@ -1,15 +1,3 @@ -spring: - flyway: - enabled: true - locations: classpath:flyway - baseline-on-migrate: false - datasource: - url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1 - driver-class-name: org.h2.Driver - username: sa - password: - - media: cache: /src/cache outgoing: /src/output diff --git a/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/TestBase.kt b/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/TestBase.kt index 9281df6a..8eb7e915 100644 --- a/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/TestBase.kt +++ b/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/TestBase.kt @@ -1,6 +1,5 @@ package no.iktdev.mediaprocessing.shared.common -import no.iktdev.mediaprocessing.shared.common.config.DatasourceConfiguration import org.junit.jupiter.api.extension.ExtendWith import org.springframework.boot.test.context.SpringBootTest import org.springframework.boot.test.web.client.TestRestTemplate @@ -11,8 +10,6 @@ import org.springframework.test.context.junit.jupiter.SpringExtension import java.net.URI @SpringBootTest( - classes = [DatabaseApplication::class, - DatasourceConfiguration::class], webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT ) @ExtendWith(SpringExtension::class) diff --git a/shared/database/build.gradle.kts b/shared/database/build.gradle.kts new file mode 100644 index 00000000..0a40f871 --- /dev/null +++ b/shared/database/build.gradle.kts @@ -0,0 +1,104 @@ +plugins { + id("java") + kotlin("jvm") + kotlin("plugin.spring") + id("org.jetbrains.kotlin.plugin.serialization") + id("org.springframework.boot") + id("io.spring.dependency-management") +} + +group = "no.iktdev.mediaprocessing" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() + maven("https://jitpack.io") + maven { + name = "ReposiliteReleases" + url = uri("https://reposilite.iktdev.no/releases") + } + maven { + name = "ReposiliteSnapshot" + url = uri("https://reposilite.iktdev.no/snapshots") + } +} + +val exposedVersion = "0.61.0" + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-actuator") + implementation("org.springframework.boot:spring-boot-starter-websocket") + implementation("org.springframework.boot:spring-boot-starter-data-jpa") + + + implementation("com.github.pgreze:kotlin-process:1.3.1") + implementation("io.github.microutils:kotlin-logging-jvm:2.0.11") + implementation(libs.exfl) + + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1") + implementation("com.google.code.gson:gson:2.8.9") + implementation("org.json:json:20231013") + + implementation("org.flywaydb:flyway-core") + implementation("org.flywaydb:flyway-mysql") + + implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.5.0") + + implementation("org.jetbrains.exposed:exposed-core:$exposedVersion") + implementation("org.jetbrains.exposed:exposed-dao:$exposedVersion") + implementation("org.jetbrains.exposed:exposed-jdbc:$exposedVersion") + implementation("org.jetbrains.exposed:exposed-java-time:$exposedVersion") + + + + + + implementation ("mysql:mysql-connector-java:8.0.33") + implementation("org.postgresql:postgresql:42.7.7") + implementation("org.xerial:sqlite-jdbc:3.43.2.0") + + + implementation("org.apache.commons:commons-lang3:3.12.0") + + implementation("com.zaxxer:HikariCP:7.0.2") + + implementation(project(":shared:ffmpeg")) + implementation(project(":shared:common")) + implementation(libs.eventi) + + testImplementation(kotlin("test")) + testImplementation(platform("org.junit:junit-bom:5.10.0")) + testImplementation("org.junit.jupiter:junit-jupiter") + + testImplementation("org.springframework.boot:spring-boot-starter-test") + + implementation("com.h2database:h2:2.2.220") + testImplementation("org.assertj:assertj-core:3.24.2") + + testImplementation("io.kotest:kotest-assertions-core:5.7.2") + testImplementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0") + testImplementation("io.github.classgraph:classgraph:4.8.184") + testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2") + testImplementation("io.mockk:mockk:1.13.9") + + testImplementation(project(":shared:common", configuration = "testArtifacts")) +} + +kotlin { + jvmToolchain(21) +} + +tasks.test { + useJUnitPlatform() +} + +configurations { create("testArtifacts") } + +tasks.register("testJar") { + from(sourceSets.test.get().output) + archiveClassifier.set("tests") +} + +artifacts { + add("testArtifacts", tasks.named("testJar")) +} diff --git a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseApplication.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseApplication.kt new file mode 100644 index 00000000..54f2f007 --- /dev/null +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseApplication.kt @@ -0,0 +1,40 @@ +package no.iktdev.mediaprocessing.shared.database + +import mu.KotlinLogging +import no.iktdev.mediaprocessing.shared.common.MediaProcessingApp +import no.iktdev.mediaprocessing.shared.common.MediaProcessingApplication +import org.jetbrains.exposed.sql.Database +import org.springframework.beans.factory.InitializingBean +import org.springframework.boot.runApplication +import org.springframework.context.annotation.ComponentScan +import org.springframework.stereotype.Component +import javax.sql.DataSource + +abstract class DatabaseApplication: MediaProcessingApplication() { + companion object { + inline fun launch(args: Array) { + runApplication(*args) + } + } +} + +@Component("ExposedInit") +class ExposedInitializer( + private val dataSource: DataSource +) : InitializingBean { + private val log = KotlinLogging.logger {} + + override fun afterPropertiesSet() { + log.info { "Starting database connection" } + Database.connect(dataSource) + } +} + + +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.RUNTIME) +@MediaProcessingApp +@ComponentScan( + basePackages = ["no.iktdev.mediaprocessing.shared.database"] +) +annotation class DatabasebasedMediaProcessingApp diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseConfig.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseConfig.kt similarity index 75% rename from shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseConfig.kt rename to shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseConfig.kt index 0822404a..29a08345 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseConfig.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseConfig.kt @@ -1,4 +1,4 @@ -package no.iktdev.mediaprocessing.shared.common.database +package no.iktdev.mediaprocessing.shared.database data class Access( val username: String, diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseConfiguration.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseConfiguration.kt similarity index 96% rename from shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseConfiguration.kt rename to shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseConfiguration.kt index 72e3449c..d89cc572 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseConfiguration.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseConfiguration.kt @@ -1,4 +1,4 @@ -package no.iktdev.mediaprocessing.shared.common.database +package no.iktdev.mediaprocessing.shared.database import com.zaxxer.hikari.HikariConfig import com.zaxxer.hikari.HikariDataSource @@ -13,11 +13,11 @@ import org.springframework.context.annotation.Configuration import javax.sql.DataSource @Configuration -open class DatabaseConfiguration { +class DatabaseConfiguration { @Bean fun dataSource(): DataSource { - val maxPoolSize: Int = 10 + val maxPoolSize = 10 val access = DatabaseEnv.toAccess() val jdbcUrl = when (access.dbType) { diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseEnv.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseEnv.kt similarity index 94% rename from shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseEnv.kt rename to shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseEnv.kt index 83d821a9..dd46f66d 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseEnv.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseEnv.kt @@ -1,4 +1,4 @@ -package no.iktdev.mediaprocessing.shared.common.database +package no.iktdev.mediaprocessing.shared.database object DatabaseEnv { @@ -27,4 +27,4 @@ object DatabaseEnv { ) } -} +} \ No newline at end of file diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseHealthIndicator.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseHealthIndicator.kt similarity index 93% rename from shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseHealthIndicator.kt rename to shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseHealthIndicator.kt index 2d7fd614..afa1bf49 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseHealthIndicator.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseHealthIndicator.kt @@ -1,4 +1,4 @@ -package no.iktdev.mediaprocessing.shared.common.database +package no.iktdev.mediaprocessing.shared.database import org.jetbrains.exposed.sql.transactions.transaction import org.springframework.boot.actuate.health.Health diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseTypes.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseTypes.kt similarity index 52% rename from shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseTypes.kt rename to shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseTypes.kt index 167a4404..b742f8d7 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseTypes.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseTypes.kt @@ -1,4 +1,4 @@ -package no.iktdev.mediaprocessing.shared.common.database +package no.iktdev.mediaprocessing.shared.database enum class DatabaseTypes { MySQL, PostgreSQL, SQLite, H2 diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseUtil.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseUtil.kt similarity index 89% rename from shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseUtil.kt rename to shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseUtil.kt index c3e145ea..52fd989e 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/DatabaseUtil.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseUtil.kt @@ -1,4 +1,4 @@ -package no.iktdev.mediaprocessing.shared.common.database +package no.iktdev.mediaprocessing.shared.database import org.jetbrains.exposed.sql.transactions.transaction diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/queries/FilesTableQueries.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/queries/FilesTableQueries.kt similarity index 74% rename from shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/queries/FilesTableQueries.kt rename to shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/queries/FilesTableQueries.kt index 50cc8503..61fee4d8 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/queries/FilesTableQueries.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/queries/FilesTableQueries.kt @@ -1,8 +1,8 @@ -package no.iktdev.mediaprocessing.shared.common.database.queries +package no.iktdev.mediaprocessing.shared.database.queries -import no.iktdev.mediaprocessing.shared.common.database.tables.FilesTable -import no.iktdev.mediaprocessing.shared.common.database.withTransaction import no.iktdev.mediaprocessing.shared.common.dto.FileTableItem +import no.iktdev.mediaprocessing.shared.database.tables.FilesTable +import no.iktdev.mediaprocessing.shared.database.withTransaction import org.jetbrains.exposed.sql.selectAll class FilesTableQueries { diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/stores/EventStore.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/EventStore.kt similarity index 90% rename from shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/stores/EventStore.kt rename to shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/EventStore.kt index 6acf72b4..6be325b3 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/stores/EventStore.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/EventStore.kt @@ -1,16 +1,15 @@ -package no.iktdev.mediaprocessing.shared.common.stores +package no.iktdev.mediaprocessing.shared.database.stores import com.google.gson.Gson -import no.iktdev.eventi.ZDS.toPersisted import no.iktdev.eventi.models.Event import no.iktdev.eventi.models.store.PersistedEvent import no.iktdev.eventi.stores.EventStore -import no.iktdev.mediaprocessing.shared.common.database.tables.EventsTable -import no.iktdev.mediaprocessing.shared.common.database.withTransaction +import no.iktdev.mediaprocessing.shared.database.tables.EventsTable +import no.iktdev.mediaprocessing.shared.database.withTransaction import org.jetbrains.exposed.sql.insert import org.jetbrains.exposed.sql.selectAll import java.time.LocalDateTime -import java.util.UUID +import java.util.* object EventStore: EventStore { override fun getPersistedEventsAfter(timestamp: LocalDateTime): List { diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/stores/TaskStore.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/TaskStore.kt similarity index 96% rename from shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/stores/TaskStore.kt rename to shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/TaskStore.kt index d6caf8de..3487e57e 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/stores/TaskStore.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/TaskStore.kt @@ -1,13 +1,12 @@ -package no.iktdev.mediaprocessing.shared.common.stores +package no.iktdev.mediaprocessing.shared.database.stores -import com.google.gson.Gson import no.iktdev.eventi.ZDS import no.iktdev.eventi.models.Task import no.iktdev.eventi.models.store.PersistedTask import no.iktdev.eventi.models.store.TaskStatus import no.iktdev.eventi.stores.TaskStore -import no.iktdev.mediaprocessing.shared.common.database.tables.TasksTable -import no.iktdev.mediaprocessing.shared.common.database.withTransaction +import no.iktdev.mediaprocessing.shared.database.tables.TasksTable +import no.iktdev.mediaprocessing.shared.database.withTransaction import org.jetbrains.exposed.sql.and import org.jetbrains.exposed.sql.insert import org.jetbrains.exposed.sql.selectAll diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/tables/EventsTable.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/EventsTable.kt similarity index 88% rename from shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/tables/EventsTable.kt rename to shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/EventsTable.kt index 5461d4f6..913f8603 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/tables/EventsTable.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/EventsTable.kt @@ -1,11 +1,11 @@ -package no.iktdev.mediaprocessing.shared.common.database.tables +package no.iktdev.mediaprocessing.shared.database.tables import org.jetbrains.exposed.dao.id.IntIdTable import org.jetbrains.exposed.sql.Column import org.jetbrains.exposed.sql.javatime.CurrentDateTime import org.jetbrains.exposed.sql.javatime.datetime import java.time.LocalDateTime -import java.util.UUID +import java.util.* object EventsTable: IntIdTable(name = "EVENTS") { val referenceId: Column = uuid("REFERENCE_ID") diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/tables/FilesTable.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/FilesTable.kt similarity index 67% rename from shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/tables/FilesTable.kt rename to shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/FilesTable.kt index 6713a55b..d1ff5dc3 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/tables/FilesTable.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/FilesTable.kt @@ -1,12 +1,13 @@ -package no.iktdev.mediaprocessing.shared.common.database.tables +package no.iktdev.mediaprocessing.shared.database.tables import org.jetbrains.exposed.dao.id.IntIdTable import org.jetbrains.exposed.sql.Column import org.jetbrains.exposed.sql.javatime.datetime +import java.time.LocalDateTime object FilesTable: IntIdTable("FILES") { val name: Column = varchar("NAME", 255) val uri: Column = text("URI") val checksum: Column = char("CHECKSUM", 64) - val identifiedAt: Column = datetime("IDENTIFIED_AT") + val identifiedAt: Column = datetime("IDENTIFIED_AT") } \ No newline at end of file diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/tables/TasksTable.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/TasksTable.kt similarity index 73% rename from shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/tables/TasksTable.kt rename to shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/TasksTable.kt index 2468d325..9192a0a5 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/tables/TasksTable.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/TasksTable.kt @@ -1,11 +1,12 @@ -package no.iktdev.mediaprocessing.shared.common.database.tables +package no.iktdev.mediaprocessing.shared.database.tables import no.iktdev.eventi.models.store.TaskStatus import org.jetbrains.exposed.dao.id.IntIdTable import org.jetbrains.exposed.sql.Column import org.jetbrains.exposed.sql.javatime.CurrentDateTime import org.jetbrains.exposed.sql.javatime.datetime -import java.util.UUID +import java.time.LocalDateTime +import java.util.* object TasksTable: IntIdTable(name = "TASKS") { val referenceId: Column = uuid("REFERENCE_ID") @@ -16,6 +17,6 @@ object TasksTable: IntIdTable(name = "TASKS") { val claimed: Column = bool("CLAIMED").default(false) val claimedBy: Column = varchar("CLAIMED_BY",100).nullable() val consumed: Column = bool("CONSUMED").default(false) - val lastCheckIn: Column = datetime("LAST_CHECK_IN").nullable() - val persistedAt: Column = datetime("PERSISTED_AT").defaultExpression(CurrentDateTime) + val lastCheckIn: Column = datetime("LAST_CHECK_IN").nullable() + val persistedAt: Column = datetime("PERSISTED_AT").defaultExpression(CurrentDateTime) } \ No newline at end of file diff --git a/shared/database/src/main/resources/application.yml b/shared/database/src/main/resources/application.yml new file mode 100644 index 00000000..b809f6ee --- /dev/null +++ b/shared/database/src/main/resources/application.yml @@ -0,0 +1,5 @@ +spring: + flyway: + enabled: true + locations: classpath:flyway + baseline-on-migrate: false \ No newline at end of file diff --git a/shared/common/src/main/resources/flyway/V1__create_events_table.sql b/shared/database/src/main/resources/flyway/V1__create_events_table.sql similarity index 100% rename from shared/common/src/main/resources/flyway/V1__create_events_table.sql rename to shared/database/src/main/resources/flyway/V1__create_events_table.sql diff --git a/shared/common/src/main/resources/flyway/V2__create_tasks_table.sql b/shared/database/src/main/resources/flyway/V2__create_tasks_table.sql similarity index 100% rename from shared/common/src/main/resources/flyway/V2__create_tasks_table.sql rename to shared/database/src/main/resources/flyway/V2__create_tasks_table.sql diff --git a/shared/common/src/main/resources/flyway/V3__create_file_registry_table.sql b/shared/database/src/main/resources/flyway/V3__create_file_registry_table.sql similarity index 100% rename from shared/common/src/main/resources/flyway/V3__create_file_registry_table.sql rename to shared/database/src/main/resources/flyway/V3__create_file_registry_table.sql diff --git a/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/TestBaseWithDatabase.kt b/shared/database/src/test/kotlin/no/iktdev/mediaprocessing/shared/database/TestBaseWithDatabase.kt similarity index 67% rename from shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/TestBaseWithDatabase.kt rename to shared/database/src/test/kotlin/no/iktdev/mediaprocessing/shared/database/TestBaseWithDatabase.kt index 19e1f29e..f3a4db5c 100644 --- a/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/TestBaseWithDatabase.kt +++ b/shared/database/src/test/kotlin/no/iktdev/mediaprocessing/shared/database/TestBaseWithDatabase.kt @@ -1,21 +1,29 @@ -package no.iktdev.mediaprocessing.shared.common +package no.iktdev.mediaprocessing.shared.database import com.fasterxml.jackson.databind.ObjectMapper import mu.KotlinLogging -import no.iktdev.mediaprocessing.shared.common.database.Access -import no.iktdev.mediaprocessing.shared.common.database.DatabaseTypes -import no.iktdev.mediaprocessing.shared.common.database.withTransaction +import no.iktdev.mediaprocessing.shared.common.TestBase +import no.iktdev.mediaprocessing.shared.database.config.DatasourceConfiguration import org.flywaydb.core.Flyway import org.jetbrains.exposed.sql.Database import org.jetbrains.exposed.sql.statements.jdbc.JdbcConnectionImpl import org.jetbrains.exposed.sql.transactions.TransactionManager import org.junit.jupiter.api.AfterAll -import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.api.extension.ExtendWith import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.test.context.junit.jupiter.SpringExtension import javax.sql.DataSource +@SpringBootTest( + classes = [DatabaseApplication::class, + DatasourceConfiguration::class], + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT +) +@ExtendWith(SpringExtension::class) @TestInstance(TestInstance.Lifecycle.PER_CLASS) abstract class TestBaseWithDatabase: TestBase() { val log = KotlinLogging.logger {} @@ -41,7 +49,7 @@ abstract class TestBaseWithDatabase: TestBase() { databaseName = "testdb", dbType = DatabaseTypes.H2 ) - database = Database.connect(dataSource) + database = Database.Companion.connect(dataSource) flyway = Flyway.configure() .dataSource(dataSource) .locations("classpath:flyway") @@ -53,7 +61,7 @@ abstract class TestBaseWithDatabase: TestBase() { withTransaction { - val jdbc = (TransactionManager.current().connection as JdbcConnectionImpl).connection + val jdbc = (TransactionManager.Companion.current().connection as JdbcConnectionImpl).connection val meta = jdbc.metaData val tableNames = listOf( @@ -65,7 +73,7 @@ abstract class TestBaseWithDatabase: TestBase() { } existingTables.forEach { (tableName, exists) -> - assertTrue(exists, "Table $tableName should exist after migration") + Assertions.assertTrue(exists, "Table $tableName should exist after migration") } log.info { "Found migrations: ${flyway.info().all().map { it.script }}" } @@ -75,7 +83,7 @@ abstract class TestBaseWithDatabase: TestBase() { @AfterAll fun clearDatabase() { flyway.clean() - TransactionManager.closeAndUnregister(database) + TransactionManager.Companion.closeAndUnregister(database) } -} +} \ No newline at end of file diff --git a/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/config/DatasourceConfiguration.kt b/shared/database/src/test/kotlin/no/iktdev/mediaprocessing/shared/database/config/DatasourceConfiguration.kt similarity index 84% rename from shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/config/DatasourceConfiguration.kt rename to shared/database/src/test/kotlin/no/iktdev/mediaprocessing/shared/database/config/DatasourceConfiguration.kt index 44704117..45387d60 100644 --- a/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/config/DatasourceConfiguration.kt +++ b/shared/database/src/test/kotlin/no/iktdev/mediaprocessing/shared/database/config/DatasourceConfiguration.kt @@ -1,9 +1,9 @@ -package no.iktdev.mediaprocessing.shared.common.config +package no.iktdev.mediaprocessing.shared.database.config import com.zaxxer.hikari.HikariConfig import com.zaxxer.hikari.HikariDataSource -import no.iktdev.mediaprocessing.shared.common.database.Access -import no.iktdev.mediaprocessing.shared.common.database.DatabaseTypes +import no.iktdev.mediaprocessing.shared.database.Access +import no.iktdev.mediaprocessing.shared.database.DatabaseTypes import org.springframework.boot.test.context.TestConfiguration import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Primary @@ -23,7 +23,7 @@ class DatasourceConfiguration { dbType = DatabaseTypes.H2 ) - val maxPoolSize: Int = 10 + val maxPoolSize = 10 val config = HikariConfig().apply { this.jdbcUrl = "jdbc:h2:mem:${access.databaseName};MODE=MySQL;DB_CLOSE_DELAY=-1" this.driverClassName = "org.h2.Driver"