This is a RESTful API server and command-line application that allows users to send and request "TE bucks" between friends.
- As a user of the system, I need to be able to register myself with a username and password.
- A new registered user starts with an initial balance of 1,000 TE Bucks.
- The ability to register has been provided in your starter code.
- As a user of the system, I need to be able to log in using my registered username and password.
- 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.
- The ability to log in has been provided in your starter code.
- As an authenticated user of the system, I need to be able to see my Account Balance.
- 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.
- I should be able to choose from a list of users to send TE Bucks to.
- A transfer includes the User IDs of the from and to users and the amount of TE Bucks.
- The receiver's account balance is increased by the amount of the transfer.
- The sender's account balance is decreased by the amount of the transfer.
- I can't send more TE Bucks than I have in my account.
- A Sending Transfer has an initial status of "approve."
- As an authenticated user of the system, I need to be able to see transfers I have sent or received.
- As an authenticated user of the system, I need to be able to retrieve the details of any transfer based upon the transfer ID.
- As an authenticated user of the system, I need to be able to request a transfer of a specific amount of TE Bucks from another registered user.
- I should be able to choose from a list of users to request TE Bucks from.
- A transfer includes the User IDs of the from and to users and the amount of TE Bucks.
- A Request Transfer has an initial status of "pending."
- No account balance changes until the request is approved.
- The transfer request should appear in both users' list of transfers (use case #5).
- As an authenticated user of the system, I need to be able to see my "pending" transfers.
- As an authenticated user of the system, I need to be able to either approve or reject a Request Transfer.
- I can't "approve" a given Request Transfer for more TE Bucks than I have in my account.
- The Request Transfer status is "approved" if I approve, or "rejected" if I reject the request.
- If the transfer is approved, the requester's account balance is increased by the amount of the request.
- If the transfer is approved, the requestee's account balance is decreased by the amount of the request.
- If the transfer is rejected, no account balance changes.
The users
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 |
The accounts
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 |
The transfer_types
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 |
The transfer_statuses
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 |
The 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 |