106 lines
3.3 KiB
PHP
106 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Order;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Validator;
|
|
|
|
class OrderController extends Controller
|
|
{
|
|
/**
|
|
* Mettre à jour le statut d'une commande
|
|
* Remplace la fonction Supabase update-order-status
|
|
*/
|
|
public function updateStatus(Request $request, string $orderId)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'newStatus' => 'required|string|in:En attente de traitement,Traitement en cours,Commande traitée',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return response()->json([
|
|
'error' => 'newStatus est requis et doit être une chaîne de caractères valide'
|
|
], 400);
|
|
}
|
|
|
|
$newStatus = $request->input('newStatus');
|
|
|
|
// Vérifier que la commande existe
|
|
$order = Order::find($orderId);
|
|
|
|
if (!$order) {
|
|
return response()->json([
|
|
'error' => 'Commande introuvable'
|
|
], 404);
|
|
}
|
|
|
|
// Vérifier si le statut est déjà le même
|
|
if ($order->status === $newStatus) {
|
|
return response()->json([
|
|
'error' => "La commande a déjà le statut \"{$newStatus}\"",
|
|
'order' => $order
|
|
], 400);
|
|
}
|
|
|
|
// Mettre à jour le statut
|
|
$order->status = $newStatus;
|
|
$order->save();
|
|
|
|
return response()->json($order, 200);
|
|
}
|
|
|
|
/**
|
|
* Récupérer les commandes avec pagination
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$perPage = $request->input('per_page', 10);
|
|
$page = $request->input('page', 1);
|
|
$status = $request->input('status');
|
|
|
|
$query = Order::query()->orderBy('created_at', 'desc');
|
|
|
|
if ($status) {
|
|
$query->where('status', $status);
|
|
}
|
|
|
|
$orders = $query->paginate($perPage, ['*'], 'page', $page);
|
|
|
|
return response()->json([
|
|
'data' => $orders->items(),
|
|
'total' => $orders->total(),
|
|
'per_page' => $orders->perPage(),
|
|
'current_page' => $orders->currentPage(),
|
|
'last_page' => $orders->lastPage(),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Récupérer les métriques des commandes
|
|
*/
|
|
public function metrics()
|
|
{
|
|
$total = Order::count();
|
|
$pending = Order::where('status', 'En attente de traitement')->count();
|
|
$processing = Order::where('status', 'Traitement en cours')->count();
|
|
$completed = Order::where('status', 'Commande traitée')->count();
|
|
$totalRevenue = Order::sum('price');
|
|
$pendingRevenue = Order::where('status', 'En attente de traitement')->sum('price');
|
|
$processingRevenue = Order::where('status', 'Traitement en cours')->sum('price');
|
|
$completedRevenue = Order::where('status', 'Commande traitée')->sum('price');
|
|
|
|
return response()->json([
|
|
'total' => $total,
|
|
'pending' => $pending,
|
|
'processing' => $processing,
|
|
'completed' => $completed,
|
|
'totalRevenue' => $totalRevenue,
|
|
'pendingRevenue' => $pendingRevenue,
|
|
'processingRevenue' => $processingRevenue,
|
|
'completedRevenue' => $completedRevenue,
|
|
]);
|
|
}
|
|
}
|