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
Expand Up @@ -4,6 +4,7 @@ import com.ssafy.tiggle.data.model.BaseResponse
import com.ssafy.tiggle.data.model.EmptyResponse
import com.ssafy.tiggle.data.model.donation.DonationAccountDto
import com.ssafy.tiggle.data.model.donation.DonationHistoryDto
import com.ssafy.tiggle.data.model.donation.DonationRankDto
import com.ssafy.tiggle.data.model.donation.DonationRequestDto
import com.ssafy.tiggle.data.model.donation.DonationStatusDto
import com.ssafy.tiggle.data.model.donation.DonationSummaryDto
Expand Down Expand Up @@ -33,4 +34,10 @@ interface DonationApiService {

@POST("/api/donation")
suspend fun createDonation(@Body request: DonationRequestDto): Response<BaseResponse<EmptyResponse>>

@GET("/api/donation/rank/university")
suspend fun getUniversityRanking(): Response<BaseResponse<List<DonationRankDto>>>

@GET("/api/donation/rank/department")
suspend fun getDepartmentRanking(): Response<BaseResponse<List<DonationRankDto>>>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.ssafy.tiggle.data.model.donation

import kotlinx.serialization.Serializable

@Serializable
data class DonationRankDto(
val rank: Int,
val name: String,
val amount: Int
)
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.ssafy.tiggle.data.model.donation.DonationRequestDto
import com.ssafy.tiggle.domain.entity.donation.DonationAccount
import com.ssafy.tiggle.domain.entity.donation.DonationCategory
import com.ssafy.tiggle.domain.entity.donation.DonationHistory
import com.ssafy.tiggle.domain.entity.donation.DonationRank
import com.ssafy.tiggle.domain.entity.donation.DonationRequest
import com.ssafy.tiggle.domain.entity.donation.DonationStatus
import com.ssafy.tiggle.domain.entity.donation.DonationStatusType
Expand Down Expand Up @@ -133,4 +134,44 @@ class DonationRepositoryImpl @Inject constructor(
Result.failure(e)
}
}

override suspend fun getUniversityRanking(): Result<List<DonationRank>> {
return try {
val response = donationApiService.getUniversityRanking()
if (response.isSuccessful && response.body()?.result == true) {
val rankingList = response.body()?.data?.map { dto ->
DonationRank(
rank = dto.rank,
name = dto.name,
amount = dto.amount
)
} ?: emptyList()
Result.success(rankingList)
} else {
Result.failure(Exception("Failed to fetch university ranking"))
}
} catch (e: Exception) {
Result.failure(e)
}
}

override suspend fun getDepartmentRanking(): Result<List<DonationRank>> {
return try {
val response = donationApiService.getDepartmentRanking()
if (response.isSuccessful && response.body()?.result == true) {
val rankingList = response.body()?.data?.map { dto ->
DonationRank(
rank = dto.rank,
amount = dto.amount,
name = dto.name
)
} ?: emptyList()
Result.success(rankingList)
} else {
Result.failure(Exception("Failed to fetch department ranking"))
}
} catch (e: Exception) {
Result.failure(e)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.ssafy.tiggle.domain.entity.donation

data class DonationRank(
val rank: Int,
val name: String,
val amount: Int
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.ssafy.tiggle.domain.repository

import com.ssafy.tiggle.domain.entity.donation.DonationAccount
import com.ssafy.tiggle.domain.entity.donation.DonationHistory
import com.ssafy.tiggle.domain.entity.donation.DonationRank
import com.ssafy.tiggle.domain.entity.donation.DonationRequest
import com.ssafy.tiggle.domain.entity.donation.DonationStatus
import com.ssafy.tiggle.domain.entity.donation.DonationStatusType
Expand All @@ -13,4 +14,6 @@ interface DonationRepository {
suspend fun getDonationStatus(type: DonationStatusType): Result<DonationStatus>
suspend fun getDonationAccount(): Result<DonationAccount>
suspend fun createDonation(request: DonationRequest): Result<Unit>
suspend fun getUniversityRanking(): Result<List<DonationRank>>
suspend fun getDepartmentRanking(): Result<List<DonationRank>>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.ssafy.tiggle.domain.usecase.donation

import com.ssafy.tiggle.domain.entity.donation.DonationRank
import com.ssafy.tiggle.domain.repository.DonationRepository
import javax.inject.Inject

class GetDepartmentRankingUseCase @Inject constructor(
private val donationRepository: DonationRepository
) {
suspend operator fun invoke(): Result<List<DonationRank>> {
return donationRepository.getDepartmentRanking()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.ssafy.tiggle.domain.usecase.donation

import com.ssafy.tiggle.domain.entity.donation.DonationRank
import com.ssafy.tiggle.domain.repository.DonationRepository
import javax.inject.Inject

class GetUniversityRankingUseCase @Inject constructor(
private val donationRepository: DonationRepository
) {
suspend operator fun invoke(): Result<List<DonationRank>> {
return donationRepository.getUniversityRanking()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import androidx.navigation3.ui.rememberSceneSetupNavEntryDecorator
import com.ssafy.tiggle.presentation.ui.auth.login.LoginScreen
import com.ssafy.tiggle.presentation.ui.auth.signup.SignUpScreen
import com.ssafy.tiggle.presentation.ui.donation.DonationHistoryScreen
import com.ssafy.tiggle.presentation.ui.donation.DonationRankingScreen
import com.ssafy.tiggle.presentation.ui.donation.DonationStatusScreen
import com.ssafy.tiggle.presentation.ui.dutchpay.CreateDutchPayScreen
import com.ssafy.tiggle.presentation.ui.dutchpay.DutchpayRecieveScreen
Expand Down Expand Up @@ -122,7 +123,7 @@ fun NavigationGraph(
navBackStack.add(Screen.DonationStatus)
},
onDonationRankingClick = {
// TODO: 기부 랭킹 화면 구현 시 추가
navBackStack.add(Screen.DonationRanking)
}
)
}
Expand Down Expand Up @@ -220,6 +221,12 @@ fun NavigationGraph(
)
}

is Screen.DonationRanking -> NavEntry(key) {
DonationRankingScreen(
onNavigateBack = { navBackStack.removeLastOrNull() }
)
}

is Screen.DutchPayStatus -> NavEntry(key) {
DutchPayStatusScreen(
onBackClick = { navBackStack.removeLastOrNull() },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ sealed interface Screen : NavKey {
@Serializable
object DonationStatus : Screen

@Serializable
object DonationRanking : Screen

@Serializable
data class DutchpayRecieve(val dutchPayId: Long) : Screen

Expand Down
Loading