@@ -7,32 +7,30 @@ import Foundation
77public struct Documents {
88 var apiCall : ApiCall
99 var collectionName : String
10- let RESOURCEPATH : String
1110
1211 init ( apiCall: ApiCall , collectionName: String ) {
1312 self . apiCall = apiCall
1413 self . collectionName = collectionName
15- self . RESOURCEPATH = " collections/ \( collectionName) /documents "
1614 }
1715
1816 public func create( document: Data , options: DocumentIndexParameters ? = nil ) async throws -> ( Data ? , URLResponse ? ) {
1917 let queryParams = try createURLQuery ( forSchema: options)
20- let ( data, response) = try await apiCall. post ( endPoint: RESOURCEPATH , body: document, queryParameters: queryParams)
18+ let ( data, response) = try await apiCall. post ( endPoint: endpointPath ( ) , body: document, queryParameters: queryParams)
2119 return ( data, response)
2220 }
2321
2422 public func upsert( document: Data , options: DocumentIndexParameters ? = nil ) async throws -> ( Data ? , URLResponse ? ) {
2523 var queryParams = try createURLQuery ( forSchema: options)
2624 queryParams. append ( URLQueryItem ( name: " action " , value: " upsert " ) )
27- let ( data, response) = try await apiCall. post ( endPoint: RESOURCEPATH , body: document, queryParameters: queryParams)
25+ let ( data, response) = try await apiCall. post ( endPoint: endpointPath ( ) , body: document, queryParameters: queryParams)
2826 return ( data, response)
2927 }
3028
3129 public func update< T: Codable > ( document: T , options: DocumentIndexParameters ? = nil ) async throws -> ( T ? , URLResponse ? ) {
3230 var queryParams = try createURLQuery ( forSchema: options)
3331 queryParams. append ( URLQueryItem ( name: " action " , value: " update " ) )
3432 let jsonData = try encoder. encode ( document)
35- let ( data, response) = try await apiCall. post ( endPoint: RESOURCEPATH , body: jsonData, queryParameters: queryParams)
33+ let ( data, response) = try await apiCall. post ( endPoint: endpointPath ( ) , body: jsonData, queryParameters: queryParams)
3634 if let validData = data {
3735 let decodedData = try decoder. decode ( T . self, from: validData)
3836 return ( decodedData, response)
@@ -43,7 +41,7 @@ public struct Documents {
4341 public func update< T: Encodable > ( document: T , options: UpdateDocumentsByFilterParameters ) async throws -> ( UpdateByFilterResponse ? , URLResponse ? ) {
4442 let queryParams = try createURLQuery ( forSchema: options)
4543 let jsonData = try encoder. encode ( document)
46- let ( data, response) = try await apiCall. patch ( endPoint: RESOURCEPATH , body: jsonData, queryParameters: queryParams)
44+ let ( data, response) = try await apiCall. patch ( endPoint: endpointPath ( ) , body: jsonData, queryParameters: queryParams)
4745 if let validData = data {
4846 let decodedData = try decoder. decode ( UpdateByFilterResponse . self, from: validData)
4947 return ( decodedData, response)
@@ -53,7 +51,7 @@ public struct Documents {
5351
5452 public func delete( options: DeleteDocumentsParameters ) async throws -> ( DeleteDocumentsResponse ? , URLResponse ? ) {
5553 let queryParams = try createURLQuery ( forSchema: options)
56- let ( data, response) = try await apiCall. delete ( endPoint: " \( RESOURCEPATH ) " , queryParameters: queryParams)
54+ let ( data, response) = try await apiCall. delete ( endPoint: endpointPath ( ) , queryParameters: queryParams)
5755 if let validData = data {
5856 let decodedData = try decoder. decode ( DeleteDocumentsResponse . self, from: validData)
5957 return ( decodedData, response)
@@ -70,14 +68,14 @@ public struct Documents {
7068 if let givenBatchSize = batchSize {
7169 deleteQueryParams. append ( URLQueryItem ( name: " batch_size " , value: String ( givenBatchSize) ) )
7270 }
73- let ( data, response) = try await apiCall. delete ( endPoint: " \( RESOURCEPATH ) " , queryParameters: deleteQueryParams)
71+ let ( data, response) = try await apiCall. delete ( endPoint: endpointPath ( ) , queryParameters: deleteQueryParams)
7472 return ( data, response)
7573
7674 }
7775
7876 public func search( _ searchParameters: SearchParameters ) async throws -> ( Data ? , URLResponse ? ) {
7977 let queryParams = try createURLQuery ( forSchema: searchParameters)
80- return try await apiCall. get ( endPoint: " \( RESOURCEPATH ) / search" , queryParameters: queryParams)
78+ return try await apiCall. get ( endPoint: endpointPath ( " search " ) , queryParameters: queryParams)
8179 }
8280
8381 public func search< T> ( _ searchParameters: SearchParameters , for: T . Type ) async throws -> ( SearchResult < T > ? , URLResponse ? ) {
@@ -307,7 +305,7 @@ public struct Documents {
307305 searchQueryParams. append ( URLQueryItem ( name: " facet_strategy " , value: facetReturnParent) )
308306 }
309307
310- let ( data, response) = try await apiCall. get ( endPoint: " \( RESOURCEPATH ) / search" , queryParameters: searchQueryParams)
308+ let ( data, response) = try await apiCall. get ( endPoint: endpointPath ( " search " ) , queryParameters: searchQueryParams)
311309
312310 if let validData = data {
313311 let searchRes = try decoder. decode ( SearchResult< T> . self , from: validData)
@@ -319,7 +317,7 @@ public struct Documents {
319317
320318 public func importBatch( _ documents: Data , options: ImportDocumentsParameters ) async throws -> ( Data ? , URLResponse ? ) {
321319 let queryParams = try createURLQuery ( forSchema: options)
322- let ( data, response) = try await apiCall. post ( endPoint: " \( RESOURCEPATH ) / import" , body: documents, queryParameters: queryParams)
320+ let ( data, response) = try await apiCall. post ( endPoint: endpointPath ( " import " ) , body: documents, queryParameters: queryParams)
323321 return ( data, response)
324322 }
325323
@@ -329,13 +327,22 @@ public struct Documents {
329327 if let specifiedAction = action {
330328 importAction. value = specifiedAction. rawValue
331329 }
332- let ( data, response) = try await apiCall. post ( endPoint: " \( RESOURCEPATH ) / import" , body: documents, queryParameters: [ importAction] )
330+ let ( data, response) = try await apiCall. post ( endPoint: endpointPath ( " import " ) , body: documents, queryParameters: [ importAction] )
333331 return ( data, response)
334332 }
335333
336334 public func export( options: ExportDocumentsParameters ? = nil ) async throws -> ( Data ? , URLResponse ? ) {
337335 let searchQueryParams = try createURLQuery ( forSchema: options)
338- let ( data, response) = try await apiCall. get ( endPoint: " \( RESOURCEPATH ) / export" , queryParameters: searchQueryParams)
336+ let ( data, response) = try await apiCall. get ( endPoint: endpointPath ( " export " ) , queryParameters: searchQueryParams)
339337 return ( data, response)
340338 }
339+
340+ private func endpointPath( _ operation: String ? = nil ) throws -> String {
341+ let baseEndpoint = try " collections/ \( collectionName. encodeURL ( ) ) /documents "
342+ if let operation: String = operation {
343+ return " \( baseEndpoint) / \( operation) "
344+ } else {
345+ return baseEndpoint
346+ }
347+ }
341348}
0 commit comments