From 08edb6b7ec903a9429e62255af32026b2f4d8fae Mon Sep 17 00:00:00 2001 From: Javier Cicchelli Date: Tue, 13 Dec 2022 02:03:38 +0100 Subject: [PATCH] Implemented the GetItemsUseCase use case for the Browse module. --- .../Logic/Use Cases/GetItemsUseCase.swift | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Modules/Sources/Browse/Logic/Use Cases/GetItemsUseCase.swift diff --git a/Modules/Sources/Browse/Logic/Use Cases/GetItemsUseCase.swift b/Modules/Sources/Browse/Logic/Use Cases/GetItemsUseCase.swift new file mode 100644 index 0000000..af82e03 --- /dev/null +++ b/Modules/Sources/Browse/Logic/Use Cases/GetItemsUseCase.swift @@ -0,0 +1,50 @@ +// +// GetItemsUseCase.swift +// Browse +// +// Created by Javier Cicchelli on 13/12/2022. +// Copyright © 2022 Röck+Cöde. All rights reserved. +// + +import APIService +import DependencyInjection +import Dependencies + +struct GetItemsUseCase { + + // MARK: Dependencies + + @Dependency(\.apiService) private var apiService + + // MARK: Functions + + func callAsFunction( + id: String, + username: String, + password: String + ) async throws -> [any ModelIdentifiable] { + let items = try await apiService.getItems( + id: id, + credentials: .init( + username: username, + password: password + ) + ) + + return items + .compactMap { item -> any ModelIdentifiable in + if item.isDirectory { + return Folder( + id: item.id, + name: item.name + ) + } else { + return File( + id: item.id, + name: item.name + ) + } + } + } + +}