Passer au contenu principal

Documentation Index

Fetch the complete documentation index at: https://docs.oneclickdz.com/llms.txt

Use this file to discover all available pages before exploring further.

Vue d’ensemble

L’endpoint du catalogue retourne toutes les cartes-cadeaux et produits numériques disponibles, organisés par catégories telles que les cartes gaming, les services de streaming, etc. Les produits doivent être mis en cache pour minimiser les appels API, car le catalogue change rarement.
Mettez en cache les données du catalogue pendant au moins 24 heures. Les produits sont ajoutés/supprimés rarement.

Référence API

GET /v3/gift-cards/catalog

Documentation complète de l’endpoint

Chargement de base du catalogue

async function loadCatalog() {
  const response = await fetch(
    "https://api.oneclickdz.com/v3/gift-cards/catalog",
    {
      headers: {
        "X-Access-Token": process.env.API_KEY,
      },
    }
  );

  if (!response.ok) {
    throw new Error(`Failed to load catalog: ${response.status}`);
  }

  const result = await response.json();
  return result.data;
}

// Usage
const catalog = await loadCatalog();
console.log(`Total categories: ${catalog.categories.length}`);
console.log(
  `Total products: ${catalog.categories.reduce(
    (sum, cat) => sum + cat.products.length,
    0
  )}`
);

Structure de la réponse

{
  "success": true,
  "data": {
    "categories": [
      {
        "name": "Gaming Cards",
        "products": [
          {
            "id": "507f1f77bcf86cd799439011",
            "title": "PlayStation Network",
            "enabled": true,
            "region": "dz"
          },
          {
            "id": "507f1f77bcf86cd799439012",
            "title": "Google Play Gift Card",
            "enabled": true
          }
        ]
      },
      {
        "name": "Streaming Services",
        "products": [
          {
            "id": "507f1f77bcf86cd799439014",
            "title": "Netflix Gift Card",
            "enabled": true
          }
        ]
      }
    ]
  },
  "meta": {
    "totalCategories": 8,
    "totalProducts": 127
  }
}

Implémentation du cache

class CatalogCache {
  constructor(ttlMinutes = 10) {
    this.data = null;
    this.timestamp = 0;
    this.ttl = ttlMinutes * 60 * 1000;
  }

  async get() {
    const now = Date.now();

    // Return cached if still valid
    if (this.data && now - this.timestamp < this.ttl) {
      console.log("Returning cached catalog");
      return this.data;
    }

    // Fetch fresh data
    console.log("Fetching fresh catalog");
    const response = await fetch(
      "https://api.oneclickdz.com/v3/gift-cards/catalog",
      {
        headers: { "X-Access-Token": process.env.API_KEY },
      }
    );

    this.data = await response.json();
    this.timestamp = now;

    return this.data;
  }

  invalidate() {
    this.data = null;
    this.timestamp = 0;
  }
}

// Usage
const cache = new CatalogCache(10); // TTL 24 heures

// First call - fetches from API
const catalog1 = await cache.get();

// Second call within 24 hours - returns cached
const catalog2 = await cache.get();

// Force refresh
cache.invalidate();
const catalog3 = await cache.get(); // Récupère de nouvelles données

Filtrage des produits

N’afficher que les produits activés aux clients :
function getEnabledProducts(catalog) {
  const enabled = [];

  for (const category of catalog.categories) {
    const enabledInCategory = category.products.filter((p) => p.enabled);

    if (enabledInCategory.length > 0) {
      enabled.push({
        categoryName: category.name,
        products: enabledInCategory,
      });
    }
  }

  return enabled;
}

// Usage
const catalog = await cache.get();
const enabledProducts = getEnabledProducts(catalog.data);
console.log("Enabled products:", JSON.stringify(enabledProducts, null, 2));

Filtrage par région

Filtrer les produits par région pour cibler des marchés spécifiques :
function filterByRegion(catalog, region = "dz") {
  return catalog.categories
    .map((category) => ({
      ...category,
      products: category.products.filter(
        (p) => p.enabled && (!p.region || p.region === region)
      ),
    }))
    .filter((cat) => cat.products.length > 0);
}

// Usage
const algerianProducts = filterByRegion(catalog.data, "dz");

Bonnes pratiques

Gérer les erreurs gracieusement

Revenez aux données en cache si l’API est temporairement indisponible

Organiser par catégorie

Utilisez la structure par catégories pour une meilleure expérience utilisateur

Étapes suivantes

Vérifier les produits

Obtenir les prix et le stock pour les produits sélectionnés

Passer des commandes

Soumettre des commandes avec validation

Référence API

Documentation complète de l’endpoint

Vue d'ensemble

Retour à la vue d’ensemble de l’intégration

Suivre le statut

Surveiller l’exécution des commandes

Livraison sécurisée

Chiffrer et livrer les cartes