Requirements

Product Requirements Document (PRD)

These requirements describe the overall functionality of the app. Some of these are already implemented in the current app (marked with a check), the rest will need to be implemented by you.

1. Browsing and Searching

2. Authentication

3. Shopping Cart

4. Checkout

5. History and Review

6. Error Handling and UX

7. Admin and Reporting (optional ideas)

These are NOT required, but if you're looking for a realistic new feature to implement as a stretch task, this is one to consider.

Technical Requirements

Implementation

You should use the technologies, skills, tools, and stack you've learned throughout the course up until now. Here are some specific requirements that you must meet in your implementation:

API

We already have a very basic API in place, but it is missing many features that you will be required to implement. You can find the current API in the project template.

Implementation Clarifications

These clarifications define the minimum expectations for this project. They are intended to remove ambiguity while still leaving room for implementation choices.

Naming Guidance

  • Because the program often prefers singular table names, avoid reserved SQL words by using more specific names where needed.

  • For example, prefer names such as:

    • app_user instead of user

    • customer_order instead of order

  • If you choose plural naming in your own schema, that is also acceptable as long as the schema is consistent and clear.

Minimum API Expectations

  • The public listing route should be GET /api/events.

  • Search should be implemented through query parameters on the listing route, for example GET /api/events?q=music&page=1&pageSize=20.

  • A separate /search route is not required.

  • PUT /api/cart/items/{itemId} and DELETE /api/cart/items/{itemId} should identify a specific cart line, not the event itself.

  • In the default project route design, {itemId} is a single cart line identifier.

  • If a trainee intentionally chooses a composite-key cart-line design, the route shape should be adjusted accordingly and documented clearly.

  • The cart line should store a reference to the related event.

Cart and Checkout Simplifications

  • The cart is backend-persisted in all cases.

  • A cart may belong either to an authenticated user or to an unauthenticated user.

  • A simple schema approach is to allow cart.user_id to be nullable until the cart is associated with a logged-in user.

  • The project should enforce the rule that each authenticated user has at most one active cart.

  • A database-level approach such as a unique constraint or partial unique index is recommended where supported by the chosen schema design.

  • Trainees are not required to implement advanced race-condition handling beyond a reasonable database-backed solution for this course project.

  • Ticket inventory is intentionally treated as unlimited in this backend project.

  • Because inventory is unlimited, stock validation and overselling prevention are not required.

  • During checkout, the minimum required atomic behavior is converting the active cart into an order and preventing further modification of that finalized order.

  • Price snapshotting into the order data is recommended, but the exact checkout internals may be kept simple unless the implementation defines stricter business rules.

Last updated