From 27d2848a45e693d36af90be4032089b2f7302967 Mon Sep 17 00:00:00 2001 From: Javier Cicchelli Date: Mon, 12 Dec 2022 00:53:53 +0100 Subject: [PATCH] Implemented the GetUserUseCase use case for the Login module. --- .../Sources/DataModels/Models/Account.swift | 2 +- .../Login/Logic/Defines/Typealiases.swift | 11 ++++ .../Logic/Use Cases/GetUserUseCase.swift | 55 +++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 Modules/Sources/Login/Logic/Defines/Typealiases.swift create mode 100644 Modules/Sources/Login/Logic/Use Cases/GetUserUseCase.swift diff --git a/Libraries/Sources/DataModels/Models/Account.swift b/Libraries/Sources/DataModels/Models/Account.swift index c0b1711..8ecf488 100644 --- a/Libraries/Sources/DataModels/Models/Account.swift +++ b/Libraries/Sources/DataModels/Models/Account.swift @@ -6,7 +6,7 @@ // Copyright © 2022 Röck+Cöde. All rights reserved. // -public struct Account: Codable { +public struct Account: Codable, Equatable { // MARK: Properties diff --git a/Modules/Sources/Login/Logic/Defines/Typealiases.swift b/Modules/Sources/Login/Logic/Defines/Typealiases.swift new file mode 100644 index 0000000..cdc0382 --- /dev/null +++ b/Modules/Sources/Login/Logic/Defines/Typealiases.swift @@ -0,0 +1,11 @@ +// +// Typealiases.swift +// Login +// +// Created by Javier Cicchelli on 12/12/2022. +// Copyright © 2022 Röck+Cöde. All rights reserved. +// + +import DataModels + +public typealias LoginSuccessClosure = (Account, User) -> Void diff --git a/Modules/Sources/Login/Logic/Use Cases/GetUserUseCase.swift b/Modules/Sources/Login/Logic/Use Cases/GetUserUseCase.swift new file mode 100644 index 0000000..eefac37 --- /dev/null +++ b/Modules/Sources/Login/Logic/Use Cases/GetUserUseCase.swift @@ -0,0 +1,55 @@ +// +// GetUserUseCase.swift +// Login +// +// Created by Javier Cicchelli on 12/12/2022. +// Copyright © 2022 Röck+Cöde. All rights reserved. +// + +import APIService +import DependencyInjection +import Dependencies + +struct GetUserUseCase { + + // MARK: Dependencies + + @Dependency(\.apiService) private var apiService + + // MARK: Properties + + let success: LoginSuccessClosure + + // MARK: Functions + + func callAsFunction( + username: String, + password: String + ) async throws { + let me = try await apiService.getUser( + credentials: .init( + username: username, + password: password + ) + ) + + success( + .init( + username: username, + password: password + ), + .init( + profile: .init( + firstName: me.firstName, + lastName: me.lastName + ), + rootFolder: .init( + id: me.rootItem.id, + name: me.rootItem.name, + lastModifiedAt: me.rootItem.lastModifiedAt + ) + ) + ) + } + +}