diff --git a/composeApp/src/commonMain/kotlin/com/example/casera/network/TaskCompletionApi.kt b/composeApp/src/commonMain/kotlin/com/example/casera/network/TaskCompletionApi.kt index ba6e0ff..58bc395 100644 --- a/composeApp/src/commonMain/kotlin/com/example/casera/network/TaskCompletionApi.kt +++ b/composeApp/src/commonMain/kotlin/com/example/casera/network/TaskCompletionApi.kt @@ -4,6 +4,7 @@ import com.example.casera.models.* import io.ktor.client.* import io.ktor.client.call.* import io.ktor.client.request.* +import io.ktor.client.request.forms.* import io.ktor.http.* class TaskCompletionApi(private val client: HttpClient = ApiClient.httpClient) { @@ -100,34 +101,31 @@ class TaskCompletionApi(private val client: HttpClient = ApiClient.httpClient) { imageFileNames: List = emptyList() ): ApiResult> { return try { - val response = client.post("$baseUrl/task-completions/") { - header("Authorization", "Token $token") + val response = client.submitFormWithBinaryData( + url = "$baseUrl/task-completions/", + formData = formData { + // Add text fields + append("task_id", request.taskId.toString()) + request.completedAt?.let { append("completed_at", it) } + request.actualCost?.let { append("actual_cost", it.toString()) } + request.notes?.let { append("notes", it) } + request.rating?.let { append("rating", it.toString()) } - setBody( - io.ktor.client.request.forms.MultiPartFormDataContent( - io.ktor.client.request.forms.formData { - // Add text fields - append("task_id", request.taskId.toString()) - request.completedAt?.let { append("completed_at", it) } - request.actualCost?.let { append("actual_cost", it.toString()) } - request.notes?.let { append("notes", it) } - request.rating?.let { append("rating", it.toString()) } - - // Add image files - images.forEachIndexed { index, imageBytes -> - val fileName = imageFileNames.getOrNull(index) ?: "image_$index.jpg" - append( - "images", - imageBytes, - io.ktor.http.Headers.build { - append(HttpHeaders.ContentType, "image/jpeg") - append(HttpHeaders.ContentDisposition, "filename=\"$fileName\"") - } - ) + // Add image files + images.forEachIndexed { index, imageBytes -> + val fileName = imageFileNames.getOrNull(index) ?: "image_$index.jpg" + append( + "images", + imageBytes, + Headers.build { + append(HttpHeaders.ContentType, "image/jpeg") + append(HttpHeaders.ContentDisposition, "filename=\"$fileName\"") } - } - ) - ) + ) + } + } + ) { + header("Authorization", "Token $token") } if (response.status.isSuccess()) {