Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions Application/Data/Sources/DataAssembler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -117,13 +117,15 @@ public final class DataAssembler: Assembler {

container.register(WebPageRepository.self) {
WebPageRepositoryImpl(
webPageService: container.resolve(WebPageService.self),
metadataService: container.resolve(WebPageMetadataService.self)
authService: container.resolve(AuthService.self),
metadataService: container.resolve(WebPageMetadataService.self),
webPageService: container.resolve(WebPageService.self)
)
}

container.register(WebPageImageRepository.self) {
WebPageImageRepositoryImpl(
authService: container.resolve(AuthService.self),
store: container.resolve(WebPageImageStore.self)
)
}
Expand Down
10 changes: 5 additions & 5 deletions Application/Data/Sources/Protocol/WebPageImageStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
import Foundation

public protocol WebPageImageStore {
func cachedImageURL(for url: URL) async throws -> URL
func saveImage(_ data: Data, for url: URL) async throws -> URL
func dirSizeInBytes() async -> Int64
func clearDirectory() async throws
func removeImage(for url: URL) async throws -> Bool
func cachedImageURL(for url: URL, accountID: String?) async throws -> URL
func saveImage(_ data: Data, for url: URL, accountID: String?) async throws -> URL
func dirSizeInBytes(accountID: String?) async -> Int64
func clearDirectory(accountID: String?) async throws
func removeImage(for url: URL, accountID: String?) async throws -> Bool
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import Foundation

public protocol WebPageMetadataService {
func fetchMetadata(from urlString: String) async throws -> WebPageMetadataResponse
func removeCachedImage(for urlString: String) async
func cachedImageURL(for urlString: String) async throws -> URL
func fetchMetadata(from urlString: String, accountID: String?) async throws -> WebPageMetadataResponse
func removeCachedImage(for urlString: String, accountID: String?) async
func cachedImageURL(for urlString: String, accountID: String?) async throws -> URL
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,22 @@
import Domain

final class WebPageImageRepositoryImpl: WebPageImageRepository {
private let authService: AuthService
private let store: WebPageImageStore

init(store: WebPageImageStore) {
init(
authService: AuthService,
store: WebPageImageStore
) {
self.authService = authService
self.store = store
}

func fetchDirSizeInBytes() async -> Int64 {
await store.dirSizeInBytes()
await store.dirSizeInBytes(accountID: authService.uid)
}

func clearDirectory() async throws {
try await store.clearDirectory()
try await store.clearDirectory(accountID: authService.uid)
}
}
30 changes: 18 additions & 12 deletions Application/Data/Sources/Repository/WebPageRepositoryImpl.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,30 @@ import UIKit
import Domain

final class WebPageRepositoryImpl: WebPageRepository {
private let webPageService: WebPageService
private let authService: AuthService
private let metadataService: WebPageMetadataService
private let webPageService: WebPageService

init(
webPageService: WebPageService,
metadataService: WebPageMetadataService
authService: AuthService,
metadataService: WebPageMetadataService,
webPageService: WebPageService
) {
self.webPageService = webPageService
self.authService = authService
self.metadataService = metadataService
self.webPageService = webPageService
}

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

for response in responses {
if await needsImageRestore(response) {
if let restored = try? await restoreWebPage(response) {
if await needsImageRestore(response, accountID: accountID) {
if let restored = try? await restoreWebPage(response, accountID: accountID) {
pages.append(restored)
} else if let page = try? responseWithoutImage(response).toDomain() {
pages.append(page)
Expand All @@ -49,7 +53,8 @@ final class WebPageRepositoryImpl: WebPageRepository {

func upsert(_ urlString: String) async throws {
do {
let metadata = try await metadataService.fetchMetadata(from: urlString)
let accountID = authService.uid
let metadata = try await metadataService.fetchMetadata(from: urlString, accountID: accountID)
let request = WebPageRequest(
title: metadata.title,
url: urlString,
Expand All @@ -65,8 +70,9 @@ final class WebPageRepositoryImpl: WebPageRepository {

func delete(id: String, urlString: String) async throws {
do {
let accountID = authService.uid
try await webPageService.deleteWebPage(id)
await metadataService.removeCachedImage(for: urlString)
await metadataService.removeCachedImage(for: urlString, accountID: accountID)
} catch {
throw error.toDomain()
}
Expand All @@ -82,7 +88,7 @@ final class WebPageRepositoryImpl: WebPageRepository {
}

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

let expectedImageURL: URL
do {
expectedImageURL = try await metadataService.cachedImageURL(for: response.url)
expectedImageURL = try await metadataService.cachedImageURL(for: response.url, accountID: accountID)
} catch {
return true
}
Expand All @@ -113,8 +119,8 @@ private extension WebPageRepositoryImpl {
}.value
}

func restoreWebPage(_ response: WebPageResponse) async throws -> WebPage? {
let metadata = try await metadataService.fetchMetadata(from: response.url)
func restoreWebPage(_ response: WebPageResponse, accountID: String?) async throws -> WebPage? {
let metadata = try await metadataService.fetchMetadata(from: response.url, accountID: accountID)
let request = WebPageRequest(
title: metadata.title,
url: response.url,
Expand Down
177 changes: 0 additions & 177 deletions Application/Data/Tests/Repository/AuthSessionRepositoryImplTests.swift

This file was deleted.

Loading
Loading