Adds a new requestsRequiresToken property for entities

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

@ -15,6 +15,7 @@ protocol SomeCall: Storable {
class ApiCall<T: Storable>: ModelObject, Storable, SomeCall { 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() var id: String = Store.randomId()

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

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

Loading…
Cancel
Save