package com.aiosman.riderpro.data import androidx.paging.PagingSource import androidx.paging.PagingState import com.aiosman.riderpro.data.api.ApiClient import com.aiosman.riderpro.model.MomentEntity import com.aiosman.riderpro.test.TestDatabase import java.io.IOException data class UserAuth( val id: Int, val token: String? = null ) class AccountPagingSource( private val userService: UserService, private val nickname: String? = null ) : PagingSource() { override suspend fun load(params: LoadParams): LoadResult { return try { val currentPage = params.key ?: 1 val users = userService.getUsers( page = currentPage, nickname = nickname ) LoadResult.Page( data = users.list, prevKey = if (currentPage == 1) null else currentPage - 1, nextKey = if (users.list.isEmpty()) null else users.page + 1 ) } catch (exception: IOException) { return LoadResult.Error(exception) } } override fun getRefreshKey(state: PagingState): Int? { return state.anchorPosition } } interface UserService { suspend fun getUserProfile(id: String): AccountProfileEntity suspend fun followUser(id: String) suspend fun unFollowUser(id: String) suspend fun getUsers( pageSize: Int = 20, page: Int = 1, nickname: String? = null ): ListContainer } class TestUserServiceImpl : UserService { override suspend fun getUserProfile(id: String): AccountProfileEntity { val resp = ApiClient.api.getAccountProfileById(id.toInt()) val body = resp.body() ?: throw ServiceException("Failed to get account") return body.data.toAccountProfileEntity() } override suspend fun followUser(id: String) { val resp = ApiClient.api.followUser(id.toInt()) return } override suspend fun unFollowUser(id: String) { val resp = ApiClient.api.unfollowUser(id.toInt()) return } override suspend fun getUsers( pageSize: Int, page: Int, nickname: String? ): ListContainer { val resp = ApiClient.api.getUsers(page, pageSize, nickname) val body = resp.body() ?: throw ServiceException("Failed to get account") return ListContainer( list = body.list.map { it.toAccountProfileEntity() }, page = body.page, total = body.total, pageSize = body.pageSize ) } }