```suspend fun uploadDocuments( token: Str...
# decompose
d
Copy code
suspend fun uploadDocuments(
        token: String,
        documentRefId: String,
        body: ByteArray,
        contentType: String,
        fileName: String,
        onProgressUpdate: (UploadProgress) -> Unit
    ): UploadResponse {
        return ErrorHandler {
            val client2 = HttpClient(CIO) {
                install(Logging) {
                    level = LogLevel.ALL
                }
            }
            <http://client2.post|client2.post>(NetworkConstants.DocumentsUpload.route) {
                header(HttpHeaders.Authorization, "Bearer $token")
                url {
                    encodedParameters.append("documentRefId", documentRefId)
                    encodedParameters.append("type", "PAYSLIP")
                    encodedParameters.append("description", "Uploaded")
                }
                setBody(
                    MultiPartFormDataContent(
                        formData {
                            append("description", "Ktor logo")
                            append("file", body, Headers.build {
                                append(HttpHeaders.ContentType, contentType)
                                append(HttpHeaders.ContentDisposition, "filename=\"$fileName\"")
                            })
                        },
                        boundary = "WebAppBoundary"
                    )
                )
                onUpload { bytesSentTotal, contentLength ->
                    onProgressUpdate(UploadProgress(bytesSentTotal, contentLength))
                }
            }

        }
    }