Fixes for readback
This commit is contained in:
parent
5683d23db9
commit
0740242232
@ -1,9 +1,13 @@
|
||||
package no.iktdev.mediaprocessing.shared.common.contract
|
||||
|
||||
import com.google.gson.*
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import mu.KotlinLogging
|
||||
import no.iktdev.eventi.core.LocalDateTimeAdapter
|
||||
import no.iktdev.eventi.core.WGson
|
||||
import no.iktdev.mediaprocessing.shared.common.contract.data.*
|
||||
import java.lang.reflect.Type
|
||||
import java.time.LocalDateTime
|
||||
|
||||
private val log = KotlinLogging.logger {}
|
||||
|
||||
@ -11,29 +15,31 @@ private val log = KotlinLogging.logger {}
|
||||
enum class Events(val event: String) {
|
||||
ProcessStarted ("event:media-process:started"),
|
||||
|
||||
ReadStreamPerformed ("event:media-read-stream:performed", ),
|
||||
ParseStreamPerformed ("event:media-parse-stream:performed", ),
|
||||
ReadBaseInfoPerformed ("event:media-read-base-info:performed", ),
|
||||
MetadataSearchPerformed ("event:media-metadata-search:performed", ),
|
||||
ReadOutNameAndType ("event:media-read-out-name-and-type:performed", ),
|
||||
ReadOutCover ("event:media-read-out-cover:performed", ),
|
||||
ParameterEncodeCreated ("event:media-encode-parameter:created", ),
|
||||
ParameterExtractCreated ("event:media-extract-parameter:created", ),
|
||||
WorkProceedPermitted ("event:media-work-proceed:permitted", ),
|
||||
WorkEncodeCreated ("event:work-encode:created", ),
|
||||
WorkExtractCreated ("event:work-extract:created", ),
|
||||
WorkConvertCreated ("event:work-convert:created", ),
|
||||
WorkEncodePerformed ("event:work-encode:performed", ),
|
||||
WorkExtractPerformed ("event:work-extract:performed", ),
|
||||
WorkConvertPerformed ("event:work-convert:performed", ),
|
||||
WorkDownloadCoverPerformed ("event:work-download-cover:performed", ),
|
||||
PersistContentPerformed ("event:media-persist:completed", ),
|
||||
ProcessCompleted ("event:media-process:completed", ),
|
||||
ReadStreamPerformed ("event:media-read-stream:performed" ),
|
||||
ParseStreamPerformed ("event:media-parse-stream:performed" ),
|
||||
ReadBaseInfoPerformed ("event:media-read-base-info:performed" ),
|
||||
MetadataSearchPerformed ("event:media-metadata-search:performed" ),
|
||||
ReadOutNameAndType ("event:media-read-out-name-and-type:performed" ),
|
||||
ReadOutCover ("event:media-read-out-cover:performed" ),
|
||||
ParameterEncodeCreated ("event:media-encode-parameter:created" ),
|
||||
ParameterExtractCreated ("event:media-extract-parameter:created" ),
|
||||
WorkProceedPermitted ("event:media-work-proceed:permitted" ),
|
||||
WorkEncodeCreated ("event:work-encode:created" ),
|
||||
WorkExtractCreated ("event:work-extract:created" ),
|
||||
WorkConvertCreated ("event:work-convert:created" ),
|
||||
WorkEncodePerformed ("event:work-encode:performed" ),
|
||||
WorkExtractPerformed ("event:work-extract:performed" ),
|
||||
WorkConvertPerformed ("event:work-convert:performed" ),
|
||||
WorkDownloadCoverPerformed ("event:work-download-cover:performed" ),
|
||||
PersistContentPerformed ("event:media-persist:completed" ),
|
||||
ProcessCompleted ("event:media-process:completed" ),
|
||||
|
||||
Unknown ("")
|
||||
;
|
||||
|
||||
companion object {
|
||||
fun toEvent(event: String): Events? {
|
||||
return Events.entries.find { it.event == event }
|
||||
fun toEvent(event: String): Events {
|
||||
return Events.entries.find { it.event == event } ?: Unknown
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -70,11 +76,14 @@ fun Events.toEventClass(): Class<out 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 ->
|
||||
try {
|
||||
val type = TypeToken.getParameterized(eventClass).type
|
||||
return WGson.gson.fromJson<Event>(this, type)
|
||||
return WGson.gson.fromJson(this, type)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
@ -90,5 +99,44 @@ fun String.jsonToEvent(eventType: String): Event {
|
||||
// Default
|
||||
val type = object : TypeToken<Event>() {}.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 result = data.jsonToEvent("event:media-process:started")
|
||||
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