Διαδρομές
/
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;
}

Περιβάλλον δοκιμών

  • Μπορείς να το δοκιμάσεις είτε χειροκίνητα, τρέχοντας το project με bal run, είτε γράφοντας unit tests και τρέχοντάς τα με bal test. Η υπηρεσία backend θα ξεκινήσει αυτόματα στο http://localhost:8080

Παράδειγμα

Παράδειγμα 1

Είσοδος:
  • Salary: 1000
  • Source Currency: USD
  • Target Currency: GBP
Έξοδος:

Υποθέτοντας ότι το εξωτερικό ανταλλακτήριο νομισμάτων επέστρεψε την ακόλουθη απάντηση με ισοτιμίες μετατροπής (παραλείπεται):

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

Η συνάρτηση πρέπει να επιστρέψει 735.84000

Παράδειγμα 2

Είσοδος:
  • Salary: 1000
  • Source Currency: GBP
  • Target Currency: USD
Έξοδος:

Υποθέτοντας ότι το εξωτερικό ανταλλακτήριο νομισμάτων επέστρεψε την ακόλουθη απάντηση με ισοτιμίες μετατροπής (παραλείπεται):

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

Η συνάρτηση πρέπει να επιστρέψει 1358.9800

Υποδείξεις

  • Μπορείς να μετατρέψεις την απάντηση JSON που έλαβες σε έναν τύπο που ορίζεις εσύ (πιο συγκεκριμένα, μια ανοιχτή καταγραφή) για εύκολη πρόσβαση. Δες τη σύνδεση δεδομένων με HTTP client για περισσότερες πληροφορίες
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Ballerina Exercism

Έτοιμος να ξεκινήσεις την άσκηση PaySwitch - Μετατροπέας μισθού;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Ballerina με 60 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.