Skip to content

Commit 46ba90e

Browse files
committed
refactor: 웹페이지 이미지 저장 책임을 스토어와 유즈케이스로 분리
1 parent 14f5a29 commit 46ba90e

2 files changed

Lines changed: 13 additions & 42 deletions

File tree

DevLog/App/Assembler/InfraAssembler.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ final class InfraAssembler: Assembler {
5353
}
5454

5555
container.register(WebPageMetadataService.self) {
56-
WebPageMetadataService()
56+
WebPageMetadataService(
57+
store: container.resolve(WebPageImageStore.self)
58+
)
5759
}
5860

5961
container.register(NWPathConnectivityProvider.self) {

DevLog/Infra/Service/WebPageMetadataService.swift

Lines changed: 10 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,13 @@ import LinkPresentation
1010
import UIKit
1111

1212
final class WebPageMetadataService {
13+
private let imageStore: WebPageImageStore
1314
private let logger = Logger(category: "WebPageMetadataService")
1415

16+
init(store: WebPageImageStore) {
17+
self.imageStore = store
18+
}
19+
1520
func fetchMetadata(from urlString: String) async throws -> WebPageMetadataResponse {
1621
logger.info("Fetching metadata for URL: \(urlString)")
1722

@@ -46,12 +51,7 @@ final class WebPageMetadataService {
4651
}
4752

4853
do {
49-
let removed = try await Task.detached(priority: .utility) {
50-
let fileURL = try Self.cacheFileURL(for: url)
51-
guard FileManager.default.fileExists(atPath: fileURL.path) else { return false }
52-
try FileManager.default.removeItem(at: fileURL)
53-
return true
54-
}.value
54+
let removed = try imageStore.removeImage(for: url)
5555

5656
if removed {
5757
logger.info("Removed cached image for URL: \(urlString)")
@@ -66,11 +66,12 @@ final class WebPageMetadataService {
6666
throw URLError(.badURL)
6767
}
6868

69-
return try Self.cacheFileURL(for: url)
69+
return try imageStore.cachedImageURL(for: url)
7070
}
7171

7272
private func extractImageURL(from imageProvider: NSItemProvider?, url: URL) async throws -> URL? {
7373
guard let imageProvider else { return nil }
74+
let imageStore = self.imageStore
7475

7576
return try await withCheckedThrowingContinuation { continuation in
7677
imageProvider.loadObject(ofClass: UIImage.self) { image, error in
@@ -86,44 +87,12 @@ final class WebPageMetadataService {
8687
}
8788

8889
do {
89-
let fileURL = try Self.cacheFileURL(for: url)
90-
Task.detached { [data, fileURL] in
91-
do {
92-
try data.write(to: fileURL, options: [.atomic])
93-
continuation.resume(returning: fileURL)
94-
} catch {
95-
continuation.resume(throwing: error)
96-
}
97-
}
90+
let fileURL = try imageStore.saveImage(data, for: url)
91+
continuation.resume(returning: fileURL)
9892
} catch {
9993
continuation.resume(throwing: error)
10094
}
10195
}
10296
}
10397
}
104-
105-
private static func cacheFileURL(for url: URL) throws -> URL {
106-
let imageDir = try imageDirectoryURL()
107-
let fileName = url.absoluteString
108-
.addingPercentEncoding(withAllowedCharacters: .alphanumerics) ?? UUID().uuidString
109-
110-
return imageDir
111-
.appendingPathComponent(fileName)
112-
.appendingPathExtension("jpeg")
113-
}
114-
115-
private static func imageDirectoryURL() throws -> URL {
116-
let directory = try FileManager.default.url(
117-
for: .applicationSupportDirectory,
118-
in: .userDomainMask,
119-
appropriateFor: nil,
120-
create: true
121-
)
122-
let imageDir = directory.appendingPathComponent("webPageImages", isDirectory: true)
123-
if !FileManager.default.fileExists(atPath: imageDir.path) {
124-
try FileManager.default.createDirectory(at: imageDir, withIntermediateDirectories: true)
125-
}
126-
127-
return imageDir
128-
}
12998
}

0 commit comments

Comments
 (0)