Skip to content

ngochine/Event-Ticketing-System

 
 

Repository files navigation

Hệ thống bán vé sự kiện (Event Ticketing)

Mô tả

Hệ thống bán vé sự kiện hỗ trợ quản lý và kiểm soát vé cho các sự kiện như concert, hội thảo, workshop. Hệ thống cho phép khách hàng tìm kiếm sự kiện, đặt vé, thanh toán và check-in, đồng thời hỗ trợ ban tổ chức quản lý sự kiện, số lượng vé, doanh thu. Hệ thống giúp tự động hóa quy trình bán vé, hạn chế sai sót, tối ưu quản lý và nâng cao trải nghiệm người dùng.

Thành viên nhóm

MSSV Họ tên Vai trò
2351050165 Bùi Thiên Hương Thảo Nhóm trưởng
2351050189 Hồ Thị Ngọc Trinh Thành viên
2351050049 Lê Thị Mai Hồng Thành viên

Công nghệ sử dụng

  • Backend: Python Django + Django REST Framework
  • Authentication: JWT Authentication
  • Background Tasks: Celery
  • Frontend: React + Vite + Ant Design + TailwindCSS
  • Database: PostgreSQL
  • Message Queue: RabbitMQ
  • Cache: Redis
  • Containerization: Docker + Docker Compose
  • Tunnels: Cloudflare Tunnel + Ngrok
  • CI/CD & Deployment: GitHub Actions + Render

Kiến trúc

Hệ thống được thiết kế dựa trên các mô hình kiến trúc sau:

1. Client - Server Architecture

  • Client: Frontend (ReactJS)
  • Server: Backend (Django REST API)

2. Layered Architecture

  • Presentation Layer: Frontend (ReactJS)
  • Business Logic Layer: Backend (Django)
  • Data Access Layer: Database (PostgreSQL)

3. Broker Architecture (RabbitMQ)

Hệ thống sử dụng RabbitMQ làm message broker kết hợp Celery để xử lý bất đồng bộ.

4. Component-based Architecture (Frontend)

Frontend React được tổ chức theo hướng component-based giúp tăng khả năng tái sử dụng và dễ mở rộng UI

5. MVT Architecture (Backend)

  • Model: quản lý dữ liệu và ORM
  • View: xử lý request/response
  • Template: chủ yếu dùng cho admin hoặc trang hỗ trợ

Sơ đồ C4:

C4-context C4-container C4-component

Cấu trúc thư mục

Software-Architecture-A3-Event-Ticketing-Team5/
│
├── .github/
│   └── workflows/
│       └── docker.yml
│
├── backend/
│   ├── src/
│   │   ├── apps/
│   │   │   ├── evt_event/
│   │   │   ├── evt_oauth/
│   │   │   ├── evt_ticket/
│   │   │   └── evt_transaction/
│   │   │
│   │   ├── config/
│   │   │   ├── settings.py
│   │   │   ├── urls.py
│   │   │   ├── wsgi.py
│   │   │   ├── asgi.py
│   │   │   └── celery.py
│   │   │
│   │   ├── fixtures/
│   │   ├── fonts/
│   │   ├── media/
│   │   ├── staticfiles/
│   │   ├── templates/
│   │   └── manage.py
│   │   └── requirements.txt
│   │
│   ├── .dockerignore
│   ├── Dockerfile
│   ├── Dockerfile.dev
│   ├── setup.sh
│   └── setup.dev.sh
│
├── docs/
│   ├── adrs/
│   ├── api/
│   └── architecture/
│
├── frontend/
│   ├── public/
│   ├── src/
│   │   ├── assets/
│   │   ├── components/
│   │   ├── configs/
│   │   ├── hooks/
│   │   ├── libs/
│   │   ├── pages/
│   │   ├── routers/
│   │   ├── services/
│   │   ├── utils/
│   │   ├── App.css
│   │   ├── App.jsx
│   │   ├── index.css
│   │   └── main.jsx
│   │
│   ├── .dockerignore
│   ├── Dockerfile
│   ├── Dockerfile.dev
│   ├── eslint.config.js
│   ├── index.html
│   ├── nginx.conf
│   ├── package-lock.json
│   ├── package.json
│   ├── postcss.config.js
│   ├── tailwind.config.js
│   └── vite.config.js
│
├── weekly-reports/
│
├── docker-compose.yml
├── docker-compose.dev.yml
├── .env.example
├── .env
├── .gitignore
├── LICENSE
└── README.md

