This commit is contained in:
2026-08-19 22:06:01 +03:00
parent 9b10bb21fa
commit 82ad688a92
4 changed files with 12 additions and 15 deletions
@@ -71,7 +71,7 @@ class RedisCache(
}
}
suspend inline fun <reified T> exec(
suspend inline fun <reified T> transact(
key: String,
ttl: Duration? = null,
createNew: suspend () -> T
@@ -16,7 +16,7 @@ class CacheVideoApi(
private val ttl = 3.days
override suspend fun fetchNewVideos(query: String?): VideosResponse {
return redis.exec("$PREFIX:videos:$query", ttl) {
return redis.transact("$PREFIX:videos:$query", ttl) {
wrapper.fetchNewVideos(query).let {
if (query != null) {
it.copy(items = filter.filter(it.items, query))
@@ -28,11 +28,11 @@ class CacheVideoApi(
}
override suspend fun fetchDetails(id: Long): VideoDetails {
return redis.exec("$PREFIX:details:$id", ttl) { wrapper.fetchDetails(id) }
return redis.transact("$PREFIX:details:$id", ttl) { wrapper.fetchDetails(id) }
}
override suspend fun fetchVideoLinks(id: Long, seasonId: Long?): VideoLinksResponse {
return redis.exec("$PREFIX:links:$id:$seasonId", ttl) {
return redis.transact("$PREFIX:links:$id:$seasonId", ttl) {
wrapper.fetchVideoLinks(id, seasonId)
}
}
@@ -38,7 +38,7 @@ class CacheRecentlyWatchedRepository(
): Flow<List<RecentlyWatchedInfo>> {
return flow {
emit(
redis.exec(
redis.transact(
"$prefix:$movieId:$seasonId",
7.days
) { wrapper.queryRecentlyWatched(movieId, seasonId).first() }
@@ -47,7 +47,7 @@ class CacheRecentlyWatchedRepository(
}
override suspend fun getAllRecentlyWatched(): List<RecentlyWatchedInfo> {
return redis.exec(
return redis.transact(
prefix,
7.days
) { wrapper.getAllRecentlyWatched() }
@@ -10,38 +10,35 @@ import kotlin.time.Duration.Companion.days
class CacheSavedMovieRepository(
private val wrapper: SavedMovieRepository,
private val redisCache: RedisCache,
private val redis: RedisCache,
userId: Long
) : SavedMovieRepository {
private val ttl = 7.days
private val prefix = "saved-movie:$userId"
override suspend fun save(details: VideoDetails) {
obtainKeys(details.id).forEach { redisCache.delete(it) }
obtainKeys(details.id).forEach { redis.delete(it) }
wrapper.save(details)
}
private fun obtainKeys(id: Long): Set<String> {
return setOf(
"$prefix:$id",
prefix
)
return setOf("$prefix:$id", prefix)
}
override fun getAll(): Flow<List<VideoDetails>> {
return flow {
emit(redisCache.exec(prefix, ttl) { wrapper.getAll().first() })
emit(redis.transact(prefix, ttl) { wrapper.getAll().first() })
}
}
override fun isSaved(id: Long): Flow<Boolean> {
return flow {
emit(redisCache.exec("$prefix:$id") { wrapper.isSaved(id).first() })
emit(redis.transact("$prefix:$id") { wrapper.isSaved(id).first() })
}
}
override suspend fun remove(id: Long) {
obtainKeys(id).forEach { redisCache.delete(it) }
obtainKeys(id).forEach { redis.delete(it) }
wrapper.remove(id)
}
}