Skip to content

haleyintech/Payment-Transfer-Capstone-2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

Capstone Project - Command Line and RESTful API

Capstone for Module 2 for Merit America
Together with my two pair programming partners, we were assigned to build a RESTful API server and command-line application for a fake company named TEnmo that needed an online payment service to transfer "TE bucks" between friends. The requirements for the project are below - use cases 1 and 2 were included in the given code for the project:

Use cases

Required use cases

You should attempt to complete all of the following required use cases.

  1. [COMPLETE] As a user of the system, I need to be able to register myself with a username and password.
    1. A new registered user starts with an initial balance of 1,000 TE Bucks.
    2. The ability to register has been provided in your starter code.
  2. [COMPLETE] As a user of the system, I need to be able to log in using my registered username and password.
    1. Logging in returns an Authentication Token. I need to include this token with all my subsequent interactions with the system outside of registering and logging in.
    2. The ability to log in has been provided in your starter code.
  3. As an authenticated user of the system, I need to be able to see my Account Balance.
  4. As an authenticated user of the system, I need to be able to send a transfer of a specific amount of TE Bucks to a registered user.
    1. I should be able to choose from a list of users to send TE Bucks to.
    2. I must not be allowed to send money to myself.
    3. A transfer includes the User IDs of the from and to users and the amount of TE Bucks.
    4. The receiver's account balance is increased by the amount of the transfer.
    5. The sender's account balance is decreased by the amount of the transfer.
    6. I can't send more TE Bucks than I have in my account.
    7. I can't send a zero or negative amount.
    8. A Sending Transfer has an initial status of Approved.
  5. As an authenticated user of the system, I need to be able to see transfers I have sent or received.
  6. As an authenticated user of the system, I need to be able to retrieve the details of any transfer based upon the transfer ID.

Sample screens

Use case 3: Current balance

Your current account balance is: $9999.99

Use case 4: Send TE Bucks

-------------------------------------------
Users
ID          Name
-------------------------------------------
313         Bernice
54          Larry
---------

Enter ID of user you are sending to (0 to cancel):
Enter amount:

Use case 5: View transfers

-------------------------------------------
Transfers
ID          From/To                 Amount
-------------------------------------------
23          From: Bernice          $ 903.14
79          To:    Larry           $  12.55
---------
Please enter transfer ID to view details (0 to cancel): "

Use case 6: Transfer details

--------------------------------------------
Transfer Details
--------------------------------------------
 Id: 23
 From: Bernice
 To: Me Myselfandi
 Type: Send
 Status: Approved
 Amount: $903.14

Database schema

Tenmo_erd

tenmo_user table

Stores the login information for users of the system.

Field Description
user_id Unique identifier of the user
username String that identifies the name of the user; used as part of the login process
password_hash Hashed version of the user's password

account table

Stores the accounts of users in the system.

Field Description
account_id Unique identifier of the account
user_id Foreign key to the users table; identifies user who owns account
balance The amount of TE bucks currently in the account

transfer_type table

Stores the types of transfers that are possible.

Field Description
transfer_type_id Unique identifier of the transfer type
transfer_type_desc String description of the transfer type

There are two types of transfers:

transfer_type_id transfer_type_desc Purpose
1 Request Identifies transfer where a user requests money from another user
2 Send Identifies transfer where a user sends money to another user

transfer_status table

Stores the statuses of transfers that are possible.

Field Description
transfer_status_id Unique identifier of the transfer status
transfer_status_desc String description of the transfer status

There are three statuses of transfers:

transfer_status_id transfer_status_desc Purpose
1 Pending Identifies transfer that hasn't occurred yet and requires approval from the other user
2 Approved Identifies transfer that has been approved and occurred
3 Rejected Identifies transfer that wasn't approved

transfer table

Stores the transfers of TE bucks.

Field Description
transfer_id Unique identifier of the transfer
transfer_type_id Foreign key to the transfer_types table; identifies type of transfer
transfer_status_id Foreign key to the transfer_statuses table; identifies status of transfer
account_from Foreign key to the accounts table; identifies the account that the funds are being taken from
account_to Foreign key to the accounts table; identifies the account that the funds are going to
amount Amount of the transfer

Note: there are two check constraints in the DDL that creates the transfer table. Be sure to take a look at tenmo.sql to understand these constraints.

How to set up the database

Create a new Postgres database called tenmo. Run the database/tenmo.sql script in pgAdmin to set up the database.

Authentication

The user registration and authentication functionality for the system has already been implemented. If you review the login code, you'll notice that after successful authentication, an instance of AuthenticatedUser is stored in the currentUser member variable of App. The user's authorization token—meaning JWT—can be accessed from App as currentUser.getToken().

When the use cases refer to an "authenticated user", this means a request that includes the token as a header. You can also reference other information about the current user by using the User object retrieved from currentUser.getUser().

About

Capstone for Module 2 for Merit America

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages