initial commit
This commit is contained in:
105
src/app/Http/Controllers/Api/OrderController.php
Normal file
105
src/app/Http/Controllers/Api/OrderController.php
Normal file
@@ -0,0 +1,105 @@
|
||||
<?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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user