Class HttpRestFactory

java.lang.Object
fr.univ_eiffel.legotools.factory.impl.HttpRestFactory
All Implemented Interfaces:
LegoFactory

public class HttpRestFactory extends Object implements LegoFactory
Implémentation concrète de l'interface LegoFactory communiquant via une API REST.

Cette classe gère toute le réseau :

  • Authentification (Headers X-Email, X-Secret-Key).
  • Sérialisation/Désérialisation JSON.
  • Gestion des codes d'erreur HTTP (402 Payment Required, 404 Not Found...).
  • Vérification cryptographique des signatures (Ed25519).
  • Constructor Details

    • HttpRestFactory

      public HttpRestFactory(String serverUrl, String email, String apiKey)
      Initialise la factory REST.
      Parameters:
      serverUrl - URL de base.
      email - Email client.
      apiKey - Clé API.
  • Method Details

    • setPaymentStrategy

      public void setPaymentStrategy(PaymentStrategy strategy)
      Permet de changer l'algorithme de paiement à la volée (Pattern Strategy).
      Parameters:
      strategy - La nouvelle stratégie (ex: Carte Bancaire, Paypal, etc.).
    • getBalance

      public long getBalance() throws IOException
      Description copied from interface: LegoFactory
      Récupère le solde actuel du portefeuille client auprès de l'usine.
      Specified by:
      getBalance in interface LegoFactory
      Returns:
      Le nombre de crédits disponibles.
      Throws:
      IOException - En cas d'erreur de communication avec le serveur.
    • rechargeAccount

      public void rechargeAccount(long minAmount) throws IOException
      Description copied from interface: LegoFactory
      Lance le processus de rechargement du compte (Proof-of-Work). Cette méthode peut prendre du temps pour résoudre les défis cryptographiques nécessaires à l'obtention de crédits.
      Specified by:
      rechargeAccount in interface LegoFactory
      Parameters:
      minAmount - Le montant approximatif souhaité.
      Throws:
      IOException - Si le serveur refuse le rechargement ou est inaccessible.
    • requestQuote

      public LegoFactory.Quote requestQuote(Map<String,Integer> items) throws IOException
      Description copied from interface: LegoFactory
      Demande de chiffrage. L'usine calcule le prix total en fonction des stocks et de la rareté, et bloque ce prix temporairement.
      Specified by:
      requestQuote in interface LegoFactory
      Parameters:
      items - Une map associant la référence de la brique (ex: "2-2/c9cae2") à la quantité désirée.
      Returns:
      Un objet contenant l'ID du devis et le prix total.
      Throws:
      IOException - Si une référence est invalide ou le stock insuffisant.
    • acceptQuote

      public void acceptQuote(String quoteId) throws IOException
      Accepte un devis, avec une logique de "Retry" intelligente. Si le serveur répond HTTP 402 (Paiement requis), on tente un rechargement automatique puis on relance la commande.
      Specified by:
      acceptQuote in interface LegoFactory
      Parameters:
      quoteId - L'identifiant du devis reçu via LegoFactory.requestQuote(Map).
      Throws:
      IOException - Si le solde est insuffisant ou si le devis a expiré.
    • retrieveOrder

      public List<FactoryBrick> retrieveOrder(String quoteId) throws IOException
      Description copied from interface: LegoFactory
      Réception. Récupère les actifs numériques associés à une commande payée.
      Specified by:
      retrieveOrder in interface LegoFactory
      Parameters:
      quoteId - L'identifiant de la commande validée.
      Returns:
      La liste des briques avec leurs métadonnées (numéro de série, certificat...).
      Throws:
      IOException - Si la commande n'est pas encore prête ou n'existe pas.
    • verifyBrick

      public boolean verifyBrick(FactoryBrick brick)
      Vérifie l'authenticité d'une brique. Tente d'abord une vérification en ligne, et bascule sur une vérification hors-ligne en cas d'échec réseau.
      Specified by:
      verifyBrick in interface LegoFactory
      Parameters:
      brick - La brique à analyser.
      Returns:
      true si la signature correspond aux données et à la clé publique de l'usine.
    • verifyBrickOffline

      public boolean verifyBrickOffline(FactoryBrick brick)
      Vérification cryptographique locale (Ed25519).
      Parameters:
      brick - La brique à vérifier.
      Returns:
      true si la signature est valide.