43 lines
1.2 KiB
Swift
43 lines
1.2 KiB
Swift
import Foundation
|
|
|
|
struct AuthResponse: Codable {
|
|
struct User: Codable {
|
|
let id: String
|
|
let email: String
|
|
}
|
|
|
|
let token: String
|
|
let user: User
|
|
}
|
|
|
|
protocol AuthServiceProtocol {
|
|
func login(email: String, password: String) async throws -> AuthResponse
|
|
func register(email: String, password: String) async throws -> AuthResponse
|
|
func profile(token: String) async throws -> UserProfile
|
|
}
|
|
|
|
final class AuthService: AuthServiceProtocol {
|
|
private let client: APIClientProtocol
|
|
|
|
init(client: APIClientProtocol) {
|
|
self.client = client
|
|
}
|
|
|
|
func login(email: String, password: String) async throws -> AuthResponse {
|
|
try await client.post(path: "api/auth/login", body: Credentials(email: email, password: password), token: nil)
|
|
}
|
|
|
|
func register(email: String, password: String) async throws -> AuthResponse {
|
|
try await client.post(path: "api/auth/register", body: Credentials(email: email, password: password), token: nil)
|
|
}
|
|
|
|
func profile(token: String) async throws -> UserProfile {
|
|
try await client.get(path: "api/auth/profile", queryItems: [], token: token)
|
|
}
|
|
}
|
|
|
|
private struct Credentials: Codable {
|
|
let email: String
|
|
let password: String
|
|
}
|