From c6139d8e286c5b50574d2e0155af90bb771240b6 Mon Sep 17 00:00:00 2001 From: Jonathan Rodrigues Date: Mon, 29 Apr 2024 00:24:18 -0300 Subject: [PATCH] Improvement logger when make request --- .../network/di/NetworkModule.kt | 6 +++++ .../interceptor/MockResponseInterceptor.kt | 12 +++++++-- .../network/mock/MockManager.kt | 9 ++++++- .../network/mock/MockPrettyLogger.kt | 27 +++++++++++++++++++ .../network/mock/MockResponse.kt | 1 + 5 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/mock/MockPrettyLogger.kt diff --git a/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/di/NetworkModule.kt b/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/di/NetworkModule.kt index 62f8325..fdd6885 100644 --- a/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/di/NetworkModule.kt +++ b/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/di/NetworkModule.kt @@ -4,6 +4,7 @@ import br.com.stonks.infrastructure.network.builder.OkHttpBuilder import br.com.stonks.infrastructure.network.builder.RetrofitBuilder import br.com.stonks.infrastructure.network.interceptor.MockResponseInterceptor import br.com.stonks.infrastructure.network.mock.MockManager +import br.com.stonks.infrastructure.network.mock.MockPrettyLogger import br.com.stonks.infrastructure.network.provider.NetworkServiceProvider import br.com.stonks.infrastructure.network.provider.NetworkServiceProviderImpl import okhttp3.Interceptor @@ -13,6 +14,10 @@ import org.koin.dsl.module val networkModule = module { + factory { + MockPrettyLogger() + } + factory { MockManager( assetManager = get(), @@ -28,6 +33,7 @@ val networkModule = module { factory { MockResponseInterceptor( mockManager = get(), + prettyLogger = get(), ) } bind Interceptor::class diff --git a/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/interceptor/MockResponseInterceptor.kt b/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/interceptor/MockResponseInterceptor.kt index 9ac497a..e4363ae 100644 --- a/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/interceptor/MockResponseInterceptor.kt +++ b/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/interceptor/MockResponseInterceptor.kt @@ -1,29 +1,37 @@ package br.com.stonks.infrastructure.network.interceptor import br.com.stonks.infrastructure.network.mock.MockManager +import br.com.stonks.infrastructure.network.mock.MockPrettyLogger import br.com.stonks.infrastructure.network.mock.MockResponse import okhttp3.Interceptor import okhttp3.Protocol +import okhttp3.Request import okhttp3.Response internal class MockResponseInterceptor( private val mockManager: MockManager, + private val prettyLogger: MockPrettyLogger, ) : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { return mockManager( endpoint = chain.request().url.encodedPath ).run { - createMockedResponse(this) + prettyLogger(this) + createMockedResponse(chain.request(), this) } } - private fun createMockedResponse(response: MockResponse): Response { + private fun createMockedResponse( + request: Request, + response: MockResponse, + ): Response { return Response.Builder() .code(response.code) .message(response.message) .body(response.body) .protocol(Protocol.HTTP_1_1) + .request(request) .build() } } diff --git a/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/mock/MockManager.kt b/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/mock/MockManager.kt index 0e092d1..5af1012 100644 --- a/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/mock/MockManager.kt +++ b/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/mock/MockManager.kt @@ -21,6 +21,7 @@ internal class MockManager( return createMockResponse( endpoint = endpoint, + fileName = assetFileName, payload = assetContent, ) } @@ -39,9 +40,14 @@ internal class MockManager( return assetManager.openFile(fileName) } - private fun createMockResponse(endpoint: String, payload: String?): MockResponse { + private fun createMockResponse( + endpoint: String, + fileName: String, + payload: String?, + ): MockResponse { return if (payload.isNullOrEmpty()) { MockResponse( + fileName = fileName, code = 500, message = "Internal Server Error", body = createResponseBody( @@ -51,6 +57,7 @@ internal class MockManager( ) } else { MockResponse( + fileName = fileName, code = 200, message = "OK", body = createResponseBody( diff --git a/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/mock/MockPrettyLogger.kt b/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/mock/MockPrettyLogger.kt new file mode 100644 index 0000000..4be26de --- /dev/null +++ b/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/mock/MockPrettyLogger.kt @@ -0,0 +1,27 @@ +package br.com.stonks.infrastructure.network.mock + +import timber.log.Timber +import java.io.IOException + +internal class MockPrettyLogger { + + operator fun invoke(mockResponse: MockResponse) { + try { + Timber.d(mockResponse.prettyLog()) + } catch (_: IOException) { + return + } + } + + private fun MockResponse.prettyLog(): String = """ + .:: MOCK PRETTY LOGGER ::. + --> START REQUEST + Asset file: $fileName + --> END REQUEST + <-- START RESPONSE + Status: $code $message + Content-Type: ${body.contentType()} + Content-Length: ${body.contentLength()} + <-- END RESPONSE + """.trimIndent() +} diff --git a/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/mock/MockResponse.kt b/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/mock/MockResponse.kt index a76bbd5..db1ad7f 100644 --- a/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/mock/MockResponse.kt +++ b/infrastructure/network/src/main/kotlin/br/com/stonks/infrastructure/network/mock/MockResponse.kt @@ -3,6 +3,7 @@ package br.com.stonks.infrastructure.network.mock import okhttp3.ResponseBody internal data class MockResponse( + val fileName: String, val code: Int, val message: String, val body: ResponseBody,