{
  "openapi": "3.0.0",
  "info": {
    "title": "APITECH - API de réservation à distance",
    "version": "1.1.0",
    "description": "\n# Description \n\nCette API permet aux clients de procéder à une réservation à distance sur leur machine.\n\n# Utilisation de l'API\n\nUne utilisation standard de l'API serait la suivante, dans l'ordre :\n\n* Appel de l'api /machines pour récupérer la liste des machines\n* Une fois la machine sélectionnée par le client, appel de la route /pizzas pour récupérer et afficher la liste des produits\n* Cet appel devra être couplé avec les résultats de la route /stocks, afin de savoir quels produits sont disponibles à la réservation\n* Appel de la route /paiement_init pour initialiser le processus de paiement\n* Appel de la route /reservation pour initialiser le processus de réservation\n* Gestion du paiement (cf. ci-dessous)\n* Une fois le paiement accepté, utiliser la route /valid_reservation pour envoyer la réservation à la machine\n\n\n# Gestion du paiement\n\n### Paiement via Stripe\n\nUn appel à la route /stripe/create-intent devra être effectué pour récupérer le paramètre paymentIntent, qui sera nécessaire pour initialiser le paiement auprès de Stripe.\n\nPour l'implémentation, cf. [Documentation Stripe](https://stripe.com/docs/libraries).\n\n### Paiement en points pizz\n\nUn appel à la route /paiement_pizz devra être effectué, en précisant l'id du compte, l'id machine, et le montant de points pizz à utiliser.\n\nUn appel à /paiement_edit devra ensuite être effectué, en fonction de la réponse de l'API, pour mettre à jour le paiement avant de valider la réservation.\n\n### Pas de paiement (promotion couvrant 100% du paiement)\n\nUn appel à /paiement_edit devra être effectué pour valider le paiement.\n",
    "contact": {
      "email": "informatique@apitech-solution.com"
    },
    "termsOfService": "http://apitech-solution.com/mentions-legales"
  },
  "servers": [
    {
      "url": "https://atweb.smart-pizza.fr/"
    },
    {
      "url": "https://preprod-atweb.smart-pizza.fr/"
    }
  ],
  "tags": [
    {
      "name": "Machines",
      "description": "Les informations concernant les machines."
    },
    {
      "name": "Produits",
      "description": "Les produits liés aux machines."
    },
    {
      "name": "Réservation",
      "description": "Gestion des réservations de produits sur les machines."
    },
    {
      "name": "Paiement",
      "description": "Gestion des paiements."
    },
    {
      "name": "Comptes",
      "description": "Gestion des comptes Smart-Pizza."
    }
  ],
  "components": {
    "schemas": {
      "credentials": {
        "type": "object",
        "title": "Identifiants",
        "required": [
          "login",
          "password"
        ],
        "properties": {
          "login": {
            "type": "string",
            "example": "login",
            "description": "Identifiant de connexion"
          },
          "password": {
            "type": "string",
            "example": "password",
            "description": "Mot de passe de connexion"
          }
        }
      },
      "machine": {
        "type": "object",
        "title": "Machine",
        "properties": {
          "idMachine": {
            "type": "string",
            "example": "1"
          },
          "nom": {
            "type": "string",
            "example": "Ma machine"
          },
          "latitude": {
            "type": "string",
            "example": "49.06"
          },
          "longitude": {
            "type": "string",
            "example": "2.05"
          }
        }
      },
      "panier": {
        "type": "object",
        "title": "Panier",
        "description": "Les produits du panier, rangés par type (pizza, baguette, casier, boisson), sous format json.",
        "example": "{\"pizza\":[],\"baguette\":[],\"casier\":[{\"idProduit\":\"1\",\"nom\":\"Bolognaise\",\"mode_vente\":3,\"prix_ttc\":0.1,\"prix_ht\":0.1,\"tva\":{\"5.5\": \"0.12\"}}],\"boisson\":[]}",
        "properties": {
          "type_machine": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/panier_produit",
              "description": "Le type de produit (pizza, boisson...)",
              "additionalProperties": {
                "type": "string"
              }
            }
          }
        }
      },
      "mode_vente": {
        "type": "integer",
        "title": "Mode de vente",
        "enum": [
          0,
          1,
          2,
          3,
          4
        ],
        "description": "* 0 : Gratuit (cas d'un code promo 100%)\n* 1 : Vente chaude\n* 2 : Vente froide\n* 3 : Vente chaude (en promotion)\n* 4 : Vente froide (en promotion)\n"
      },
      "tva": {
        "type": "object",
        "title": "TVA",
        "example": "{\"5.5\": \"0.12\"}",
        "properties": {
          "taux_tva": {
            "example": "5.5",
            "type": "string",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "panier_produit": {
        "type": "object",
        "title": "Produit du panier",
        "properties": {
          "idProduit": {
            "type": "string",
            "example": "1"
          },
          "nom": {
            "type": "string",
            "example": "Marguerita",
            "description": "Le nom du produit"
          },
          "mode_vente": {
            "$ref": "#/components/schemas/mode_vente"
          },
          "prix_ttc": {
            "type": "number",
            "example": 12.8,
            "description": "Le prix du produit TTC"
          },
          "prix_ht": {
            "type": "number",
            "example": 10.5,
            "description": "Le prix du produit HT"
          },
          "tva": {
            "$ref": "#/components/schemas/tva"
          }
        }
      },
      "produit": {
        "type": "object",
        "title": "Produit",
        "properties": {
          "type_machine": {
            "type": "string",
            "example": "pizza",
            "description": "Le type de produit (pizza, boisson...)"
          },
          "idProduit": {
            "type": "string",
            "example": "1"
          },
          "vente_chaud": {
            "type": "string",
            "example": "1",
            "description": "Le produit est-il disponible en vente chaud ?"
          },
          "vente_froid": {
            "type": "string",
            "example": "1",
            "description": "Le produit est-il disponible en vente froid ?"
          },
          "prix_chaud": {
            "type": "string",
            "example": "12.80",
            "description": "Le prix du produit en vente chaud"
          },
          "prix_froid": {
            "type": "string",
            "example": "10.00",
            "description": "Le prix du produit en vente froid"
          },
          "prix_promo_chaud": {
            "type": "string",
            "example": "11.80",
            "description": "Le prix du produit en vente chaud en promotion"
          },
          "prix_promo_froid": {
            "type": "string",
            "example": "9.00",
            "description": "Le prix du produit en vente froid en promotion"
          },
          "favoris": {
            "type": "string",
            "example": "0",
            "description": "Le produit est-il en favori ?"
          },
          "force_promo": {
            "type": "string",
            "example": "0",
            "description": "Le produit est-il en promotion ?"
          },
          "nom": {
            "type": "string",
            "example": "Marguerita",
            "description": "Le nom du produit"
          },
          "description": {
            "type": "string",
            "example": "La plus authentique des pizzas, dont la simplicité en fait la référence",
            "description": "La description du produit"
          },
          "infos_supplementaires": {
            "type": "string",
            "example": "Pizza à la sauce tomate, mozzarella, basilic, olives, champignons, poivrons.",
            "description": "Les informations supplémentaires du produit"
          },
          "Machine_idMachine": {
            "type": "string",
            "example": "1",
            "description": "L'id de la machine"
          },
          "allergenes": {
            "type": "array",
            "description": "Les allergènes du produit",
            "items": {
              "type": "string",
              "example": "gluten"
            }
          },
          "ingredients": {
            "type": "array",
            "description": "Les ingrédients du produit",
            "items": {
              "type": "string",
              "example": "tomate"
            }
          },
          "photo_vignette": {
            "type": "string",
            "description": "Un lien absolu vers la photo vignette du produit"
          },
          "photo_detail": {
            "type": "string",
            "description": "Un lien absolu vers la photo du produit"
          },
          "prix_chaud_HT": {
            "type": "number",
            "example": 12.8,
            "description": "Le prix du produit en vente chaud HT"
          },
          "prix_froid_HT": {
            "type": "number",
            "example": 12.8,
            "description": "Le prix du produit en vente froid HT"
          },
          "prix_promo_chaud_HT": {
            "type": "number",
            "example": 12.8,
            "description": "Le prix du produit en promotion en vente chaud HT"
          },
          "prix_promo_froid_HT": {
            "type": "number",
            "example": 12.8,
            "description": "Le prix du produit en promotion en vente froid HT"
          },
          "tvas": {
            "type": "object",
            "description": "Les tvas du produit, groupées par taux, auquel correspondent le montant.",
            "properties": {
              "chaud": {
                "type": "object",
                "properties": {
                  "20": {
                    "type": "number",
                    "example": 0.05,
                    "description": "La TVA du produit en vente chaud"
                  }
                }
              },
              "froid": {
                "type": "object",
                "properties": {
                  "10": {
                    "type": "number",
                    "example": 0.08,
                    "description": "La TVA du produit en vente froide"
                  }
                }
              },
              "promo_chaud": {
                "type": "object",
                "properties": {
                  "20": {
                    "type": "number",
                    "example": 0.08,
                    "description": "La TVA du produit en vente promo chaude"
                  }
                }
              },
              "promo_froid": {
                "type": "object",
                "properties": {
                  "10": {
                    "type": "number",
                    "example": 0.18,
                    "description": "La TVA du produit en vente promo froide"
                  }
                }
              }
            }
          }
        }
      },
      "stocks": {
        "type": "object",
        "title": "Stocks",
        "properties": {
          "type_machine": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "idProduit": {
                  "type": "string",
                  "example": "1",
                  "description": "L'id du produit"
                },
                "stock": {
                  "type": "integer",
                  "example": 10,
                  "description": "Le stock des produits, hors promotion."
                },
                "promo": {
                  "type": "integer",
                  "example": 0,
                  "description": "Le stock des produits en promotion."
                }
              }
            }
          }
        },
        "example": {
          "pizza": {
            "1": {
              "idProduit": 1,
              "stock": 10,
              "promo": 0
            }
          },
          "boisson": {
            "2": {
              "idProduit": 2,
              "stock": 2,
              "promo": 0
            }
          }
        }
      },
      "promotion": {
        "type": "object",
        "title": "Promotion",
        "description": "Objet représentant la promotion.",
        "properties": {
          "idPromotion": {
            "type": "integer",
            "example": 9579,
            "description": "L'id interne de la promotion sur l'ATWeb."
          },
          "date_debut": {
            "type": "string",
            "example": "2022-09-26 22:00:00",
            "description": "Date de début de validité de la promotion."
          },
          "date_fin": {
            "type": "string",
            "example": null,
            "description": "Date de fin de validité de la promotion (peut-être null)."
          },
          "code": {
            "type": "string",
            "example": null,
            "description": "Code à 6 chiffres permettant d'appliquer la promotion (peut-être à null si d'autres critères s'appliquent à l'égibilité de la promotion)."
          },
          "type_reduction": {
            "type": "string",
            "example": "pourcent",
            "description": "Le type de promotion (pourcentage, produit offert...)"
          },
          "value_reduction": {
            "type": "string",
            "example": "1"
          },
          "date_modification": {
            "type": "string",
            "example": "2022-10-03 15:42:38",
            "description": "Date de dernière modification de la promotion."
          },
          "reduction_type_module": {
            "type": "string",
            "example": "casier",
            "description": "Le type de module sur lequel s'applique cette réduction (null = tous)."
          },
          "description": {
            "type": "string",
            "example": "",
            "description": "La description interne de la promotion (ne doit pas affiché au client)."
          }
        }
      },
      "commande": {
        "title": "Commande",
        "type": "object",
        "properties": {
          "idMachine": {
            "type": "string",
            "example": "3",
            "description": "L'id de la machine"
          },
          "iso_code_devise": {
            "type": "string",
            "example": "eur",
            "description": "Devise dans laquelle le paiement a été effectué"
          },
          "numero_reservation": {
            "type": "string",
            "example": "123456",
            "description": "Le numéro de la réservation, qui sera utilisé sur la machine pour la récupérer."
          },
          "date_reservation": {
            "type": "string",
            "example": "2021-12-16 18:00:00",
            "description": "La date et l'heure de la réservation."
          },
          "date_livraison_approximative": {
            "type": "string",
            "example": "2021-12-16 19:00:00",
            "description": "La date de retrait sélectionnée par le client."
          },
          "date_retrait_max": {
            "type": "string",
            "example": "2021-12-16 21:00:00",
            "description": "La date maximale de retrait."
          },
          "date_annulation_max": {
            "type": "string",
            "example": "2021-12-16 21:00:00",
            "description": "La date maximale d'annulation."
          },
          "annulable": {
            "type": "string",
            "example": "0",
            "description": "1 si la réservation peut encore être annulée."
          },
          "status": {
            "type": "string",
            "example": "0",
            "description": "Le statut de la réservation.\n* 0 : Réservation en cours.\n* 1 : Réservation validée.\n* 2 : Réservation invalidée.\n* 3 : Réservation partielle.\n* 4 : Demande de livraison sur la machine.\n* 5 : En cours de livraison sur la machine.\n* 6 : Livraison terminée sur la machine.\n* 7 : Erreur de livraison sur la machine.\n* 8 : Livraison non demandée.\n* 9 : Annulation en cours.\n* 10 : Annulation OK.\n"
          },
          "montant_a_encaisser": {
            "type": "number",
            "example": null,
            "description": "Le montant final TTC de la commande"
          },
          "liste_type_machine": {
            "type": "string",
            "example": "pizza|casier",
            "description": "La liste des modules sur lequel les réservations ont été passées (séparés par des |)"
          },
          "liste_idProduit": {
            "type": "string",
            "example": "1|1",
            "description": "La liste des ID produits réservés (séparés par des |)"
          },
          "liste_mode_vente": {
            "type": "string",
            "example": "1|2",
            "description": "La liste des modes de vente des produits réservés (séparés par des |)"
          },
          "liste_status": {
            "type": "string",
            "example": "1|2",
            "description": "La liste des statut de réservation des produits réservés (séparés par des |)"
          },
          "reservation_prix": {
            "type": "string",
            "example": "12.8|10.0",
            "description": "La liste des prix des produits réservés (séparés par des |)"
          },
          "liste_prix": {
            "type": "string",
            "example": "1|2",
            "description": "La liste des prix finaux des produits commandés, une fois que la commande a été retirée (séparés par des |)"
          },
          "pizz_gagnes": {
            "type": "string",
            "example": "2.1",
            "description": "Les points de fidélité gagnés sur cette commande."
          }
        }
      },
      "compte_smart_pizza": {
        "title": "Compte Smart-Pizza",
        "type": "object",
        "description": "Objet représentant un compte utilisateur.",
        "properties": {
          "idCompte": {
            "type": "string",
            "example": "670"
          },
          "numero_compte": {
            "type": "string",
            "example": "148053"
          },
          "telephone": {
            "type": "string",
            "example": "+33674464867"
          },
          "code_postal": {
            "type": "string",
            "example": "54000"
          },
          "adresse_mail": {
            "type": "string",
            "example": "john.doe@example.com",
            "description": "L'adresse mail de l'utilisateur"
          },
          "anniversaire": {
            "type": "string",
            "example": "1990-01-01"
          },
          "derniere_connexion": {
            "type": "string",
            "example": "2022-10-10 17:15:00"
          },
          "derniere_machine": {
            "type": "string",
            "example": "274"
          },
          "push_user_id": {
            "type": "string",
            "example": ""
          },
          "fuseau_horaire": {
            "type": "string",
            "example": "Europe/Paris"
          },
          "langue": {
            "type": "string",
            "example": "fr"
          },
          "date_acceptation_cgu": {
            "type": "string",
            "example": "2021-11-24 16:28:39"
          },
          "nom": {
            "type": "string",
            "example": "Doe",
            "description": "Le nom de l'utilisateur"
          },
          "prenom": {
            "type": "string",
            "example": "John",
            "description": "Le prénom de l'utilisateur"
          },
          "mot_de_passe": {
            "type": "string",
            "example": "+DeAn/h4KRkh/6B1N6p8mNpiR2fvXn+79kaT",
            "description": "Mot de passe de l'utilisateur, crypté avec grain de sel"
          },
          "mot_de_passe_keypad": {
            "type": "string",
            "example": "+DeAn/h4KRkh/6B1N6p8mNpiR2fvXn+79kaT",
            "description": "Mot de passe machine de l'utilisateur, crypté avec grain de sel"
          },
          "machine_favorite": {
            "type": "string",
            "example": "1",
            "description": "L'id de la machine préférée de l'utilisateur, sélectionnée lors de l'inscription."
          }
        }
      },
      "stripeIntent": {
        "title": "Stripe intent",
        "type": "object",
        "description": "Réponse à l'appel d'API /stripe/create-intent",
        "properties": {
          "status": {
            "type": "boolean",
            "example": true,
            "description": "TRUE si la création d'intent a réussi sans erreur"
          },
          "paymentIntent": {
            "type": "string",
            "example": "pi_3LsjDM2YClpYLqta0oFgMq6k_secret_gRAq1ulouXABsxYIC13598lNZ",
            "description": "Le client_secret du payment intent retourné par Stripe"
          },
          "id": {
            "type": "string",
            "example": "pi_3LsjDM2YClpYLqta0oFgMq6k",
            "description": "L'ID du payment intent retourné par Stripe"
          },
          "customerId": {
            "type": "string",
            "example": "cus_KWQmh8rHtyrY5W",
            "description": "L'ID du customer qui va réaliser le paiement (le compte Stripe lié au compte Smart-Pizza)"
          },
          "ephemeralKey": {
            "type": "string",
            "example": "ek_test_YWNjdF8xSnJOb2UyWUNscFlMcXRhLENUTHVabHB0a2dhMWdHZUtRdmxlQWVFRXRMT0J0YUg_009jVHnlmj",
            "description": "La clé éphémère du client. L’objet Customer contient des informations sensibles qu’il n’est pas possible de récupérer directement depuis une application. Une clé éphémère permet d’accorder au SDK un accès temporaire à l’objet Customer."
          },
          "setupIntent": {
            "type": "string",
            "example": "seti_1LsjDL2YClpYLqtaImZObtSN_secret_Mbx78wNnzgYVhTvuo5cl6Q3X6Jflzmz"
          },
          "merchantDisplayName": {
            "type": "string",
            "example": "Apitech"
          },
          "stripeAccountId": {
            "type": "string",
            "example": "acct_1JrNoe2YClpYLqta",
            "description": "Le compte Stripe Connect utilisé pour le paiement"
          }
        }
      },
      "infos_machine": {
        "title": "Infos machine",
        "type": "object",
        "description": "Réponse à l'appel d'API /infos_machine",
        "properties": {
          "idMachine": {
            "type": "integer",
            "example": 102,
            "description": "ID de la machine"
          },
          "idClient": {
            "type": "integer",
            "example": 4,
            "description": "ID du client lié à la machine"
          },
          "nom": {
            "type": "string",
            "example": "[DEV] PC Siege 1.2 version code 2.0.0",
            "description": "Nom de la machine"
          },
          "latitude": {
            "type": "string",
            "example": "48.7133",
            "description": "Latitude de la machine"
          },
          "longitude": {
            "type": "string",
            "example": "6.2145",
            "description": "Longitude de la machine"
          },
          "adresse_1": {
            "type": "string",
            "example": "16 rue de malzéville",
            "description": "Adresse de la machine"
          },
          "adresse_2": {
            "type": "string",
            "example": "Dommartemont",
            "description": "Ville de la machine"
          },
          "contact_numero": {
            "type": "string",
            "example": "03 72 39 54 59",
            "description": "Numéro de contact de la machine"
          },
          "contact_adresse_mail": {
            "type": "string",
            "example": "informatique@apitech-solution.com",
            "description": "Adresse mail de contact de la machine"
          },
          "contact_site_web": {
            "type": "string",
            "example": "https://www.apitech-solution.com",
            "description": "Site web"
          },
          "contact_page_facebook": {
            "type": "string",
            "example": "https://fr-fr.facebook.com/StreetPizzaNancy/",
            "description": "Page facebook"
          },
          "date_lancement": {
            "type": "string",
            "example": "2016-12-31 23:00:00",
            "description": "Date de lancement de la machine"
          },
          "photo": {
            "type": "string",
            "example": null,
            "description": "Photo de la machine"
          },
          "type_machine": {
            "type": "integer",
            "example": 0,
            "description": "Type de machine"
          },
          "pizzas_max_commande": {
            "type": "integer",
            "example": 20,
            "description": "Nombre max de pizzas lors de la commande sur la machine"
          },
          "pourcentage_fidelite_pizz": {
            "type": "integer",
            "example": 10,
            "description": "Le pourcentage offert en point pizz à chaque commande."
          },
          "pourcentage_credit_pizz": {
            "type": "integer",
            "example": 10,
            "description": "Le pourcentage offert en point pizz à chaque achat de pizz."
          },
          "activer_commande_internet": {
            "type": "integer",
            "example": 1,
            "description": "1 si le paiement via application mobile doit être proposé sur cette machine."
          },
          "blocage_etat": {
            "type": "integer",
            "example": 0
          },
          "fuseau_horaire": {
            "type": "string",
            "example": "Europe/Paris",
            "description": "Fuseau horaire de la machine."
          },
          "indicatif_pays": {
            "type": "string",
            "example": "33",
            "description": "Préfixe utilisé pour les numéros de téléphone sur cette machine."
          },
          "pays": {
            "type": "string",
            "example": "France",
            "description": "Pays dans lequel se situe la machine."
          },
          "iso_code_pays": {
            "type": "string",
            "example": "fr",
            "description": "Code ISO du pays dans lequel se situe la machine."
          },
          "iso_code_devise": {
            "type": "string",
            "example": "usd",
            "description": "Code ISO de la devise utilisée sur la machine."
          },
          "afficher_prix_ttc": {
            "type": "integer",
            "example": 1,
            "description": "1 si le prix doit être affiché TTC"
          },
          "activer_paiement_pizz": {
            "type": "integer",
            "example": 1,
            "description": "1 si le paiement via point pizz doit être proposé pour cette machine."
          },
          "braintree_api_id_marchand": {
            "type": "string",
            "example": null,
            "description": "Déprécié"
          },
          "braintree_api_cle_privee": {
            "type": "string",
            "example": null,
            "description": "Déprécié"
          },
          "braintree_api_cle_publique": {
            "type": "string",
            "example": null,
            "description": "Déprécié"
          },
          "paypal_api_id": {
            "type": "string",
            "example": null,
            "description": "Déprécié"
          },
          "paypal_api_secret": {
            "type": "string",
            "example": null,
            "description": "Déprécié"
          },
          "lyra_marchand_id": {
            "type": "string",
            "example": "0cfec517-99da-4ec5-86d0-5183ffa633c6",
            "description": "Compte Lyra Collect"
          },
          "stripe_account_id": {
            "type": "string",
            "example": "acct_1JrNoe2YClpYLqta",
            "description": "Compte Stripe"
          },
          "plages_bloquees": {
            "type": "array",
            "description": "Les plages horaires sur lesquels la commande ne doit pas être proposé pour cette machine. L'index correspond au jour (1 = lundi, 2 = mardi, etc...)",
            "items": {
              "type": "object",
              "properties": {
                "1": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "debut": {
                        "type": "string",
                        "example": "00:00:00"
                      },
                      "fin": {
                        "type": "string",
                        "example": "02:00:00"
                      }
                    }
                  }
                }
              }
            }
          },
          "out_of_order": {
            "type": "integer",
            "example": 0,
            "description": "1 si la machine est hors service"
          },
          "affiche_seul_prix": {
            "type": "integer",
            "example": 0,
            "description": "1 si la machine est paramétrée pour n'afficher qu'un seul prix dans le cas où le prix chaud et froid est le même."
          },
          "paiement_partiel": {
            "type": "integer",
            "example": 0,
            "description": "1 si la machine est paramétrée pour accepter les paiements partiels"
          }
        }
      },
      "paiement_type": {
        "type": "integer",
        "example": 2,
        "description": "Type de paiement\n* 1 : Paiement Lyra Collect\n* 2 : Paiement en points pizz\n* 3 : Paiement gratuit (= pas de paiement, suite à promotion)\n* 4 : Paiement Stripe\n"
      },
      "paiement_status": {
        "type": "integer",
        "example": "3",
        "description": "Statut du paiement.\n* 0 : Paiement initialisé\n* 1 : Paiement crée (Lyra Collect)\n* 2 : Paiement figé (Lyra Collect)\n* 3 : Paiement validé\n* 4 : Paiement invalide\n* 5 : Paiement en erreur \n* 6 : Paiement refusé\n* 7 : Vérification du paiement impossible\n"
      },
      "achat_type": {
        "type": "integer",
        "example": 1,
        "description": "Le type d'achat. \n* 1 : Achat de pizza \n* 2 : Achat de points de fidélité\n"
      }
    }
  },
  "paths": {
    "/webapi/machines": {
      "post": {
        "tags": [
          "Machines"
        ],
        "summary": "Machines",
        "description": "Retourne la liste des machines du client.",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/credentials"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/machine"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/webapi/machine": {
      "post": {
        "tags": [
          "Machines"
        ],
        "summary": "Machine",
        "description": "Retourne une machine spécifique du client, à partir de l'idMachine.",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idMachine": {
                        "type": "integer",
                        "example": 2,
                        "description": "L'id de la machine"
                      }
                    },
                    "required": [
                      "idMachine"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "$ref": "#/components/schemas/machine"
                }
              }
            }
          }
        }
      }
    },
    "/webapi/pizzas": {
      "post": {
        "tags": [
          "Produits"
        ],
        "summary": "Pizzas",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idMachine": {
                        "type": "integer",
                        "example": 1,
                        "description": "L'id de la machine"
                      },
                      "lg": {
                        "type": "string",
                        "example": "fr",
                        "description": "Langue du client"
                      }
                    },
                    "required": [
                      "idMachine",
                      "lg"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/produit"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/webapi/stocks": {
      "post": {
        "tags": [
          "Produits"
        ],
        "summary": "Stocks",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idMachine": {
                        "type": "string",
                        "example": "2",
                        "description": "L'id de la machine"
                      },
                      "date_heure": {
                        "type": "string",
                        "example": "2022-02-01 19:00:00",
                        "description": "La date et l'heure pour lequel checker les stocks, converti dans le fuseau horaire de la machine concernée. Doit être supérieur à la date actuelle."
                      }
                    },
                    "required": [
                      "idMachine",
                      "date_heure"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/stocks"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Une erreur est survenue. Vérifiez les paramètres de la requête."
          }
        }
      }
    },
    "/webapi/reservation": {
      "post": {
        "tags": [
          "Réservation"
        ],
        "summary": "Réservation",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idMachine": {
                        "type": "integer",
                        "example": 1,
                        "description": "L'id de la machine"
                      },
                      "montant_preencaisse": {
                        "type": "integer",
                        "example": "10",
                        "description": "Le montant encaissé pour la commande"
                      },
                      "produits": {
                        "$ref": "#/components/schemas/panier"
                      },
                      "date_heure": {
                        "type": "string",
                        "example": "2021-12-16 18:00:00",
                        "description": "La date et l'heure de la réservation. Doit être supérieur à la date actuelle."
                      },
                      "valid_reservation": {
                        "type": "integer",
                        "description": "Envoyer 1 pour valider la réservation immédiatement. A utiliser dans le cas où le paiement n'est pas gérée via cette API. Dans ce cas, les champs montant_preencaisse_hors_promotion, et montant_preencaisse_promotion ne sont plus obligatoires.\n",
                        "example": 1
                      },
                      "paiement_type": {
                        "$ref": "#/components/schemas/paiement_type"
                      },
                      "numero_reservation": {
                        "type": "string",
                        "description": "Le numéro de la réservation, qui sera utilisé sur la machine pour la récupérer. Doit respecter le format suivant : ^[0-9A-Z*#]{1,15}$"
                      },
                      "idTransaction": {
                        "type": "integer",
                        "description": "Le numéro de la transaction, initialisé précédemment via l'appel /paiement_init. Obligatoire dans le cas où le paiement est géré via cette API."
                      },
                      "idCompte": {
                        "type": "integer",
                        "description": "Compte Smart-Pizza utilisé pour la commande. Nécessaire si la commande doit ensuite être retrouvée via l'appel /mes_commandes"
                      },
                      "montant_preencaisse_hors_promotion": {
                        "type": "number",
                        "description": "Le montant total de la commande, sans prendre en compte les éventuelles promotions. Obligatoire si le paiement est géré via cette API."
                      },
                      "montant_preencaisse_promotion": {
                        "type": "number",
                        "description": "Le montant de la promotion appliquée sur la commande (0 s'il n'y a pas de code promotion). Obligatoire si le paiement est géré via cette API."
                      }
                    },
                    "required": [
                      "idMachine",
                      "montant_preencaisse",
                      "produits",
                      "date_heure",
                      "valid_reservation"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Réservation crée avec succès.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "idReservation": {
                      "type": "integer",
                      "example": 1,
                      "description": "L'id de la réservation"
                    },
                    "numero_reservation": {
                      "type": "string",
                      "example": "123456",
                      "description": "Le numéro de la réservation, qui sera utilisé sur la machine pour la récupérer."
                    },
                    "date_heure_reservation": {
                      "type": "string",
                      "example": "2021-12-16 18:00:00",
                      "description": "La date et l'heure de la réservation."
                    },
                    "date_max_retrait": {
                      "type": "string",
                      "example": "2021-12-16 19:00:00",
                      "description": "La date maximale de retrait."
                    },
                    "status": {
                      "type": "integer",
                      "example": 0,
                      "description": "Le status de la réservation."
                    },
                    "champ_personnalise": {
                      "type": "string",
                      "example": "123456789012345",
                      "description": "Le champ personnalisé de la réservation."
                    },
                    "produits": {
                      "type": "object",
                      "description": "Les produits réservés.",
                      "properties": {
                        "pizza": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/panier_produit"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "La requête n'a pas abouti. Vérifiez vos paramètres.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "description": "Description de l'erreur"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/webapi/valider_commande_partielle": {
      "post": {
        "tags": [
          "Réservation"
        ],
        "summary": "Valider une commande partielle",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idMachine": {
                        "type": "integer",
                        "example": 1,
                        "description": "L'id de la machine"
                      },
                      "numero_reservation": {
                        "type": "string",
                        "example": "123456",
                        "description": "Le numéro de réservation"
                      },
                      "date_heure_reservation": {
                        "type": "string",
                        "example": "2021-08-12 00:00:00",
                        "description": "La date et l'heure de la réservation."
                      }
                    },
                    "required": [
                      "idMachine",
                      "numero_reservation",
                      "date_heure_reservation"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/webapi/annuler_commande": {
      "post": {
        "tags": [
          "Réservation"
        ],
        "summary": "Annuler une commande",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idMachine": {
                        "type": "integer",
                        "example": 3,
                        "description": "L'id de la machine"
                      },
                      "numero_reservation": {
                        "type": "string",
                        "example": "123456",
                        "description": "Le numéro de réservation"
                      },
                      "date_heure_reservation": {
                        "type": "string",
                        "example": "2021-08-12 00:00:00",
                        "description": "La date et l'heure de la réservation."
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/webapi/promotions": {
      "post": {
        "tags": [
          "Paiement"
        ],
        "summary": "Promotions disponibles pour la machine",
        "description": "Cette API permet de calculer le montant des promotions applicables à la machine, en fonction du panier. \nElle doit être appelée au moment de l'affichage du panier au client (il peut y avoir des promotions applicables sans code promo).\n",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idMachine": {
                        "type": "integer",
                        "example": 3,
                        "description": "L'id de la machine"
                      },
                      "idCompte": {
                        "type": "integer",
                        "example": 178541,
                        "description": "ID du compte Smart-Pizza connecté (optionnel)."
                      },
                      "code": {
                        "type": "string",
                        "example": "123456",
                        "description": "Le code de la promotion à vérifier, si applicable."
                      },
                      "produits": {
                        "$ref": "#/components/schemas/panier",
                        "description": "Le panier du client"
                      }
                    },
                    "required": [
                      "idMachine",
                      "produits"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "boolean",
                      "example": true,
                      "description": "Le status de la requête."
                    },
                    "isValid": {
                      "type": "boolean",
                      "example": true,
                      "description": "TRUE si une promotion valide existe."
                    },
                    "amountPromotion": {
                      "type": "number",
                      "example": 0.7,
                      "description": "Le montant TTC de la réduction."
                    },
                    "idPromotion": {
                      "type": "integer",
                      "example": 9576,
                      "description": "L'id interne de la promotion sur l'ATWeb."
                    },
                    "promotion": {
                      "$ref": "#/components/schemas/promotion"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "boolean",
                      "example": false,
                      "description": "Le status de la requête."
                    },
                    "isValid": {
                      "type": "boolean",
                      "example": false,
                      "description": "TRUE si une promotion valide existe."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/webapi/mes_commandes": {
      "post": {
        "tags": [
          "Réservation"
        ],
        "summary": "Commandes passées sur le compte Smart-Pizza",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "declinaison": {
                        "type": "string",
                        "example": "justqueen",
                        "description": "Filtrage des commandes pour une déclinaison spécifique"
                      },
                      "idCompte": {
                        "type": "integer",
                        "example": 178541,
                        "description": "ID du compte Smart-Pizza"
                      }
                    },
                    "required": [
                      "idCompte"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/commande"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/webapi/compte_connexion": {
      "post": {
        "tags": [
          "Comptes"
        ],
        "summary": "Connexion à un compte Smart-Pizza",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "adresse_mail": {
                        "type": "string",
                        "example": "login",
                        "description": "L'identifiant du compte Smart-Pizza"
                      },
                      "mot_de_passe": {
                        "type": "string",
                        "example": "password",
                        "description": "Le mot de passe du compte Smart-Pizza"
                      }
                    },
                    "required": [
                      "adresse_mail",
                      "mot_de_passe"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful login",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/compte_smart_pizza"
                }
              }
            }
          },
          "400": {
            "description": "Bad request"
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/text": {
                "example": "false"
              }
            }
          }
        }
      }
    },
    "/webapi/valid_reservation": {
      "post": {
        "tags": [
          "Réservation"
        ],
        "summary": "Valider une réservation.",
        "description": "Cette API doit être utilisée suite à un paiement validé, dans le cas où le paiement est géré via cette API.",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idMachine": {
                        "type": "integer",
                        "example": "274",
                        "description": "L'ID de la machine."
                      },
                      "idTransaction": {
                        "type": "integer",
                        "example": "772",
                        "description": "L'ID de la transaction."
                      }
                    }
                  },
                  {
                    "required": [
                      "idMachine",
                      "idTransaction"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          },
          "400": {
            "description": "Bad request"
          }
        }
      }
    },
    "/webapi/paiement_lyra/callback": {
      "get": {
        "tags": [
          "Paiement"
        ],
        "summary": "Paiement Lyra - Callback",
        "description": "Route sur laquelle le paiement doit être redirigé.",
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/webapi/paiement_lyra/init": {
      "post": {
        "tags": [
          "Paiement"
        ],
        "summary": "Paiement Lyra Init",
        "description": "Route d'initialisation d'un paiement Lyra Collect",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idMachine": {
                        "type": "string",
                        "example": "274",
                        "description": "ID de la machine sur lequel le paiement doit être réalisé"
                      },
                      "idCompte": {
                        "type": "string",
                        "example": "4",
                        "description": "ID du compte Smart-Pizza utilisé"
                      },
                      "paiement_type": {
                        "type": "integer",
                        "example": "1",
                        "description": "Valeur à mettre à 1"
                      },
                      "montant": {
                        "type": "number",
                        "example": 12.25,
                        "description": "Montant à payer"
                      },
                      "paiement_devise": {
                        "type": "string",
                        "example": "EUR",
                        "description": "Devise de paiement (seul l'euro est supporté par Lyra Collect..)"
                      },
                      "promotion_idPromotion": {
                        "type": "integer",
                        "example": "0",
                        "description": "ID de la promotion lié à la commande"
                      },
                      "promotion_code": {
                        "type": "integer",
                        "example": "0",
                        "description": "Code promo utilisé sur la commande"
                      },
                      "achat_type": {
                        "$ref": "#/components/schemas/achat_type"
                      }
                    },
                    "required": [
                      "idMachine",
                      "idCompte",
                      "paiement_type",
                      "montant",
                      "paiement_devise",
                      "achat_type"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "status": {
                      "type": "boolean",
                      "example": true
                    },
                    "url": {
                      "type": "string",
                      "example": "https://secure.lyra.com/vads-payment/exec.refresh.a;jsessionid=Efdd5de8132d8AFd716A3257Dd75b8D57AaE4996.vadpayment02-tls-prod-fr-lyra?cacheId=422101460743627200131",
                      "description": "L'url de la page de paiement"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "status": {
                      "type": "string",
                      "example": "error"
                    },
                    "msg": {
                      "type": "string",
                      "description": "Message d'erreur",
                      "example": "paiement_lyra/init : erreur lors de l'initialisation du paiement : Client error: `POST https://secure.payzen.eu/marketplace/orders?expand=items` resulted in a `400 Bad Request` response:\n{\"items\":[{},{\"amount\":[\"Ensure this value is greater than or equal to 0.\"]}]}"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/webapi/pizz_compte": {
      "post": {
        "tags": [
          "Comptes"
        ],
        "summary": "Pizz compte",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idCompte": {
                        "type": "integer",
                        "example": "10",
                        "description": "ID du compte Smart-Pizza"
                      },
                      "declinaison": {
                        "type": "string",
                        "description": "Permet de filtrer les résultats pour une déclinaison spécifique de l'application",
                        "example": "justqueen"
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "status": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "idClient": {
                            "type": "integer",
                            "example": 4
                          },
                          "nom": {
                            "type": "string",
                            "example": "Comptoir Del Forno"
                          },
                          "nom_commercial": {
                            "type": "string",
                            "example": "Just Queen"
                          },
                          "pizz": {
                            "type": "number",
                            "example": "652.145431"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/webapi/paiement_init": {
      "post": {
        "tags": [
          "Paiement"
        ],
        "summary": "Paiement init",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idCompte": {
                        "type": "integer",
                        "example": 4,
                        "description": "ID du compte Smart-Pizza utilisé pour le paiement."
                      },
                      "idMachine": {
                        "type": "integer",
                        "example": 274,
                        "description": "ID de la machine pour lequel initialiser le paiement."
                      },
                      "paiement_type": {
                        "$ref": "#/components/schemas/paiement_type"
                      },
                      "achat_type": {
                        "$ref": "#/components/schemas/achat_type"
                      },
                      "paiement_montant": {
                        "type": "number",
                        "example": 8.2,
                        "description": "Le montant du paiement."
                      },
                      "paiement_devise": {
                        "type": "string",
                        "example": "EUR",
                        "description": "Le code ISO de la devise dans laquelle effectuer le paiement."
                      },
                      "promotion_idPromotion": {
                        "type": "integer",
                        "example": 245,
                        "description": "ID de la promotion appliquée sur la transaction."
                      },
                      "promotion_montant": {
                        "type": "number",
                        "example": 1.26,
                        "description": "Le montant de réduction appliqué par la promotion."
                      },
                      "promotion_code": {
                        "type": "string",
                        "example": "567845",
                        "description": "Le code utilisé pour appliquer la promotion, si applicable."
                      }
                    },
                    "required": [
                      "idCompte",
                      "idMachine",
                      "paiement_type",
                      "paiement_montant",
                      "achat_type",
                      "paiement_devise"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response. Retourne l'ID de la transaction crée.",
            "content": {
              "application/text": {
                "example": "12452"
              }
            }
          },
          "400": {
            "description": "Bad Request, vérifiez l'ID du compte et l'ID machine."
          },
          "500": {
            "description": "Erreur lors de la sauvegarde de la transaction, vérifiez les données envoyées."
          }
        }
      }
    },
    "/webapi/paiement_edit": {
      "post": {
        "tags": [
          "Paiement"
        ],
        "summary": "Paiement edit",
        "description": "Doit être appelé pour valider le paiement, lorsqu'il se fait par point de fidélité (pizz), ou s'il n'y a pas de paiement pour la commande (cas d'une promotion couvrant l'intégralité du paiement).",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idCompte": {
                        "type": "string",
                        "example": "4",
                        "description": "ID du compte Smart-Pizza utilisé pour le paiement"
                      },
                      "idMachine": {
                        "type": "string",
                        "example": "274",
                        "description": "ID de la machine sur lequel est effectué le paiement"
                      },
                      "idTransaction": {
                        "type": "integer",
                        "example": "579",
                        "description": "ID de la transaction"
                      },
                      "paiement_status": {
                        "$ref": "#/components/schemas/paiement_status"
                      },
                      "paiement_type": {
                        "$ref": "#/components/schemas/paiement_type"
                      },
                      "order_id": {
                        "type": "integer",
                        "example": "2119",
                        "description": "ID de commande"
                      }
                    },
                    "required": [
                      "idCompte",
                      "idMachine",
                      "idTransaction",
                      "paiement_status",
                      "paiement_type",
                      "order_id"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/webapi/infos_machine": {
      "post": {
        "tags": [
          "Machines"
        ],
        "summary": "Infos machine",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idMachine": {
                        "type": "string",
                        "example": "4"
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/infos_machine"
                }
              }
            }
          }
        }
      }
    },
    "/webapi/compte_mdp_oublie": {
      "post": {
        "tags": [
          "Comptes"
        ],
        "summary": "Demande de réinitialisation de mot de passe",
        "description": "Permet d'envoyer un email au client, pour réinitialiser son mot de passe",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "adresse_mail": {
                        "type": "string",
                        "example": "adresse_email@example.com",
                        "description": "Adresse email du client"
                      },
                      "template": {
                        "type": "string",
                        "example": "justqueen",
                        "description": "Template à utiliser lors de l'envoi du mail"
                      }
                    },
                    "required": [
                      "adresse_mail"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/webapi/compte_mdp_oublie_change": {
      "post": {
        "tags": [
          "Comptes"
        ],
        "summary": "Modifier le mot de passe",
        "description": "Effectue la modification du mot de passe, en utilisant le code reçu par email par le client.",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "adresse_mail": {
                        "type": "string",
                        "example": "adresse_de_test@email.com",
                        "description": "Adresse email du compte"
                      },
                      "code": {
                        "type": "integer",
                        "example": "1234",
                        "description": "Code reçu par email"
                      },
                      "mot_de_passe": {
                        "type": "string",
                        "example": "test54367543",
                        "description": "Le nouveau mot de passe"
                      },
                      "mot_de_passe2": {
                        "type": "string",
                        "example": "test54367543",
                        "description": "La confirmation du nouveau mot de passe"
                      }
                    },
                    "required": [
                      "adresse_mail",
                      "code",
                      "mot_de_passe",
                      "mot_de_passe2"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          },
          "400": {
            "description": "Code faux ou expiré, adresse mail introuvable, ou les mots de passe ne correspondent pas."
          },
          "412": {
            "description": "Le mot de passe fait moins de 8 caractères."
          },
          "500": {
            "description": "Erreur lors de la modification du mot de passe"
          }
        }
      }
    },
    "/webapi/compte_inscription": {
      "post": {
        "tags": [
          "Comptes"
        ],
        "summary": "Compte inscription",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "telephone": {
                        "type": "string",
                        "example": "+33377965211",
                        "description": "Numéro de téléphone au format international"
                      },
                      "code_postal": {
                        "type": "integer",
                        "example": "54000",
                        "description": "Code postal du client"
                      },
                      "adresse_mail": {
                        "type": "string",
                        "example": "adresse_de_test4@test.com",
                        "description": "Adresse email du client"
                      },
                      "mot_de_passe": {
                        "type": "string",
                        "example": "azerty1234",
                        "description": "Mot de passe du client"
                      },
                      "mot_de_passe2": {
                        "type": "string",
                        "example": "azerty1234",
                        "description": "Mot de passe du client"
                      },
                      "mot_de_passe_keypad": {
                        "type": "string",
                        "example": "123456",
                        "description": "Code à rentrer sur la machine pour se connecter.\nDoit uniquement contenir des chiffres."
                      },
                      "anniversaire": {
                        "type": "string",
                        "example": "1980-01-01",
                        "description": "Date de naissance du client"
                      },
                      "fuseau_horaire": {
                        "type": "string",
                        "example": "Europe/Paris",
                        "description": "Fuseau horaire du client"
                      },
                      "langue": {
                        "type": "string",
                        "example": "fr_FR",
                        "description": "Langue du client"
                      },
                      "nom": {
                        "type": "string",
                        "example": "kammacher",
                        "description": "Nom du client"
                      },
                      "prenom": {
                        "type": "string",
                        "example": "william",
                        "description": "Prénom du client"
                      },
                      "template": {
                        "type": "string",
                        "example": "justqueen",
                        "description": "Template mail à utiliser pour le client"
                      },
                      "machine_id": {
                        "type": "string",
                        "example": "1",
                        "description": "ID de la machine préférée du client (machine la plus proche)"
                      }
                    },
                    "required": [
                      "telephone",
                      "code_postal",
                      "adresse_mail",
                      "mot_de_passe",
                      "mot_de_passe2",
                      "anniversaire",
                      "fuseau_horaire",
                      "langue"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Le compte a bien été crée"
          },
          "409": {
            "description": "Conflit sur l'adresse email ou le numéro de téléphone (déjà existant)"
          },
          "412": {
            "description": "Le mot de passe doit avoir au moins 8 caractères"
          }
        }
      }
    },
    "/webapi/compte_modification": {
      "post": {
        "tags": [
          "Comptes"
        ],
        "summary": "Modification de compte",
        "description": "Attention : toutes les données de l'utilisateur doivent être systématiquement renvoyées (sauf les mots de passe).",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idCompte": {
                        "type": "integer",
                        "example": "10",
                        "description": "ID du compte Smart-Pizza"
                      },
                      "numero_compte": {
                        "type": "integer",
                        "example": "1046",
                        "description": "Numéro de compte Smart-Pizza"
                      },
                      "telephone": {
                        "type": "string",
                        "example": "+33377965211",
                        "description": "Numéro de téléphone au format international"
                      },
                      "code_postal": {
                        "type": "integer",
                        "example": "54000",
                        "description": "Code postal du client"
                      },
                      "adresse_mail": {
                        "type": "string",
                        "example": "adresse_de_test4@test.com",
                        "description": "Adresse email du client"
                      },
                      "mot_de_passe": {
                        "type": "string",
                        "example": "azerty1234",
                        "description": "Mot de passe du client"
                      },
                      "mot_de_passe2": {
                        "type": "string",
                        "example": "azerty1234",
                        "description": "Mot de passe du client"
                      },
                      "anniversaire": {
                        "type": "string",
                        "example": "1980-01-01",
                        "description": "Date de naissance du client"
                      },
                      "langue": {
                        "type": "string",
                        "example": "fr_FR",
                        "description": "Langue du client"
                      },
                      "nom": {
                        "type": "string",
                        "example": "kammacher",
                        "description": "Nom du client"
                      },
                      "prenom": {
                        "type": "string",
                        "example": "william",
                        "description": "Prénom du client"
                      },
                      "template": {
                        "type": "string",
                        "example": "demoniak",
                        "description": "Template mail à utiliser pour le client"
                      },
                      "machine_favorite": {
                        "type": "integer",
                        "example": "1",
                        "description": "ID de la machine préférée du client (machine la plus proche)"
                      },
                      "mot_de_passe_keypad": {
                        "type": "string",
                        "example": "123456",
                        "description": "Code à rentrer sur la machine pour se connecter.\nDoit uniquement contenir des chiffres."
                      }
                    },
                    "required": [
                      "idCompte",
                      "numero_compte",
                      "telephone",
                      "code_postal",
                      "adresse_mail",
                      "mot_de_passe",
                      "mot_de_passe2",
                      "anniversaire",
                      "fuseau_horaire",
                      "langue"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Le compte a bien été modifié"
          },
          "409": {
            "description": "Conflit sur l'adresse email ou le numéro de téléphone (déjà existant)"
          },
          "412": {
            "description": "Le mot de passe doit avoir au moins 8 caractères"
          }
        }
      }
    },
    "/webapi/compte_suppression": {
      "post": {
        "tags": [
          "Comptes"
        ],
        "summary": "Suppression de compte",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idCompte": {
                        "type": "integer",
                        "example": "10",
                        "description": "ID du compte Smart-Pizza"
                      },
                      "mot_de_passe": {
                        "type": "string",
                        "example": "azerty1234",
                        "description": "Mot de passe du client"
                      },
                      "template": {
                        "type": "string",
                        "example": "demoniak",
                        "description": "Template mail à utiliser pour le client"
                      }
                    },
                    "required": [
                      "idCompte"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Le compte a bien été supprimé"
          },
          "400": {
            "description": "Le mot de passe ne correspond pas, ou le compte est introuvable"
          }
        }
      }
    },
    "/webapi/stripe/create-intent": {
      "post": {
        "tags": [
          "Paiement"
        ],
        "summary": "Stripe : création d'un intent",
        "description": "Cette API doit être utilisée avant chaque paiement via Stripe. \nLe paymentIntent retourné sera utilisé avec le framework Stripe pour lancer le paiement.\n",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idMachine": {
                        "type": "integer",
                        "example": "274",
                        "description": "ID de la machine pour lequel effectuer le paiement"
                      },
                      "idCompte": {
                        "type": "integer",
                        "example": "4",
                        "description": "ID du compte Smart-Pizza"
                      },
                      "amount": {
                        "type": "number",
                        "example": "2340",
                        "description": "Le montant à encaisser en centimes"
                      },
                      "currency": {
                        "type": "string",
                        "example": "eur",
                        "description": "La devise à utiliser pour le paiement"
                      },
                      "idTransaction": {
                        "type": "integer",
                        "example": "120450",
                        "description": "L'ID de la transaction préalablement reçu via l'appel /paiement_init"
                      }
                    },
                    "required": [
                      "idMachine",
                      "idCompte",
                      "amount",
                      "currency",
                      "idTransaction"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/stripeIntent"
                }
              }
            }
          }
        }
      }
    },
    "/webapi/paiement_pizz": {
      "post": {
        "tags": [
          "Paiement"
        ],
        "summary": "Paiement en points pizz",
        "description": "Cette API doit être utilisé dans le cas où le client souhaite utiliser ses points pizz pour payer.\n",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/credentials"
                  },
                  {
                    "properties": {
                      "idMachine": {
                        "type": "integer",
                        "example": "274",
                        "description": "ID de la machine pour lequel effectuer le paiement"
                      },
                      "idCompte": {
                        "type": "integer",
                        "example": "4",
                        "description": "ID du compte Smart-Pizza"
                      },
                      "montant": {
                        "type": "number",
                        "example": "23.40",
                        "description": "Le montant à encaisser"
                      }
                    },
                    "required": [
                      "idMachine",
                      "idCompte",
                      "montant"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "idTransaction": {
                      "type": "integer",
                      "example": 1542
                    },
                    "montant": {
                      "type": "number",
                      "example": 23.4
                    },
                    "label": {
                      "type": "string",
                      "example": "OK"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request"
          },
          "412": {
            "description": "Point pizz insuffisants"
          }
        }
      }
    }
  }
}