Files
forkmessager/client-mobile/profiles/data/repository/ProfileRepositoryImpl.kt
Халимов Рустам 1fb1be47dd Приложение
2026-04-14 01:15:54 +03:00

56 lines
1.9 KiB
Kotlin

package profiles.data.repository
import android.content.Context
import android.net.Uri
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import profiles.data.remote.api.ProfileApi
import profiles.data.remote.dto.ProfileDto
import profiles.data.remote.dto.UpdateProfileRequest
import profiles.domain.repository.ProfileRepository
import java.io.File
import java.io.FileOutputStream
import javax.inject.Inject
class ProfileRepositoryImpl @Inject constructor(
private val api: ProfileApi,
private val context: Context
) : ProfileRepository {
override suspend fun getProfile(id: String): Result<ProfileDto> = runCatching {
api.getProfile(id)
}
override suspend fun getMyProfile(): Result<ProfileDto> = runCatching {
api.getMyProfile()
}
override suspend fun updateProfile(displayName: String?, bio: String?): Result<ProfileDto> = runCatching {
api.updateProfile(UpdateProfileRequest(displayName, bio))
}
override suspend fun uploadAvatar(uri: Uri): Result<ProfileDto> = runCatching {
val file = uriToFile(uri)
val requestFile = file.asRequestBody("image/jpeg".toMediaTypeOrNull())
val body = MultipartBody.Part.createFormData("avatar", file.name, requestFile)
api.uploadAvatar(body)
}
override suspend fun removeAvatar(): Result<ProfileDto> = runCatching {
api.removeAvatar()
}
private fun uriToFile(uri: Uri): File {
val inputStream = context.contentResolver.openInputStream(uri)
val file = File(context.cacheDir, "temp_avatar_${System.currentTimeMillis()}.jpg")
val outputStream = FileOutputStream(file)
inputStream?.use { input ->
outputStream.use { output ->
input.copyTo(output)
}
}
return file
}
}