En tant qu’organisateur du festival, je veux confirmer la programmation du festival afin de réserver le matériel nécessaire.

Gestion du transport

  • Chaque artiste fait l’aller-retour la journée même de son spectacle
  • Chaque artiste solo voyage à bord d’un shuttle de type E.T. spaceship.
  • Chaque artiste en groupe voyage à bord d’un shuttle de type Millennium Falcon (assumez aucun groupe de plus de 20). De plus, aucun festivalier ni autre groupe ne peut être placé sur ce vaisseau (1 groupe = 1 vaisseau complet à lui seul).

:pencil2: Puisque les artistes n’ont pas de passe, le manifeste du vaisseau doit être changé. Dans la liste des passagers, au lieu d’afficher le numéro de la passe, on doit plutôt afficher un identifiant composé du nom de l’artiste et d’un numéro séquentiel à 3 chiffres. Par exemple, pour un groupe ABC avec 3 personnes, les identifiants seront : ABC-001, ABC-002, ABC-003.

Gestion de l’oxygène

  • Chaque artiste ou membre d’un groupe aura besoin de 6 bonbonnes d’oxygène de catégorie B (minimum). Par exemple, si un artiste est un groupe de 4 personnes, alors on devra réserver 4 x 6 = 24 bonbonnes d’oxygène de catégorie B (ou E).
  • Les règles d’achat ou de production d’oxygène sont les mêmes que dans la story précédente.
  • La date du début de production est la date de confirmation de la programmation. C’est-à-dire que s’il manque de temps pour produire des bonbonnes d’oxygène B, il faudra acheter des bonbonnes d’oxygène de catégorie E.

Conditions de succès

Condition Description
COS 1 Le transport est réservé pour chaque artiste, considérant les règles ci-haut
COS 2 Les artistes sont toujours seuls sur leur vaisseau (aucun festivalier, ni autre artiste)
COS 3 Les bonbonnes d’oxygènes sont achetées ou produites selon les besoins des artistes
COS 4 Les règles d’approvisionnement d’oxygènes sont respectées
COS 5 Le manifeste des vaisseaux est modifier afin de supporter les artistes (qui n’ont pas de passe)
COS 6 Le manifeste d’un vaisseau avec un artiste liste les membres en utilisant le format prescrit
COS 7 Le coût total, incluant le transport et l’oxygène, est disponible
COS 8 On ne peut pas confirmé l’horaire 2 fois
COS 9 La date de confirmation de l’horaire doit être avant la journée du début du festival (excluant celle-ci)

:exclamation: Il faut respecter les COS des stories précédentes.

API

Attention: les requêtes suivantes ne respectent pas strictement la convention RESTful, mais elles sont utilisées pour simplifier l’API dans le cadre du cours.

Requête: Générer un horaire et le confirmer

POST /program

{
  "confirmationDate": "2060-07-12"::string,
  "criteria": "MinimizeCost" || "HeadlinerBudget" || "HeadlinerNumber""::string,
  "scheduling": "Crescendo" || "Rollercoaster"::string,
  "headlinerBudget": 0.00::float
  "headlinerLimit": 0::int
}

Réponse

HTTP 201 Created Location: /program/confirmed

HTTP 400 Bad Request

{
  "error": "INVALID_CONFIRMATION_DATE"::string,
  "description" : "The confirmation date must be before the start of the festival"::string
} 

HTTP 409 CONFLICT

{
  "error": "ALREADY_CONFIRMED"::string,
  "description" : "The program is already confirmed."::string
}

Requête : Obtenir l’horaire confirmé

GET /program/confirmed

Réponse

HTTP 200

{
   "schedule": [
      {
         "date": "2060-07-17"::string,
         "artist": ""::string
      },
      ...
   ],
  "totalArtistCost": 0.00::float,
  "totalCost": 0.00::float
}

MODIFICATION de Requête : Obtenir le manifeste

La liste de passagers dans le manifeste doit maintenant supporter les artistes, donc le type du champ “passengers” doit être changé de long[] à string[].

Le reste de l’API est inchangé.

GET /shuttle-manifests?date=2060-07-19

Réponses

HTTP 200 Ok

{
 "departures: [  
                 {
                   ...
                   "passengers": [<numéro de passe ou de groupe>, ] ::string[]
                 }, 
                 ...
              ],
"arrivals: [
               {
                 ...
                 "passengers": [<numéro de passe ou de groupe>, ] ::string[]
               }, 
                ...
            ]
}