Parcours
/
Ballerina
Ballerina
/
Exercices
/
PaySwitch - Convertisseur de salaire
PaySwitch - Convertisseur de salaire

PaySwitch - Convertisseur de salaire

Moyen

Instructions

Énoncé du problème

Une entreprise appelée Insure Everyone paie ses employés dans des devises étrangères. Mais, en raison d'exigences législatives, le salaire doit être converti dans la devise locale. Ses employés sont répartis dans le monde entier. Le service RH d'Insure Everyone cherche l'aide d'un développeur talentueux pour écrire un programme qui convertit le salaire de chaque employé dans sa devise locale. Insure Everyone s'appuie sur les taux de change fournis par une API externe.

À partir de cette API externe de taux de change, tu dois écrire une fonction qui prend une source currency, un salary (dans la devise source) et la local currency de l'employé, et qui renvoie le salaire dans la devise locale.

L'API de change

La réponse de l'API externe de change est donnée ci-dessous :

Remarque : les rates sont tronqués pour garder l'énoncé court

{
    "base": "EUR",
    "rates": {
        "AED": 4.167972,
        "AFN": 118.91123,
        "ALL": 121.353306,
        "AMD": 546.175542,
        "ANG": 2.035384,
        "AOA": 629.106987,
        "ARS": 116.624363,
        "AUD": 1.580224,
        "AWG": 2.042846,
        "AZN": 1.92923,
        "BAM": 1.95468,
        "BBD": 2.26981,
        "BDT": 97.024176,
        "BGN": 1.956957,
        "BHD": 0.428175,
        "BIF": 2257.462616,
        "BMD": 1.134504,
        "BND": 1.534691,
        "BOB": 7.773946,
        "BRL": 6.394753,
        "BSD": 1.134916,
        "BTC": 0.000027,
        "BTN": 83.896824,
        "BWP": 13.167125,
    }
}

Un exemple de requête pour obtenir les taux de change de USD :

GET http://localhost:8080/rates/USD

{
  "base": "USD",
  "rates": {
    "AED": 3.672477643818380310171368756063197,
    "AFN": 104.7748962262571579872079201988508,
    "ALL": 106.9266548068103418652047146893925,
    "AMD": 481.2454276553169780099231576470961,
    "ANG": 1.793414695824643301163693331958788,
    "AOA": 554.3178661774696212335484143830275,
    "ARS": 102.7598951821316197338845611280433,
    "AUD": 1.392364754903645275750470737610812,
    "AWG": 1.799989602800547350872880138793802,
    "AZN": 1.699880432206294535038121596128717,
    "BAM": 1.722304900517304728699178180683942,
    "BBD": 1.999971804204874171858658003508614,
    "BDT": 85.48980589838411660371074286227852,
    "BGN": 1.724311207564226937381544618524109,
    "BHD": 0.3772729555625457630971671155965922,
    "BIF": 1989.092294529751410010035940827599,
    "BMD": 0.9996325735447665520331371082216295
    // omitted
  }
}

Contraintes

  • 500 <= salary <= 10000
  • sourceCurrency et targetCurrency sont des codes de devise ISO (alphabétiques). Les entrées de test peuvent contenir des codes de devise invalides.
  • La précision du taux renvoyé sera mesurée jusqu'à 5 décimales.

Définition

Tu dois écrire ton code à l'intérieur de la fonction suivante.

# The exchange rate API base URL
configurable string apiUrl = "http://localhost:8080";

# Convert provided salary to local currency.
#
# + salary - Salary in source currency
# + sourceCurrency - Soruce currency
# + localCurrency - Employee's local currency
# + return - Salary in local currency or error
public function convertSalary(decimal salary, string sourceCurrency, string localCurrency) returns decimal|error {
    // TODO: Write your code here
    return 0;
}

Environnement de test

  • Tu peux le tester manuellement en exécutant le projet avec bal run, ou en écrivant des tests unitaires et en les exécutant avec bal test. Le service backend démarrera automatiquement à l'adresse http://localhost:8080

Exemple

Exemple 1

Entrée :
  • Salaire : 1000
  • Devise source : USD
  • Devise cible : GBP
Sortie :

En supposant que le service externe de change ait renvoyé la réponse de taux de conversion suivante (omise) :

{
    "base": "USD",
    "rates": {
        // omitted
        "GBP": 0.73584,
        // omitted
    }
}

La fonction doit renvoyer 735.84000

Exemple 2

Entrée :
  • Salaire : 1000
  • Devise source : GBP
  • Devise cible : USD
Sortie :

En supposant que le service externe de change ait renvoyé la réponse de taux de conversion suivante (omise) :

{
    "base": "GBP",
    "rates": {
        // omitted
        "USD": 1.35898,
        // omitted
    }
}

La fonction doit renvoyer 1358.9800

Astuces

  • Tu peux convertir la réponse JSON reçue en un type défini par l'utilisateur (plus précisément un open record) pour y accéder facilement. Consulte la liaison de données du client HTTP pour plus d'informations
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Ballerina Exercism

Prêt à commencer PaySwitch - Convertisseur de salaire ?

Inscris-toi sur Exercism pour apprendre et maîtriser Ballerina avec 60 exercices, et un vrai mentorat humain, le tout gratuitement.