Треки
/
Ballerina
Ballerina
/
Вправи
/
PaySwitch - конвертер зарплати
PaySwitch - конвертер зарплати

PaySwitch - конвертер зарплати

Середня

Вказівки

Постановка задачі

Компанія Insure Everyone платить своїм працівникам в іноземних валютах. Але через вимоги законодавства зарплату потрібно конвертувати в місцеву валюту. Її працівники розкидані по всьому світу. Відділ кадрів Insure Everyone шукає талановитого розробника, який допоможе створити програму для конвертації зарплати кожного працівника у відповідну місцеву валюту. Insure Everyone покладається на курси обміну, які надає зовнішній API.

Маючи зовнішній API курсів обміну, нам потрібно написати функцію, яка приймає source currency, salary (у вихідній валюті) та local currency працівника і повертає зарплату в місцевій валюті.

API обміну валют

Нижче наведено відповідь від зовнішнього API обміну валют:

Примітка: значення rates скорочено, щоб умова задачі залишалася короткою

{
    "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,
    }
}

Приклад запиту на отримання курсів обміну для 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
  }
}

Обмеження

  • 500 <= salary <= 10000
  • sourceCurrency і targetCurrency - це коди валют ISO (алфавітні). Тестові вхідні дані можуть містити недійсні коди валют.
  • Точність поверненого курсу вимірюється до 5 знаків після коми.

Визначення

Код потрібно написати всередині такої функції.

# 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;
}

Середовище тестування

  • Можна тестувати вручну, запустивши проєкт командою bal run, або написати модульні тести й запустити їх командою bal test. Бекенд-сервіс запуститься автоматично за адресою http://localhost:8080

Приклад

Приклад 1

Вхідні дані:
  • Зарплата: 1000
  • Вихідна валюта: USD
  • Цільова валюта: GBP
Вихідні дані:

Припустімо, що зовнішній обмін валют повернув таку відповідь із курсами конвертації (скорочено):

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

Функція має повернути 735.84000

Приклад 2

Вхідні дані:
  • Зарплата: 1000
  • Вихідна валюта: GBP
  • Цільова валюта: USD
Вихідні дані:

Припустімо, що зовнішній обмін валют повернув таку відповідь із курсами конвертації (скорочено):

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

Функція має повернути 1358.9800

Підказки

  • Отриману відповідь JSON можна конвертувати у визначений користувачем тип (точніше, у відкритий запис), щоб мати до неї зручний доступ. Докладніше див. привʼязування даних HTTP-клієнта
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Ballerina Exercism

Час розпочати PaySwitch - конвертер зарплати?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Ballerina, а також 60 вправ та справжнє наставництво від людей, і все це безкоштовно.