Challenge Overview
This is the third challenge in the series for cloudHub, where we are building a financial integration with plaid.com. We will be loading transaction data for an account and storing those transactions in mongodb. We are only going to want to check for pre-approved applications from the apps collection. The end goal of this challenge is to show a single view of the company’s software charges. Since everyone might not have access to an approved institution on plaid, I will be providing a sample transaction call to help guide the process.
Based on the feedback in challenge #2, we are going to continue to use NodeJS + Express, and swagger-node.
Plaid.com is a new restful API for retrieving credit card and banking transactions. Their site provides great documentation and is much more developer friendly than other financial integrations.
For this challenge, Financial API, there are 4 primary goals:
- Authenticate, store access token, setup webhook.
- Store transactions by account.
- Remove any transactions that are recalled.
- Email if any account errors.
Account Setup
We are going to use plaid.com as our source for banking information. In the forum I will provide a sample JSON response for a transaction request. Also the seed project, thimble.zip, has been updated to show how to map and store this example transaction. Plaid.com offers some pretty good sample responses, if you don't want to sign up directly for an account. If you have any issues accessing plaid or mocking up a transaction, please reach out in the forums.
Webhook documentation: https://plaid.com/docs/#webhook
Node library: https://github.com/plaid/plaid-node
Authentication
We want to use Plaid Link to setup and manage the user credentials. At the end of this process you are given a public token. We need to exchange that token, save the access token to the company, and add a webhook for the transaction alerts. The company model in the seed app has defined the area to store the account information. See example here: https://plaid.com/docs/link/#step-3-write-server-side-handler
Store Transactions
Once an account is added with a webhook, several different event types or “codes” are published to the webhook. We want to handle codes 0,1, and 2 in the same manner. We are going to store the transactions in companyCharges collection. For code 1 we want to try load transactions up to 12 months old, but not all banks store transactions that long. Only store a transaction once based on the id plaid returns.
Remove Transactions
Code 3 on the webhook will indicate that the transaction(s) have been removed from the account. We would want to delete these documents from the collection.
Account Errors
If any accounts are sent an error code we want to send these notices to an admin email that is configurable.
Final Submission Guidelines
- Deploy your solution to Heroku and make sure to include your working Heroku instance URL as part of your documentation.
- Provide your code and documentation in a single zip file. Make sure you include steps to deploy to Heroku.
- The bulk of your documentation should be in the Readme.md and you should assume that this will be open source so make sure you cover all the steps to set up, If you have specific information that should not be included in a public readme (like your heroku link or links to your video) put them in a file called submission.txt and they will be omitted from the project if it is open sourced.
- Provide a quick video of your solution in action (feel free to annotate your video if you are not comfortable with spoken English or don’t like the sound of your own voice).
- If your submission includes swagger, please add in some documentation about its function in the project.