140 lines
4.2 KiB
PHP
140 lines
4.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api\v1;
|
|
|
|
use Illuminate\Http\Request;
|
|
use App\Models\Campagne;
|
|
use App\Enums\LogActions;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Basket;
|
|
use App\Models\Coupon;
|
|
use App\Models\Customers;
|
|
use App\Traits\CouponTrait;
|
|
use App\Traits\ThanksTrait;
|
|
use App\Traits\LogTrait;
|
|
|
|
class BasketController extends Controller
|
|
{
|
|
use ThanksTrait, CouponTrait, LogTrait;
|
|
|
|
protected $logSource;
|
|
protected $logAction;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->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
|
|
]);
|
|
}
|
|
}
|