You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Inga 🏳‍🌈 e59ff2c202 Merge pull request 'refactor: improved transacion service somewhat (closes #22)' (#24) from refactor-22-simplify-transaction-service into main 4 months ago
src refactor: improved transacion service somewhat (closes #22) 4 months ago
test Initial commit with test assignment 5 months ago
.eslintrc.js enabled no-floating-promises eslint rules to prevent #3 from happening again 4 months ago
.gitignore switched from mysql to sqlite (closes #1) 4 months ago
.prettierrc Initial commit with test assignment 5 months ago
README.md Initial commit with test assignment 5 months ago
nest-cli.json Initial commit with test assignment 5 months ago
ormconfig.json switched from mysql to sqlite (closes #1) 4 months ago
package-lock.json feat: fixed applyRules logic (closes #16) 4 months ago
package.json feat: fixed applyRules logic (closes #16) 4 months ago
tsconfig.build.json Initial commit with test assignment 5 months ago
tsconfig.json Initial commit with test assignment 5 months ago

README.md

Introduction

Explore this code and be ready to tell us what is good or/and bad

Installation

  • npm install
  • npm install -g ts-node
  • Insert database connection information into ormconfig.json file
  • Run “db-build”

Running the app

# development
$ npm run start

# watch mode
$ npm run start:dev

## Test

```bash
# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

# test coverage
$ npm run test:cov

Task original

Create a RESTful API with an endpoint for transaction commission calculation. The API must use JSON format for requests and responses.

Request (Transaction) examples

1st example

{
  "date": "2021-01-01",
  "amount": "100.00",
  "currency": "EUR",
  "client_id": 42
}

2nd example

{
  "date": "2021-01-01",
  "amount": "200.40",
  "currency": "USD",
  "client_id": 42
}

Response (Commission) example

{
  "amount": "0.05",
  "currency": "EUR"
}

Commission response must always be in Euros. Please use a currency rates API (https://api.exchangerate.host/2021-01-01) for transactions in currency other than Euros.

Commission calculation rules

The lowest commission shall be used if there are multiple rules matching.

Rule #1: Default pricing

By default the price for every transaction is 0.5% but not less than 0.05€.

Rule #2: Client with a discount

Transaction price for the client with ID of 42 is 0.05€ (unless other rules set lower commission).

Rule #3: High turnover discount

Client after reaching transaction turnover of 1000.00€ (per month) gets a discount and transaction commission is 0.03€ for the following transactions.

See below an example in CSV format of rules applied to various transactions.

client_id,date,amount,currency,commission_amount,commission_currency
42,2021-01-02,2000.00,EUR,0.05,EUR
1,2021-01-03,500.00,EUR,2.50,EUR
1,2021-01-04,499.00,EUR,2.50,EUR
1,2021-01-05,100.00,EUR,0.50,EUR
1,2021-01-06,1.00,EUR,0.03,EUR
1,2021-02-01,500.00,EUR,2.50,EUR

Testing

Please write at least one unit and one integration test.

Remarks

  • You can use any language and any framework. We expect you to show knowledge of your chosen language's ecosystem (frameworks, 3rd party libraries, etc.)
  • Code must follow good practices (such as SOLID, design patterns, etc.) and be easily extendable in case we need to add additional commission calculation rules in the future
  • Please include README.md with instructions how to run your completed task.

Submitting the task

  • Make sure you don't mention [REDACTED] anywhere in the code or repository name.
  • Please include how long it took for you to do the task.