diff --git a/edge-integration/build.gradle.kts b/edge-integration/build.gradle.kts new file mode 100644 index 0000000..1ee36da --- /dev/null +++ b/edge-integration/build.gradle.kts @@ -0,0 +1,7 @@ +dependencies { + implementation(rootProject.libs.springFramework.context) + implementation(rootProject.libs.ktor.client.cio) + implementation(rootProject.libs.ktor.client.core) + + testImplementation(rootProject.libs.ktor.client.mock) +} diff --git a/edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/Client.kt b/edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/Client.kt new file mode 100644 index 0000000..e0e0f04 --- /dev/null +++ b/edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/Client.kt @@ -0,0 +1,12 @@ +package com.github.dannecron.demo.edgeintegration.client + +import com.github.dannecron.demo.edgeintegration.client.dto.ImagesResponse +import com.github.dannecron.demo.edgeintegration.client.exceptions.RequestException + +interface Client { + @Throws(RequestException::class) + fun getCategories(): Set + + @Throws(RequestException::class) + fun getImages(category: String, amount: Int): ImagesResponse +} diff --git a/src/main/kotlin/com/github/dannecron/demo/services/neko/ClientImpl.kt b/edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/ClientImpl.kt similarity index 68% rename from src/main/kotlin/com/github/dannecron/demo/services/neko/ClientImpl.kt rename to edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/ClientImpl.kt index 9d0b75e..ce9c129 100644 --- a/src/main/kotlin/com/github/dannecron/demo/services/neko/ClientImpl.kt +++ b/edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/ClientImpl.kt @@ -1,16 +1,18 @@ -package com.github.dannecron.demo.services.neko +package com.github.dannecron.demo.edgeintegration.client -import com.github.dannecron.demo.services.neko.dto.CategoryFormat -import com.github.dannecron.demo.services.neko.dto.ImagesResponse -import com.github.dannecron.demo.services.neko.exceptions.RequestException -import io.ktor.client.* -import io.ktor.client.engine.* -import io.ktor.client.request.* -import io.ktor.client.statement.* -import io.ktor.http.* +import com.github.dannecron.demo.edgeintegration.client.dto.CategoryFormat +import com.github.dannecron.demo.edgeintegration.client.dto.ImagesResponse +import com.github.dannecron.demo.edgeintegration.client.exceptions.RequestException +import io.ktor.client.HttpClient +import io.ktor.client.engine.HttpClientEngine +import io.ktor.client.request.get +import io.ktor.client.statement.bodyAsText +import io.ktor.http.path import kotlinx.coroutines.runBlocking import kotlinx.serialization.json.Json +import org.springframework.stereotype.Service +@Service class ClientImpl( engine: HttpClientEngine, private val baseUrl: String, diff --git a/src/main/kotlin/com/github/dannecron/demo/services/neko/dto/CategoryFormat.kt b/edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/dto/CategoryFormat.kt similarity index 64% rename from src/main/kotlin/com/github/dannecron/demo/services/neko/dto/CategoryFormat.kt rename to edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/dto/CategoryFormat.kt index 875cd74..5045dba 100644 --- a/src/main/kotlin/com/github/dannecron/demo/services/neko/dto/CategoryFormat.kt +++ b/edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/dto/CategoryFormat.kt @@ -1,4 +1,4 @@ -package com.github.dannecron.demo.services.neko.dto +package com.github.dannecron.demo.edgeintegration.client.dto import kotlinx.serialization.Serializable diff --git a/src/main/kotlin/com/github/dannecron/demo/services/neko/dto/Image.kt b/edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/dto/Image.kt similarity index 86% rename from src/main/kotlin/com/github/dannecron/demo/services/neko/dto/Image.kt rename to edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/dto/Image.kt index b345ba1..bba1907 100644 --- a/src/main/kotlin/com/github/dannecron/demo/services/neko/dto/Image.kt +++ b/edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/dto/Image.kt @@ -1,4 +1,4 @@ -package com.github.dannecron.demo.services.neko.dto +package com.github.dannecron.demo.edgeintegration.client.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/src/main/kotlin/com/github/dannecron/demo/services/neko/dto/ImagesResponse.kt b/edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/dto/ImagesResponse.kt similarity index 65% rename from src/main/kotlin/com/github/dannecron/demo/services/neko/dto/ImagesResponse.kt rename to edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/dto/ImagesResponse.kt index 3a93403..617932c 100644 --- a/src/main/kotlin/com/github/dannecron/demo/services/neko/dto/ImagesResponse.kt +++ b/edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/dto/ImagesResponse.kt @@ -1,4 +1,4 @@ -package com.github.dannecron.demo.services.neko.dto +package com.github.dannecron.demo.edgeintegration.client.dto import kotlinx.serialization.Serializable diff --git a/src/main/kotlin/com/github/dannecron/demo/services/neko/exceptions/RequestException.kt b/edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/exceptions/RequestException.kt similarity index 50% rename from src/main/kotlin/com/github/dannecron/demo/services/neko/exceptions/RequestException.kt rename to edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/exceptions/RequestException.kt index 707aa07..c00784c 100644 --- a/src/main/kotlin/com/github/dannecron/demo/services/neko/exceptions/RequestException.kt +++ b/edge-integration/src/main/kotlin/com/github/dannecron/demo/edgeintegration/client/exceptions/RequestException.kt @@ -1,3 +1,3 @@ -package com.github.dannecron.demo.services.neko.exceptions +package com.github.dannecron.demo.edgeintegration.client.exceptions class RequestException(message: String): RuntimeException(message) diff --git a/src/test/kotlin/com/github/dannecron/demo/services/neko/ClientImplTest.kt b/edge-integration/src/test/kotlin/com/github/dannecron/demo/edgeintegration/client/ClientImplTest.kt similarity index 90% rename from src/test/kotlin/com/github/dannecron/demo/services/neko/ClientImplTest.kt rename to edge-integration/src/test/kotlin/com/github/dannecron/demo/edgeintegration/client/ClientImplTest.kt index 79479c2..865d1bf 100644 --- a/src/test/kotlin/com/github/dannecron/demo/services/neko/ClientImplTest.kt +++ b/edge-integration/src/test/kotlin/com/github/dannecron/demo/edgeintegration/client/ClientImplTest.kt @@ -1,14 +1,21 @@ -package com.github.dannecron.demo.services.neko +package com.github.dannecron.demo.edgeintegration.client -import com.github.dannecron.demo.BaseUnitTest -import com.github.dannecron.demo.services.neko.exceptions.RequestException -import io.ktor.client.engine.mock.* -import io.ktor.http.* -import io.ktor.utils.io.* +import com.github.dannecron.demo.edgeintegration.client.exceptions.RequestException +import io.ktor.client.engine.mock.MockEngine +import io.ktor.client.engine.mock.respond +import io.ktor.http.HttpHeaders +import io.ktor.http.HttpStatusCode +import io.ktor.http.headersOf +import io.ktor.utils.io.ByteReadChannel import org.junit.jupiter.api.assertThrows -import kotlin.test.* +import kotlin.test.Test +import kotlin.test.assertContains +import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertNull +import kotlin.test.assertTrue -class ClientImplTest: BaseUnitTest() { +class ClientImplTest { @Test fun getCategories_success() { val mockEngine = MockEngine { req -> diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 60d2243..afa635d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,19 +23,21 @@ micrometer-registry-prometheus = { module = "io.micrometer:micrometer-registry-p mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version = "5.4.0" } otel-exporter = { module = "io.opentelemetry:opentelemetry-exporter-otlp" } postgres = { module = "org.postgresql:postgresql", version = "42.7.5" } -spring-aspects = { module = "org.springframework:spring-aspects" } -spring-boot-devtools = { module = "org.springframework.boot:spring-boot-devtools" } -spring-boot-starter-actuator = { module = "org.springframework.boot:spring-boot-starter-actuator", version.ref = "spring-boot" } -spring-boot-starter-actuatorAutoconfigure = { module = "org.springframework.boot:spring-boot-actuator-autoconfigure" } -spring-boot-starter-jdbc = { module = "org.springframework.boot:spring-boot-starter-data-jdbc", version.ref = "spring-boot"} -spring-boot-starter-mustache = { module = "org.springframework.boot:spring-boot-starter-mustache", version.ref = "spring-boot" } -spring-boot-starter-test = { module = "org.springframework.boot:spring-boot-starter-test", version.ref = "spring-boot" } -spring-boot-starter-validation = { module = "org.springframework.boot:spring-boot-starter-validation", version.ref = "spring-boot" } -spring-boot-starter-web = { module = "org.springframework.boot:spring-boot-starter-web", version.ref = "spring-boot" } -spring-cloud-starter-streamKafka = { module = "org.springframework.cloud:spring-cloud-starter-stream-kafka", version.ref = "spring-cloud"} -spring-cloud-stream = { module = "org.springframework.cloud:spring-cloud-stream", version.ref = "spring-cloud"} -spring-cloud-streamTestBinder = { module = "org.springframework.cloud:spring-cloud-stream-test-binder", version.ref = "spring-cloud"} -spring-doc-openapi-starter = "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0" +springFramework-context = { module = "org.springframework:spring-context"} +springFramework-aspects = { module = "org.springframework:spring-aspects" } +springBoot-devtools = { module = "org.springframework.boot:spring-boot-devtools" } +springBoot-starter-actuator = { module = "org.springframework.boot:spring-boot-starter-actuator", version.ref = "spring-boot" } +springBoot-starter-actuatorAutoconfigure = { module = "org.springframework.boot:spring-boot-actuator-autoconfigure" } +springBoot-starter-jdbc = { module = "org.springframework.boot:spring-boot-starter-data-jdbc", version.ref = "spring-boot"} +springBoot-starter-mustache = { module = "org.springframework.boot:spring-boot-starter-mustache", version.ref = "spring-boot" } +springBoot-starter-test = { module = "org.springframework.boot:spring-boot-starter-test", version.ref = "spring-boot" } +springBoot-starter-validation = { module = "org.springframework.boot:spring-boot-starter-validation", version.ref = "spring-boot" } +springBoot-starter-web = { module = "org.springframework.boot:spring-boot-starter-web", version.ref = "spring-boot" } +springCloud-starter-streamKafka = { module = "org.springframework.cloud:spring-cloud-starter-stream-kafka", version.ref = "spring-cloud"} +springCloud-stream = { module = "org.springframework.cloud:spring-cloud-stream", version.ref = "spring-cloud"} +springCloud-streamTestBinder = { module = "org.springframework.cloud:spring-cloud-stream-test-binder", version.ref = "spring-cloud"} +springData-commons = { module = "org.springframework.data:spring-data-commons", version.ref = "spring-boot" } +springDoc-openapi-starter = "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0" testcontainers = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers"} testcontainers-junit-jupiter = { module = "org.testcontainers:junit-jupiter", version.ref = "testcontainers"} testcontainers-postgresql = { module = "org.testcontainers:postgresql", version.ref = "testcontainers"} diff --git a/src/main/kotlin/com/github/dannecron/demo/services/neko/Client.kt b/src/main/kotlin/com/github/dannecron/demo/services/neko/Client.kt deleted file mode 100644 index ceb1438..0000000 --- a/src/main/kotlin/com/github/dannecron/demo/services/neko/Client.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.github.dannecron.demo.services.neko - -import com.github.dannecron.demo.services.neko.dto.ImagesResponse -import com.github.dannecron.demo.services.neko.exceptions.RequestException -import org.springframework.stereotype.Service - -@Service -interface Client { - @Throws(RequestException::class) - fun getCategories(): Set - - @Throws(RequestException::class) - fun getImages(category: String, amount: Int): ImagesResponse -}