GithubHelp home page GithubHelp logo

luchoct / bank-transfers Goto Github PK

View Code? Open in Web Editor NEW
0.0 2.0 0.0 3.94 MB

License: GNU General Public License v2.0

JavaScript 0.42% Dockerfile 0.01% Java 1.58% Python 97.68% PowerShell 0.29% Batchfile 0.02%

bank-transfers's Introduction

bank-transfers

This project is the implementation of the coding challenge state specified here.

Bank Transfers is a software that performs the following tasks:

  • It loads random bank statements, and it stores them into CSV files, in a FTP server.
  • It loads CSV files from FTP Server, it processes them, and it stores calculated data into a MongoDB.
  • It exposes an API that retrieve data from a MongoDB server.

Implementation has been performed in Python and Java.

Modules

See below the modules that compose bank-transfers are the following ones:

statements-loader

Module that generates random statements and stores them into an FTP server.

Read more details at README file of the module.

statements-processor

ETL module that reads statements from files hosted in FTP server, processes them and loads them into a MongoDB database.

Read more details at README file of the module.

statements-api

Module that offers an API to retrieve analytical data from bank statements.

Read more details, including details about exposed API, at README file of the module.

Design considerations

Scalability is a key point in current design

  • Scalability of ETL depends on volume of data to process.
  • Scalability of API depends on number of API requests to process.

Data model focused on performance of API

Instead of having a generic data model storing every bank transaction, statements-processor stores data that actually supports API, which avoids degradation on API performance, when volume of data increases. However, storing bank statements is so easy as is adding a new message handler for channel statement-read in statements-processor, which would store it.

See below pseudo-representation of data model.

currencies: {
    symbol: string
} 
dailyTransfers: {
    day: integer
    month: integer
    year: integer
    transfers: integer
} 
monthlyTransfers: {
    month: integer
    year: integer
    transfers: integer
} 
yearlyTransfers: {
    month: integer
    year: integer
    transfers: integer
} 
lastIBANTransfers: {
    iban: string
    dni: string
    currency: string
    amount: string
    date: date (ISO)
} 

TODOs

In addition, see below global TODOs:

  • On launching containers with docker compose, make sure that MongoDB is available before launching statements-processor and statements-api.

bank-transfers's People

Contributors

luchoct avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.