From 6a208ae2e40af74bd70363bd786236db206ffbfa Mon Sep 17 00:00:00 2001 From: Laurent Date: Mon, 13 May 2024 12:44:02 +0200 Subject: [PATCH] Adds a new requestsRequiresToken property for entities --- LeStorage/Codables/ApiCall.swift | 5 +++-- LeStorage/Services.swift | 18 +++++++++--------- LeStorage/Storable.swift | 3 +++ 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/LeStorage/Codables/ApiCall.swift b/LeStorage/Codables/ApiCall.swift index 88264cd..10b3eab 100644 --- a/LeStorage/Codables/ApiCall.swift +++ b/LeStorage/Codables/ApiCall.swift @@ -13,9 +13,10 @@ protocol SomeCall: Storable { } class ApiCall: 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 diff --git a/LeStorage/Services.swift b/LeStorage/Services.swift index 9b0ebe0..c6904e7 100644 --- a/LeStorage/Services.swift +++ b/LeStorage/Services.swift @@ -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() 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(_ 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(_ 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) } diff --git a/LeStorage/Storable.swift b/LeStorage/Storable.swift index de444c1..cb0ffe0 100644 --- a/LeStorage/Storable.swift +++ b/LeStorage/Storable.swift @@ -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) } + }