Rutas
/
Ballerina
Ballerina
/
Ejercicios
/
PaySwitch - Conversor de salarios
PaySwitch - Conversor de salarios

PaySwitch - Conversor de salarios

Media

Instrucciones

Enunciado del problema

Una empresa llamada Insure Everyone 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 correspondiente moneda local. Insure Everyone depende de los tipos de cambio que proporciona una API externa.

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

API de cambio de monedas

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

Nota: los rates están truncados para que el enunciado del problema 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 petición 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 prueba puede contener códigos de moneda no válidos.
  • La precisión del tipo devuelto se medirá hasta 5 decimales.

Definición

Tienes que 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 escribiendo pruebas unitarias y ejecutándolas 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 cambio de monedas 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 cambio de monedas 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 concretamente, un registro abierto) para poder acceder a ella fácilmente. Consulta vinculación de datos del cliente HTTP para obtener más información
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Ballerina Exercism

¿Listo para empezar PaySwitch - Conversor de salarios?

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