{
  "openapi": "3.0.0",
  "info": {
    "title": "FLDTECH - API Machines",
    "version": "1.1.0",
    "description": "\n# Description \n\nCette API permet la récupération des données suivantes:\n\n- Récupération des informations machines\n- Récupération des produits\n- Récupération en direct des stocks de produits\n",
    "contact": {
      "email": "it@fldtech.fr"
    },
    "termsOfService": "https://www.fldtech.fr/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."
    }
  ],
  "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"
          }
        }
      },
      "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
            }
          }
        }
      },
      "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"
          }
        }
      }
    }
  },
  "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/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"
                }
              }
            }
          }
        }
      }
    }
  }
}