Cài đặt và chạy

Yêu cầu

  • Docker Desktop
  • Git
  • Cloudflare Tunnel
  • Ngrok

Chạy với Docker Compose

1. Clone source code

git clone https://github.com/Thao225/Software-Architecture-A3-Event-Ticketing-Team5.git
cd Software-Architecture-A3-Event-Ticketing-Team5

2. Tạo file .env

cp .env.example .env

Sau đó chỉnh sửa .env theo cấu hình hệ thống.

3. Cấu hình .env

Database (PostgreSQL)

DATABASE_NAME="your_name"
DATABASE_USERNAME="your_username"
DATABASE_PASSWORD="your_password"
DATABASE_HOST="db"
DATABASE_PORT="5432"

Django Secret Key Tạo secret key cho Django:

python3 -c "import secrets; import string; chars = string.ascii_lowercase + string.digits + '!@#$%^&*(-_=+)'; print(''.join(secrets.choice(chars) for _ in range(50)))"

Copy kết quả vào:

DJANGO_SECRET_KEY="your_secret_key"

RabbitMQ + Redis

CELERY_BROKER_URL="amqp://your_user:your_pass@rabbitmq:5672//"
CELERY_RESULT_BACKEND="redis://redis:6379/1"

RABBITMQ_USER="your_user"
RABBITMQ_PASS="your_pass"
REDIS_URL="redis://redis:6379/1"

Super Admin

DJANGO_SUPERUSER_USERNAME="admin"
DJANGO_SUPERUSER_EMAIL="admin@gmail.com"
DJANGO_SUPERUSER_PASSWORD="admin123"

Public URL cho Backend Chạy ngrok cho backend:

ngrok http 8000

Sau đó bạn sẽ nhận được link dạng:

https://xxxxx.ngrok-free.app

hoặc

https://xxxxx.ngrok-free.dev

Copy link này và cập nhật vào .env:

ZALOPAY_CALLBACK_URL="https://xxxxx.ngrok-free.app/api/payment/zalopay/callback/"

Ngoài ra cần thêm domain ngrok vào DJANGO_ALLOWED_HOSTS:

DJANGO_ALLOWED_HOSTS="localhost,127.0.0.1,.ngrok-free.dev,.ngrok-free.app,.trycloudflare.com"

Nếu frontend gọi API backend bằng public URL, chỉnh:

VITE_BASE_URL="https://xxxxx.ngrok-free.app"

Và chỉnh websocket:

VITE_WS_URL="wss://xxxxx.ngrok-free.app/ws"

Public URL cho Frontend Chạy Cloudflare Tunnel cho frontend:

cloudflared tunnel --url http://localhost:5173

Sau đó bạn sẽ nhận được link dạng:

https://xxxxx.trycloudflare.com

Copy link này và cập nhật vào .env:

CORS_ALLOWED_ORIGINS="http://localhost:5173,http://127.0.0.1:5173,https://xxxxx.trycloudflare.com"

Cấu hình Redirect URL sau thanh toán:

PAYMENT_RETURN_URL="https://xxxxx.trycloudflare.com/payment-return"

Cấu hình VNPay

VNP_TMNCODE=""
VNP_HASH_SECRET=""
VNP_URL="https://sandbox.vnpayment.vn/paymentv2/vpcpay.html"
VNP_QUERY_URL=""
VNP_REFUND_URL=""

Cấu hình ZaloPay

ZALOPAY_APP_ID=""
ZALOPAY_KEY1=""
ZALOPAY_KEY2=""
ZALOPAY_CALLBACK_URL="https://xxxxx.ngrok-free.app/api/payment/zalopay/callback/"
ZALOPAY_REFUND_URL="https://sb-openapi.zalopay.vn/v2/refund"

4. Build và chạy Docker Compose

docker compose -f docker-compose.dev.yml up --build -d

Truy cập

Demo

  • Screenshots: (update later)
  • Video demo: (update later)

Tài liệu

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages