- PHP
>= 8.2 - Composer
- Node.js và npm
- MySQL đang chạy local
Nếu Windows báo
php : The term 'php' is not recognized, hãy đóng terminal hiện tại rồi mở terminal mới để PATH được cập nhật. Kiểm tra lại bằngphp -v.
- Cài thư viện PHP:
composer installNeu vua them realtime WebSocket/Reverb hoac gap loi There are no commands defined in the "reverb" namespace, hay cap nhat lock file va cai package Reverb:
composer update laravel/reverb
php artisan package:discover
php artisan optimize:clear- Cài thư viện frontend:
npm install- Tạo file môi trường:
cp .env.example .envTrên Windows PowerShell có thể dùng:
Copy-Item .env.example .env- Cấu hình MySQL trong
.env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=ticketrush
DB_USERNAME=root
DB_PASSWORD=Nếu MySQL local có mật khẩu, điền vào DB_PASSWORD.
- Tạo database MySQL:
CREATE DATABASE ticketrush CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;Có thể chạy bằng terminal:
mysql -uroot -p -e "CREATE DATABASE IF NOT EXISTS ticketrush CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"- Tạo app key:
php artisan key:generate- Chạy migration và seed dữ liệu mẫu:
php artisan migrate --seed- Chạy backend local:
php artisan serveBackend mặc định chạy tại:
http://127.0.0.1:8000
Endpoint test nhanh:
GET http://127.0.0.1:8000/api/events
Nếu cổng 8000 đã được dùng:
php artisan serve --port=8001Realtime waiting room va seat map dung Laravel Reverb. Sau khi da cai package bang composer update laravel/reverb, dam bao .env co cac bien:
BROADCAST_CONNECTION=reverb
REVERB_APP_ID=ticketrush-local
REVERB_APP_KEY=ticketrush-local-key
REVERB_APP_SECRET=ticketrush-local-secret
REVERB_HOST=127.0.0.1
REVERB_PORT=8080
REVERB_SCHEME=http
REVERB_SERVER_HOST=0.0.0.0
REVERB_SERVER_PORT=8080
REVERB_ALLOWED_ORIGINS=*Chay Reverb:
php artisan reverb:startNeu command van chua co, chay lai:
composer update laravel/reverb
php artisan package:discover
php artisan optimize:clear
php artisan list reverbNếu cần build assets:
npm run buildTất cả tài khoản seed mặc định đều dùng mật khẩu: password.
| Role | |
|---|---|
| Admin | admin@ticketrush.com |
| Organizer | organizer.music@ticketrush.com |
| Organizer | organizer.sport@ticketrush.com |
| Customer | customer@ticketrush.com |
| Customer | customer2@ticketrush.com |
Các API bên dưới yêu cầu đăng nhập bằng Sanctum token và user có role admin.
| Method | Endpoint | Mục đích |
|---|---|---|
GET |
/api/admin/events |
Danh sách event cho admin |
GET |
/api/admin/events/pending |
Danh sách event đang chờ duyệt |
GET |
/api/admin/events/{event} |
Xem chi tiết event |
PUT |
/api/admin/events/{event} |
Sửa thông tin event được phép |
PATCH |
/api/admin/events/{event}/review |
Duyệt hoặc từ chối pending event |
PATCH |
/api/admin/events/{event}/homepage |
Cập nhật hiển thị trang chính |
GET /api/admin/events hỗ trợ các query params:
status:pending,approved,rejectedcategory: category của eventis_featured:truehoặcfalseis_special:truehoặcfalsesearch: tìm theo tên event hoặc venueper_page: số item mỗi trang, tối đa100
PATCH /api/admin/events/{event}/review
Content-Type: application/json
{
"status": "approved"
}status chỉ nhận approved hoặc rejected. Endpoint này chỉ xử lý event đang ở trạng thái pending.
PUT /api/admin/events/{event} cho phép admin sửa các thông tin như tên, mô tả, category, ảnh, venue, thời gian diễn ra, thời gian bán vé, status và thứ tự hiển thị.
Admin không được sửa các nhóm thông tin sau qua endpoint này:
- Thông tin ngân hàng:
bank_name,bank_account_number,bank_account_name - Bản đồ event:
display_type,master_width,master_length - Zones, số zones, giá zones
PATCH /api/admin/events/{event}/homepage
Content-Type: application/json
{
"is_featured": true,
"is_special": true,
"sort_order": 5
}Các field đều optional, nhưng nếu gửi lên thì phải đúng kiểu dữ liệu.
Các API bên dưới yêu cầu đăng nhập bằng Sanctum token và user có role customer.
| Method | Endpoint | Mục đích |
|---|---|---|
POST |
/api/customer/events/{event}/seats/lock |
Lock các ghế customer vừa chọn trong 10 phút |
DELETE |
/api/customer/events/{event}/seats/lock |
Nhả các ghế customer đã lock |
POST |
/api/customer/events/{event}/orders |
Checkout các ghế đã lock và tạo vé |
GET |
/api/customer/orders |
Xem danh sách order của tôi |
GET |
/api/customer/tickets |
Xem danh sách vé của tôi |
GET /api/customer/tickets hỗ trợ filter status=valid|used|expired|void và sort bằng sort_by=issued_at|event_starts_at|created_at|status, sort_direction=asc|desc.