مسیرها
/
Ballerina
Ballerina
/
تمرین‌ها
/
PaySwitch - مبدل حقوق
PaySwitch - مبدل حقوق

PaySwitch - مبدل حقوق

متوسط

دستورالعمل‌ها

صورت مسئله

شرکتی به نام 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 اجرا کنید. سرویس Backend به‌طور خودکار روی http://localhost:8080 شروع به کار می‌کند

مثال

مثال ۱

ورودی:
  • حقوق: 1000
  • ارز مبدأ: USD
  • ارز مقصد: GBP
خروجی:

با فرض اینکه تبادل ارز خارجی پاسخ نرخ‌های تبدیل زیر را برگردانده باشد (ناقص):

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

تابع باید 735.84000 را برگرداند

مثال ۲

ورودی:
  • حقوق: 1000
  • ارز مبدأ: GBP
  • ارز مقصد: USD
خروجی:

با فرض اینکه تبادل ارز خارجی پاسخ نرخ‌های تبدیل زیر را برگردانده باشد (ناقص):

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

تابع باید 1358.9800 را برگرداند

راهنمایی‌ها

  • می‌توانید پاسخ JSON دریافتی را برای دسترسی آسان به یک نوع تعریف‌شده توسط کاربر (به‌طور خاص یک رکورد باز) تبدیل کنید. برای اطلاعات بیشتر اتصال داده‌ی کلاینت HTTP را ببینید
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Ballerina Exercism

آماده‌اید PaySwitch - مبدل حقوق را شروع کنید؟

در Exercism ثبت‌نام کنید تا Ballerina را همراه با 60 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.