0

[Java Backend Zero to Hello] [Phase 8] PHASE 8: PROJECT THỰC TẾ CUỐI KHÓA

📚 Series: Java Backend Zero to Hello 📂 Phân đoạn: Phase 8: Project thực tế 📖 Nội dung: PHASE 8: PROJECT THỰC TẾ CUỐI KHÓA 💡 Khóa học lập trình Backend Java & Spring Boot chuẩn doanh nghiệp từ con số 0.


PHASE 8: PROJECT THỰC TẾ CUỐI KHÓA

Thời gian: 4-6 tuần | Mục tiêu: Xây dựng sản phẩm hoàn chỉnh, đưa vào portfolio


ĐỀ BÀI: HỆ THỐNG E-COMMERCE BACKEND

Xây dựng backend cho hệ thống thương mại điện tử hoàn chỉnh với đầy đủ tính năng thực tế.


1. TỔNG QUAN DỰ ÁN

1.1 Mô tả

Hệ thống backend cho website thương mại điện tử, hỗ trợ:

  • Quản lý sản phẩm, danh mục
  • Giỏ hàng, đặt hàng, thanh toán
  • Quản lý người dùng với phân quyền
  • Upload ảnh sản phẩm
  • Thống kê, báo cáo
  • API documentation

1.2 Tech Stack

  • Backend: Java 17, Spring Boot 3.x
  • Database: PostgreSQL 16
  • Cache: Redis 7
  • Security: Spring Security + JWT
  • Build: Maven
  • Container: Docker, Docker Compose
  • CI/CD: GitHub Actions
  • Documentation: OpenAPI/Swagger
  • Testing: JUnit 5, Mockito, Testcontainers

2. TÍNH NĂNG CHI TIẾT

2.1 Quản lý người dùng

  • [ ] Đăng ký, đăng nhập (JWT)
  • [ ] Refresh token
  • [ ] Quên mật khẩu (email)
  • [ ] Phân quyền: ADMIN, CUSTOMER
  • [ ] Quản lý profile
  • [ ] Upload avatar

2.2 Quản lý sản phẩm

  • [ ] CRUD sản phẩm (Admin)
  • [ ] Quản lý danh mục (phân cấp)
  • [ ] Upload nhiều ảnh sản phẩm
  • [ ] Tìm kiếm, filter, sort
  • [ ] Phân trang
  • [ ] Quản lý tồn kho

2.3 Giỏ hàng & Đặt hàng

  • [ ] Thêm/sửa/xóa giỏ hàng
  • [ ] Đặt hàng
  • [ ] Quản lý trạng thái đơn hàng
  • [ ] Lịch sử đơn hàng
  • [ ] Hủy đơn hàng

2.4 Thanh toán

  • [ ] Tích hợp payment gateway (mock)
  • [ ] Nhiều phương thức: COD, Banking, MoMo
  • [ ] Lịch sử thanh toán

2.5 Thống kê & Báo cáo (Admin)

  • [ ] Doanh thu theo ngày/tháng
  • [ ] Sản phẩm bán chạy
  • [ ] Khách hàng VIP
  • [ ] Dashboard

2.6 Khác

  • [ ] Email notification
  • [ ] Logging
  • [ ] API documentation
  • [ ] Health check
  • [ ] Rate limiting

3. CẤU TRÚC PROJECT

ecommerce-backend/
├── src/
│   ├── main/
│   │   ├── java/com/example/ecommerce/
│   │   │   ├── EcommerceApplication.java
│   │   │   ├── config/
│   │   │   │   ├── SecurityConfig.java
│   │   │   │   ├── RedisConfig.java
│   │   │   │   ├── OpenApiConfig.java
│   │   │   │   └── CorsConfig.java
│   │   │   ├── common/
│   │   │   │   ├── exception/
│   │   │   │   ├── response/
│   │   │   │   └── util/
│   │   │   ├── security/
│   │   │   │   ├── JwtService.java
│   │   │   │   ├── JwtAuthenticationFilter.java
│   │   │   │   └── CustomUserDetailsService.java
│   │   │   ├── user/
│   │   │   │   ├── controller/
│   │   │   │   ├── service/
│   │   │   │   ├── repository/
│   │   │   │   ├── entity/
│   │   │   │   └── dto/
│   │   │   ├── product/
│   │   │   │   ├── controller/
│   │   │   │   ├── service/
│   │   │   │   ├── repository/
│   │   │   │   ├── entity/
│   │   │   │   └── dto/
│   │   │   ├── order/
│   │   │   │   ├── controller/
│   │   │   │   ├── service/
│   │   │   │   ├── repository/
│   │   │   │   ├── entity/
│   │   │   │   └── dto/
│   │   │   ├── payment/
│   │   │   ├── cart/
│   │   │   └── notification/
│   │   └── resources/
│   │       ├── application.yml
│   │       ├── application-dev.yml
│   │       ├── application-prod.yml
│   │       └── logback-spring.xml
│   └── test/
│       └── java/com/example/ecommerce/
├── docker-compose.yml
├── Dockerfile
├── pom.xml
├── README.md
└── .github/
    └── workflows/
        └── ci.yml

