Auction Site Requirements

Each team will deliver the design for and implementation of an Auction Site, modeled on eBay.  Each team will be responsible for working through multiple iterations (the content of which  the teams themselves will largely determine). These requirements may fluctuate during the course...as in a real development project.  Continue to refer to this page at least weekly to see clarifications and modulations of the functional and technical requirements.  Note also that many requirements will be clarified during the progress of the course itself in lectures.

Student teams are welcome (and especially encouraged) to utilize source code management systems to protect and share their team code.  There are several available publicly, and if teams want, we can set up subversion for any team that desires us to.

A working frontend is required for this site, and should implement the features for your auction site; login to bid, create account, add item, delete item, etc. It does not need to be especially pretty or actually online(i.e. it can be run locally) but there needs to be a frontend that connects with a backend, server, etc. You can use any frontend framework you like, but again it must have a real connection to your backend. We will not be grading on how the frontend looks, rather just that it is available and has the functionality below implemented.

Note: These functions overlap with many backend functions, but these actions will also have a frontend component as well. That is, they can be done or accessed through the frontend.

You must use at least 2 different databases in your project. One must be SQL-based, and one must be NOSQL-based. It is your call as to what particular databases you actually want to use (i.e., you could choose MySQL or Postgres for the SQL requirement and you could use MongoDB or Cassandra for the NOSQL requirement), but you must use one SQL database and one NOSQL database. For example, you might decide to use a MySQL database to store customer data (name, phone number, address, email, etc) and a NOSQL database such as MongoDB to store auction item information or logging information. Note you must use a database server-based system. You may not use sqlite3 (even though you are allowed to do so in the labs, you may not use sqllite for the final project).

FrontEnd Functions:

- Create Use
-Delete User
-Suspend User
-Login
-Logout
-See active actions
-Add Item
-Bid on Item
-Remove Item
-Purchase Item


Database Functions:

- Store Data in a persistent manner. (If the user shuts down your app, then powers it back up, all the data from the previous instance should still be there)
- Retrieval of stored data by both Frontend and Backend services. (For example, retrieval of all auction items for a specific user)
- Ability to perform all CRUD operations on your data from both the Frontend and Backend services.
- Database should scale as data are added or removed.

Admin Functions:

-Stop an auction early
-Remove and block a user
-Add, modify, or remove categories
-View all items that have been flagged by users 
-View all auctions currently in progress, and include sorting capability so that auctions ending soonest can be displayed first
-Examine metrics for closed auctions in a given timeframe(last day, week, month, etc)
-Examine emails that are received by customer support, and respond to these emails within the admin functionality
 

Auction Functions:

    -Allow listing of items for bidding
    -Start the auction when the current time matches the start time defined by the user
    -Allowing auction window to be set by the bidder, and begin countdown to the end of the bidding window once auction begins
    -Allow bid to be placed, and increment bid amount as users enter new bids
    -Allow item to be categorized by user
    -Allow search of items on the site by keyword, or item category
    -Allow item to be placed on a watchlist for a user, that includes parameters defined by the user(i.e. Ray-Ban sunglasses less than $100 in starting price)
    -Send a email notification to user when an item on their watchlist appears matching their criteria
    -Allow multiple bids to be placed at once by different users
    -Alert seller when their item has been bid on with an email
    -Alert buyer via email when someone has placed a higher bid on the item they had bid current high bid on
    -Implementation of a shopping cart that will store multiple items in it while the user shops on the site
    -Allow item to be place in the shopping cart if the Buy Now feature is selected
    -Place item in a user's cart if they have the winning bid when the auction expires
    -Allow a user to checkout from their cart once there are items in it
    -Alert both seller and bidders when on predetermined time setting, 1 day before bidding ends, 1 hour before bidding ends, etc
    -Remove auction once bidding is complete and user checkouts out

User Functions:

    -Create a new user(user should have the ability to place bids on a item(s) or place an item for sale, or both)
    -Update a user’s information
    -Delete a user
    -Suspend an account
    -List an item for auction(item should have start price, start time, quantity, time when the auction expires, shipping costs, buy now feature if applicable, item description, seller rating)
-    Update an item properties, including quantity, description, shipping costs, buy now feature
-    Flag an item as inappropriate or counterfeit
-    Categorize an item based on existing categories or create an new category if needed
-    Delete an item if there are no bids on it, but do not allow an item to be deleted if there are bids on it
-    Bid on an item, and update that bid if another user outbids that user
-    See a list of all items that are currently being bid on by that user
-    Add item to cart directly via the Buy Now functionality
-    Checkout of the auction once winning by selecting checkout from the cart