diff --git a/app/src/main/java/meaning/morning/network/request/RequestCallbackReview.kt b/app/src/main/java/meaning/morning/network/request/RequestCallbackReview.kt new file mode 100644 index 0000000..4ab8653 --- /dev/null +++ b/app/src/main/java/meaning/morning/network/request/RequestCallbackReview.kt @@ -0,0 +1,58 @@ +/* + * Created by jinsu4755 + * DESC: callback 객체 구현하는 Request Class 시도해봄 그냥 궁금해서 + */ + +package meaning.morning.network.request + +import android.text.TextUtils +import android.util.Log +import com.google.gson.GsonBuilder +import com.google.gson.reflect.TypeToken +import meaning.morning.network.response.BaseResponse +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response + +class RequestCallbackReview : Callback> { + + private var onSuccessListener: ((BaseResponse) -> Unit)? = null + private var onErrorListener: ((BaseResponse) -> Unit)? = null + private var onFailureListener: ((t: Throwable) -> Unit)? = null + + fun onSuccessListener(listener: ((BaseResponse) -> Unit)) { + this.onSuccessListener = listener + } + + fun onErrorListener(listener: (BaseResponse) -> Unit) { + this.onErrorListener = listener + } + + fun onFailureListener(listener: (t: Throwable) -> Unit) { + this.onFailureListener = listener + } + + override fun onResponse(call: Call>, response: Response>) { + if (response.isSuccessful) { + onSuccessListener?.invoke(response.body() ?: return) + return + } + val errorBody = response.errorBody()?.string() ?: return + val errorResponse = createResponseErrorBody(errorBody) + onErrorListener?.invoke(errorResponse) + } + + private fun createResponseErrorBody(errorBody: String): BaseResponse { + val gson = GsonBuilder().create() + val responseType = object : TypeToken>() {}.type + return gson.fromJson(errorBody, responseType) + } + + override fun onFailure(call: Call>, t: Throwable) { + Log.d("jinsu4755", "${t.message} \n") + Log.d("jinsu4755", "${t.localizedMessage} \n") + Log.d("jinsu4755", TextUtils.join("\n", t.stackTrace)) + onFailureListener?.invoke(t) + } +} + diff --git a/app/src/main/java/meaning/morning/network/request/TimeStampPostRequestReview.kt b/app/src/main/java/meaning/morning/network/request/TimeStampPostRequestReview.kt new file mode 100644 index 0000000..469a46a --- /dev/null +++ b/app/src/main/java/meaning/morning/network/request/TimeStampPostRequestReview.kt @@ -0,0 +1,46 @@ +/* + * Created by jinsu4755 + * DESC: + */ + +package meaning.morning.network.request + +import meaning.morning.network.MeaningService +import meaning.morning.network.response.TimeStampResponse +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MultipartBody +import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody + +class TimeStampPostRequestReview( + private val dateTime: String, + private val timeStampContent: String, + private val image: MultipartBody.Part, +) { + private var callback: RequestCallbackReview? = null + + fun setEvent(block: RequestCallbackReview.() -> Unit): TimeStampPostRequestReview { + callback = RequestCallbackReview().apply(block) + return this + } + + fun send(token: String?) { + MeaningService.getInstance() + .requestPostTimestamp( + token = token, + params = createPartMap(), + image = image + ).enqueue(callback ?: return) + } + + private fun createPartMap(): HashMap { + val partMap = HashMap() + partMap["dateTime"] = dateTime.toRequestBody(MEDIA_TYPE_TEXT) + partMap["timeStampContents"] = timeStampContent.toRequestBody(MEDIA_TYPE_TEXT) + return partMap + } + + companion object { + private val MEDIA_TYPE_TEXT = "text/plain".toMediaType() + } +}