4. DATABASE SCHEMA

-- Users
CREATE TABLE users (
    id BIGSERIAL PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    full_name VARCHAR(100),
    phone VARCHAR(20),
    avatar_url VARCHAR(500),
    role VARCHAR(20) NOT NULL DEFAULT 'CUSTOMER',
    enabled BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Categories
CREATE TABLE categories (
    id BIGSERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    slug VARCHAR(100) UNIQUE,
    description TEXT,
    parent_id BIGINT REFERENCES categories(id),
    image_url VARCHAR(500),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Products
CREATE TABLE products (
    id BIGSERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    slug VARCHAR(255) UNIQUE,
    description TEXT,
    price DECIMAL(12,2) NOT NULL,
    sale_price DECIMAL(12,2),
    stock INT DEFAULT 0,
    sku VARCHAR(50) UNIQUE,
    category_id BIGINT REFERENCES categories(id),
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Product Images
CREATE TABLE product_images (
    id BIGSERIAL PRIMARY KEY,
    product_id BIGINT REFERENCES products(id) ON DELETE CASCADE,
    image_url VARCHAR(500) NOT NULL,
    is_primary BOOLEAN DEFAULT FALSE,
    sort_order INT DEFAULT 0
);

-- Carts
CREATE TABLE carts (
    id BIGSERIAL PRIMARY KEY,
    user_id BIGINT UNIQUE REFERENCES users(id),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Cart Items
CREATE TABLE cart_items (
    id BIGSERIAL PRIMARY KEY,
    cart_id BIGINT REFERENCES carts(id) ON DELETE CASCADE,
    product_id BIGINT REFERENCES products(id),
    quantity INT NOT NULL DEFAULT 1,
    UNIQUE(cart_id, product_id)
);

-- Orders
CREATE TABLE orders (
    id BIGSERIAL PRIMARY KEY,
    order_number VARCHAR(50) UNIQUE NOT NULL,
    user_id BIGINT REFERENCES users(id),
    status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
    total_amount DECIMAL(12,2) NOT NULL,
    shipping_fee DECIMAL(12,2) DEFAULT 0,
    discount DECIMAL(12,2) DEFAULT 0,
    final_amount DECIMAL(12,2) NOT NULL,
    shipping_address TEXT,
    shipping_phone VARCHAR(20),
    shipping_name VARCHAR(100),
    note TEXT,
    payment_method VARCHAR(20),
    payment_status VARCHAR(20) DEFAULT 'PENDING',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Order Items
CREATE TABLE order_items (
    id BIGSERIAL PRIMARY KEY,
    order_id BIGINT REFERENCES orders(id) ON DELETE CASCADE,
    product_id BIGINT REFERENCES products(id),
    product_name VARCHAR(255),
    product_price DECIMAL(12,2),
    quantity INT NOT NULL,
    subtotal DECIMAL(12,2) NOT NULL
);

-- Payments
CREATE TABLE payments (
    id BIGSERIAL PRIMARY KEY,
    order_id BIGINT REFERENCES orders(id),
    amount DECIMAL(12,2) NOT NULL,
    method VARCHAR(20) NOT NULL,
    status VARCHAR(20) NOT NULL,
    transaction_id VARCHAR(100),
    paid_at TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Indexes
CREATE INDEX idx_products_category ON products(category_id);
CREATE INDEX idx_products_active ON products(is_active);
CREATE INDEX idx_orders_user ON orders(user_id);
CREATE INDEX idx_orders_status ON orders(status);
CREATE INDEX idx_orders_created ON orders(created_at);

5. API ENDPOINTS

5.1 Authentication

POST   /api/auth/register
POST   /api/auth/login
POST   /api/auth/refresh-token
POST   /api/auth/forgot-password
POST   /api/auth/reset-password

5.2 Users

GET    /api/users/me
PUT    /api/users/me
PUT    /api/users/me/avatar
PUT    /api/users/me/password
GET    /api/users              # Admin
GET    /api/users/{id}         # Admin
PUT    /api/users/{id}         # Admin
DELETE /api/users/{id}         # Admin

5.3 Categories

GET    /api/categories
GET    /api/categories/{id}
GET    /api/categories/{id}/subcategories
POST   /api/categories         # Admin
PUT    /api/categories/{id}    # Admin
DELETE /api/categories/{id}    # Admin

5.4 Products

GET    /api/products
GET    /api/products/{id}
GET    /api/products/slug/{slug}
GET    /api/products/search?q=...
POST   /api/products           # Admin
PUT    /api/products/{id}      # Admin
DELETE /api/products/{id}      # Admin
POST   /api/products/{id}/images  # Admin
DELETE /api/products/{id}/images/{imageId}  # Admin

5.5 Cart

GET    /api/cart
POST   /api/cart/items
PUT    /api/cart/items/{productId}
DELETE /api/cart/items/{productId}
DELETE /api/cart/items

5.6 Orders

POST   /api/orders
GET    /api/orders/me
GET    /api/orders/me/{id}
PATCH  /api/orders/me/{id}/cancel
GET    /api/orders             # Admin
GET    /api/orders/{id}        # Admin
PATCH  /api/orders/{id}/status # Admin

5.7 Payments

POST   /api/payments
GET    /api/payments/me
GET    /api/payments/{id}
POST   /api/payments/webhook

5.8 Statistics (Admin)

GET    /api/admin/dashboard
GET    /api/admin/revenue?from=...&to=...
GET    /api/admin/best-selling-products
GET    /api/admin/top-customers

6. MILESTONES

Milestone 1: Setup & Authentication (Tuần 1)

  • [ ] Setup project Spring Boot
  • [ ] Cấu hình database, Redis
  • [ ] Implement JWT authentication
  • [ ] User CRUD cơ bản
  • [ ] Test authentication flow

Milestone 2: Product & Category (Tuần 2)

  • [ ] Category CRUD
  • [ ] Product CRUD
  • [ ] Upload ảnh
  • [ ] Search, filter, pagination
  • [ ] Test product APIs

Milestone 3: Cart & Order (Tuần 3)

  • [ ] Cart management
  • [ ] Order creation
  • [ ] Order status management
  • [ ] Payment integration (mock)
  • [ ] Test order flow

Milestone 4: Advanced Features (Tuần 4)

  • [ ] Email notification
  • [ ] Statistics & reports
  • [ ] Caching với Redis
  • [ ] Rate limiting
  • [ ] Performance optimization

Milestone 5: DevOps & Polish (Tuần 5-6)

  • [ ] Docker & Docker Compose
  • [ ] CI/CD với GitHub Actions
  • [ ] API documentation
  • [ ] Logging & monitoring
  • [ ] Deploy lên cloud
  • [ ] Final testing

7. TIÊU CHÍ ĐÁNH GIÁ

7.1 Chức năng (40%)

  • Đầy đủ các tính năng theo yêu cầu
  • Xử lý đúng các edge cases
  • Validation đầy đủ

7.2 Code Quality (30%)

  • Clean Code
  • SOLID principles
  • Design patterns phù hợp
  • Comment đầy đủ

7.3 Testing (15%)

  • Unit test coverage > 70%
  • Integration test cho API chính
  • Test edge cases

7.4 DevOps (15%)

  • Docker, Docker Compose
  • CI/CD pipeline
  • Deploy thành công
  • Monitoring

8. TÀI LIỆU CẦN CÓ

  • [ ] README.md với hướng dẫn setup
  • [ ] API documentation (Swagger)
  • [ ] Architecture diagram
  • [ ] Database schema documentation
  • [ ] Deployment guide

9. BONUS (NÂNG CAO)

  • [ ] GraphQL API
  • [ ] WebSocket cho real-time notification
  • [ ] Elasticsearch cho search
  • [ ] Microservices với Spring Cloud
  • [ ] Kubernetes deployment
  • [ ] Performance testing với JMeter

10. NỘP BÀI

Mỗi học viên cần nộp:

  1. Source code trên GitHub
  2. README đầy đủ
  3. Demo link (nếu deploy)
  4. Video demo (5-10 phút)
  5. Báo cáo tổng kết

Chúc bạn hoàn thành project thành công!


🧭 Điều hướng bài học

⭐ Hãy bookmark (clip) lại series để tiện theo dõi các bài học tiếp theo nhé!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí