From eed504f04ec00c6f1cd2058db51ce31b2d8f7263 Mon Sep 17 00:00:00 2001 From: Cutiful <113351087+Syaroful@users.noreply.github.com> Date: Sat, 5 Jul 2025 11:22:32 +0700 Subject: [PATCH] feat: add actuator history functionality and refactor API calls --- .../data/network/ControlService.kt | 24 +++++++++++++--- .../data/repository/ControlRepository.kt | 28 +++++++++++++++---- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/agrilinkvocpro/control_feature/src/main/java/com/syaroful/agrilinkvocpro/control_feature/data/network/ControlService.kt b/agrilinkvocpro/control_feature/src/main/java/com/syaroful/agrilinkvocpro/control_feature/data/network/ControlService.kt index 3761b17..fd00174 100644 --- a/agrilinkvocpro/control_feature/src/main/java/com/syaroful/agrilinkvocpro/control_feature/data/network/ControlService.kt +++ b/agrilinkvocpro/control_feature/src/main/java/com/syaroful/agrilinkvocpro/control_feature/data/network/ControlService.kt @@ -1,34 +1,50 @@ package com.syaroful.agrilinkvocpro.control_feature.data.network +import com.syaroful.agrilinkvocpro.control_feature.data.model.ActuatorHistoryResponse import com.syaroful.agrilinkvocpro.control_feature.data.model.ActuatorStatusResponse import com.syaroful.agrilinkvocpro.control_feature.data.model.ControlLogResponse +import okhttp3.RequestBody import retrofit2.Response -import retrofit2.http.Body import retrofit2.http.GET import retrofit2.http.Header +import retrofit2.http.Multipart import retrofit2.http.POST +import retrofit2.http.Part interface ControlService { + // get all actuator status @GET("api/actuators/status") suspend fun getActuatorStatus( @Header("Authorization") authHeader: String, ): Response + // push control water valve + @Multipart @POST("api/actuators/water-valve/control") suspend fun controlWaterValve( @Header("Authorization") authHeader: String, - @Body action: String, + @Part("action") action: RequestBody ): Response + // push control nutrient valve + @Multipart @POST("api/actuators/nutrient-valve/control") suspend fun controlNutrientValve( @Header("Authorization") authHeader: String, - @Body action: String, + @Part("action") action: RequestBody ): Response + // push control pump + @Multipart @POST("api/actuators/pump/control") suspend fun controlPump( @Header("Authorization") authHeader: String, - @Body action: String, + @Part("action") action: RequestBody ): Response + + // get controls log + @GET("api//actuator-control-logs") + suspend fun getActuatorsControlLog( + @Header("Authorization") authHeader: String, + ): Response } \ No newline at end of file diff --git a/agrilinkvocpro/control_feature/src/main/java/com/syaroful/agrilinkvocpro/control_feature/data/repository/ControlRepository.kt b/agrilinkvocpro/control_feature/src/main/java/com/syaroful/agrilinkvocpro/control_feature/data/repository/ControlRepository.kt index 75fad74..d42b534 100644 --- a/agrilinkvocpro/control_feature/src/main/java/com/syaroful/agrilinkvocpro/control_feature/data/repository/ControlRepository.kt +++ b/agrilinkvocpro/control_feature/src/main/java/com/syaroful/agrilinkvocpro/control_feature/data/repository/ControlRepository.kt @@ -1,28 +1,44 @@ package com.syaroful.agrilinkvocpro.control_feature.data.repository +import com.syaroful.agrilinkvocpro.control_feature.data.model.ActuatorHistoryResponse import com.syaroful.agrilinkvocpro.control_feature.data.model.ActuatorStatusResponse import com.syaroful.agrilinkvocpro.control_feature.data.model.ControlLogResponse import com.syaroful.agrilinkvocpro.control_feature.data.network.ControlService +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.RequestBody.Companion.toRequestBody import retrofit2.Response class ControlRepository( private val controlService: ControlService ) { - suspend fun controlWaterValve(authHeader: String, action: String): Response{ - return controlService.controlWaterValve(authHeader, action) + suspend fun controlWaterValve( + authHeader: String, + action: String + ): Response { + val actionPart = action.toRequestBody("text/plain".toMediaTypeOrNull()) + return controlService.controlWaterValve(authHeader, actionPart) } - suspend fun controlNutrientValve(authHeader: String, action: String): Response{ - return controlService.controlNutrientValve(authHeader, action) + suspend fun controlNutrientValve( + authHeader: String, + action: String + ): Response { + val actionPart = action.toRequestBody("text/plain".toMediaTypeOrNull()) + return controlService.controlNutrientValve(authHeader, actionPart) } - suspend fun controlPump(authHeader: String, action: String): Response{ - return controlService.controlPump(authHeader, action) + suspend fun controlPump(authHeader: String, action: String): Response { + val actionPart = action.toRequestBody("text/plain".toMediaTypeOrNull()) + return controlService.controlPump(authHeader, actionPart) } suspend fun getActuatorStatus(authHeader: String): Response { return controlService.getActuatorStatus(authHeader) } + suspend fun getActuatorHistory(authHeader: String): Response { + return controlService.getActuatorsControlLog(authHeader) + } + } \ No newline at end of file