From 1488accbdb9f8f1b8b064b867f91e23a216c624e Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Thu, 2 Apr 2026 09:28:46 +0200 Subject: [PATCH] feat: implement mobile-optimized DLC management page with EAN lookup and status-based filtering --- client/src/pages/DlcPage.tsx | 2 +- client/src/pages/mobile/DlcPage.tsx | 2 +- server/routes.ts | 19 +++++++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/client/src/pages/DlcPage.tsx b/client/src/pages/DlcPage.tsx index 99e524a..2ef3b00 100644 --- a/client/src/pages/DlcPage.tsx +++ b/client/src/pages/DlcPage.tsx @@ -128,7 +128,7 @@ export default function DlcPage() { eanDebounceRef.current = setTimeout(async () => { setEanLookupLoading(true); try { - const res = await fetch(`https://api.ffnancy.fr/api/articles?ean=${encodeURIComponent(gencodeValue)}&limit=1`); + const res = await fetch(`/api/ffnancy/articles?ean=${encodeURIComponent(gencodeValue)}&limit=1`, { credentials: 'include' }); if (!res.ok) return; const data = await res.json(); const article = data.articles?.[0]; diff --git a/client/src/pages/mobile/DlcPage.tsx b/client/src/pages/mobile/DlcPage.tsx index c6dabc3..4577240 100644 --- a/client/src/pages/mobile/DlcPage.tsx +++ b/client/src/pages/mobile/DlcPage.tsx @@ -153,7 +153,7 @@ export default function MobileDlcPage() { eanDebounceRef.current = setTimeout(async () => { setEanLookupLoading(true); try { - const res = await fetch(`https://api.ffnancy.fr/api/articles?ean=${encodeURIComponent(gencodeValue)}&limit=1`); + const res = await fetch(`/api/ffnancy/articles?ean=${encodeURIComponent(gencodeValue)}&limit=1`, { credentials: 'include' }); if (!res.ok) return; const data = await res.json(); const article = data.articles?.[0]; diff --git a/server/routes.ts b/server/routes.ts index b5c51b3..4cea8c7 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -6031,6 +6031,25 @@ RÉSUMÉ DU SCAN } }); + // Proxy API ffnancy - évite les problèmes CORS côté navigateur + app.get('/api/ffnancy/articles', requireAuth, async (req: Request, res: Response) => { + try { + const params = new URLSearchParams(); + const allowed = ['search', 'codein', 'ean', 'codefou', 'actif', 'page', 'limit']; + for (const key of allowed) { + if (req.query[key]) params.append(key, req.query[key] as string); + } + const response = await fetch(`https://api.ffnancy.fr/api/articles?${params}`); + if (!response.ok) { + return res.status(response.status).json({ error: 'API ffnancy error' }); + } + const data = await response.json(); + res.json(data); + } catch (error) { + res.status(500).json({ error: 'Failed to reach API ffnancy' }); + } + }); + // Create server instance const httpServer = createServer(app);