logAction = LogActions::updatebasket(); $this->logSource = 'API'; } public function updateBasket(Request $request) { // Validate required parameters $requiredParams = ['customer_hashcode', 'refcamp', 'refsite', 'panier']; $error = array_any($requiredParams, fn($param) => empty($request->{$param})); if ($error) { $this->writeLogErrorWrongRequestParameters( $request->refcamp ?? null, $request->customer_hashcode ?? null, $request->refsite ?? null, $request->panier ?? null ); return response()->json([ 'Statut' => 'KO', 'Code' => 101, 'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents' ]); } // Validate campaign $refcamp = $request->refcamp; $campagne = Campagne::where('camp_id', $refcamp)->first(); if (!$campagne || $campagne->camp_published == 0 || !in_array($campagne->camp_type->value, [1, 3])) { $this->writeLogErrorIncorrectCampaign($refcamp); return response()->json([ 'Statut' => 'KO', 'Code' => 103, 'Message' => 'La campagne n\'existe pas ou n\'est pas un panier' ]); } $refsite = $request->refsite; if ($refsite != $campagne->camp_siteId) { return response()->json([ 'Statut' => 'KO', 'Code' => 103, 'Message' => 'La campagne ne correspond à aucune campagnes du site' ]); } // Parse panier $panierTab = explode(",", $request->panier); $coupons = []; foreach ($panierTab as $item) { $pos = strpos($item, ")"); if ($pos === false) { $error = true; break; } $quantity = str_replace("(", "", substr($item, 0, $pos)); $couponCode = substr($item, $pos + 1); if (is_numeric($quantity) && is_numeric($couponCode) && $quantity > 0) { $coupon = Coupon::where('coupon_code', $couponCode)->first(); if (isset($coupons[$coupon->coupon_id])) { $coupons[$coupon->coupon_id] += $quantity; } else { $coupons[$coupon->coupon_id] = $quantity; } } } if (empty($coupons)) { die(); } if ($error) { $this->writeLogErrorWrongRequestParameters( $refcamp, $request->customer_hashcode, $campagne->camp_siteId, $request->panier ); return response()->json([ 'Statut' => 'KO', 'Code' => 101, 'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents' ]); } // Prepare panierCoupons for logging $panierCoupons = []; foreach ($coupons as $coupon_id => $qty) { $panierCoupons[] = ['coupon_id' => $coupon_id, 'qty' => $qty]; } // Retrieve customer $customer = Customers::where('hashcode', $request->customer_hashcode)->first(); // Retrieve or create basket $basket = Basket::updateContent($campagne, $coupons, $customer); // Log success $this->writeLogSuccessBasketCreated( $refcamp, $request->customer_hashcode, $refsite, $request->panier, $panierCoupons ); return response()->json([ 'Statut' => 'OK', 'Panier' => $basket ]); } }