Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package com.eatssu.android.data.remote.repository

import com.eatssu.android.data.model.ApiResult
import com.eatssu.android.domain.model.ReissueTokenResult
import com.eatssu.android.data.model.map
import com.eatssu.android.data.model.orElse
import com.eatssu.android.data.model.orNull
import com.eatssu.android.data.remote.dto.request.CheckValidTokenRequest
import com.eatssu.android.data.remote.dto.request.LoginWithKakaoRequest
import com.eatssu.android.data.remote.dto.response.toDomain
import com.eatssu.android.data.remote.service.OauthService
import com.eatssu.android.domain.model.ReissueTokenResult
import com.eatssu.android.domain.model.Token
import com.eatssu.android.domain.repository.OauthRepository
import com.eatssu.common.enums.DeviceType
Expand Down Expand Up @@ -43,8 +43,8 @@ class OauthRepositoryImpl @Inject constructor(private val oauthService: OauthSer
)
).map { it.toDomain() }.orNull()

override suspend fun checkValidToken(body: CheckValidTokenRequest): Boolean =
oauthService.checkValidToken(body).orElse(false)
override suspend fun checkValidToken(token: String): Boolean =
oauthService.checkValidToken(CheckValidTokenRequest(token)).orElse(false)
}

private fun String.asAuthorizationHeaderValue(): String =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,17 @@ import javax.inject.Inject
class ReportRepositoryImpl @Inject constructor(private val reportService: ReportService) :
ReportRepository {

override suspend fun reportReview(body: ReportRequest): Boolean =
reportService.reportReview(body).isSuccess()
override suspend fun reportReview(
reviewId: Long,
reportType: String,
content: String,
): Boolean =
reportService.reportReview(
ReportRequest(
reviewId = reviewId,
reportType = reportType,
content = content
)
).isSuccess()

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,12 @@ class UserRepositoryImpl @Inject constructor(
private val userService: UserService
) : UserRepository {

override suspend fun updateUserName(body: ChangeNicknameRequest): Result<Unit> =
when (val result = userService.changeNickname(body)) {
override suspend fun updateUserName(nickname: String): Result<Unit> =
when (val result = userService.changeNickname(ChangeNicknameRequest(nickname))) {
is ApiResult.Success -> Result.success(Unit)
is ApiResult.Failure -> Result.failure(Exception(result.message ?: "닉네임 변경에 실패했어요."))
else -> Result.failure(Exception("닉네임 변경에 실패했어요."))
is ApiResult.NetworkError -> Result.failure(result.exception)
is ApiResult.UnknownError -> Result.failure(result.exception)
}

override suspend fun checkUserNameValidation(nickname: String): Result<Unit> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.eatssu.android.domain.repository

import com.eatssu.android.domain.model.ReissueTokenResult
import com.eatssu.android.data.remote.dto.request.CheckValidTokenRequest
import com.eatssu.android.domain.model.Token
import com.eatssu.common.enums.DeviceType

Expand All @@ -16,5 +15,5 @@ interface OauthRepository {
deviceType: DeviceType,
): Token?

suspend fun checkValidToken(body: CheckValidTokenRequest): Boolean
suspend fun checkValidToken(token: String): Boolean
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package com.eatssu.android.domain.repository

import com.eatssu.android.data.remote.dto.request.ReportRequest
import kotlinx.coroutines.flow.Flow

interface ReportRepository {
suspend fun reportReview(
body: ReportRequest,
reviewId: Long,
reportType: String,
content: String,
): Boolean
}

Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package com.eatssu.android.domain.repository

import com.eatssu.android.data.remote.dto.request.ChangeNicknameRequest
import com.eatssu.android.domain.model.College
import com.eatssu.android.domain.model.Department

interface UserRepository {

// 닉네임 변경
suspend fun updateUserName(
body: ChangeNicknameRequest,
nickname: String,
): Result<Unit>

// 유저 닉네임 중복 검사
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package com.eatssu.android.domain.usecase.auth

import com.eatssu.android.data.remote.dto.request.CheckValidTokenRequest
import com.eatssu.android.domain.repository.OauthRepository
import javax.inject.Inject

class GetIsAccessTokenValidUseCase @Inject constructor(
private val oauthRepository: OauthRepository
) {
suspend operator fun invoke(userAccessToken: String): Boolean =
oauthRepository.checkValidToken(CheckValidTokenRequest(userAccessToken))
}
oauthRepository.checkValidToken(userAccessToken)
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
package com.eatssu.android.domain.usecase.review

import com.eatssu.android.data.remote.dto.request.ReportRequest
import com.eatssu.android.domain.repository.ReportRepository
import javax.inject.Inject

class PostReportUseCase @Inject constructor(
private val reportRepository: ReportRepository,
) {
suspend operator fun invoke(body: ReportRequest): Boolean =
reportRepository.reportReview(body)
}
suspend operator fun invoke(
reviewId: Long,
reportType: String,
content: String,
): Boolean =
reportRepository.reportReview(
reviewId = reviewId,
reportType = reportType,
content = content,
)
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,15 @@
package com.eatssu.android.domain.usecase.user

import com.eatssu.android.data.local.AccountDataStore
import com.eatssu.android.data.remote.dto.request.ChangeNicknameRequest
import com.eatssu.android.domain.repository.UserRepository
import javax.inject.Inject

//class SetUserNameUseCase @Inject constructor(
// private val userRepository: UserRepository,
// @ApplicationContext private val context: Context
//) {
// suspend operator fun invoke(name: String): Flow<BaseResponse<Void>> {
// MySharedPreferences.setUserName(context, name)
// //Todo 이게 최선일까? 로컬에 이름 Set과 리모트의 이름 change를 usecase를 따로 만들어야하나?
//
// return userRepository.updateUserName(ChangeNicknameRequest(name))
// }
//}

class SetUserNicknameUseCase @Inject constructor(
private val userRepository: UserRepository,
private val accountDataStore: AccountDataStore
) {
suspend operator fun invoke(nickname: String): Result<Unit> {
val result = userRepository.updateUserName(ChangeNicknameRequest(nickname))
val result = userRepository.updateUserName(nickname)
if (result.isSuccess) {
// 서버 닉네임 변경이 성공한 경우에만 로컬 닉네임 변경
accountDataStore.setName(nickname)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package com.eatssu.android.presentation.cafeteria.review.report
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.eatssu.android.R
import com.eatssu.android.data.remote.dto.request.ReportRequest
import com.eatssu.android.domain.usecase.review.PostReportUseCase
import com.eatssu.common.UiText
import dagger.hilt.android.lifecycle.HiltViewModel
Expand All @@ -29,7 +28,7 @@ class ReportViewModel
viewModelScope.launch {
_uiState.update { it.copy(loading = true) }

val success = postReportUseCase(ReportRequest(reviewId, reportType, content))
val success = postReportUseCase(reviewId, reportType, content)
if (!success) {
_uiState.update {
it.copy(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ class OauthRepositoryImplBehaviorSpec : AppBehaviorSpec({

then("성공값을 그대로 반환한다") {
runTest {
repository.checkValidToken(body) shouldBe true
repository.checkValidToken("access") shouldBe true
}
}
}
Expand All @@ -99,7 +99,7 @@ class OauthRepositoryImplBehaviorSpec : AppBehaviorSpec({

then("기본값 false를 반환한다") {
runTest {
repository.checkValidToken(body) shouldBe false
repository.checkValidToken("access") shouldBe false
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@ class ReportRepositoryImplBehaviorSpec : AppBehaviorSpec({

then("true를 반환한다") {
runTest {
repository.reportReview(request) shouldBe true
repository.reportReview(
reviewId = request.reviewId,
reportType = request.reportType,
content = request.content,
) shouldBe true
}
}
}
Expand All @@ -37,7 +41,11 @@ class ReportRepositoryImplBehaviorSpec : AppBehaviorSpec({

then("false를 반환한다") {
runTest {
repository.reportReview(request) shouldBe false
repository.reportReview(
reviewId = request.reviewId,
reportType = request.reportType,
content = request.content,
) shouldBe false
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class UserRepositoryImplBehaviorSpec : AppBehaviorSpec({

then("Result.success를 반환한다") {
runTest {
repository.updateUserName(ChangeNicknameRequest("new")).isSuccess shouldBe true
repository.updateUserName("new").isSuccess shouldBe true
}
}
}
Expand All @@ -40,7 +40,7 @@ class UserRepositoryImplBehaviorSpec : AppBehaviorSpec({

then("서버 메시지를 포함한 실패 Result를 반환한다") {
runTest {
val result = repository.updateUserName(ChangeNicknameRequest("new"))
val result = repository.updateUserName("new")
result.isFailure shouldBe true
result.exceptionOrNull()?.message shouldBe "bad nickname"
}
Expand All @@ -54,7 +54,7 @@ class UserRepositoryImplBehaviorSpec : AppBehaviorSpec({

then("기본 실패 메시지를 반환한다") {
runTest {
val result = repository.updateUserName(ChangeNicknameRequest("new"))
val result = repository.updateUserName("new")
result.isFailure shouldBe true
result.exceptionOrNull()?.message shouldBe "닉네임 변경에 실패했어요."
}
Expand All @@ -66,11 +66,11 @@ class UserRepositoryImplBehaviorSpec : AppBehaviorSpec({
userService.changeNickname(ChangeNicknameRequest("new"))
} returns ApiResult.UnknownError(IllegalStateException("boom"))

then("기본 실패 메시지를 반환한다") {
then("exception을 그대로 담은 실패 Result를 반환한다") {
runTest {
val result = repository.updateUserName(ChangeNicknameRequest("new"))
val result = repository.updateUserName("new")
result.isFailure shouldBe true
result.exceptionOrNull()?.message shouldBe "닉네임 변경에 실패했어요."
result.exceptionOrNull()?.message shouldBe "boom"
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package com.eatssu.android.domain.usecase.auth
import com.eatssu.android.data.local.AccountDataStore
import com.eatssu.android.data.local.SettingDataStore
import com.eatssu.android.data.local.TokenStore
import com.eatssu.android.data.remote.dto.request.CheckValidTokenRequest
import com.eatssu.android.domain.model.ReissueTokenResult
import com.eatssu.android.domain.repository.OauthRepository
import com.eatssu.android.domain.repository.UserRepository
Expand All @@ -20,7 +19,6 @@ import io.mockk.coVerifyOrder
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
import io.mockk.slot
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest

Expand Down Expand Up @@ -163,13 +161,12 @@ class AuthDelegatingUseCasesBehaviorSpec : AppBehaviorSpec({
val useCase = GetIsAccessTokenValidUseCase(oauthRepository)

`when`("토큰 유효성 검사를 요청하면") {
val bodySlot = slot<CheckValidTokenRequest>()
coEvery { oauthRepository.checkValidToken(capture(bodySlot)) } returns true
coEvery { oauthRepository.checkValidToken("user-access-token") } returns true

then("CheckValidTokenRequest(token)으로 위임하고 결과를 반환한다") {
then("token으로 위임하고 결과를 반환한다") {
runTest {
useCase("user-access-token") shouldBe true
bodySlot.captured.token shouldBe "user-access-token"
coVerify(exactly = 1) { oauthRepository.checkValidToken("user-access-token") }
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.eatssu.android.domain.usecase.review

import androidx.paging.PagingData
import com.eatssu.android.data.remote.dto.request.ReportRequest
import com.eatssu.android.domain.model.Review
import com.eatssu.android.domain.repository.ReportRepository
import com.eatssu.android.domain.repository.ReviewRepository
Expand Down Expand Up @@ -140,28 +139,26 @@ class ReviewDelegatingUseCasesBehaviorSpec : AppBehaviorSpec({
given("PostReportUseCase") {
val reportRepository = mockk<ReportRepository>()
val useCase = PostReportUseCase(reportRepository)
val body = ReportRequest(
reviewId = 3L,
reportType = "SPAM",
content = "신고 사유",
)
val reviewId = 3L
val reportType = "SPAM"
val content = "신고 사유"

`when`("신고가 성공하면") {
coEvery { reportRepository.reportReview(body) } returns true
coEvery { reportRepository.reportReview(reviewId, reportType, content) } returns true

then("true를 반환한다") {
runTest {
useCase(body) shouldBe true
useCase(reviewId = reviewId, reportType = reportType, content = content) shouldBe true
}
}
}

`when`("신고가 실패하면") {
coEvery { reportRepository.reportReview(body) } returns false
coEvery { reportRepository.reportReview(reviewId, reportType, content) } returns false

then("false를 반환한다") {
runTest {
useCase(body) shouldBe false
useCase(reviewId = reviewId, reportType = reportType, content = content) shouldBe false
}
}
}
Expand Down
Loading
Loading