💄Better UI
This commit is contained in:
90
server.js
90
server.js
@@ -18,11 +18,11 @@ app.get('/api/ulule/:slug', async (req, res) => {
|
||||
try {
|
||||
const { slug } = req.params;
|
||||
console.log(`Récupération des données pour la campagne: ${slug}`);
|
||||
|
||||
|
||||
// Utiliser directement l'API publique d'Ulule
|
||||
const apiUrl = `https://api.ulule.com/v1/projects/${slug}`;
|
||||
console.log(`Tentative d'accès à l'API: ${apiUrl}`);
|
||||
|
||||
|
||||
const response = await axios.get(apiUrl, {
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
|
||||
@@ -31,18 +31,18 @@ app.get('/api/ulule/:slug', async (req, res) => {
|
||||
},
|
||||
timeout: 10000
|
||||
});
|
||||
|
||||
|
||||
// Vérifier si la réponse est valide
|
||||
if (response.status === 200 && response.data) {
|
||||
console.log("Données récupérées avec succès depuis l'API d'Ulule");
|
||||
|
||||
|
||||
const projectData = response.data;
|
||||
|
||||
|
||||
// Formater les données pour notre application
|
||||
const formattedData = {
|
||||
name: projectData.name ?
|
||||
(projectData.name.fr || projectData.name.en || Object.values(projectData.name)[0]) :
|
||||
slug,
|
||||
name: projectData.name ?
|
||||
(projectData.name.fr || projectData.name.en || Object.values(projectData.name)[0]) :
|
||||
slug,
|
||||
amount_raised: projectData.amount_raised || 0,
|
||||
goal: projectData.goal || 0,
|
||||
currency: projectData.currency || "EUR",
|
||||
@@ -60,15 +60,15 @@ app.get('/api/ulule/:slug', async (req, res) => {
|
||||
const diffTime = endDate - now;
|
||||
formattedData.days_left = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
||||
}
|
||||
|
||||
|
||||
return res.json(formattedData);
|
||||
} else {
|
||||
throw new Error(`Réponse invalide de l'API: ${response.status}`);
|
||||
}
|
||||
|
||||
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la récupération des données:', error.message);
|
||||
|
||||
|
||||
// En cas d'erreur, renvoyer des données de démonstration
|
||||
res.json({
|
||||
name: req.params.slug,
|
||||
@@ -91,14 +91,14 @@ app.get('/api/ulule/:slug/rewards', async (req, res) => {
|
||||
try {
|
||||
const { slug } = req.params;
|
||||
console.log(`Récupération des récompenses pour la campagne: ${slug}`);
|
||||
|
||||
|
||||
// Utiliser l'API Ulule
|
||||
const apiUrl = `https://api.ulule.com/v1/projects/${slug}`;
|
||||
const response = await axios.get(apiUrl);
|
||||
|
||||
|
||||
if (response.status === 200 && response.data && response.data.rewards) {
|
||||
console.log(`${response.data.rewards.length} récompenses récupérées`);
|
||||
|
||||
|
||||
// Simplifier les données des récompenses
|
||||
const rewards = response.data.rewards.map(reward => ({
|
||||
id: reward.id,
|
||||
@@ -110,12 +110,12 @@ app.get('/api/ulule/:slug/rewards', async (req, res) => {
|
||||
orders_count: reward.orders_count,
|
||||
date_delivery: reward.date_delivery
|
||||
}));
|
||||
|
||||
|
||||
return res.json({ rewards });
|
||||
} else {
|
||||
throw new Error(`Aucune récompense trouvée pour la campagne ${slug}`);
|
||||
}
|
||||
|
||||
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la récupération des récompenses:', error.message);
|
||||
return res.json({ rewards: [] });
|
||||
@@ -127,11 +127,11 @@ app.get('/api/ulule/:slug/supporters', async (req, res) => {
|
||||
try {
|
||||
const { slug } = req.params;
|
||||
console.log(`Récupération des contributeurs pour la campagne: ${slug}`);
|
||||
|
||||
|
||||
// Utiliser l'API Ulule pour récupérer les contributeurs avec des champs supplémentaires
|
||||
const apiUrl = `https://api.ulule.com/v1/projects/${slug}/supporters?extra_fields=latest_project_order,latest_project_comment`;
|
||||
console.log(`Tentative d'accès à l'API des supporters: ${apiUrl}`);
|
||||
|
||||
|
||||
const response = await axios.get(apiUrl, {
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
|
||||
@@ -140,47 +140,59 @@ app.get('/api/ulule/:slug/supporters', async (req, res) => {
|
||||
},
|
||||
timeout: 10000
|
||||
});
|
||||
|
||||
|
||||
if (response.status === 200 && response.data && response.data.supporters) {
|
||||
console.log(`${response.data.supporters.length} contributeurs récupérés`);
|
||||
|
||||
|
||||
// Formater les données des contributeurs
|
||||
const contributors = response.data.supporters.map(supporter => {
|
||||
// Récupérer le nom complet ou le nom d'utilisateur
|
||||
let name = supporter.screenname || supporter.name || 'Contributeur anonyme';
|
||||
|
||||
|
||||
// Extraire les informations de commande si disponibles
|
||||
let reward = '';
|
||||
let reward_desc = '';
|
||||
let amount = 0;
|
||||
let comment = '';
|
||||
|
||||
|
||||
if (supporter.latest_project_order && supporter.latest_project_order.items && supporter.latest_project_order.items.length > 0) {
|
||||
// Récupérer la première récompense
|
||||
const firstItem = supporter.latest_project_order.items[0];
|
||||
amount = firstItem.line_total || firstItem.unit_price || 0;
|
||||
|
||||
// Récupérer le titre de la récompense
|
||||
if (firstItem.reward && firstItem.reward.parent && firstItem.reward.parent.title) {
|
||||
const titles = firstItem.reward.parent.title;
|
||||
reward = titles.fr || titles.en || Object.values(titles)[0] || '';
|
||||
|
||||
// Si c'est une variante, ajouter sa description
|
||||
if (firstItem.reward.description_fr) {
|
||||
reward += ` (${firstItem.reward.description_fr})`;
|
||||
amount = firstItem.line_subtotal || firstItem.unit_price || 0;
|
||||
|
||||
if (firstItem.reward.parent && firstItem.reward.parent.delivery) {
|
||||
if (firstItem.reward.parent.delivery.shipping_type == 'physical-delivery') {
|
||||
amount = firstItem.line_subtotal || firstItem.unit_price || 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Récupérer le titre de la récompense
|
||||
if (firstItem.reward && firstItem.reward.title) {
|
||||
const titles = firstItem.reward.title || firstItem.reward.parent.title;
|
||||
reward = titles.fr || Object.values(titles)[0] || '';
|
||||
reward_desc = firstItem.reward.description_fr;
|
||||
|
||||
reward = reward;
|
||||
|
||||
} else if (firstItem.reward.parent && firstItem.reward.parent.title) {
|
||||
const titles = firstItem.reward.parent.title;
|
||||
reward = titles.fr || firstItem.reward.description_fr || Object.values(titles)[0] || '';
|
||||
reward_desc = firstItem.reward.description_fr;
|
||||
|
||||
reward = reward + ' - ' + reward_desc;
|
||||
}
|
||||
|
||||
// Ajouter un pourboire si présent
|
||||
if (supporter.latest_project_order.tip && supporter.latest_project_order.tip > 0) {
|
||||
amount += supporter.latest_project_order.tip;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Récupérer le commentaire si disponible
|
||||
if (supporter.latest_project_comment && supporter.latest_project_comment.comment) {
|
||||
comment = supporter.latest_project_comment.comment;
|
||||
}
|
||||
|
||||
|
||||
return {
|
||||
id: supporter.id,
|
||||
name: name,
|
||||
@@ -192,17 +204,17 @@ app.get('/api/ulule/:slug/supporters', async (req, res) => {
|
||||
location: supporter.location || ''
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
return res.json({ contributors });
|
||||
} else {
|
||||
throw new Error(`Erreur lors de la récupération des contributeurs: ${response.status}`);
|
||||
}
|
||||
|
||||
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la récupération des contributeurs:', error.message);
|
||||
|
||||
|
||||
// En cas d'erreur, renvoyer des données de démonstration
|
||||
return res.json({
|
||||
return res.json({
|
||||
contributors: [
|
||||
{ name: "Contributeur 1", reward: "Pack Tour", amount: 40, avatar: "", comment: "Super projet!" },
|
||||
{ name: "Contributeur 2", reward: "Pack Cavalier", amount: 26, avatar: "", comment: "" },
|
||||
|
||||
Reference in New Issue
Block a user