Adds a new requestsRequiresToken property for entities

multistore
Laurent 2 years ago
parent 7e2ae11be3
commit 6a208ae2e4
  1. 5
      LeStorage/Codables/ApiCall.swift
  2. 18
      LeStorage/Services.swift
  3. 3
      LeStorage/Storable.swift

@ -13,9 +13,10 @@ protocol SomeCall: Storable {
}
class ApiCall<T: Storable>: ModelObject, Storable, SomeCall {
static func resourceName() -> String { return "apicalls_" + T.resourceName() }
static func resourceName() -> String { return "apicalls_" + T.resourceName() }
static func requestsRequiresToken() -> Bool { return false }
var id: String = Store.randomId()
/// The http URL of the call

@ -125,16 +125,16 @@ public class Services {
return try jsonDecoder.decode(T.self, from: task.0)
}
fileprivate func _postRequest(servicePath: String) throws -> URLRequest {
return try self._baseRequest(servicePath: servicePath, method: .post)
fileprivate func _postRequest(servicePath: String, requiresToken: Bool? = nil) throws -> URLRequest {
return try self._baseRequest(servicePath: servicePath, method: .post, requiresToken: requiresToken)
}
fileprivate func _putRequest(servicePath: String) throws -> URLRequest {
return try self._baseRequest(servicePath: servicePath, method: .put)
fileprivate func _putRequest(servicePath: String, requiresToken: Bool? = nil) throws -> URLRequest {
return try self._baseRequest(servicePath: servicePath, method: .put, requiresToken: requiresToken)
}
fileprivate func _getRequest(servicePath: String) throws -> URLRequest {
return try self._baseRequest(servicePath: servicePath, method: .get)
fileprivate func _getRequest(servicePath: String, requiresToken: Bool? = nil) throws -> URLRequest {
return try self._baseRequest(servicePath: servicePath, method: .get, requiresToken: requiresToken)
}
fileprivate func _baseRequest(conf: ServiceConf) throws -> URLRequest {
@ -160,18 +160,18 @@ public class Services {
// MARK: - Services
public func get<T: Storable>() async throws -> [T] {
let getRequest = try _getRequest(servicePath: T.resourceName() + "/")
let getRequest = try _getRequest(servicePath: T.resourceName() + "/", requiresToken: T.requestsRequiresToken())
return try await self._runRequest(getRequest)
}
public func post<T: Storable>(_ instance: T) async throws -> T {
var postRequest = try self._postRequest(servicePath: T.resourceName() + "/")
var postRequest = try self._postRequest(servicePath: T.resourceName() + "/", requiresToken: T.requestsRequiresToken())
postRequest.httpBody = try jsonEncoder.encode(instance)
return try await self._runRequest(postRequest)
}
public func put<T: Storable>(_ instance: T) async throws -> T {
var postRequest = try self._putRequest(servicePath: T.resourceName() + "/" + instance.id + "/")
var postRequest = try self._putRequest(servicePath: T.resourceName() + "/" + instance.id + "/", requiresToken: T.requestsRequiresToken())
postRequest.httpBody = try jsonEncoder.encode(instance)
return try await self._runRequest(postRequest)
}

@ -9,6 +9,8 @@ import Foundation
public protocol Storable: Codable, Identifiable where ID : StringProtocol {
static func resourceName() -> String
static func requestsRequiresToken() -> Bool
func deleteDependencies() throws
}
@ -23,4 +25,5 @@ extension Storable {
}
var stringId: String { return String(self.id) }
}

Loading…
Cancel
Save