/ app / Http / Services / FolderService.php
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  }