المسارات
/
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 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.