Fix calendar errors and improve order delivery status handling

Adds TypeScript type annotations to the calendar component and refactors the order update logic to use fetch directly, improving robustness and addressing production errors.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: a8a78c07-e900-425c-a577-5b4c5894379d
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/a8a78c07-e900-425c-a577-5b4c5894379d/KuIk8gU
This commit is contained in:
michaelschal committed 2025-08-11 20:55:33 +00:00
1 parent 58f65dc086
commit 687a1b41d4
3 files changed
+148 -13

No files matched your search

+130
View File
@@ -0,0 +1,130 @@
# Correction des Erreurs 502 - Production
## Problème Identifié
- Erreurs 502 (Bad Gateway) lors des appels API `/api/deliveries` et `/api/orders`
- CMD-55 n'apparaît pas en gris dans le calendrier
- Erreurs TypeScript dans le code du calendrier
## Solutions
### 1. Vérification du Serveur Backend
Vérifiez que votre serveur Node.js fonctionne :
```bash
# Vérifier le processus
ps aux | grep node
# Vérifier les logs du serveur
tail -f /path/to/your/server/logs
# Vérifier si le port est écouté
netstat -tlnp | grep :YOUR_PORT
```
### 2. Redémarrage du Serveur
```bash
# Via PM2
pm2 restart your-app-name
pm2 logs your-app-name
# Via systemctl
sudo systemctl restart your-node-service
sudo systemctl status your-node-service
# Via Docker
docker-compose restart
docker-compose logs -f
```
### 3. Vérification de la Configuration Proxy/Nginx
Si vous utilisez un proxy inverse (Nginx), vérifiez la configuration :
```nginx
location /api/ {
proxy_pass http://localhost:YOUR_NODE_PORT/api/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 86400;
}
```
### 4. Correction SQL Directe pour CMD-55
Pendant que vous résolvez les erreurs 502, corrigez CMD-55 directement :
```sql
-- Connexion à votre base
psql -h your-host -U your-user -d your-database
-- Correction CMD-55
UPDATE orders
SET status = 'delivered'
WHERE id = 55
AND status != 'delivered'
AND EXISTS (
SELECT 1 FROM deliveries d
WHERE d."orderId" = 55
AND d.status = 'delivered'
);
-- Vérifier le résultat
SELECT o.id, o.status, COUNT(d.id) as deliveries,
COUNT(CASE WHEN d.status = 'delivered' THEN 1 END) as delivered_deliveries
FROM orders o
LEFT JOIN deliveries d ON o.id = d."orderId"
WHERE o.id = 55
GROUP BY o.id, o.status;
```
### 5. Test des API manuellement
```bash
# Tester l'API orders
curl -X GET "http://your-server.com/api/orders" \
-H "Cookie: your-session-cookie"
# Tester l'API deliveries
curl -X GET "http://your-server.com/api/deliveries" \
-H "Cookie: your-session-cookie"
```
## Actions Prioritaires
1. **Immédiat** : Exécuter la correction SQL pour CMD-55
2. **Urgent** : Redémarrer votre serveur Node.js
3. **Important** : Vérifier les logs pour identifier la cause des 502
## Diagnostic des Logs
Recherchez dans vos logs :
```bash
# Erreurs Node.js
grep -i "error\|crash\|exception" /path/to/logs
# Erreurs de base de données
grep -i "database\|postgres\|connection" /path/to/logs
# Erreurs de mémoire
grep -i "memory\|heap" /path/to/logs
```
## Résultat Attendu
Après correction :
- Les API `/api/orders` et `/api/deliveries` répondent sans erreur 502
- CMD-55 apparaît en gris dans le calendrier
- Le bouton "Sync Status" fonctionne correctement
---
**Note** : La correction SQL de CMD-55 peut être appliquée immédiatement, indépendamment de la résolution des erreurs 502.
Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

+18 -13
View File
@@ -160,8 +160,8 @@ export default function Calendar() {
const allDeliveries = await deliveriesResponse.json();
// Enrichir les commandes avec leurs livraisons pour avoir les bonnes relations
const enrichedOrders = filteredOrders.map(order => {
const orderDeliveries = allDeliveries.filter(delivery => delivery.orderId === order.id);
const enrichedOrders = filteredOrders.map((order: any) => {
const orderDeliveries = allDeliveries.filter((delivery: any) => delivery.orderId === order.id);
return {
...order,
deliveries: orderDeliveries
@@ -172,18 +172,18 @@ export default function Calendar() {
filteredOrders: filteredOrders.length,
enrichedOrders: enrichedOrders.length,
allDeliveries: allDeliveries.length,
deliveredDeliveries: allDeliveries.filter(d => d.status === 'delivered').length
deliveredDeliveries: allDeliveries.filter((d: any) => d.status === 'delivered').length
});
// Chercher spécifiquement CMD-55
const cmd55 = enrichedOrders.find(o => o.id === 55);
const cmd55Deliveries = allDeliveries.filter(d => d.orderId === 55);
const cmd55 = enrichedOrders.find((o: any) => o.id === 55);
const cmd55Deliveries = allDeliveries.filter((d: any) => d.orderId === 55);
console.log('🎯 CMD-55 Analysis:', {
foundInOrders: !!cmd55,
cmd55Status: cmd55?.status || 'NOT_FOUND',
cmd55Deliveries: cmd55Deliveries.length,
deliveryStatuses: cmd55Deliveries.map(d => ({
deliveryStatuses: cmd55Deliveries.map((d: any) => ({
id: d.id,
status: d.status,
deliveredDate: d.deliveredDate,
@@ -199,26 +199,31 @@ export default function Calendar() {
console.log(`🔍 Analyzing order #CMD-${order.id}:`, {
status: order.status,
deliveries: order.deliveries?.length || 0,
deliveryStatuses: order.deliveries?.map(d => ({ id: d.id, status: d.status, deliveredDate: d.deliveredDate })) || []
deliveryStatuses: order.deliveries?.map((d: any) => ({ id: d.id, status: d.status, deliveredDate: d.deliveredDate })) || []
});
if (order.deliveries && order.deliveries.length > 0) {
const hasDeliveredDeliveries = order.deliveries.some(d => d.status === 'delivered');
const hasDeliveredDeliveries = order.deliveries.some((d: any) => d.status === 'delivered');
if (hasDeliveredDeliveries && order.status !== 'delivered') {
problematicOrders++;
console.log(`🔍 Found problematic order: #CMD-${order.id} (status: ${order.status}) with delivered deliveries:`,
order.deliveries.filter(d => d.status === 'delivered').map(d => `#LIV-${d.id}`)
order.deliveries.filter((d: any) => d.status === 'delivered').map((d: any) => `#LIV-${d.id}`)
);
try {
// Corriger la commande via l'API PUT existante
await apiRequest({
url: `/api/orders/${order.id}`,
// Corriger la commande via fetch direct
const response = await fetch(`/api/orders/${order.id}`, {
method: 'PUT',
data: { status: 'delivered' }
headers: { 'Content-Type': 'application/json' },
credentials: 'include',
body: JSON.stringify({ status: 'delivered' })
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}
fixedOrders++;
console.log(`✅ Fixed order #CMD-${order.id} status to 'delivered'`);
} catch (error) {