FolderService.php
1 <?php 2 3 namespace App\Http\Services; 4 5 use App\Models\Dossier; 6 use Exception; 7 use App\Models\Folder; 8 use Illuminate\Support\Facades\DB; 9 use Throwable; 10 11 class FolderService 12 { 13 /** 14 * @throws Throwable 15 */ 16 public static function create(array $data): Folder 17 { 18 DB::beginTransaction(); 19 20 try { 21 /** @var Folder $folder */ 22 $folder = Folder::findOrFail($data['parent_id'])->children()->create([ 23 'name' => $data['name'], 24 'dossier_id' => $data['dossier_id'], 25 'created_by' => auth()->user()->id, 26 ]); 27 Folder::fixTree(); 28 DB::commit(); 29 30 return $folder; 31 } catch (Exception $e) { 32 DB::rollBack(); 33 throw $e; 34 } 35 } 36 37 public static function getFolder(Dossier $dossier, $folderName): Folder 38 { 39 return Folder::where('dossier_id', $dossier->id)->where('name', $dossier->code) 40 ->first() 41 ->children() 42 ->where('name', $folderName) 43 ->with('documents') 44 ->first(); 45 } 46 47 public static function createStructureArray(array $structure, Folder $parentFolder) 48 { 49 foreach ($structure as $key => $value) { 50 if ($key === 'files') { 51 foreach ($value as $document) { 52 $document->folder()->associate($parentFolder); 53 } 54 } else { 55 $folder = $parentFolder->children()->create([ 56 'name' => $key, 57 'created_by' => auth()->user()->id, 58 ]); 59 Folder::fixTree(); 60 FolderService::createStructureArray($value, $folder); 61 } 62 } 63 } 64 }