@@ -85,7 +85,20 @@ public protocol DocumentService: AnyObject {
85
85
pageNumber: Int ,
86
86
size: Document . Page . Size ,
87
87
completion: @escaping CompletionResult < Data > )
88
-
88
+
89
+ /**
90
+ * Retrieves the page data of a document for a given page number and size
91
+ *
92
+ * - Parameter document: The document from which to retrieve the page data
93
+ * - Parameter pageNumber: The document's page number
94
+ * - Parameter size: The size of the page to retrieve (e.g., large, medium)
95
+ * - Parameter completion: A completion callback, returning the requested page preview on success, or an error on failure
96
+ */
97
+ func documentPage( for document: Document ,
98
+ pageNumber: Int ,
99
+ size: Document . Page . Size ,
100
+ completion: @escaping CompletionResult < Data > )
101
+
89
102
/**
90
103
* Submits the analysis feedback for a given document.
91
104
*
@@ -217,8 +230,8 @@ extension DocumentService {
217
230
218
231
resourceHandler ( resource, { result in
219
232
switch result {
220
- case . success( let document ) :
221
- completion ( . success( document ) )
233
+ case . success( let documentLayout ) :
234
+ completion ( . success( documentLayout ) )
222
235
case . failure( let error) :
223
236
completion ( . failure( error) )
224
237
}
@@ -234,8 +247,8 @@ extension DocumentService {
234
247
235
248
resourceHandler ( resource, { result in
236
249
switch result {
237
- case . success( let document ) :
238
- completion ( . success( document ) )
250
+ case . success( let pages ) :
251
+ completion ( . success( pages ) )
239
252
case . failure( let error) :
240
253
completion ( . failure( error) )
241
254
}
@@ -285,33 +298,59 @@ extension DocumentService {
285
298
}
286
299
287
300
func preview( resourceHandler: @escaping ResourceDataHandler < APIResource < Data > > ,
288
- with documentId: String ,
289
- pageNumber: Int ,
290
- completion: @escaping CompletionResult < Data > ) {
291
- let resource = APIResource < Data > ( method: . pagePreview( forDocumentId: documentId,
292
- number: pageNumber) ,
293
- apiDomain: self . apiDomain,
294
- httpMethod: . get)
295
- resourceHandler ( resource) { result in
296
- switch result {
297
- case let . success( data) :
298
- completion ( . success( data) )
299
- case let . failure( error) :
300
- if case . notFound = error {
301
- print ( " Document \( documentId) page not found " )
302
- DispatchQueue . main. asyncAfter ( deadline: . now( ) + 1 ) {
303
- self . preview ( resourceHandler: resourceHandler,
304
- with: documentId,
305
- pageNumber: pageNumber,
306
- completion: completion)
307
- }
308
- } else {
309
- completion ( . failure( error) )
310
- }
311
- }
312
- }
313
- }
314
-
301
+ with documentId: String ,
302
+ pageNumber: Int ,
303
+ completion: @escaping CompletionResult < Data > ) {
304
+ let resource = APIResource < Data > ( method: . pagePreview( forDocumentId: documentId,
305
+ number: pageNumber) ,
306
+ apiDomain: self . apiDomain,
307
+ httpMethod: . get)
308
+ resourceHandler ( resource) { result in
309
+ switch result {
310
+ case let . success( data) :
311
+ completion ( . success( data) )
312
+ case let . failure( error) :
313
+ if case . notFound = error {
314
+ print ( " Document \( documentId) page not found " )
315
+ DispatchQueue . main. asyncAfter ( deadline: . now( ) + 1 ) {
316
+ self . preview ( resourceHandler: resourceHandler,
317
+ with: documentId,
318
+ pageNumber: pageNumber,
319
+ completion: completion)
320
+ }
321
+ } else {
322
+ completion ( . failure( error) )
323
+ }
324
+ }
325
+ }
326
+ }
327
+
328
+ func documentPage( resourceHandler: @escaping ResourceDataHandler < APIResource < Data > > ,
329
+ in document: Document ,
330
+ pageNumber: Int ,
331
+ size: Document . Page . Size ,
332
+ completion: @escaping CompletionResult < Data > ) {
333
+ guard pageNumber > 0 else {
334
+ preconditionFailure ( " The page number starts at 1 " )
335
+ }
336
+
337
+ let resource = APIResource < Data > ( method: . documentPage( forDocumentId: document. id,
338
+ number: pageNumber,
339
+ size: . medium) ,
340
+ apiDomain: apiDomain,
341
+ httpMethod: . get)
342
+
343
+ resourceHandler ( resource) { result in
344
+ switch result {
345
+ case . success( let data) :
346
+ completion ( . success( data) )
347
+ case . failure( let error) :
348
+ completion ( . failure( error) )
349
+ }
350
+ }
351
+ }
352
+
353
+
315
354
func submitFeedback( resourceHandler: ResourceDataHandler < APIResource < String > > ,
316
355
for document: Document ,
317
356
with extractions: [ Extraction ] ,
@@ -401,22 +440,22 @@ fileprivate extension DocumentService {
401
440
fetchDocument ( resourceHandler: resourceHandler,
402
441
with: document. id,
403
442
cancellationToken: cancellationToken) { [ weak self] result in
404
- guard let self = self else { return }
405
- switch result {
406
- case . success( let document) :
407
- if document. progress != . pending {
408
- completion ( . success( ( ) ) )
409
- } else {
410
- DispatchQueue . global ( ) . asyncAfter ( deadline: . now( ) + 1 ) {
411
- self . poll ( resourceHandler: resourceHandler,
412
- document: document,
413
- cancellationToken: cancellationToken,
414
- completion: completion)
415
- }
416
- }
417
- case . failure( let error) :
418
- completion ( . failure( error) )
443
+ guard let self = self else { return }
444
+ switch result {
445
+ case . success( let document) :
446
+ if document. progress != . pending {
447
+ completion ( . success( ( ) ) )
448
+ } else {
449
+ DispatchQueue . global ( ) . asyncAfter ( deadline: . now( ) + 1 ) {
450
+ self . poll ( resourceHandler: resourceHandler,
451
+ document: document,
452
+ cancellationToken: cancellationToken,
453
+ completion: completion)
419
454
}
455
+ }
456
+ case . failure( let error) :
457
+ completion ( . failure( error) )
458
+ }
420
459
}
421
460
}
422
461
}
0 commit comments