ShopFlow - E-Commerce Shopping Platform

ShopFlow is a Jakarta EE web application that demonstrates a full e-commerce workflow: product browsing, filtering, cart management, checkout, order tracking, REST APIs, and JSF admin dashboards.

Tech Stack

  • Java 11
  • Maven (WAR packaging)
  • Apache Tomcat 10
  • Jakarta Servlet / JSP / JSTL
  • Jakarta Faces (JSF)
  • Jakarta REST (JAX-RS, Jersey)
  • Jakarta Persistence (JPA, Hibernate)
  • H2 (default) + MySQL driver available
  • Bootstrap 5 + custom CSS

Project Structure

src/main/java/com/yourname/ecommerce/
├── config
├── dto
├── exception
├── jsf
├── model
├── repository
├── resource
├── service
└── servlet

src/main/resources/
├── META-INF/persistence.xml
└── db/sample-data.sql

src/main/webapp/
├── WEB-INF/
│   ├── beans.xml
│   ├── web.xml
│   └── views/
├── admin/
├── assets/
└── account.xhtml

Run Locally

  1. Build:
mvn clean package
  1. Install/start Tomcat 10 (first time):
brew install tomcat@10
brew services start tomcat@10
  1. Deploy as ROOT:
cp target/ECommerceShoppingPlatform.war "$(brew --prefix tomcat@10)/libexec/webapps/ROOT.war"
brew services restart tomcat@10
  1. Open:
  • Home: http://localhost:8080/
  • Products: http://localhost:8080/products
  • Cart: http://localhost:8080/cart
  • Account: http://localhost:8080/account.xhtml
  • Admin Products: http://localhost:8080/admin/products.xhtml
  • Admin Orders: http://localhost:8080/admin/orders.xhtml

If deployed without ROOT.war, use context path: http://localhost:8080/ECommerceShoppingPlatform/...

REST API Endpoints

MethodEndpointDescription
GET/api/productsList products with filters and pagination
GET/api/products/{id}Get product details with reviews
GET/api/categoriesList categories
GET/api/cartGet session cart
POST/api/cartAdd item to cart
DELETE/api/cart/{itemId}Remove item from cart
POST/api/ordersCreate order from cart
GET/api/orders/{id}Get order details
GET/api/reviewsList reviews (optional productId)

Quick API Test (cURL)

curl "http://localhost:8080/api/products?page=1&size=5"

curl -X POST "http://localhost:8080/api/cart" \
  -H "Content-Type: application/json" \
  -d '{"productId":1,"quantity":2}'

curl -X POST "http://localhost:8080/api/orders" \
  -H "Content-Type: application/json" \
  -d '{"userId":"guest-user","shippingAddress":"123 Main St, City"}'

Notes

  • Default database: H2 (jdbc:h2:~/ecommerce_db;AUTO_SERVER=TRUE)
  • Seed data is auto-initialized on startup when tables are empty.
  • Extra docs:
    • API_DOCS.md
    • ADMIN_GUIDE.md
    • postman/ECommerceShoppingPlatform.postman_collection.json
    • postman/ECommerceShoppingPlatform.postman_environment.json