Skip to content

Commit

Permalink
Conexão com o server de forma genérica
Browse files Browse the repository at this point in the history
  • Loading branch information
renefx committed Jan 28, 2021
1 parent 8caaa51 commit d8eb65a
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,8 @@ class NewsDetailViewModel: ViewModel {
self.isLoading.onNext(true)
self.service.fetchNewsDetail(newsId: self.idNews)
.subscribe(onSuccess: { [weak self] (response) in
print("aliiii")
self?.isLoading.onNext(false)
do {
let object = try JSONDecoder.decode(data: response.data, to: [NewsDetailWrapperElement].self)
self?.apiCallResult.onNext(object.first?.documento)
} catch (let erro) {
self?.apiCallResult.onError(erro)
}
self?.apiCallResult.onNext(response)
}, onError: { [weak self] (erro) in
self?.isLoading.onNext(false)
self?.apiCallResult.onError(erro)
Expand Down
7 changes: 1 addition & 6 deletions NewsApp/Scenes/Logged Area/NewsList/NewsListViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,7 @@ class NewsListViewModel: ViewModel {
self.isLoading.onNext(true)
self.service.fetchNews().subscribe { [weak self] (response) in
self?.isLoading.onNext(false)
do {
let object = try JSONDecoder.decode(data: response.data, to: [NewsListElement].self)
self?.apiCallResult.onNext(object)
} catch (let erro) {
self?.apiCallResult.onError(erro)
}
self?.apiCallResult.onNext(response)
} onError: { [weak self] (erro) in
self?.isLoading.onNext(false)
self?.apiCallResult.onError(erro)
Expand Down
5 changes: 2 additions & 3 deletions NewsApp/Scenes/Login/LoginViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,9 @@ class LoginViewModel: ViewModel {
})
.subscribe(onNext: { (user) in
self.isLoading.onNext(true)
self.service.postNewsLogin(user: user).filterSuccess().subscribe { [weak self] (response) in
self.service.postNewsLogin(user: user).subscribe { [weak self] (response) in
self?.isLoading.onNext(false)
let object = try? JSONDecoder.decode(data: response.data, to: TokenJwt.self)
self?.apiCallResult.onNext(object)
self?.apiCallResult.onNext(response)
} onError: { [weak self] (erro) in
self?.isLoading.onNext(false)
self?.apiCallResult.onNext(erro)
Expand Down
21 changes: 15 additions & 6 deletions NewsApp/Service/NewsService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,25 @@ class NewsService {
newsProvider = stub ? MoyaProvider<NewsProvider>(stubClosure: MoyaProvider.immediatelyStub) : MoyaProvider<NewsProvider>()
}

func postNewsLogin(user: UserLogin) -> Single<Response> {
return newsProvider.rx.request(.getNewsToken(user: user)).filterSuccess()
func postNewsLogin(user: UserLogin) -> Single<TokenJwt> {
return newsProvider.rx
.request(.getNewsToken(user: user))
.filterSuccess(returnType: TokenJwt.self)
}

func fetchNews() -> Single<Response> {
return newsProvider.rx.request(.getNews).filterSuccess()
func fetchNews() -> Single<[NewsListElement]> {
return newsProvider.rx
.request(.getNews)
.filterSuccess(returnType: [NewsListElement].self)
}

func fetchNewsDetail(newsId: String) -> Single<Response> {
return newsProvider.rx.request(.getNewsDetail(newsId: newsId)).filterSuccess()
func fetchNewsDetail(newsId: String) -> Single<Documento?> {
return newsProvider.rx
.request(.getNewsDetail(newsId: newsId))
.filterSuccess(returnType: [NewsDetailWrapperElement].self)
.map { (arrayWrapper) -> Documento? in
arrayWrapper.first?.documento
}
}
}

12 changes: 9 additions & 3 deletions NewsApp/Service/ServiceError+Extension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,16 @@ import RxSwift
import Moya

extension PrimitiveSequence where Trait == SingleTrait, Element == Response {
func filterSuccess() -> Single<Element> {
return flatMap { (response) -> Single<Element> in
func filterSuccess<T:Codable>(returnType: T.Type) -> Single<T> {
return flatMap { (response) -> Single<T> in
if 200 ... 299 ~= response.statusCode {
return .just(response)
let decoder = JSONDecoder()
do {
let objectParsed = try decoder.decode(returnType, from: response.data)
return .just(objectParsed)
} catch let e {
return .error(e)
}
}

switch response.statusCode {
Expand Down
1 change: 1 addition & 0 deletions NewsApp/Utils/Constants.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ struct Constants {
static let serviceUnavailableError = "Serviço não disponível. 😅 Tente novamente mais tarde."
static let notConnectedToInternet = "Você não está conectado a internet. Conecte-se e tente novamente."
static let notFound = "Essa notícia não foi encontrada 🧐"
static let parsingError = -88888

static let loadingColor = UIColor(named: "Primary") ?? .black
static let loadingBackgroundColor = UIColor(named: "Accent")?.withAlphaComponent(0.5) ?? .white
Expand Down
2 changes: 1 addition & 1 deletion NewsApp/Utils/Extensions/Codable+Extension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ extension JSONDecoder {
do {
return try decoder.decode(type, from: data)
} catch {
throw DefaultServerError(message: Constants.unknownError, statusCode: -9999)
throw DefaultServerError(message: Constants.unknownError, statusCode: Constants.parsingError)
}
}
}

0 comments on commit d8eb65a

Please sign in to comment.