2025-05-27 15:19:30 +07:00

68 lines
3.0 KiB
Swift

//
// File.swift
// NetworkApi
//
// Created by User on 27.05.2025.
//
import Foundation
//Main class for request for user
public final class NetworkUser: NetworkUserProtocol {
let baseUrl: BaseNetworkServiceProtocol //Create request
public init(baseUrl: BaseNetworkServiceProtocol) {
self.baseUrl = baseUrl
}
//method login
public func login(identity: String, password: String) async throws -> ServerResponseAuth {
let data = try await baseUrl.execute(path: URLS.login, method: .post, headers: Headers.headers(), parameters: [
"identity": identity,
"password": password
])
return try JSONDecoder().decode(ServerResponseAuth.self, from: data)
}
//method register
public func register(email: String, password: String, passwordConfirm: String, firstname: String, lastname: String, secondname: String, datebirthday: String, gender: String) async throws -> ServerResponseRegister {
let data = try await baseUrl.execute(path: URLS.register, method: .post, headers: Headers.headers(), parameters: [
"email": email,
"password": password,
"passwordConfirm": passwordConfirm
])
let result = try JSONDecoder().decode(ServerResponseRegister.self, from: data)
let login = try await login(identity: email, password: password)
UserDefaults.standard.set(login.token, forKey: "token")
let addUserResult = try await addUser(idUser: result.id, email: email, firstname: firstname, lastname: lastname, secondname: secondname, datebirthday: datebirthday, gender: gender, token: login.token)
return addUserResult
}
//method addUser
public func addUser(idUser: String, email: String, firstname: String, lastname: String, secondname: String, datebirthday: String, gender: String, token: String) async throws -> ServerResponseRegister {
let path = URLS.updateUserInfo+idUser
print(path)
let data = try await baseUrl.execute(path: path, method: .patch, headers: Headers.headerWithToken(token: token), parameters: [
"email" : email,
"emailVisibility" : true,
"firstname" : firstname,
"lastname" : lastname,
"secondname" : secondname,
"datebirthday" : datebirthday,
"gender" : gender
])
return try JSONDecoder().decode(ServerResponseRegister.self, from: data)
}
public func getIdToken(token: String) async throws -> String {
let data = try await baseUrl.execute(path: URLS.getIdToken, method: .get, headers: Headers.headerWithToken(token: token), parameters: nil)
let tokenID = try JSONDecoder().decode(ServerResponseIdToken.self, from: data)
return tokenID.items.first!.id
}
public func deleteUser(idToken: String, token: String) async throws {
let data = try await baseUrl.execute(path: URLS.deleteUser, method: .delete, headers: Headers.headerWithToken(token: token), parameters: ["id_token":idToken])
}
}