initial commit

This commit is contained in:
balvarez
2026-01-03 19:36:52 +01:00
parent 3eeaffd36e
commit e6e5c68a01
56 changed files with 11156 additions and 0 deletions

View 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,
]);
}
}