19/09/2025
Maison Baihoul gpt // Agence LIA – Prototype final (tous produits, paiements MTN/Orange, livraisons PDF ou objets)
const express = require('express');
const bodyParser = require('body-parser');
const fs = require('fs');
const path = require('path');
const jwt = require('jsonwebtoken');
const app = express();
app.use(bodyParser.json());
// Configuration
const SECRET = process.env.JWT_SECRET || 'supersecret';
const PAYMENT_NUMBER_MTN = process.env.PAYMENT_NUMBER_MTN || '+237654716907';
const PAYMENT_NUMBER_ORANGE = process.env.PAYMENT_NUMBER_ORANGE || '+237659589893';
// Base de données en mémoire
let products = []; // { id, name, type, description, price, fileContent?, status }
let purchases = []; // { id, productId, buyer, operator, status, delivery }
// Middleware admin
function adminAuth(req, res, next) {
const token = req.headers['authorization'];
if (!token) return res.status(401).json({ error: 'Unauthorized' });
try {
jwt.verify(token.replace('Bearer ', ''), SECRET);
next();
} catch (e) {
res.status(403).json({ error: 'Forbidden' });
}
}
// Créer un produit
app.post('/admin/product', adminAuth, (req, res) => {
const { name, type, description, price, fileContent } = req.body;
if (!name || !price) return res.status(400).json({ error: 'Nom et prix obligatoires' });
const id = products.length + 1;
const newProduct = { id, name, type, description, price, fileContent, status: 'AVAILABLE' };
products.push(newProduct);
res.json(newProduct);
});
// Lister produits
app.get('/products', (req, res) => {
res.json(products);
});
// Acheter un produit
app.get('/buy/:id', (req, res) => {
const product = products.find(p => p.id == req.params.id);
if (!product) return res.status(404).send('Produit introuvable');
res.send(`
Achat: ${product.name}
Type: ${product.type || 'standard'}
Prix: ${product.price} FCFA
MTN (${PAYMENT_NUMBER_MTN})
ORANGE (${PAYMENT_NUMBER_ORANGE})
Payer
`);
});
// Initier paiement
app.post('/pay/:id', bodyParser.urlencoded({ extended: true }), (req, res) => {
const product = products.find(p => p.id == req.params.id);
if (!product) return res.status(404).send('Produit introuvable');
const { operator, buyer } = req.body;
const id = purchases.length + 1;
const purchase = { id, productId: product.id, buyer, operator, status: 'PENDING', delivery: null };
purchases.push(purchase);
res.send(`
Paiement en attente
Veuillez envoyer ${product.price} FCFA au numéro ${operator === 'ORANGE' ? PAYMENT_NUMBER_ORANGE : PAYMENT_NUMBER_MTN}.
Votre identifiant d'achat: ${id}
`);
});
// Callback paiement (simulé ou réel)
app.post('/payment/callback', (req, res) => {
const { purchaseId, secret } = req.body;
if (secret && secret !== SECRET) return res.status(403).json({ error: 'Invalid secret' });
const purchase = purchases.find(p => p.id == purchaseId);
if (!purchase) return res.status(404).json({ error: 'Purchase not found' });
purchase.status = 'PAID';
const product = products.find(p => p.id == purchase.productId);
if (product.fileContent) {
// Livraison fichier PDF
const pdfPath = path.join(__dirname, `delivery_${purchaseId}.pdf`);
fs.writeFileSync(pdfPath, `Produit: ${product.name}\nDescription: ${product.description}\nContenu:\n${product.fileContent}`);
purchase.delivery = pdfPath;
} else {
// Livraison objet (confirmation)
purchase.delivery = `Votre commande (${product.name}) sera livrée par contact direct.`;
}
res.json({ success: true, purchase });
});
// Télécharger livraison
app.get('/delivery/:id', (req, res) => {
const purchase = purchases.find(p => p.id == req.params.id);
if (!purchase || purchase.status !== 'PAID') return res.status(403).send('Accès interdit');
if (purchase.delivery && purchase.delivery.endsWith('.pdf')) {
res.download(purchase.delivery);
} else {
res.send(`${purchase.delivery}`);
}
});
// Exporter données
app.get('/admin/export', adminAuth, (req, res) => {
res.json({ products, purchases });
});
// Démarrer serveur
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Agence LIA en marche sur port ${PORT}`));
Parfait 👌 j’ai ajouté la catégorie Maison & Vie quotidienne comme tu as demandé, pour inclure les cuillères, ustensiles, voitures, et tout ce qui est nécessaire.
Veux-tu que je crée aussi un catalogue détaillé avec prix (par exemple petit prix, moyen, grand) pour chaque catégorie ?
https://www.tiktok.com/://m.me/maisonbaihoulhttps://youtube.com/?si=_a6dGF97e-1b5lTU
Experience the future of video editing with massive AI features and create visuals that truly stand out.