35 lines
1.2 KiB
Swift
35 lines
1.2 KiB
Swift
import Foundation
|
|
|
|
@MainActor
|
|
protocol LeadDetailRepository {
|
|
func detail(id: String, salesCode: String) async throws -> LeadDetail
|
|
func file(_ reference: LeadFileReference, leadID: String, salesCode: String) async throws -> URL
|
|
}
|
|
|
|
struct GetLeadDetailUseCase {
|
|
let repository: any LeadDetailRepository
|
|
|
|
func execute(id: String, salesCode: String) async throws -> LeadDetail {
|
|
try await repository.detail(id: id, salesCode: salesCode)
|
|
}
|
|
}
|
|
|
|
struct DownloadLeadDocumentUseCase {
|
|
let repository: any LeadDetailRepository
|
|
|
|
func execute(_ document: LeadDocument, leadID: String, salesCode: String) async throws -> URL {
|
|
guard document.file.kind == .pdf else { throw LeadFileError.invalidFile }
|
|
return try await repository.file(document.file, leadID: leadID, salesCode: salesCode)
|
|
}
|
|
}
|
|
|
|
struct LoadLeadPhotoUseCase {
|
|
let repository: any LeadDetailRepository
|
|
|
|
func execute(_ photo: LeadPhoto, original: Bool = false,
|
|
leadID: String, salesCode: String) async throws -> URL {
|
|
try await repository.file(original ? photo.original : photo.thumbnail,
|
|
leadID: leadID, salesCode: salesCode)
|
|
}
|
|
}
|