Skip to content

Commit

Permalink
Merge pull request #108 from team-winey/feature/feat-feed-inifinitesc…
Browse files Browse the repository at this point in the history
…roll
  • Loading branch information
sxunea authored Aug 14, 2023
2 parents 0db454c + 3699534 commit 0e389af
Show file tree
Hide file tree
Showing 35 changed files with 602 additions and 439 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ data class ResponseGetWineyFeedListDto(
nickName = feed.nickName,
userId = feed.userId,
writerLevel = feed.writerLevel,
totalPageSize = data.pageResponseDto.totalPageSize
totalPageSize = data.pageResponseDto.totalPageSize,
isEnd = data.pageResponseDto.isEnd
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,13 @@ package com.android.go.sopt.winey.data.repository

import com.android.go.sopt.winey.data.model.remote.request.RequestCreateGoalDto
import com.android.go.sopt.winey.data.model.remote.request.RequestLoginDto
import com.android.go.sopt.winey.data.model.remote.request.RequestPostLikeDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseGetNicknameDuplicateCheckDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseLoginDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostWineyFeedDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseReIssueTokenDto
import com.android.go.sopt.winey.data.source.AuthDataSource
import com.android.go.sopt.winey.domain.entity.Goal
import com.android.go.sopt.winey.domain.entity.Like
import com.android.go.sopt.winey.domain.entity.Recommend
import com.android.go.sopt.winey.domain.entity.User
import com.android.go.sopt.winey.domain.entity.WineyFeed
import com.android.go.sopt.winey.domain.repository.AuthRepository
import okhttp3.MultipartBody
import okhttp3.RequestBody
import javax.inject.Inject

class AuthRepositoryImpl @Inject constructor(
Expand All @@ -26,48 +19,11 @@ class AuthRepositoryImpl @Inject constructor(
authDataSource.getUser().data?.toUser()
}

override suspend fun getWineyFeedList(page: Int): Result<List<WineyFeed>> =
runCatching {
authDataSource.getWineyFeedList(page).toWineyFeed()
}

override suspend fun getMyFeedList(page: Int): Result<List<WineyFeed>> =
runCatching {
val response = authDataSource.getMyFeedList(page)
response.toWineyFeed()
}

override suspend fun postWineyFeed(
file: MultipartBody.Part?,
requestMap: HashMap<String, RequestBody>
): Result<ResponsePostWineyFeedDto?> =
runCatching {
authDataSource.postWineyFeedList(file, requestMap).data
}

override suspend fun deleteFeed(feedId: Int): Result<Unit> =
runCatching {
authDataSource.deleteFeed(feedId)
}

override suspend fun postFeedLike(
feedId: Int,
requestPostLikeDto: RequestPostLikeDto
): Result<Like> =
runCatching {
authDataSource.postFeedLike(feedId, requestPostLikeDto).toLike()
}

override suspend fun postCreateGoal(requestCreateGoalDto: RequestCreateGoalDto): Result<Goal?> =
runCatching {
authDataSource.postCreateGoal(requestCreateGoalDto).data?.toGoal()
}

override suspend fun getRecommendList(page: Int): Result<List<Recommend>?> =
runCatching {
authDataSource.getRecommendList(page).data?.convertToRecommend()
}

override suspend fun postLogin(
socialAccessToken: String,
requestLoginDto: RequestLoginDto
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.android.go.sopt.winey.data.repository

import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingData
import com.android.go.sopt.winey.data.model.remote.request.RequestPostLikeDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostWineyFeedDto
import com.android.go.sopt.winey.data.service.FeedService
import com.android.go.sopt.winey.data.source.FeedDataSource
import com.android.go.sopt.winey.data.source.paging.MyFeedPagingSource
import com.android.go.sopt.winey.data.source.paging.WineyFeedPagingSource
import com.android.go.sopt.winey.domain.entity.Like
import com.android.go.sopt.winey.domain.entity.WineyFeed
import com.android.go.sopt.winey.domain.repository.FeedRepository
import kotlinx.coroutines.flow.Flow
import okhttp3.MultipartBody
import okhttp3.RequestBody
import javax.inject.Inject

class FeedRepositoryImpl @Inject constructor(
private val feedDataSource: FeedDataSource,
private val feedService: FeedService
) : FeedRepository {
override suspend fun getWineyFeedList(): Flow<PagingData<WineyFeed>> =
Pager(PagingConfig(FEED_PAGE_SIZE, prefetchDistance = LOAD_DISTANCE)) {
WineyFeedPagingSource(feedService)
}.flow

override suspend fun getMyFeedList(): Flow<PagingData<WineyFeed>> =
Pager(PagingConfig(FEED_PAGE_SIZE, prefetchDistance = LOAD_DISTANCE)) {
MyFeedPagingSource(feedService)
}.flow

override suspend fun postWineyFeed(
file: MultipartBody.Part?,
requestMap: HashMap<String, RequestBody>
): Result<ResponsePostWineyFeedDto?> =
runCatching {
feedDataSource.postWineyFeedList(file, requestMap).data
}

override suspend fun deleteFeed(feedId: Int): Result<Unit> =
runCatching {
feedDataSource.deleteFeed(feedId)
}

override suspend fun postFeedLike(
feedId: Int,
requestPostLikeDto: RequestPostLikeDto
): Result<Like> =
runCatching {
feedDataSource.postFeedLike(feedId, requestPostLikeDto).toLike()
}

companion object {
const val FEED_PAGE_SIZE = 20
const val LOAD_DISTANCE = 2
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.android.go.sopt.winey.data.repository

import com.android.go.sopt.winey.data.source.RecommendDataSource
import com.android.go.sopt.winey.domain.entity.Recommend
import com.android.go.sopt.winey.domain.repository.RecommendRepository
import javax.inject.Inject

class RecommendRepositoryImpl @Inject constructor(
private val recommendDataSource: RecommendDataSource
) : RecommendRepository {
override suspend fun getRecommendList(page: Int): Result<List<Recommend>?> =
runCatching {
recommendDataSource.getRecommendList(page).data?.convertToRecommend()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,76 +2,27 @@ package com.android.go.sopt.winey.data.service

import com.android.go.sopt.winey.data.model.remote.request.RequestCreateGoalDto
import com.android.go.sopt.winey.data.model.remote.request.RequestLoginDto
import com.android.go.sopt.winey.data.model.remote.request.RequestPostLikeDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseCreateGoalDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseGetNicknameDuplicateCheckDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseGetRecommendListDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseGetUserDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseGetWineyFeedListDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseLoginDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostLikeDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostWineyFeedDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseReIssueTokenDto
import com.android.go.sopt.winey.data.model.remote.response.base.BaseResponse
import okhttp3.MultipartBody
import okhttp3.RequestBody
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.Header
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
import retrofit2.http.PartMap
import retrofit2.http.Path
import retrofit2.http.Query

interface AuthService {
/**
*
*/

@GET("user")
suspend fun getUser(): BaseResponse<ResponseGetUserDto?>

@GET("feed")
suspend fun getWineyFeedList(
@Query("page") page: Int
): ResponseGetWineyFeedListDto

@GET("feed/myFeed")
suspend fun getMyFeedList(
@Query("page") page: Int
): ResponseGetWineyFeedListDto

@POST("feedLike/{feedId}")
suspend fun postFeedLike(
@Path("feedId") feedId: Int,
@Body requestPostLikeDto: RequestPostLikeDto
): ResponsePostLikeDto

@Multipart
@POST("feed")
suspend fun postWineyFeed(
@Part file: MultipartBody.Part?,
@PartMap requestMap: HashMap<String, RequestBody>
): BaseResponse<ResponsePostWineyFeedDto>

@POST("goal")
suspend fun postCreateGoal(
@Body requestCreateGoalDto: RequestCreateGoalDto
): BaseResponse<ResponseCreateGoalDto>

@GET("recommend")
suspend fun getRecommendList(
@Query("page") page: Int
): BaseResponse<ResponseGetRecommendListDto>

@DELETE("feed/{feedId}")
suspend fun deleteFeed(
@Path("feedId") feedId: Int
): BaseResponse<Unit>

@POST("auth")
suspend fun postLogin(
@Header("Authorization") socialAccessToken: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.android.go.sopt.winey.data.service

import com.android.go.sopt.winey.data.model.remote.request.RequestPostLikeDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseGetWineyFeedListDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostLikeDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostWineyFeedDto
import com.android.go.sopt.winey.data.model.remote.response.base.BaseResponse
import okhttp3.MultipartBody
import okhttp3.RequestBody
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
import retrofit2.http.PartMap
import retrofit2.http.Path
import retrofit2.http.Query

interface FeedService {
@GET("feed")
suspend fun getWineyFeedList(
@Query("page") page: Int
): ResponseGetWineyFeedListDto

@GET("feed/myFeed")
suspend fun getMyFeedList(
@Query("page") page: Int
): ResponseGetWineyFeedListDto

@POST("feedLike/{feedId}")
suspend fun postFeedLike(
@Path("feedId") feedId: Int,
@Body requestPostLikeDto: RequestPostLikeDto
): ResponsePostLikeDto

@DELETE("feed/{feedId}")
suspend fun deleteFeed(
@Path("feedId") feedId: Int
): BaseResponse<Unit>

@Multipart
@POST("feed")
suspend fun postWineyFeed(
@Part file: MultipartBody.Part?,
@PartMap requestMap: HashMap<String, RequestBody>
): BaseResponse<ResponsePostWineyFeedDto>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.android.go.sopt.winey.data.service

import com.android.go.sopt.winey.data.model.remote.response.ResponseGetRecommendListDto
import com.android.go.sopt.winey.data.model.remote.response.base.BaseResponse
import retrofit2.http.GET
import retrofit2.http.Query

interface RecommendService {
@GET("recommend")
suspend fun getRecommendList(
@Query("page") page: Int
): BaseResponse<ResponseGetRecommendListDto>
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,54 +2,23 @@ package com.android.go.sopt.winey.data.source

import com.android.go.sopt.winey.data.model.remote.request.RequestCreateGoalDto
import com.android.go.sopt.winey.data.model.remote.request.RequestLoginDto
import com.android.go.sopt.winey.data.model.remote.request.RequestPostLikeDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseCreateGoalDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseGetNicknameDuplicateCheckDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseGetRecommendListDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseGetUserDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseGetWineyFeedListDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseLoginDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostLikeDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostWineyFeedDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseReIssueTokenDto
import com.android.go.sopt.winey.data.model.remote.response.base.BaseResponse
import com.android.go.sopt.winey.data.service.AuthService
import okhttp3.MultipartBody
import okhttp3.RequestBody
import javax.inject.Inject

class AuthDataSource @Inject constructor(
private val authService: AuthService
) {
suspend fun getUser(): BaseResponse<ResponseGetUserDto?> = authService.getUser()

suspend fun getWineyFeedList(page: Int): ResponseGetWineyFeedListDto =
authService.getWineyFeedList(page)

suspend fun getMyFeedList(page: Int): ResponseGetWineyFeedListDto =
authService.getMyFeedList(page)

suspend fun postFeedLike(
feedId: Int,
requestPostLikeDto: RequestPostLikeDto
): ResponsePostLikeDto =
authService.postFeedLike(feedId, requestPostLikeDto)

suspend fun postWineyFeedList(
file: MultipartBody.Part?,
requestMap: HashMap<String, RequestBody>
): BaseResponse<ResponsePostWineyFeedDto> =
authService.postWineyFeed(file, requestMap)

suspend fun postCreateGoal(requestCreateGoalDto: RequestCreateGoalDto): BaseResponse<ResponseCreateGoalDto> =
authService.postCreateGoal(requestCreateGoalDto)

suspend fun getRecommendList(page: Int): BaseResponse<ResponseGetRecommendListDto> =
authService.getRecommendList(page)

suspend fun deleteFeed(feedId: Int): BaseResponse<Unit> =
authService.deleteFeed(feedId)

suspend fun postLogin(
socialAccessToken: String,
requestLoginDto: RequestLoginDto
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.android.go.sopt.winey.data.source

import com.android.go.sopt.winey.data.model.remote.request.RequestPostLikeDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostLikeDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostWineyFeedDto
import com.android.go.sopt.winey.data.model.remote.response.base.BaseResponse
import com.android.go.sopt.winey.data.service.FeedService
import okhttp3.MultipartBody
import okhttp3.RequestBody
import javax.inject.Inject

class FeedDataSource @Inject constructor(
private val feedService: FeedService
) {
suspend fun postFeedLike(
feedId: Int,
requestPostLikeDto: RequestPostLikeDto
): ResponsePostLikeDto =
feedService.postFeedLike(feedId, requestPostLikeDto)

suspend fun deleteFeed(feedId: Int): BaseResponse<Unit> =
feedService.deleteFeed(feedId)

suspend fun postWineyFeedList(
file: MultipartBody.Part?,
requestMap: HashMap<String, RequestBody>
): BaseResponse<ResponsePostWineyFeedDto> =
feedService.postWineyFeed(file, requestMap)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.android.go.sopt.winey.data.source

import com.android.go.sopt.winey.data.model.remote.response.ResponseGetRecommendListDto
import com.android.go.sopt.winey.data.model.remote.response.base.BaseResponse
import com.android.go.sopt.winey.data.service.RecommendService
import javax.inject.Inject

class RecommendDataSource @Inject constructor(
private val recommendService: RecommendService
) {
suspend fun getRecommendList(page: Int): BaseResponse<ResponseGetRecommendListDto> =
recommendService.getRecommendList(page)
}
Loading

0 comments on commit 0e389af

Please sign in to comment.