@@ -16,10 +16,10 @@ class AuthorizationService {
1616 self.apiClient = apiClient
1717 }
1818
19+ /// Check if phone number is registered and send verification code to that number.
1920 func authenticate(withPhone phoneNumber: String,
2021 completion: @escaping (Result<Bool, Error>) -> Void) {
2122 let resolver = AuthResolver(phoneNumber: phoneNumber)
22−
2323 let request = ApiRequest(resolver: resolver, httpMethod: .post)
2424
2525 apiClient.load(request: request.request) { (result) in
@@ -42,11 +42,54 @@ class AuthorizationService {
4242 }
4343 }
4444
45− func phonecode() {
46− //let resolver = PhoneCodeResolver()
45+ /// Verify login of **already existing user** with phone number and verification code.
46+ func phonecode(phoneNumber: String,
47+ code: String,
48+ completion: @escaping (Result<User, Error>) -> Void) {
49+ let resolver = PhoneCodeResolver(phoneNumber: phoneNumber, code: code)
50+ let request = ApiRequest(resolver: resolver, httpMethod: .post)
51+
52+ apiClient.load(request: request.request) { result in
53+ switch result {
54+ case .failure(let err):
55+ completion(.failure(err))
56+ case .success(let data):
57+ guard
58+ let unwrappedData = data as? Data,
59+ let decodedData = resolver.targetClass().fromJSONToSelf(data: unwrappedData) as? User
60+ else {
61+ completion(.failure(ServerError.decodeError))
62+ return
63+ }
64+
65+ completion(.success(decodedData))
66+ }
67+ }
4768 }
4869
49− func register() {
50− //let resolver = RegistrationResolver()
70+
71+ /// Register new user with a given name, phone number and verification code.
72+ func register(name: String,
73+ code: String,
74+ phoneNumber: String, completion: @escaping (Result<User, Error>) -> Void) {
75+ let resolver = RegistrationResolver(name: name, code: code, phoneNumber: phoneNumber)
76+ let request = ApiRequest(resolver: resolver, httpMethod: .post)
77+
78+ apiClient.load(request: request.request) { result in
79+ switch result {
80+ case .failure(let err):
81+ completion(.failure(err))
82+ case .success(let data):
83+ guard
84+ let unwrappedData = data as? Data,
85+ let decodedData = resolver.targetClass().fromJSONToSelf(data: unwrappedData) as? User
86+ else {
87+ completion(.failure(ServerError.decodeError))
88+ return
89+ }
90+
91+ completion(.success(decodedData))
92+ }
93+ }
5194 }
5295}