Cake_shop

🎂 Sweet Cake Shop - Made with ❤️ using Laravel
Bài tập giữa kỳ - Lập trình Web


📋 THÔNG TIN DỰ ÁN

🎯 Tên bài tập: Website Bán Bánh Kem với Laravel Framework 🔗 Link Repository: https://github.com/nqthanhhh/Cake_shop.git

👤 Thông tin sinh viên:


📌 MÔ TẢ DỰ ÁN

Sweet Cake Shop là một ứng dụng web thương mại điện tử chuyên bán bánh kem được xây dựng bằng Laravel Framework. Dự án cung cấp trải nghiệm mua sắm trực tuyến hoàn chỉnh với giao diện thân thiện người dùng, hệ thống bảo mật cao và quản lý đơn hàng hiệu quả.

🎯 Mục tiêu chính:


PHÂN TÍCH CÁC YÊU CẦU ĐÃ THỰC HIỆN

1. Sử dụng framework Laravel

2. Ít nhất 03 đối tượng

Dự án đã triển khai 9 đối tượng chính:

Model File Path Chức năng
User app/Models/User.php Quản lý người dùng, authentication
Admin app/Models/Admin.php Quản lý tài khoản admin
Product app/Models/Product.php Quản lý sản phẩm bánh kem
Category app/Models/Category.php Phân loại sản phẩm theo danh mục
Cart app/Models/Cart.php Giỏ hàng người dùng
Order app/Models/Order.php Đơn hàng
OrderItem app/Models/OrderItem.php Chi tiết đơn hàng
Review app/Models/Review.php Đánh giá sản phẩm
Contact app/Models/Contact.php Liên hệ từ khách hàng

3. Chức năng định danh và xác thực (Laravel Breeze)

Authentication Controllers:

Tính năng đã triển khai:

