Refact network model (#123)

* refact: [NETWORK] model with error

* refact: [NETWORK] model with error

* refact: [NETWORK] model with error

* refact: [NETWORK] model with error

* refact: [NETWORK] model with error

* refact

* merged with main

---------

Co-authored-by: Florent Champigny <florent@bere.al>
This commit is contained in:
Florent CHAMPIGNY 2025-08-21 10:25:03 +02:00 committed by GitHub
parent db3c8a118c
commit 35d896af23
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
31 changed files with 571 additions and 504 deletions

View file

@ -4,6 +4,7 @@ import kotlinx.serialization.json.Json
internal inline fun <reified T> Json.safeDecodeFromString(data: String): T? = try {
decodeFromString(data)
} catch (e: Throwable) {
} catch (t: Throwable) {
t.printStackTrace()
null
}

View file

@ -8,7 +8,6 @@ import io.github.openflocon.data.core.network.graphql.model.GraphQlRequestBody
import io.github.openflocon.data.core.network.graphql.model.GraphQlResponseBody
import io.github.openflocon.domain.network.models.BadQualityConfigDomainModel
import io.github.openflocon.domain.network.models.FloconNetworkCallDomainModel
import io.github.openflocon.domain.network.models.FloconNetworkRequestDomainModel
import io.github.openflocon.domain.network.models.MockNetworkDomainModel
import kotlinx.serialization.json.Json
import kotlin.uuid.ExperimentalUuidApi
@ -34,7 +33,8 @@ fun toDomain(decoded: FloconNetworkRequestDataModel): FloconNetworkCallDomainMod
val graphQl = extractGraphQl(decoded)
val callId = decoded.floconCallId!!
val networkRequest = FloconNetworkRequestDomainModel(
val request = FloconNetworkCallDomainModel.Request(
url = decoded.url!!,
startTime = decoded.startTime!!,
method = decoded.method!!,
@ -42,33 +42,21 @@ fun toDomain(decoded: FloconNetworkRequestDataModel): FloconNetworkCallDomainMod
body = decoded.requestBody,
byteSize = decoded.requestSize ?: 0L,
isMocked = decoded.isMocked ?: false,
specificInfos = when {
graphQl != null -> FloconNetworkCallDomainModel.Request.SpecificInfos.GraphQl(
query = graphQl.request.requestBody.query,
operationType = graphQl.request.operationType,
)
decoded.floconNetworkType == "grpc" -> FloconNetworkCallDomainModel.Request.SpecificInfos.Grpc
else -> FloconNetworkCallDomainModel.Request.SpecificInfos.Http
}
)
when {
graphQl != null -> FloconNetworkCallDomainModel.GraphQl(
callId = callId,
request = FloconNetworkCallDomainModel.GraphQl.Request(
query = graphQl.request.queryName ?: "anonymous",
operationType = graphQl.request.operationType,
networkRequest = networkRequest,
),
response = null,
)
decoded.floconNetworkType == "grpc" -> FloconNetworkCallDomainModel.Grpc(
callId = callId,
networkRequest = networkRequest,
response = null,
)
// decoded.floconNetworkType == "http"
else -> {
FloconNetworkCallDomainModel.Http(
callId = callId,
networkRequest = networkRequest,
response = null,
)
}
}
FloconNetworkCallDomainModel(
callId = callId,
request = request,
response = null, // for now it's null
)
} catch (t: Throwable) {
t.printStackTrace()
null

View file

@ -1,7 +1,7 @@
package com.flocon.data.remote.network.models
import io.github.openflocon.domain.network.models.FloconNetworkCallDomainModel
import io.github.openflocon.domain.network.models.FloconNetworkCallIdDomainModel
import io.github.openflocon.domain.network.models.FloconNetworkResponseDomainModel
import io.github.openflocon.domain.network.models.FloconNetworkResponseOnlyDomainModel
import kotlinx.serialization.Serializable
@ -37,31 +37,41 @@ data class FloconNetworkResponseDataModel(
val responseHeaders: Map<String, String>? = null,
val responseSize: Long? = null,
val responseGrpcStatus: String? = null,
val responseError: String? = null,
)
internal fun FloconNetworkResponseDataModel.toDomain(): FloconNetworkResponseOnlyDomainModel? {
return try {
val callId = floconCallId!!
val networkResponse = FloconNetworkResponseDomainModel(
durationMs = durationMs ?: 0.0,
body = responseBody,
byteSize = responseSize ?: 0L,
headers = responseHeaders.orEmpty(),
contentType = responseContentType,
)
when (floconNetworkType) {
"grpc" -> FloconNetworkResponseOnlyDomainModel.Grpc(
floconCallId = callId,
networkResponse = networkResponse,
grpcStatus = responseGrpcStatus!!,
val durationMs = durationMs ?: 0.0
val response = if (responseError != null) {
FloconNetworkCallDomainModel.Response.Failure(
durationMs = durationMs,
issue = responseError,
)
// otherwise tread like http
else -> FloconNetworkResponseOnlyDomainModel.Http(
floconCallId = callId,
networkResponse = networkResponse,
httpCode = responseHttpCode!!,
} else {
FloconNetworkCallDomainModel.Response.Success(
durationMs = durationMs,
contentType = responseContentType,
body = responseBody,
headers = responseHeaders.orEmpty(),
byteSize = responseSize ?: 0L,
specificInfos = when (floconNetworkType) {
"grpc" -> FloconNetworkCallDomainModel.Response.Success.SpecificInfos.Grpc(
grpcStatus = responseGrpcStatus!!,
)
// otherwise tread like http
else -> FloconNetworkCallDomainModel.Response.Success.SpecificInfos.Http(
httpCode = responseHttpCode!!,
)
}
)
}
FloconNetworkResponseOnlyDomainModel(
floconCallId = callId,
response = response,
)
} catch (t: Throwable) {
t.printStackTrace()
return null