Добавил логику с наградами

This commit is contained in:
2025-12-25 22:49:00 +03:00
parent 4ff516d06a
commit 2de916cfd9
17 changed files with 715 additions and 169 deletions
@@ -7,8 +7,11 @@ data class Reward(
val title: String,
val description: String?,
val imageUrl: String?,
val points: Int,
val pointsRequired: Int,
val isClaimed: Boolean = false,
val earnedAt: LocalDateTime? = null,
val userId: String
val userId: String,
val createdAt: LocalDateTime? = null,
val updatedAt: LocalDateTime? = null
)
@@ -4,11 +4,12 @@ import com.novayaplaneta.domain.model.Reward
import kotlinx.coroutines.flow.Flow
interface RewardRepository {
suspend fun loadRewards(skip: Int = 0, limit: Int = 100, isClaimed: Boolean? = null): Result<Unit>
fun getRewards(userId: String): Flow<List<Reward>>
suspend fun getRewardById(id: String): Reward?
suspend fun createReward(reward: Reward)
suspend fun getRewardById(id: String): Result<Reward>
suspend fun createReward(reward: Reward): Result<Reward>
suspend fun updateReward(reward: Reward)
suspend fun deleteReward(id: String)
suspend fun earnReward(userId: String, rewardId: String)
suspend fun deleteReward(id: String): Result<Unit>
suspend fun claimReward(rewardId: String): Result<Reward>
}
@@ -0,0 +1,14 @@
package com.novayaplaneta.domain.usecase
import com.novayaplaneta.domain.model.Reward
import com.novayaplaneta.domain.repository.RewardRepository
import javax.inject.Inject
class ClaimRewardUseCase @Inject constructor(
private val repository: RewardRepository
) {
suspend operator fun invoke(rewardId: String): Result<Reward> {
return repository.claimReward(rewardId)
}
}
@@ -0,0 +1,14 @@
package com.novayaplaneta.domain.usecase
import com.novayaplaneta.domain.model.Reward
import com.novayaplaneta.domain.repository.RewardRepository
import javax.inject.Inject
class CreateRewardUseCase @Inject constructor(
private val repository: RewardRepository
) {
suspend operator fun invoke(reward: Reward): Result<Reward> {
return repository.createReward(reward)
}
}
@@ -0,0 +1,13 @@
package com.novayaplaneta.domain.usecase
import com.novayaplaneta.domain.repository.RewardRepository
import javax.inject.Inject
class DeleteRewardUseCase @Inject constructor(
private val repository: RewardRepository
) {
suspend operator fun invoke(id: String): Result<Unit> {
return repository.deleteReward(id)
}
}
@@ -0,0 +1,14 @@
package com.novayaplaneta.domain.usecase
import com.novayaplaneta.domain.model.Reward
import com.novayaplaneta.domain.repository.RewardRepository
import javax.inject.Inject
class GetRewardByIdUseCase @Inject constructor(
private val repository: RewardRepository
) {
suspend operator fun invoke(id: String): Result<Reward> {
return repository.getRewardById(id)
}
}
@@ -0,0 +1,23 @@
package com.novayaplaneta.domain.usecase
import com.novayaplaneta.domain.model.Reward
import com.novayaplaneta.domain.repository.RewardRepository
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject
class GetRewardsUseCase @Inject constructor(
private val repository: RewardRepository
) {
operator fun invoke(userId: String): Flow<List<Reward>> {
return repository.getRewards(userId)
}
suspend fun loadRewards(skip: Int = 0, limit: Int = 100, isClaimed: Boolean? = null): Result<Unit> {
return try {
repository.loadRewards(skip, limit, isClaimed)
} catch (e: Exception) {
Result.failure(e)
}
}
}