diff --git a/Sources/BadaData/PersistentStore.swift b/Sources/BadaData/PersistentStore.swift index bf846e1..b423df2 100644 --- a/Sources/BadaData/PersistentStore.swift +++ b/Sources/BadaData/PersistentStore.swift @@ -1,6 +1,8 @@ import Foundation import SwiftData +import BadaDomain +@Repository enum PersistentStore { case main case mainTest @@ -25,6 +27,7 @@ enum PersistentStore { } extension PersistentStore { + @Repository private static let _mainContainer: ModelContainer = { do { let container = try ModelContainer( @@ -45,10 +48,12 @@ extension PersistentStore { } }() + @Repository private static let _mainContext: ModelContext = { ModelContext(_mainContainer) }() + @Repository private static let _mainTestContainer: ModelContainer = { do { let container = try ModelContainer( @@ -69,6 +74,7 @@ extension PersistentStore { } }() + @Repository private static let _mainTestContext: ModelContext = { ModelContext(_mainTestContainer) }() diff --git a/Sources/BadaDomain/Interfaces/DiveLogRepositoryType.swift b/Sources/BadaDomain/Interfaces/DiveLogRepositoryType.swift index 1a659bd..5df4201 100644 --- a/Sources/BadaDomain/Interfaces/DiveLogRepositoryType.swift +++ b/Sources/BadaDomain/Interfaces/DiveLogRepositoryType.swift @@ -1,5 +1,6 @@ import Foundation +@Repository package protocol DiveLogRepositoryType { func insert(diveLog: DiveLog) -> Result func diveLogs() -> Result<[DiveLog], DiveLogRepositoryError> diff --git a/Sources/BadaDomain/Repository.swift b/Sources/BadaDomain/Repository.swift new file mode 100644 index 0000000..5ad68af --- /dev/null +++ b/Sources/BadaDomain/Repository.swift @@ -0,0 +1,4 @@ +@globalActor +package actor Repository { + package static let shared = Repository() +} diff --git a/Sources/BadaDomain/UseCases/GetDiveLogsUseCase.swift b/Sources/BadaDomain/UseCases/GetDiveLogsUseCase.swift new file mode 100644 index 0000000..f2ad9fc --- /dev/null +++ b/Sources/BadaDomain/UseCases/GetDiveLogsUseCase.swift @@ -0,0 +1,15 @@ +import Foundation + +package struct GetDiveLogsUseCase { + private let diveLogs: () -> Result<[DiveLog], DiveLogRepositoryError> + + package init( + diveLogs: @escaping () -> Result<[DiveLog], DiveLogRepositoryError> + ) { + self.diveLogs = diveLogs + } + + package func execute() -> Result<[DiveLog], DiveLogRepositoryError> { + diveLogs() + } +} diff --git a/Tests/BadaDataTests/DiveLogRepositoryTests.swift b/Tests/BadaDataTests/DiveLogRepositoryTests.swift index 25f5f3c..aca3a8c 100644 --- a/Tests/BadaDataTests/DiveLogRepositoryTests.swift +++ b/Tests/BadaDataTests/DiveLogRepositoryTests.swift @@ -5,11 +5,11 @@ import BadaDomain final class DiveLogRepositoryTests: XCTestCase { var sut: DiveLogRepository! - override func setUp() { - sut = DiveLogRepository(persistentStore: PersistentStore.mainTest) + override func setUp() async throws { + sut = await DiveLogRepository(persistentStore: PersistentStore.mainTest) } - func test_insert() { + func test_insert() async { let diveLog = DiveLog( location: DiveLog.Location( latitude: 1, @@ -29,14 +29,14 @@ final class DiveLogRepositoryTests: XCTestCase { notes: "notes1" ) - switch sut.insert(diveLog: diveLog) { + switch await sut.insert(diveLog: diveLog) { case .success: XCTAssert(true) case let .failure(error): XCTFail(error.localizedDescription) } - switch sut.diveLogs() { + switch await sut.diveLogs() { case let .success(diveLogs): XCTAssertEqual(diveLogs.count, 1) XCTAssertEqual(diveLogs.first!, diveLog)