Fixes for readback
This commit is contained in:
parent
5683d23db9
commit
0740242232
@ -1,9 +1,13 @@
|
|||||||
package no.iktdev.mediaprocessing.shared.common.contract
|
package no.iktdev.mediaprocessing.shared.common.contract
|
||||||
|
|
||||||
|
import com.google.gson.*
|
||||||
import com.google.gson.reflect.TypeToken
|
import com.google.gson.reflect.TypeToken
|
||||||
import mu.KotlinLogging
|
import mu.KotlinLogging
|
||||||
|
import no.iktdev.eventi.core.LocalDateTimeAdapter
|
||||||
import no.iktdev.eventi.core.WGson
|
import no.iktdev.eventi.core.WGson
|
||||||
import no.iktdev.mediaprocessing.shared.common.contract.data.*
|
import no.iktdev.mediaprocessing.shared.common.contract.data.*
|
||||||
|
import java.lang.reflect.Type
|
||||||
|
import java.time.LocalDateTime
|
||||||
|
|
||||||
private val log = KotlinLogging.logger {}
|
private val log = KotlinLogging.logger {}
|
||||||
|
|
||||||
@ -11,29 +15,31 @@ private val log = KotlinLogging.logger {}
|
|||||||
enum class Events(val event: String) {
|
enum class Events(val event: String) {
|
||||||
ProcessStarted ("event:media-process:started"),
|
ProcessStarted ("event:media-process:started"),
|
||||||
|
|
||||||
ReadStreamPerformed ("event:media-read-stream:performed", ),
|
ReadStreamPerformed ("event:media-read-stream:performed" ),
|
||||||
ParseStreamPerformed ("event:media-parse-stream:performed", ),
|
ParseStreamPerformed ("event:media-parse-stream:performed" ),
|
||||||
ReadBaseInfoPerformed ("event:media-read-base-info:performed", ),
|
ReadBaseInfoPerformed ("event:media-read-base-info:performed" ),
|
||||||
MetadataSearchPerformed ("event:media-metadata-search:performed", ),
|
MetadataSearchPerformed ("event:media-metadata-search:performed" ),
|
||||||
ReadOutNameAndType ("event:media-read-out-name-and-type:performed", ),
|
ReadOutNameAndType ("event:media-read-out-name-and-type:performed" ),
|
||||||
ReadOutCover ("event:media-read-out-cover:performed", ),
|
ReadOutCover ("event:media-read-out-cover:performed" ),
|
||||||
ParameterEncodeCreated ("event:media-encode-parameter:created", ),
|
ParameterEncodeCreated ("event:media-encode-parameter:created" ),
|
||||||
ParameterExtractCreated ("event:media-extract-parameter:created", ),
|
ParameterExtractCreated ("event:media-extract-parameter:created" ),
|
||||||
WorkProceedPermitted ("event:media-work-proceed:permitted", ),
|
WorkProceedPermitted ("event:media-work-proceed:permitted" ),
|
||||||
WorkEncodeCreated ("event:work-encode:created", ),
|
WorkEncodeCreated ("event:work-encode:created" ),
|
||||||
WorkExtractCreated ("event:work-extract:created", ),
|
WorkExtractCreated ("event:work-extract:created" ),
|
||||||
WorkConvertCreated ("event:work-convert:created", ),
|
WorkConvertCreated ("event:work-convert:created" ),
|
||||||
WorkEncodePerformed ("event:work-encode:performed", ),
|
WorkEncodePerformed ("event:work-encode:performed" ),
|
||||||
WorkExtractPerformed ("event:work-extract:performed", ),
|
WorkExtractPerformed ("event:work-extract:performed" ),
|
||||||
WorkConvertPerformed ("event:work-convert:performed", ),
|
WorkConvertPerformed ("event:work-convert:performed" ),
|
||||||
WorkDownloadCoverPerformed ("event:work-download-cover:performed", ),
|
WorkDownloadCoverPerformed ("event:work-download-cover:performed" ),
|
||||||
PersistContentPerformed ("event:media-persist:completed", ),
|
PersistContentPerformed ("event:media-persist:completed" ),
|
||||||
ProcessCompleted ("event:media-process:completed", ),
|
ProcessCompleted ("event:media-process:completed" ),
|
||||||
|
|
||||||
|
Unknown ("")
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun toEvent(event: String): Events? {
|
fun toEvent(event: String): Events {
|
||||||
return Events.entries.find { it.event == event }
|
return Events.entries.find { it.event == event } ?: Unknown
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -70,11 +76,14 @@ fun Events.toEventClass(): Class<out Event> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun String.jsonToEvent(eventType: String): Event {
|
fun String.jsonToEvent(eventType: String): Event {
|
||||||
val clazz = Events.toEvent(eventType)?.toEventClass()
|
val event = Events.toEvent(eventType)
|
||||||
|
return EventJson.fromJson(this, event)
|
||||||
|
|
||||||
|
/*val clazz = Events.toEvent(eventType)?.toEventClass()
|
||||||
clazz.let { eventClass ->
|
clazz.let { eventClass ->
|
||||||
try {
|
try {
|
||||||
val type = TypeToken.getParameterized(eventClass).type
|
val type = TypeToken.getParameterized(eventClass).type
|
||||||
return WGson.gson.fromJson<Event>(this, type)
|
return WGson.gson.fromJson(this, type)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
}
|
}
|
||||||
@ -90,5 +99,44 @@ fun String.jsonToEvent(eventType: String): Event {
|
|||||||
// Default
|
// Default
|
||||||
val type = object : TypeToken<Event>() {}.type
|
val type = object : TypeToken<Event>() {}.type
|
||||||
log.error { "Failed to convert event: $eventType and data: $this to proper type!" }
|
log.error { "Failed to convert event: $eventType and data: $this to proper type!" }
|
||||||
return WGson.gson.fromJson<Event>(this, type)
|
return WGson.gson.fromJson(this, type)*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object EventJson {
|
||||||
|
private val gson = GsonBuilder()
|
||||||
|
.registerTypeAdapter(LocalDateTime::class.java, LocalDateTimeAdapter())
|
||||||
|
.create()
|
||||||
|
fun fromJson(json: String, event: Events): Event {
|
||||||
|
val gson = GsonBuilder()
|
||||||
|
.registerTypeAdapter(LocalDateTime::class.java, LocalDateTimeAdapter())
|
||||||
|
.registerTypeAdapter(Event::class.java, EventDeserializer(event))
|
||||||
|
.create()
|
||||||
|
return gson.fromJson(json, Event::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun toJson(data: Any?): String {
|
||||||
|
return gson.toJson(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
class EventDeserializer(private val eventType: Events) : JsonDeserializer<Event> {
|
||||||
|
override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Event {
|
||||||
|
// 🔥 Finn riktig klasse basert på eventType (som kommer eksternt fra databasen)
|
||||||
|
val eventClass = eventType.toEventClass()
|
||||||
|
|
||||||
|
// Deserialiser objektet til riktig klasse
|
||||||
|
val event = context.deserialize<Event>(json, eventClass)
|
||||||
|
|
||||||
|
// 🔥 Sett eventType eksplisitt etter deserialisering
|
||||||
|
if (event is Event) {
|
||||||
|
event::class.java.getDeclaredField("eventType").apply {
|
||||||
|
isAccessible = true
|
||||||
|
set(event, eventType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return event
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@ -14,6 +14,8 @@ class DatabaseDeserializerTest {
|
|||||||
val data = """{"metadata":{"eventId":"45e92856-37a6-4266-81cd-a8cf16dd7eb2","referenceId":"a42bf0a4-d31d-4715-8e4d-1432d52f9786","status":"Success","created":"2025-02-10T21:35:52.437791666","source":"Coordinator"},"data":{"type":"FLOW","operations":["ENCODE","EXTRACT","CONVERT"],"file":"/potato"},"eventType":"EventMediaProcessStarted"}"""
|
val data = """{"metadata":{"eventId":"45e92856-37a6-4266-81cd-a8cf16dd7eb2","referenceId":"a42bf0a4-d31d-4715-8e4d-1432d52f9786","status":"Success","created":"2025-02-10T21:35:52.437791666","source":"Coordinator"},"data":{"type":"FLOW","operations":["ENCODE","EXTRACT","CONVERT"],"file":"/potato"},"eventType":"EventMediaProcessStarted"}"""
|
||||||
val result = data.jsonToEvent("event:media-process:started")
|
val result = data.jsonToEvent("event:media-process:started")
|
||||||
assertThat(result.data!!.javaClass).hasSameClassAs(StartEventData::class.java)
|
assertThat(result.data!!.javaClass).hasSameClassAs(StartEventData::class.java)
|
||||||
|
assertThat(result.eventType).isNotNull()
|
||||||
|
assertThat(result.eventType).isEqualTo(Events.ProcessStarted)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user