트랙
/
Ballerina
Ballerina
/
연습 문제
/
PaySwitch - 급여 변환기
PaySwitch - 급여 변환기

PaySwitch - 급여 변환기

보통

지침

문제 설명

Insure Everyone이라는 회사는 직원들에게 외화로 급여를 지급해요. 하지만 법규상의 요구 사항 때문에 급여를 현지 통화로 변환해야 해요. 이 회사의 직원들은 전 세계 곳곳에 있어요. Insure Everyone의 인사 부서는 각 직원의 급여를 해당 현지 통화로 변환하는 프로그램을 만들 능력 있는 개발자의 도움을 찾고 있어요. Insure Everyone은 외부 API에서 제공하는 환율에 의존해요.

외부 환율 API가 주어졌을 때, source currency, salary(source currency 기준), 그리고 직원의 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 응답을 사용자 정의 타입(더 구체적으로는 open record)으로 변환하면 쉽게 접근할 수 있어요. 자세한 내용은 HTTP 클라이언트 데이터 바인딩을 참고해요.
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Ballerina Exercism

PaySwitch - 급여 변환기 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Ballerina 트랙을 연습 문제 60개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.