Root Zanli
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
o5t6x7pgljbm
/
public_html
/
admin
/
app
/
Http
/
Controllers
/
Api
/
V2
/
Filename :
V2DocuLockerController.php
back
Copy
<?php namespace App\Http\Controllers\Api\V2; use App\Libraries\Helpers; use App\Models\DocuLocker\UploadedDocument; use App\Models\User; use App\V2\Dtos\FilterDocuLockerDto; use App\V2\Resources\DocuLockerResource; use App\V2\Resources\UploadedDocumentResource; use App\V2\Services\DocuLockerService; use App\V2\Services\DocuLockerStorageService; use Carbon\Carbon; use Exception; use Illuminate\Http\Request; use Illuminate\Support\Facades\Crypt; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\URL; use Illuminate\Support\Str; class V2DocuLockerController extends V2BaseController { protected $docuLockerStorageService; protected $docuLockerService; protected $uploadedDocumentResource; protected $docuLockerResource; public function __construct() { parent::__construct(); $this->docuLockerStorageService = new DocuLockerStorageService(); $this->docuLockerService = new DocuLockerService(); $this->uploadedDocumentResource = new UploadedDocumentResource(); $this->docuLockerResource = new DocuLockerResource(); } public function index(Request $request) { $error_if_any = Helpers::validatorErrorResponse( $request, [], [ 'limit' => 'numeric', 'page' => 'numeric' ]); if($error_if_any['flag'] != 0){ return $error_if_any['response']; } [$currentUser, $currentStore, $currentGroup] = $this->getContextualDetails($request); $filter = FilterDocuLockerDto::builder() ->user($currentUser) ->store($currentStore) ->group($currentGroup) ->limit($request->has('limit') ? $request->limit : 10) ->page_no($request->has('page') ? $request->page : 1 ) ->build(); //TODO: use filter with pagination // List all documents $documents = $this->docuLockerService->listDocumentsByUser($currentUser, $filter); $response_data = $this->uploadedDocumentResource->fromUploadedDocumentsToArray($documents, true); return Helpers::successResponse( $response_data, 200, 'Data fetched successfully.'); } public function upload(Request $request) { $error_if_any = Helpers::validatorErrorResponse( $request, [], [ 'document' => 'required|file|max:20480' ]); if($error_if_any['flag'] != 0){ return $error_if_any['response']; } [$currentUser, $currentStore, $currentGroup] = $this->getContextualDetails($request); $locker = $this->docuLockerService->getOrCreateDocuLockerForUser($currentUser); $file = $request->file('document'); $document = $this->docuLockerStorageService->upload($locker, $file, $request); $document_arr = $this->uploadedDocumentResource->fromUploadedDocumentToArray($document); return response()->json(['message' => 'Document uploaded successfully.', 'document' => $document_arr], 201); } public function download_signed(Request $request, $uuid){ if (! URL::hasValidSignature($request)) { abort(401); } $user_id = Crypt::decryptString($request->_u); $user = User::where('user_id', $user_id)->first(); if($user == null){ abort(401); } $request->setUserResolver(function () use ($user) { return $user; }); return $this->download($request, $uuid); } public function download(Request $request, $uuid) { [$currentUser, $currentStore, $currentGroup] = $this->getContextualDetails($request); $filter = FilterDocuLockerDto::builder() ->user($currentUser) ->store($currentStore) ->group($currentGroup) ->uploadedDocumentUUIDs([$uuid]) ->limit(1) ->build(); // Find the document by ID $documents = $this->docuLockerService->listDocumentsByUser($currentUser, $filter); if($documents != null && count($documents) > 0){ return $this->docuLockerStorageService->download($documents[0]); } else { return Helpers::responseMessage(404, 'Document not found'); } } public function delete(Request $request, $id) { [$currentUser, $currentStore, $currentGroup] = $this->getContextualDetails($request); // Find the document by ID $document = UploadedDocument::findOrFail($id); // Delete the file from storage $this->docuLockerStorageService->delete($document->s3_file_handle); // Delete the document record from database $document->delete(); return response()->json(['message' => 'Document deleted successfully.']); } public function search(Request $request){ $error_if_any = Helpers::validatorErrorResponse( $request, [], [ 'q' => 'required|string', 'limit' => 'numeric', 'page' => 'numeric' ]); if($error_if_any['flag'] != 0){ return $error_if_any['response']; } [$currentUser, $currentStore, $currentGroup] = $this->getContextualDetails($request); $search_keyword = $request->q; $filter = FilterDocuLockerDto::builder() ->user($currentUser) ->store($currentStore) ->group($currentGroup) ->searchKeyword($search_keyword) ->limit($request->has('limit') ? $request->limit : 10) ->page_no($request->has('page') ? $request->page : 1 ) ->build(); // Find the document by ID $documents = $this->docuLockerService->listDocumentsByUser($currentUser, $filter); $response_data = $this->uploadedDocumentResource->fromUploadedDocumentsToArray($documents, true); return Helpers::successResponse($response_data, 200, 'Data fetched successfully.'); } public function dashboard(Request $request){ // $error_if_any = Helpers::validatorErrorResponse( // $request, [], []); // if($error_if_any['flag'] != 0){ // return $error_if_any['response']; // } [$currentUser, $currentStore, $currentGroup] = $this->getContextualDetails($request); $search_keyword = $request->q; $filter = FilterDocuLockerDto::builder() ->user($currentUser) ->store($currentStore) ->group($currentGroup) ->searchKeyword($search_keyword) ->limit($request->has('limit') ? $request->limit : 10) ->build(); // Find the document by ID $docuLocker = $this->docuLockerService->getOrCreateDocuLockerForUser($currentUser); $documents = $this->docuLockerService->listDocumentsByUser($currentUser, $filter); $response_data=[]; $response_data['user'] = $currentUser->toArray(); $response_data['docu_locker'] = $this->docuLockerResource->fromDocuLockerToArray($docuLocker); $response_data['documents'] = $this->uploadedDocumentResource->fromUploadedDocumentsToArray($documents); return Helpers::successResponse($response_data, 200, 'Data fetched successfully.'); } } ?>