Профиль, редактирование без аватара

This commit is contained in:
Халимов Рустам
2026-04-16 15:41:22 +03:00
parent 8409c51842
commit cea3f4d669
45 changed files with 1063 additions and 178 deletions

View File

@@ -15,30 +15,40 @@ import javax.inject.Inject
class ProfileRepositoryImpl @Inject constructor(
private val api: ProfileApi,
private val context: Context
private val context: Context,
private val serverConfig: core.network.ServerConfig
) : ProfileRepository {
private fun ProfileDto.fixAvatarUrl(): ProfileDto {
if (avatarUrl == null || avatarUrl.startsWith("http")) return this
val baseUrl = serverConfig.getBaseUrl().removeSuffix("/api/")
return copy(avatarUrl = baseUrl + avatarUrl)
}
override suspend fun getProfile(id: String): Result<ProfileDto> = runCatching {
api.getProfile(id)
api.getProfile(id).fixAvatarUrl()
}
override suspend fun getMyProfile(): Result<ProfileDto> = runCatching {
api.getMyProfile()
// Сначала получаем ID пользователя из /auth/me
val me = api.getMyProfile()
// Затем загружаем полный профиль из /profiles/{id}
api.getProfile(me.id).fixAvatarUrl()
}
override suspend fun updateProfile(displayName: String?, bio: String?): Result<ProfileDto> = runCatching {
api.updateProfile(UpdateProfileRequest(displayName, bio))
override suspend fun updateProfile(displayName: String?, bio: String?, birthday: String?): Result<ProfileDto> = runCatching {
api.updateProfile(UpdateProfileRequest(displayName, bio, birthday)).fixAvatarUrl()
}
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)
api.uploadAvatar(body).fixAvatarUrl()
}
override suspend fun removeAvatar(): Result<ProfileDto> = runCatching {
api.removeAvatar()
api.removeAvatar().fixAvatarUrl()
}
private fun uriToFile(uri: Uri): File {