Skip to content

Commit 3dd2cf8

Browse files
committed
Make Redis actor private
1 parent 1aeeb15 commit 3dd2cf8

File tree

2 files changed

+47
-10
lines changed

2 files changed

+47
-10
lines changed

Sources/App/Core/Dependencies/CurrentReferenceCacheClient.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,19 @@ extension CurrentReferenceCacheClient: DependencyKey {
2727
static var liveValue: CurrentReferenceCacheClient {
2828
.init(
2929
set: { owner, repository, reference async in
30-
await Redis.shared?.set(owner: owner, repository: repository, reference: reference)
30+
@Dependency(\.redis) var redis
31+
await redis.set(key: getKey(owner: owner, repository: repository), value: reference)
3132
},
3233
get: { owner, repository in
33-
await Redis.shared?.get(owner: owner, repository: repository)
34+
@Dependency(\.redis) var redis
35+
return await redis.get(key: getKey(owner: owner, repository: repository))
3436
}
3537
)
3638
}
39+
40+
static func getKey(owner: String, repository: String) -> String {
41+
"\(owner)/\(repository)".lowercased()
42+
}
3743
}
3844

3945

Sources/App/Core/Dependencies/RedisClient.swift

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,42 @@
1414

1515
import NIOCore
1616
@preconcurrency import RediStack
17+
import Dependencies
18+
import DependenciesMacros
1719

1820

19-
actor Redis {
20-
var client: RedisClient
21+
@DependencyClient
22+
struct RedisClient {
23+
var set: @Sendable (_ key: String, _ value: String?) async -> Void
24+
var get: @Sendable (_ key: String) async -> String?
25+
}
26+
27+
28+
extension RedisClient: DependencyKey {
29+
static var liveValue: RedisClient {
30+
.init(
31+
set: { key, value in await Redis.shared?.set(key: key, value: value) },
32+
get: { key in await Redis.shared?.get(key: key) }
33+
)
34+
}
35+
}
36+
37+
38+
extension RedisClient: TestDependencyKey {
39+
static var testValue: Self { Self() }
40+
}
41+
42+
43+
extension DependencyValues {
44+
var redis: RedisClient {
45+
get { self[RedisClient.self] }
46+
set { self[RedisClient.self] = newValue }
47+
}
48+
}
49+
50+
51+
private actor Redis {
52+
var client: RediStack.RedisClient
2153
static private var task: Task<Redis?, Never>?
2254

2355
static var shared: Redis? {
@@ -51,14 +83,14 @@ actor Redis {
5183
self.client = try await connection.get()
5284
}
5385

86+
#warning("move expiry to interface")
5487
static let expirationInSeconds = 5*60
5588
static let hostname = "redis"
5689
static let maxConnectionAttempts = 3
5790

58-
func set(owner: String, repository: String, reference: String?) async -> Void {
59-
let key = "\(owner)/\(repository)".lowercased()
60-
if let reference {
61-
let buffer = ByteBuffer(string: reference)
91+
func set(key: String, value: String?) async -> Void {
92+
if let value {
93+
let buffer = ByteBuffer(string: value)
6294
try? await client.setex(.init(key),
6395
to: RESPValue.bulkString(buffer),
6496
expirationInSeconds: Self.expirationInSeconds).get()
@@ -67,8 +99,7 @@ actor Redis {
6799
}
68100
}
69101

70-
func get(owner: String, repository: String) async -> String? {
71-
let key = "\(owner)/\(repository)".lowercased()
102+
func get(key: String) async -> String? {
72103
return try? await client.get(.init(key)).map(\.string).get()
73104
}
74105
}

0 commit comments

Comments
 (0)