// Registration với validation
$request->validate([
    'name' => ['required', 'string', 'max:255'],
    'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class],
    'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);

// Login với session regeneration
$request->authenticate();
$request->session()->regenerate();
return redirect()->route('dashboard');

4. CRUD cho ít nhất 01 đối tượng

CRUD hoàn chỉnh cho Cart (Giỏ hàng):

Operation Method Route Controller Method
Create POST /cart/add CartController@addToCart
Read GET /cart CartController@getCart
Update PUT /cart/update CartController@updateCart
Delete DELETE /cart/{id} CartController@removeFromCart

Code example:

// CREATE - Thêm sản phẩm vào giỏ
public function addToCart(Request $request) {
    $cart = Cart::updateOrCreate(
        ['user_id' => auth()->id(), 'product_id' => $productId],
        ['quantity' => DB::raw("quantity + $quantity")]
    );
}

// UPDATE - Cập nhật số lượng
public function updateCart(Request $request) {
    $cartItem = Cart::where('user_id', auth()->id())
        ->where('product_id', $productId)->first();
    $cartItem->quantity = $quantity;
    $cartItem->save();
}

CRUD cho Order (Đơn hàng):

CRUD cho Product (Admin):

// Tạo sản phẩm mới
public function storeProduct(Request $request) {
    $request->validate([
        'name' => 'required|string|max:255',
        'description' => 'required|string',
        'price' => 'required|numeric|min:1000',
        'image' => 'required|image|mimes:jpeg,png,jpg,gif',
        'category_id' => 'required|integer|exists:categories,id',
        'stock' => 'required|integer|min:0',
    ]);

    $imagePath = $request->file('image')->store('img', 'public');
    Product::create([
        'name' => $request->name,
        'description' => $request->description,
        'price' => $request->price,
        'image' => 'storage/' . $imagePath,
        'category_id' => $request->category_id,
        'stock' => $request->stock,
        'is_featured' => true
    ]);
}

CRUD cho Review (Đánh giá):

// Thêm đánh giá sản phẩm
public function store(Request $request) {
    $request->validate([
        'product_id' => 'required|exists:products,id',
        'rating' => 'required|integer|min:1|max:5',
        'comment' => 'required|string',
    ]);

    Review::create([
        'user_id' => auth()->id(),
        'product_id' => $request->product_id,
        'rating' => $request->rating,
        'comment' => $request->comment,
    ]);
}

5. Các yêu cầu Security

CSRF Protection:

<form method="POST" action="">
    @csrf
    <!-- form fields -->
</form>

Data Validation:

// Trong OrderController.php
$request->validate([
    'customer_name' => 'required|string|max:255',
    'customer_email' => 'required|email|max:255',
    'customer_phone' => 'required|string|max:20',
    'customer_address' => 'required|string|max:500',
    'delivery_date' => 'required|date|after:today',
    'notes' => 'nullable|string|max:1000'
]);

// Trong CartController.php
$request->validate([
    'product_id' => 'required|integer',
    'quantity' => 'required|integer|min:1'
]);

Authentication & Authorization:

// Middleware protection trong routes/web.php
Route::middleware('auth')->group(function () {
    Route::post('/cart/add', [CartController::class, 'addToCart']);
    Route::get('/checkout', [OrderController::class, 'checkout']);
    Route::get('/dashboard', [UserDashboardController::class, 'index']);
});

// Authorization check trong OrderController
if ($order->user_id !== auth()->id()) {
    abort(403, 'Bạn không có quyền xem đơn hàng này.');
}

XSS Protection:


#### **SQL Injection Prevention:**

```php
// Sử dụng Eloquent ORM thay vì raw SQL
Cart::where('user_id', auth()->id())->with('product')->get();
Order::where('id', $orderId)->where('user_id', Auth::id())->firstOrFail();
// Session management
$request->session()->regenerate(); // Trong login
$request->session()->invalidate(); // Trong logout
$request->session()->regenerateToken(); // CSRF protection

6. Eloquent Migration trên Cloud

Database Migrations:

database/migrations/
├── 0001_01_01_000000_create_users_table.php
├── 0001_01_01_000001_create_cache_table.php
├── 0001_01_01_000002_create_jobs_table.php
├── 2025_06_12_061855_create_categories_table.php
├── 2025_06_12_061855_create_products_table.php
├── 2025_06_12_061855_create_orders_table.php
├── 2025_06_12_061856_create_cart_table.php
├── 2025_06_12_061856_create_order_items_table.php
├── 2025_06_12_061856_create_reviews_table.php
└── 2025_06_17_093212_add_detailed_description_to_products_table.php

Seeders với dữ liệu mẫu:

database/seeders/
├── DatabaseSeeder.php
├── CategorySeeder.php
└── ProductSeeder.php

Migration example:

// products table
Schema::create('products', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->text('description');
    $table->decimal('price', 10, 2);
    $table->string('image');
    $table->foreignId('category_id')->constrained()->onDelete('cascade');
    $table->integer('stock')->default(0);
    $table->boolean('is_featured')->default(false);
    $table->boolean('is_active')->default(true);
    $table->timestamps();
});

7. Cập nhật README.md


🛠️ CÔNG NGHỆ SỬ DỤNG

Loại Công nghệ Phiên bản Mô tả
Backend Laravel 12.x PHP Framework chính
Authentication Laravel Breeze 2.3+ Hệ thống xác thực
Database MySQL/SQLite 8.0+ Cơ sở dữ liệu
Frontend Blade Templates - Template engine
CSS Framework TailwindCSS 3.x Styling và responsive
Icons RemixIcon 4.6.0 Bộ icon UI
JavaScript Vanilla JS ES6+ Frontend interactions
File Storage Laravel Storage - Upload và quản lý file
Session Laravel Session - Quản lý phiên
Validation Laravel Validation - Kiểm tra dữ liệu
Security Laravel Security - CSRF, XSS protection

🏗️ KIẾN TRÚC HỆ THỐNG

📊 Sơ đồ kiến trúc tổng quan:

System Architecture

Sơ đồ kiến trúc hệ thống MVC Laravel

🔄 Sơ đồ Flow kiến trúc MVC:

MVC Flow Diagram

Luồng xử lý MVC trong Laravel

🗃️ Database Relationships Diagram:

Database Schema

Sơ đồ quan hệ cơ sở dữ liệu

🔐 Authentication & Authorization Flow:

Authentication Flow

Luồng xác thực và phân quyền

Controllers Architecture:

Frontend Controllers:

Admin Controllers:

Middleware Layer:

Database Schema:

users (id, name, email, password, phone, address, is_admin, timestamps)
admins (id, name, email, password, timestamps)
categories (id, name, description, image, slug, timestamps)
products (id, name, description, detailed_description, price, image, category_id, stock, is_featured, is_active, timestamps)
carts (id, user_id, product_id, quantity, timestamps)
orders (id, user_id, order_number, total_amount, status, payment_method, payment_status, customer_*, delivery_date, delivery_time, timestamps)
order_items (id, order_id, product_name, product_price, product_image, quantity, total_price, timestamps)
reviews (id, user_id, product_id, rating, comment, timestamps)
contacts (id, name, email, phone, message, timestamps)

🚀 TÍNH NĂNG CHÍNH

Frontend Features:

Admin Panel Features:

Backend Features:

Security Features:

Admin Authorization Example:

// Config auth guards
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
],

// Admin middleware protection
Route::middleware('auth:admin')->group(function () {
    Route::get('/dashboard', [AdminController::class, 'dashboard']);
    Route::get('/users', [AdminController::class, 'users']);
    Route::get('/orders', [AdminController::class, 'orders']);
});

// Admin login controller
public function login(Request $request) {
    if (Auth::guard('admin')->attempt($credentials)) {
        return redirect('/admin/dashboard');
    }
    return back()->with('error', 'Sai thông tin đăng nhập admin!');
}

⚙️ CÀI ĐẶT VÀ CHẠY DỰ ÁN

Add commentMore actions

Yêu cầu hệ thống:

Các bước cài đặt:

1. Clone repository:

git clone https://github.com/nqthanhhh/Cake_shop.git
cd Cake_Shop

2. Cài đặt dependencies:

# Install PHP dependencies
composer install

# Install Node dependencies
npm install

3. Cấu hình environment:

# Copy file environment
cp .env.example .env

# Generate application key
php artisan key:generate

4. Cấu hình database:

# Chỉnh sửa .env file
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=cake_shop
DB_USERNAME=root
DB_PASSWORD=your_password

5. Migration và Seeding:

# Tạo database structure
php artisan migrate

# Seed dữ liệu mẫu
php artisan db:seed

6. Build frontend assets:

# Development
npm run dev

# Production
npm run build

7. Chạy server:

# Start development server
php artisan serve

# Application sẽ chạy tại: http://localhost:8000

Add comment —

🔗 API ROUTES

Authentication Routes:

GET  /login           - Trang đăng nhập user
POST /login           - Xử  đăng nhập user
GET  /register        - Trang đăng 
POST /register        - Xử  đăng 
POST /logout          - Đăng xuất user
GET  /forgot-password - Quên mật khẩu
POST /reset-password  - Reset mật khẩu

Admin Routes:

GET  /admin/login           - Trang đăng nhập admin
POST /admin/login           - Xử  đăng nhập admin
POST /admin/logout          - Đăng xuất admin
GET  /admin/dashboard       - Dashboard admin
GET  /admin/users           - Quản  user
GET  /admin/orders          - Quản  đơn hàng
GET  /admin/products        - Quản  sản phẩm
GET  /admin/contacts        - Quản  liên hệ

Cart Management (Auth Required):

POST   /cart/add         - Thêm sản phẩm vào giỏ
GET    /cart             - Xem giỏ hàng
PUT    /cart/update      - Cập nhật số lượng
DELETE /cart/{id}        - Xóa sản phẩm
POST   /cart/delete-multiple - Xóa nhiều sản phẩm
GET    /cart/count       - Đếm số sản phẩm

Order Management (Auth Required):

GET  /checkout           - Trang thanh toán
POST /order              - Tạo đơn hàng
GET  /order/success/{id} - Trang thành công
GET  /order/{id}         - Chi tiết đơn hàng
GET  /order-tracking     - Theo dõi đơn hàng
POST /order/{id}/cancel  - Hủy đơn hàng

Review & Contact Routes:

POST /reviews            - Thêm đánh giá sản phẩm
POST /contact            - Gửi liên hệ

Public Routes:

GET /                    - Trang chủ
GET /product/{id}        - Chi tiết sản phẩm
GET /category/{slug}     - Sản phẩm theo danh mục

🚀 DEPLOYMENT

Production Setup:

# Optimize for production
php artisan optimize
php artisan config:cache
php artisan route:cache
php artisan view:cache

# Environment setup
APP_ENV=production
APP_DEBUG=false

📊 TỔNG KẾT VÀ ĐÁNH GIÁ DỰ ÁN

✅ Hoàn thành yêu cầu bài tập:

Yêu cầu Trạng thái Mô tả chi tiết
Laravel Framework ✅ HOÀN THÀNH Laravel 12.x với cấu trúc MVC hoàn chỉnh
03+ Objects ✅ VƯỢT MỨC 9 Models: User, Admin, Product, Category, Cart, Order, OrderItem, Review, Contact
Authentication ✅ HOÀN THÀNH Laravel Breeze + Admin Guard riêng biệt
CRUD Operations ✅ VƯỢT MỨC Cart, Order, Product, Review với đầy đủ CRUD
Security Features ✅ HOÀN THÀNH CSRF, XSS, Validation, Auth, SQL Injection Prevention
Eloquent Migration ✅ HOÀN THÀNH 12+ migrations với relationships phức tạp
README Documentation ✅ HOÀN THÀNH Chi tiết và comprehensive với code examples

🌟 Điểm nổi bật của dự án:

1. Kiến trúc hệ thống:

2. Tính năng phong phú:

3. Chất lượng code:

4. User Experience:

📈 Số liệu thống kê chi tiết:

Thành phần Số lượng Mô tả chi tiết
Models 9 User, Admin, Product, Category, Cart, Order, OrderItem, Review, Contact
Controllers 15+ Frontend + Admin + Auth + Specialized controllers
Migrations 15+ Bao gồm cả core và custom migrations
Seeders 4 DatabaseSeeder, AdminSeeder, CategorySeeder, ProductSeeder
Routes 40+ Public, Auth, Admin routes với middleware protection
Views 30+ Frontend, Admin, Auth templates với layouts
Middleware 6+ Auth, CSRF, Admin, Encrypt, Guest, Verified
Guards 2 Web (users) và Admin (admins) authentication guards
Validation Rules 20+ Custom validation cho forms và API endpoints
Database Tables 12+ Normalized schema với foreign key constraints

🔄 System Flow Diagrams:

E-commerce Purchase Flow:

Purchase Flow

Quy trình mua hàng từ browse đến checkout

Admin Management Flow:

Admin Management Flow

Luồng quản lý admin panel

🚀 Advanced Technical Implementation:

Real-time Cart Count Updates:

// Frontend JavaScript - Real-time cart updates
function updateCartCount() {
    fetch("/cart/count")
        .then((response) => response.json())
        .then((data) => {
            document.getElementById("cartCount").textContent = data.count;
        });
}

// Auto-update after cart operations
document.addEventListener("cartUpdated", updateCartCount);

Dynamic Address Selection:

// Location API integration
async function loadDistricts(provinceId) {
    const response = await fetch(`/api/districts/${provinceId}`);
    const districts = await response.json();
    updateSelectOptions("district", districts);
}

async function loadWards(districtId) {
    const response = await fetch(`/api/wards/${districtId}`);
    const wards = await response.json();
    updateSelectOptions("ward", wards);
}

Order Status Tracking:

// Order tracking với timeline
public function getOrderTimeline()
{
    $timeline = [];

    $timeline[] = [
        'status' => 'pending',
        'label' => 'Đơn hàng đã được tạo',
        'timestamp' => $this->created_at,
        'completed' => true
    ];

    if ($this->status !== 'pending') {
        $timeline[] = [
            'status' => 'confirmed',
            'label' => 'Đơn hàng đã được xác nhận',
            'timestamp' => $this->updated_at,
            'completed' => in_array($this->status, ['confirmed', 'preparing', 'ready', 'delivered'])
        ];
    }

    // Add more timeline steps...

    return $timeline;
}

🔮 Khả năng mở rộng:

Tính năng có thể bổ sung:


📌 MỘT SỐ HÌNH ẢNH DỰ ÁN


🎨 GIAO DIỆN NGƯỜI DÙNG

Trang chủ và Navigation:

Navigation Bar

Thanh navigation với menu danh mục

Category

Danh mục sản phẩm

Featured Products

Sản phẩm nổi bật

Trang chi tiết sản phẩm:

Product Info

Thông tin và mô tả sản phẩm

Review Form

Form thêm đánh giá


🛒 HỆ THỐNG GIỎ HÀNG & THANH TOÁN

Giỏ hàng:

Cart Items

Giỏ hàng trống

Cart Summary

Danh sách sản phẩm

Trang thanh toán:

checkout

Trang checkout với form thông tin giao hàng

checkout-1

Trang dặt hàng thành công


👤 AUTHENTICATION & USER DASHBOARD

Đăng nhập & Đăng ký:

Login Form

Form đăng nhập người dùng

Register Form

Form đăng ký tài khoản mới

Dashboard người dùng:

User Dashboard

Dashboard cá nhân với thông tin tài khoản

Order History

Theo dõi đơn hàng

Profile Settings

Cài đặt thông tin cá nhân

Order Details

Chi tiết đơn hàng


👨‍💼 ADMIN PANEL

Admin Dashboard:

Admin Dashboard

Dashboard admin với thống kê tổng quan

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

Admin Products List

Danh sách sản phẩm trong admin panel

Add Product Form

Form thêm sản phẩm mới

Check Product Form

Form chỉnh sửa sản phẩm

Quản lý đơn hàng:

Admin Order Details

Chi tiết đơn hàng trong admin

Order List

Danh sát đơn hàng

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

Users Management

Danh sách người dùng và quản lý tài khoản

Users

Chi tiết user


📞 CONTACT & SUPPORT

Contact

Liên hệ với form gửi tin nhắn


📞 THÔNG TIN LIÊN HỆ & HỖ TRỢ

👤 Thông tin Developer:

Tên: Nguyễn Quốc Thành MSSV: 23010038 Lớp: Lập trình Web - Bài tập giữa kỳ 📧 Email: 23010038@st.phenikaa-uni.edu.vn 🔗 GitHub: https://github.com/nqthanhhh 📱 Phone: 0862398217

📚 Tài liệu tham khảo:

🆘 Hỗ trợ và báo lỗi:

Nếu bạn gặp vấn đề khi chạy dự án, vui lòng:

  1. Kiểm tra lại các bước cài đặt trong README
  2. Đảm bảo đã cài đặt đúng version PHP, Composer, Node.js
  3. Kiểm tra file .env đã được cấu hình đúng
  4. Liên hệ qua email hoặc GitHub Issues

Made with ❤️ in Vietnam 🇻🇳


🎂 Sweet Cake Shop - Where Every Bite Tells a Story 🎂
© 2025 Nguyễn Quốc Thành. All rights reserved.