Tracks
/
Ballerina
Ballerina
/
Ejercicios
/
PaySwitch - Convertidor de salario
PaySwitch - Convertidor de salario

PaySwitch - Convertidor de salario

Intermedia

Instrucciones

Enunciado del problema

Una empresa llamada Insure Everyone les paga a sus empleados en monedas extranjeras. Pero, debido a requisitos legislativos, el salario debe convertirse a la moneda local. Sus empleados están repartidos por todo el mundo. El departamento de Recursos Humanos de Insure Everyone busca la ayuda de un desarrollador con talento para crear un programa que convierta el salario de cada empleado a su moneda local correspondiente. Insure Everyone depende de los tipos de cambio que proporciona una API externa.

Dada la API externa de tipos de cambio, debes escribir una función que reciba una source currency, un salary (en la moneda de origen) y la local currency del empleado, y que devuelva el salario en la moneda local.

API de tipos de cambio

La respuesta de la API externa de tipos de cambio es la siguiente:

Nota: los rates están truncados para que el enunciado sea más corto

{
    "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 ejemplo de solicitud para obtener los tipos de cambio 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
  }
}

Restricciones

  • 500 <= salary <= 10000
  • sourceCurrency y targetCurrency son códigos de moneda ISO (alfabéticos). La entrada de las pruebas puede contener códigos de moneda no válidos.
  • La precisión del tipo de cambio devuelto se medirá hasta 5 decimales.

Definición

Debes escribir tu código dentro de la siguiente función.

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

Entorno de pruebas

  • Puedes probarlo manualmente ejecutando el proyecto con bal run, o escribir pruebas unitarias y ejecutarlas con bal test. El servicio de backend se iniciará automáticamente en http://localhost:8080

Ejemplo

Ejemplo 1

Entrada:
  • Salario: 1000
  • Moneda de origen: USD
  • Moneda de destino: GBP
Salida:

Suponiendo que el servicio externo de tipos de cambio devolvió la siguiente respuesta de tipos de conversión (omitida):

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

La función debe devolver 735.84000

Ejemplo 2

Entrada:
  • Salario: 1000
  • Moneda de origen: GBP
  • Moneda de destino: USD
Salida:

Suponiendo que el servicio externo de tipos de cambio devolvió la siguiente respuesta de tipos de conversión (omitida):

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

La función debe devolver 1358.9800

Pistas

  • Puedes convertir la respuesta JSON recibida a un tipo definido por el usuario (más específicamente, un registro abierto) para acceder a ella fácilmente. Consulta enlace de datos del cliente HTTP para más información
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Ballerina Exercism

¿Todo listo para empezar PaySwitch - Convertidor de salario?

Regístrate en Exercism para aprender y dominar Ballerina con 60 ejercicios y mentoría humana real, todo gratis.