diff --git a/build.gradle.kts b/build.gradle.kts index 265b3ef..5fe2ed2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -139,4 +139,7 @@ dependencies { // integrationTestCompile("org.seleniumhq.selenium:selenium-java:3.13.0") // integrationTestCompile("org.seleniumhq.selenium:selenium-remote-driver:3.13.0") + + implementation(project(":checklister-event")) + implementation(project(":checklister-eventsink-logger")) } diff --git a/checklister-event/build.gradle.kts b/checklister-event/build.gradle.kts new file mode 100644 index 0000000..6df66c0 --- /dev/null +++ b/checklister-event/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + `java-library` + kotlin("jvm") +} + +repositories { + mavenCentral() +} + +dependencies { + // Kotlin + implementation(kotlin("stdlib-jdk8")) +} \ No newline at end of file diff --git a/checklister-event/src/main/kotlin/cloud/cosmin/checklister/lib/event/Event.kt b/checklister-event/src/main/kotlin/cloud/cosmin/checklister/lib/event/Event.kt new file mode 100644 index 0000000..47c1521 --- /dev/null +++ b/checklister-event/src/main/kotlin/cloud/cosmin/checklister/lib/event/Event.kt @@ -0,0 +1,3 @@ +package cloud.cosmin.checklister.lib.event + +interface Event \ No newline at end of file diff --git a/checklister-event/src/main/kotlin/cloud/cosmin/checklister/lib/event/serializer/EventSerializer.kt b/checklister-event/src/main/kotlin/cloud/cosmin/checklister/lib/event/serializer/EventSerializer.kt new file mode 100644 index 0000000..27619b3 --- /dev/null +++ b/checklister-event/src/main/kotlin/cloud/cosmin/checklister/lib/event/serializer/EventSerializer.kt @@ -0,0 +1,7 @@ +package cloud.cosmin.checklister.lib.event.serializer + +import cloud.cosmin.checklister.lib.event.Event + +interface EventSerializer { + fun serialize(event: Event): ByteArray +} \ No newline at end of file diff --git a/checklister-event/src/main/kotlin/cloud/cosmin/checklister/lib/event/serializer/ToStringEventSerializer.kt b/checklister-event/src/main/kotlin/cloud/cosmin/checklister/lib/event/serializer/ToStringEventSerializer.kt new file mode 100644 index 0000000..9dd4aef --- /dev/null +++ b/checklister-event/src/main/kotlin/cloud/cosmin/checklister/lib/event/serializer/ToStringEventSerializer.kt @@ -0,0 +1,9 @@ +package cloud.cosmin.checklister.lib.event.serializer + +import cloud.cosmin.checklister.lib.event.Event + +class ToStringEventSerializer : EventSerializer { + override fun serialize(event: Event): ByteArray { + return event.toString().toByteArray() + } +} \ No newline at end of file diff --git a/checklister-event/src/main/kotlin/cloud/cosmin/checklister/lib/event/sink/EventSink.kt b/checklister-event/src/main/kotlin/cloud/cosmin/checklister/lib/event/sink/EventSink.kt new file mode 100644 index 0000000..4d317a0 --- /dev/null +++ b/checklister-event/src/main/kotlin/cloud/cosmin/checklister/lib/event/sink/EventSink.kt @@ -0,0 +1,7 @@ +package cloud.cosmin.checklister.lib.event.sink + +import cloud.cosmin.checklister.lib.event.Event + +interface EventSink { + fun accept(event: Event) +} \ No newline at end of file diff --git a/checklister-eventsink-logger/src/main/kotlin/cloud/cosmin/checklister/lib/eventsink/logger/LoggerEventSink.kt b/checklister-eventsink-logger/src/main/kotlin/cloud/cosmin/checklister/lib/eventsink/logger/LoggerEventSink.kt new file mode 100644 index 0000000..c1b53a7 --- /dev/null +++ b/checklister-eventsink-logger/src/main/kotlin/cloud/cosmin/checklister/lib/eventsink/logger/LoggerEventSink.kt @@ -0,0 +1,14 @@ +package cloud.cosmin.checklister.lib.eventsink.logger + +import cloud.cosmin.checklister.lib.event.Event +import cloud.cosmin.checklister.lib.event.serializer.EventSerializer +import cloud.cosmin.checklister.lib.event.sink.EventSink +import org.apache.logging.log4j.Logger + +class LoggerEventSink(private val serializer: EventSerializer, + private val log: Logger) : EventSink { + override fun accept(event: Event) { + val bytes = serializer.serialize(event) + log.info("Event: {}", String(bytes)) + } +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index b4b85ee..35fcf33 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1 +1,2 @@ -rootProject.name = "checklister" \ No newline at end of file +rootProject.name = "checklister" +include("checklister-event", "checklister-eventsink-logger") \ No newline at end of file diff --git a/src/main/kotlin/cloud/cosmin/checklister/ChecklisterApplication.kt b/src/main/kotlin/cloud/cosmin/checklister/ChecklisterApplication.kt index ba7818b..a909e7c 100644 --- a/src/main/kotlin/cloud/cosmin/checklister/ChecklisterApplication.kt +++ b/src/main/kotlin/cloud/cosmin/checklister/ChecklisterApplication.kt @@ -1,10 +1,22 @@ package cloud.cosmin.checklister +import cloud.cosmin.checklister.lib.event.serializer.ToStringEventSerializer +import cloud.cosmin.checklister.lib.event.sink.EventSink +import cloud.cosmin.checklister.lib.eventsink.logger.LoggerEventSink +import org.apache.logging.log4j.LogManager import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication +import org.springframework.context.annotation.Bean @SpringBootApplication -class ChecklisterApplication +class ChecklisterApplication { + @Bean + fun eventSink(): EventSink { + val serializer = ToStringEventSerializer() + val logger = LogManager.getLogger(LoggerEventSink::class.java) + return LoggerEventSink(serializer, logger) + } +} fun main(args: Array) { SpringApplication.run(ChecklisterApplication::class.java, *args) diff --git a/src/main/kotlin/cloud/cosmin/checklister/service/event/Event.kt b/src/main/kotlin/cloud/cosmin/checklister/service/event/Event.kt deleted file mode 100644 index b6092ba..0000000 --- a/src/main/kotlin/cloud/cosmin/checklister/service/event/Event.kt +++ /dev/null @@ -1,5 +0,0 @@ -package cloud.cosmin.checklister.service.event - -interface Event { - fun serialize(): ByteArray -} \ No newline at end of file diff --git a/src/main/kotlin/cloud/cosmin/checklister/service/event/EventSerializer.kt b/src/main/kotlin/cloud/cosmin/checklister/service/event/EventSerializer.kt deleted file mode 100644 index 9ec58b6..0000000 --- a/src/main/kotlin/cloud/cosmin/checklister/service/event/EventSerializer.kt +++ /dev/null @@ -1,5 +0,0 @@ -package cloud.cosmin.checklister.service.event - -interface EventSerializer { - fun serialize(event: Event): ByteArray -} \ No newline at end of file diff --git a/src/main/kotlin/cloud/cosmin/checklister/service/event/EventSink.kt b/src/main/kotlin/cloud/cosmin/checklister/service/event/EventSink.kt deleted file mode 100644 index f589b0b..0000000 --- a/src/main/kotlin/cloud/cosmin/checklister/service/event/EventSink.kt +++ /dev/null @@ -1,5 +0,0 @@ -package cloud.cosmin.checklister.service.event - -interface EventSink { - fun accept(event: Event) -} \ No newline at end of file diff --git a/src/main/kotlin/cloud/cosmin/checklister/service/event/ItemEvent.kt b/src/main/kotlin/cloud/cosmin/checklister/service/event/ItemEvent.kt index c7670e8..c0c8d21 100644 --- a/src/main/kotlin/cloud/cosmin/checklister/service/event/ItemEvent.kt +++ b/src/main/kotlin/cloud/cosmin/checklister/service/event/ItemEvent.kt @@ -2,6 +2,7 @@ package cloud.cosmin.checklister.service.event import cloud.cosmin.checklister.dto.ItemGetDto import cloud.cosmin.checklister.dto.ListGetDto +import cloud.cosmin.checklister.lib.event.Event import cloud.cosmin.checklister.service.RankOperation enum class ListEventType { @@ -12,24 +13,17 @@ enum class ItemEventType { CREATE, UPDATE, RANK } -abstract class AbstractEvent : Event { - private val eventSerializer = ToStringEventSerializer() - override fun serialize(): ByteArray { - return eventSerializer.serialize(this) - } -} - -data class ItemCreateEvent(val item: ItemGetDto) : AbstractEvent() +data class ItemCreateEvent(val item: ItemGetDto) : Event data class ItemUpdateEvent( val before: ItemGetDto, - val after: ItemGetDto) : AbstractEvent() + val after: ItemGetDto) : Event data class ItemRankEvent( val op: RankOperation, val before: ItemGetDto, - val after: ItemGetDto) : AbstractEvent() + val after: ItemGetDto) : Event -data class ListCreateEvent(val item: ListGetDto) : AbstractEvent() +data class ListCreateEvent(val item: ListGetDto) : Event -data class ListUpdateEvent(val before: ListGetDto, val after: ListGetDto) : AbstractEvent() \ No newline at end of file +data class ListUpdateEvent(val before: ListGetDto, val after: ListGetDto) : Event \ No newline at end of file diff --git a/src/main/kotlin/cloud/cosmin/checklister/service/event/ItemEventService.kt b/src/main/kotlin/cloud/cosmin/checklister/service/event/ItemEventService.kt index d797f2f..3afeb19 100644 --- a/src/main/kotlin/cloud/cosmin/checklister/service/event/ItemEventService.kt +++ b/src/main/kotlin/cloud/cosmin/checklister/service/event/ItemEventService.kt @@ -1,6 +1,7 @@ package cloud.cosmin.checklister.service.event import cloud.cosmin.checklister.dto.ItemGetDto +import cloud.cosmin.checklister.lib.event.sink.EventSink import cloud.cosmin.checklister.service.RankOperation import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service diff --git a/src/main/kotlin/cloud/cosmin/checklister/service/event/ListEventService.kt b/src/main/kotlin/cloud/cosmin/checklister/service/event/ListEventService.kt index edc4180..70681d3 100644 --- a/src/main/kotlin/cloud/cosmin/checklister/service/event/ListEventService.kt +++ b/src/main/kotlin/cloud/cosmin/checklister/service/event/ListEventService.kt @@ -1,6 +1,7 @@ package cloud.cosmin.checklister.service.event import cloud.cosmin.checklister.dto.ListGetDto +import cloud.cosmin.checklister.lib.event.sink.EventSink import cloud.cosmin.checklister.service.ListEvents import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service diff --git a/src/main/kotlin/cloud/cosmin/checklister/service/event/ToStringEventSerializer.kt b/src/main/kotlin/cloud/cosmin/checklister/service/event/ToStringEventSerializer.kt deleted file mode 100644 index 668d499..0000000 --- a/src/main/kotlin/cloud/cosmin/checklister/service/event/ToStringEventSerializer.kt +++ /dev/null @@ -1,7 +0,0 @@ -package cloud.cosmin.checklister.service.event - -class ToStringEventSerializer : EventSerializer { - override fun serialize(event: Event): ByteArray { - return event.toString().toByteArray(Charsets.UTF_8) - } -} \ No newline at end of file diff --git a/src/main/kotlin/cloud/cosmin/checklister/service/event/eventsink/LoggerEventSink.kt b/src/main/kotlin/cloud/cosmin/checklister/service/event/eventsink/LoggerEventSink.kt deleted file mode 100644 index ff79bdb..0000000 --- a/src/main/kotlin/cloud/cosmin/checklister/service/event/eventsink/LoggerEventSink.kt +++ /dev/null @@ -1,15 +0,0 @@ -package cloud.cosmin.checklister.service.event.eventsink - -import cloud.cosmin.checklister.service.event.EventSink -import cloud.cosmin.checklister.service.event.Event -import org.apache.logging.log4j.LogManager -import org.springframework.stereotype.Service - -@Service -class LoggerEventSink : EventSink { - private val log = LogManager.getLogger(javaClass) - - override fun accept(event: Event) { - log.info("Event: {}", String(event.serialize())) - } -} \ No newline at end of file diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 4d13a13..b836d21 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -9,6 +9,6 @@ - + \ No newline at end of file diff --git a/src/test/kotlin/cloud/cosmin/checklister/service/event/ItemEventServiceTest.kt b/src/test/kotlin/cloud/cosmin/checklister/service/event/ItemEventServiceTest.kt index 57690de..3147e24 100644 --- a/src/test/kotlin/cloud/cosmin/checklister/service/event/ItemEventServiceTest.kt +++ b/src/test/kotlin/cloud/cosmin/checklister/service/event/ItemEventServiceTest.kt @@ -1,6 +1,7 @@ package cloud.cosmin.checklister.service.event import cloud.cosmin.checklister.dto.ItemGetDto +import cloud.cosmin.checklister.lib.event.sink.EventSink import cloud.cosmin.checklister.service.RankOperation import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test