Skip to content

Commit 27a7106

Browse files
authored
[#706] 계정별로 캐시용 디렉토리를 분리한다 (#711)
* refactor: WebPage 캐시 인터페이스에 계정 scope 추가 * refactor: WebPage 캐시 계정 scope 전달 정리 * fix: WebPage 이미지 캐시 계정별 디렉토리 적용 * test: 피쳐 테스트 중심으로 테스트 정리
1 parent 08eb99c commit 27a7106

23 files changed

Lines changed: 370 additions & 1172 deletions

Application/Data/Sources/DataAssembler.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,15 @@ public final class DataAssembler: Assembler {
117117

118118
container.register(WebPageRepository.self) {
119119
WebPageRepositoryImpl(
120-
webPageService: container.resolve(WebPageService.self),
121-
metadataService: container.resolve(WebPageMetadataService.self)
120+
authService: container.resolve(AuthService.self),
121+
metadataService: container.resolve(WebPageMetadataService.self),
122+
webPageService: container.resolve(WebPageService.self)
122123
)
123124
}
124125

125126
container.register(WebPageImageRepository.self) {
126127
WebPageImageRepositoryImpl(
128+
authService: container.resolve(AuthService.self),
127129
store: container.resolve(WebPageImageStore.self)
128130
)
129131
}

Application/Data/Sources/Protocol/WebPageImageStore.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
import Foundation
99

1010
public protocol WebPageImageStore {
11-
func cachedImageURL(for url: URL) async throws -> URL
12-
func saveImage(_ data: Data, for url: URL) async throws -> URL
13-
func dirSizeInBytes() async -> Int64
14-
func clearDirectory() async throws
15-
func removeImage(for url: URL) async throws -> Bool
11+
func cachedImageURL(for url: URL, accountID: String?) async throws -> URL
12+
func saveImage(_ data: Data, for url: URL, accountID: String?) async throws -> URL
13+
func dirSizeInBytes(accountID: String?) async -> Int64
14+
func clearDirectory(accountID: String?) async throws
15+
func removeImage(for url: URL, accountID: String?) async throws -> Bool
1616
}

Application/Data/Sources/Protocol/WebPageMetadataService.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import Foundation
99

1010
public protocol WebPageMetadataService {
11-
func fetchMetadata(from urlString: String) async throws -> WebPageMetadataResponse
12-
func removeCachedImage(for urlString: String) async
13-
func cachedImageURL(for urlString: String) async throws -> URL
11+
func fetchMetadata(from urlString: String, accountID: String?) async throws -> WebPageMetadataResponse
12+
func removeCachedImage(for urlString: String, accountID: String?) async
13+
func cachedImageURL(for urlString: String, accountID: String?) async throws -> URL
1414
}

Application/Data/Sources/Repository/WebPageImageRepositoryImpl.swift

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,22 @@
88
import Domain
99

1010
final class WebPageImageRepositoryImpl: WebPageImageRepository {
11+
private let authService: AuthService
1112
private let store: WebPageImageStore
1213

13-
init(store: WebPageImageStore) {
14+
init(
15+
authService: AuthService,
16+
store: WebPageImageStore
17+
) {
18+
self.authService = authService
1419
self.store = store
1520
}
1621

1722
func fetchDirSizeInBytes() async -> Int64 {
18-
await store.dirSizeInBytes()
23+
await store.dirSizeInBytes(accountID: authService.uid)
1924
}
2025

2126
func clearDirectory() async throws {
22-
try await store.clearDirectory()
27+
try await store.clearDirectory(accountID: authService.uid)
2328
}
2429
}

Application/Data/Sources/Repository/WebPageRepositoryImpl.swift

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,30 @@ import UIKit
1010
import Domain
1111

1212
final class WebPageRepositoryImpl: WebPageRepository {
13-
private let webPageService: WebPageService
13+
private let authService: AuthService
1414
private let metadataService: WebPageMetadataService
15+
private let webPageService: WebPageService
1516

1617
init(
17-
webPageService: WebPageService,
18-
metadataService: WebPageMetadataService
18+
authService: AuthService,
19+
metadataService: WebPageMetadataService,
20+
webPageService: WebPageService
1921
) {
20-
self.webPageService = webPageService
22+
self.authService = authService
2123
self.metadataService = metadataService
24+
self.webPageService = webPageService
2225
}
2326

2427
func fetch(_ query: String) async throws -> [WebPage] {
2528
do {
29+
let accountID = authService.uid
2630
let responses = try await webPageService.fetchWebPages(query)
2731
var pages: [WebPage] = []
2832
pages.reserveCapacity(responses.count)
2933

3034
for response in responses {
31-
if await needsImageRestore(response) {
32-
if let restored = try? await restoreWebPage(response) {
35+
if await needsImageRestore(response, accountID: accountID) {
36+
if let restored = try? await restoreWebPage(response, accountID: accountID) {
3337
pages.append(restored)
3438
} else if let page = try? responseWithoutImage(response).toDomain() {
3539
pages.append(page)
@@ -49,7 +53,8 @@ final class WebPageRepositoryImpl: WebPageRepository {
4953

5054
func upsert(_ urlString: String) async throws {
5155
do {
52-
let metadata = try await metadataService.fetchMetadata(from: urlString)
56+
let accountID = authService.uid
57+
let metadata = try await metadataService.fetchMetadata(from: urlString, accountID: accountID)
5358
let request = WebPageRequest(
5459
title: metadata.title,
5560
url: urlString,
@@ -65,8 +70,9 @@ final class WebPageRepositoryImpl: WebPageRepository {
6570

6671
func delete(id: String, urlString: String) async throws {
6772
do {
73+
let accountID = authService.uid
6874
try await webPageService.deleteWebPage(id)
69-
await metadataService.removeCachedImage(for: urlString)
75+
await metadataService.removeCachedImage(for: urlString, accountID: accountID)
7076
} catch {
7177
throw error.toDomain()
7278
}
@@ -82,7 +88,7 @@ final class WebPageRepositoryImpl: WebPageRepository {
8288
}
8389

8490
private extension WebPageRepositoryImpl {
85-
func needsImageRestore(_ response: WebPageResponse) async -> Bool {
91+
func needsImageRestore(_ response: WebPageResponse, accountID: String?) async -> Bool {
8692
guard !response.imageURL.isEmpty,
8793
let imageURL = URL(string: response.imageURL),
8894
imageURL.isFileURL else {
@@ -91,7 +97,7 @@ private extension WebPageRepositoryImpl {
9197

9298
let expectedImageURL: URL
9399
do {
94-
expectedImageURL = try await metadataService.cachedImageURL(for: response.url)
100+
expectedImageURL = try await metadataService.cachedImageURL(for: response.url, accountID: accountID)
95101
} catch {
96102
return true
97103
}
@@ -113,8 +119,8 @@ private extension WebPageRepositoryImpl {
113119
}.value
114120
}
115121

116-
func restoreWebPage(_ response: WebPageResponse) async throws -> WebPage? {
117-
let metadata = try await metadataService.fetchMetadata(from: response.url)
122+
func restoreWebPage(_ response: WebPageResponse, accountID: String?) async throws -> WebPage? {
123+
let metadata = try await metadataService.fetchMetadata(from: response.url, accountID: accountID)
118124
let request = WebPageRequest(
119125
title: metadata.title,
120126
url: response.url,

Application/Data/Tests/Repository/AuthSessionRepositoryImplTests.swift

Lines changed: 0 additions & 177 deletions
This file was deleted.

0 commit comments

Comments
 (0)