fix: Comments from pull request
This commit is contained in:
parent
343c40888d
commit
eb66a4e8ca
|
|
@ -1,3 +1,24 @@
|
|||
//
|
||||
// Copyright (c) 2022 Touch Instinct
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the Software), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
import TIFoundationUtils
|
||||
import TINetworking
|
||||
|
||||
|
|
@ -11,16 +32,20 @@ open class CartRequestExecutor<S: Decodable, AE: Decodable, NE>: Cancellable {
|
|||
public var successCompletion: SuccessCompletion
|
||||
|
||||
private var executingRequest: Cancellable?
|
||||
private var numberOfAttempts: Int
|
||||
|
||||
public init(executionClosure: @escaping ExecutionClosure, successCompletion: @escaping SuccessCompletion) {
|
||||
public init(executionClosure: @escaping ExecutionClosure,
|
||||
successCompletion: @escaping SuccessCompletion,
|
||||
numberOfAttempts: Int = 3) {
|
||||
self.executionClosure = executionClosure
|
||||
self.successCompletion = successCompletion
|
||||
self.numberOfAttempts = numberOfAttempts
|
||||
}
|
||||
|
||||
open func execute() {
|
||||
executingRequest?.cancel()
|
||||
|
||||
_ = executionClosure { [weak self] in
|
||||
executingRequest = executionClosure { [weak self] in
|
||||
switch $0 {
|
||||
case let .success(result):
|
||||
self?.handle(successResult: result)
|
||||
|
|
@ -35,7 +60,8 @@ open class CartRequestExecutor<S: Decodable, AE: Decodable, NE>: Cancellable {
|
|||
}
|
||||
|
||||
open func handle(failure: ErrorCollection<EndpointErrorResult<AE, NE>>) {
|
||||
if shouldRetry(failure: failure) && 0 < 3 {
|
||||
if shouldRetry(failure: failure) && numberOfAttempts > 0 {
|
||||
numberOfAttempts -= 1
|
||||
execute()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,27 @@
|
|||
//
|
||||
// Copyright (c) 2022 Touch Instinct
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the Software), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
import Foundation
|
||||
|
||||
protocol BaseErrorResponseBody: Decodable, Hashable {
|
||||
public protocol BaseErrorResponseBody: Decodable, Hashable {
|
||||
///Код ошибки
|
||||
var errorCode: Int { get }
|
||||
///Текст сообщения об ошибке
|
||||
|
|
|
|||
|
|
@ -1,6 +1,27 @@
|
|||
//
|
||||
// Copyright (c) 2022 Touch Instinct
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the Software), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
import Foundation
|
||||
|
||||
protocol Cart {
|
||||
public protocol Cart {
|
||||
///Продукты в корзине пользователя
|
||||
var products: [CartProduct] { get }
|
||||
///Применённые промокоды
|
||||
|
|
|
|||
|
|
@ -1,6 +1,27 @@
|
|||
//
|
||||
// Copyright (c) 2022 Touch Instinct
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the Software), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
import Foundation
|
||||
|
||||
protocol CartProduct {
|
||||
public protocol CartProduct {
|
||||
///Идентификатор продукта
|
||||
var id: String { get }
|
||||
///Цена в определённой валюте
|
||||
|
|
|
|||
|
|
@ -23,23 +23,19 @@ import Foundation
|
|||
import TIFoundationUtils
|
||||
import TISwiftUtils
|
||||
|
||||
protocol CartPublisher {
|
||||
associatedtype Cart
|
||||
func subscribeOnCartChanging(completion: ParameterClosure<Cart>) -> Cancellable
|
||||
func subscribeOnProductChanging(productId: Int, completion: ParameterClosure<CartProduct>) -> Cancellable
|
||||
}
|
||||
|
||||
protocol CartService {
|
||||
var localCart: Cart? { get }
|
||||
var removedProducts: [CartProduct] { get }
|
||||
var notAvailableProducts: [CartProduct] { get }
|
||||
public protocol CartService {
|
||||
associatedtype CartType: Cart
|
||||
associatedtype CartProductType: CartProduct
|
||||
|
||||
var localCart: CartType? { get }
|
||||
var removedProducts: [CartProductType] { get }
|
||||
var notAvailableProducts: [CartProductType] { get }
|
||||
var promocodes: [Promocode] { get }
|
||||
|
||||
func updateCountInCart(for product: CartProduct, count: Int)
|
||||
func updateCountInCart(for product: CartProductType, count: Int)
|
||||
func updateCountInCart(for productId: Int, count: Int)
|
||||
|
||||
func loadRemoteCart(from localCart: Cart,
|
||||
successCompletion: ParameterClosure<Cart>?,
|
||||
func loadRemoteCart(successCompletion: ParameterClosure<CartType>?,
|
||||
failureCompletion: ParameterClosure<BaseErrorResponseBody>?)
|
||||
/**
|
||||
Cлияние локальной корзины с серверной
|
||||
|
|
@ -48,8 +44,8 @@ protocol CartService {
|
|||
- remoteCart: `Cart` – серверная корзина
|
||||
- Returns: `Cart` – совмещенная корзина
|
||||
*/
|
||||
func merge(localCart: Cart,
|
||||
remoteCart: Cart) -> Cart
|
||||
func merge(localCart: CartType,
|
||||
remoteCart: CartType) -> CartType
|
||||
/**
|
||||
Замена локальной корзины серверной
|
||||
- Parameters:
|
||||
|
|
@ -57,6 +53,9 @@ protocol CartService {
|
|||
- remoteCart: `Cart` – серверная корзина
|
||||
- Returns: `Cart` – серверная корзина
|
||||
*/
|
||||
func replace(localCart: Cart,
|
||||
with remoteCart: Cart) -> Cart
|
||||
func replace(localCart: CartType,
|
||||
with remoteCart: CartType) -> CartType
|
||||
|
||||
func subscribeOnCartChanging(completion: ParameterClosure<CartType>) -> Cancellable
|
||||
func subscribeOnProductChanging(productId: Int, completion: ParameterClosure<CartProductType>) -> Cancellable
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,27 @@
|
|||
//
|
||||
// Copyright (c) 2022 Touch Instinct
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the Software), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
import Foundation
|
||||
|
||||
protocol Price {
|
||||
public protocol Price {
|
||||
///Стоимость
|
||||
var value: Int { get }
|
||||
///Трехсимвольный код валюты в ISO 4217
|
||||
|
|
|
|||
|
|
@ -1,5 +1,26 @@
|
|||
//
|
||||
// Copyright (c) 2022 Touch Instinct
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the Software), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
import Foundation
|
||||
|
||||
protocol Promocode {
|
||||
public protocol Promocode {
|
||||
var discount: Price? { get }
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue