En tant que Terrien, je peux m’acheter une ou des passes afin d’assister au Glow-4002 sur la planète Ulavalogy. La TEAM (Terriens et Extraterrestres Amateurs de Musique) est responsable de la vente des passes. Il est possible d’acheter des passes du 1er janvier 2050 au 16 juillet 2050. Le festival a lieu du 17 juillet 2050 au 24 juillet 2050.

Il existe trois catégories de passes:

  • Supernova
  • Supergiant
  • Nebula

Chaque catégorie de passes est disponible selon deux options:

  • Package: qui donne accès à tous les jours du festival
  • Single pass: qui donne accès à une journée du festival

Tableau des prix

  Supernova Supergiant Nebula
Package 700 000$ 500 000$ 250 000$
Single pass 150 000$ /passe 100 000$/passe sauf si quantité >=5 alors prix devient 90 000$/passe 50 000$/passe sauf si quantité > 3 alors rabais de 10% sur la commande totale

Conditions de succès

Condition Description
COS 1 Chaque commande se voit attribuer un numéro unique.
COS 2 Chaque passe se voit attribuer un numéro unique.
COS 3 Le code du vendeur de passes doit être indiqué lors de l’achat.
COS 4 Le prix de la commande est retourné arrondi à 2 décimales. (3,328 => 3,33 et 3,324 => 3,32)
COS 5 Il est possible d’acheter des passes entre le 1er janvier 2050 à 00:00:00 GMT et le 16 juillet 2050 à 23:59:59 GMT inclusivement.
COS 6 Les dates des événements doivent être entre le 17 juillet 2050 au 24 juillet 2050 inclusivement.
COS 7 Il est possible d’acheter plusieurs passes avec l’option single pass.
COS 8 Il n’est pas possible d’acheter plusieurs packages.
COS 9 L’attribut ‘eventDates’ ne doit pas être présent si un package est acheté.

Note: Il est possible de faire des commandes qui ne sont pas en ordre chronologique. Par exemple, faire une requête avec une date de commande du 24 juin 2050, puis ensuite une commande en date du 15 février 2050, etc.

:warning: Attention aux typos ex. eventDate et eventDates

API

Requête

POST /orders

{
  "orderDate": "2050-05-21T15:23:20.142Z"::string,
  "vendorCode": "TEAM"::string,
  "passes": {
              "passCategory": "supernova" || "supergiant" || "nebula" ::string,
              "passOption": "package" || "singlePass" ::string,
              "eventDates": []::string[] 
            }
}

Réponses

HTTP 201 Created

Headers

Location: /orders/<orderNumber::long>

HTTP 400 Bad Request

Si la date d’achat est en dehors de la période d’achat (1er janvier 2050 au 16 juillet 2050 inclusivement).

{
  "error": "INVALID_ORDER_DATE"::string,
  "description" : "order date should be between January 1 2050 and July 16 2050"::string
} 

HTTP 400 Bad Request

Si une date (dans eventDates) pour laquelle on veut acheter une passe est en dehors de la durée du festival (17 juillet 2050 au 24 juillet 2050 inclusivement).

{
  "error": "INVALID_EVENT_DATE"::string,
  "description" : "event date should be between July 17 2050 and July 24 2050"::string
} 

HTTP 400 Bad request

Pour les autres erreurs (ex. passCategory qui est invalide, si le champ eventDates est présent alors qu’un package est acheté, etc.)

{
  "error": "INVALID_FORMAT"::string,
  "description": "invalid format"::string
} 

Requête

GET /orders/<orderNumber::long>

Réponses

{
    "orderPrice": 0.00::float,
    "passes": [
                  {
                    "passNumber": 0::long,
                    "passCategory": "supernova" || "supergiant" || "nebula" ::string,
                    "passOption": "package" || "singlePass" ::string,
                    "eventDate": "2017-07-01" ::string
                  }, ...
              ]
}

HTTP 404 Not found

Si la commande n’existe pas

{
  "error": "ORDER_NOT_FOUND"::string,
  "description": "order with number XX not found"::string
} 

Exemple 1: Achat de plusieurs single pass:

POST /orders

{
  "orderDate": "2050-05-21T15:23:20.142Z",
  "vendorCode": "TEAM",
  "passes": {
              "passCategory":"supergiant",
              "passOption": "singlePass",
              "eventDates": ["2050-07-17", "2050-07-18"]
            }
}

Retourne headers

Location: /orders/1111111

GET /orders/1111111

{
    "orderPrice": 200000.00,
    "passes": [
                  {
                    "passNumber": 123456789,
                    "passCategory": "supergiant",
                    "passOption": "singlePass",
                    "eventDate": "2050-07-17"
                  },
                  {
                    "passNumber": 234567891,
                    "passCategory": "supergiant",
                    "passOption": "singlePass",
                    "eventDate": "2050-07-18"
                  }
              ]
}

Exemple 2: Achat d’un package:

POST /orders

{
  "orderDate": "2050-05-21T15:23:20.142Z",
  "vendorCode": "TEAM",
  "passes": {
              "passCategory":"supergiant",
              "passOption": "package"
            }
}

Retourne headers

Location: /orders/2222222

GET /orders/2222222

{
    "orderPrice": 500000.00,
    "passes": [
                  {
                    "passNumber": 345678912,
                    "passCategory": "supergiant",
                    "passOption": "package",
                  }
              ]
}

Précisions

21/09/2019 Pour le moment le code de vendeur est toujours TEAM.

Questions et réponses sur la story:

20/09/2019

Est-il possible d’acheter différentes catégories de passes ou différentes options de passes dans une seule commande?

Non, une commande implique qu’il n’y a qu’une seule catégorie de passe et une option.

21/09/2019

Est-il possible que le eventDates contiennent plusieurs fois la même date?

Oui, pour dire qu’on achète 5 passes pour la même soirée, on met 5 fois la même date dans l’array eventDates, ex. Je veux 3 billets pour le spectacle du 19 juillet, alors eventDates = [“2050-07-19”, “2050-07-19”, “2050-07-19”]