/ app / Http / Services / RecommendationService.php
RecommendationService.php
 1  <?php
 2  
 3  namespace App\Http\Services;
 4  
 5  use App\Models\Recommendation;
 6  use App\Models\RecommendationCategory;
 7  use DB;
 8  use Exception;
 9  
10  class RecommendationService
11  {
12      public static function search(string $searchString, string $sortField, string $sortDirection, array|null $filters, int $dossierId = null)
13      {
14          $recommendationsQuery = Recommendation::query()
15              ->when($dossierId, function ($query) use ($dossierId) {
16                  $query->where('dossier_id', $dossierId);
17              });
18          
19          if ($searchString) {
20              $recommendationsQuery->where(function ($query) use ($searchString) {
21                  $query->whereHas('category', function ($query) use ($searchString) {
22                      $query->where('name', 'like', '%' . $searchString . '%');
23                  })
24                      ->orWhere('description', 'like', '%' . $searchString . '%');  
25              });
26          }
27  
28          if ($filters && $filters['created_at_since']) {
29              $recommendationsQuery->where('created_at', '>=', $filters['created_at_since']);
30          }
31  
32          if ($filters && $filters['created_at_to']) {
33              $recommendationsQuery->where('created_at', '<=', $filters['created_at_to']);
34          }
35  
36          if ($sortField && $sortDirection) {
37              $recommendationsQuery->orderBy($sortField, $sortDirection);
38          }
39  
40          return $recommendationsQuery;
41      }
42  
43      public static function find(int $recommendationId): Recommendation
44      {
45          return Recommendation::find($recommendationId);
46      }
47  
48      public static function create(array $data)
49      {
50          return Recommendation::create($data);
51      }
52  
53      public static function update(int $id, array $data)
54      {
55          $recommendation = Recommendation::findOrFail($id);
56  
57          return $recommendation->update($data);
58      }
59  
60      /**
61       * Destroy a resource
62       *
63       */
64      public static function remove(int $recommendationId): void
65      {
66          try {
67              DB::beginTransaction();
68              Recommendation::destroy($recommendationId);
69              DB::commit();
70          } catch (Exception $e) {
71              DB::rollBack();
72              log_exception($e);
73              throw new Exception(__('dossiers.recommendations.notifications.remove.error.message'));
74          }
75      }
76  
77      public static function getAllOrByDossierId(int $dossierId = null)
78      {
79          return Recommendation::query()
80              ->when($dossierId, function ($query) use ($dossierId) {
81                  $query->where('dossier_id', $dossierId);
82              })->get();
83      }
84  
85      public static function createCategory($name)
86      {
87          return RecommendationCategory::firstOrCreate(['name' => $name]);
88      }
89  }