validate([ 'document' => [ 'required', 'file', 'max:10000', 'mimes:doc,dot,docx,dotx,docm,dotm,odt,rtf,pdf,txt', ], // Searchers is encoded. // 'searchers' => 'required|array', // 'searchers.*.key' => 'required', // 'searchers.*.type' => 'required|in:replace,displace', // 'searchers.*.value' => 'nullable', ]); // Send document to Ingest to be processed as docx in order to get original data. // After we get the response from Ingest apply S&D on the result. // After that send back to Ingest to recreate the original document. // After that Ingest will send webhook that it is done. // Download file from Ingest. // The interface will keep asking if the file is ready. // Once is ready return the response with the file. try { $handler = new SearchAndDisplaceOriginalDocument(); $id = $handler->start(request()->file('document'), json_decode(request()->get('searchers'), true)); return response()->json([ 'status' => 'ok', 'id' => $id, ]); } catch (BadResponseException $e) { return response()->json([ 'message' => $e->getMessage(), 'response' => $e->getResponse() ], 400); } catch (\Exception $e) { return response()->json([ 'message' => $e->getMessage(), ], 400); } } public function show($id) { try { $handler = new SearchAndDisplaceOriginalDocument(); if ($handler->hasFailed($id)) { return response()->json([ 'status' => 'fail', ], 200); } if ($handler->isInProgress($id)) { return response()->json([ 'status' => 'processing', ], 200); } return response()->json([ 'status' => 'success', ], 200); } catch (\Exception $exception) { return response()->json([ 'message' => $exception->getMessage(), ], 400); } } public function download($id) { try { $handler = new SearchAndDisplaceOriginalDocument(); return $handler->streamFile($id); } catch (\Exception $exception) { abort(404); } } }