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 }