# Zalo Taxi Backend V6 — nâng cấp từ V5 ổn định

Bản này được rebase từ backend V5 ổn định, không dựa trên bản V6 thử nghiệm trước.

## Nâng cấp database
1. Backup database hiện tại.
2. Chạy duy nhất file `database/upgrade_v6.sql`.
3. Không import lại `schema.sql` nếu đang nâng từ V5 có dữ liệu.

Migration V6 chỉ thêm/mở rộng:
- `news_posts`: tin tức / chính sách.
- `share_links`: mã chia sẻ chuyến.
- `notification_campaigns`: lịch sử gửi thông báo admin.
- thêm slot banner: `RIDE_DETAIL_TOP`, `CREATE_TOP`, `NEWS_TOP`.
- cài đặt deeplink chia sẻ chuyến.

## Upload ảnh / banner
`UploadService` V6:
- tự tạo thư mục con khi upload;
- kiểm tra MIME thật của JPG/PNG/WEBP/GIF;
- thông báo rõ lỗi PHP upload, dung lượng, quyền ghi;
- có `/api/admin/upload-status` để Admin Mini App kiểm tra trạng thái upload;
- ảnh chuyến lưu private, banner/logo/news lưu public.

Mặc định:
- public: `public/uploads`
- private: `storage/private`

Nếu hosting cho PHP quyền ghi ở thư mục project thì không cần tạo thư mục con bằng tay.

## Chia sẻ chuyến
Backend tạo slug ngẫu nhiên 12 ký tự và giữ short-link fallback `/s/{slug}`.
Mini App V6 dùng API `getShareableLink` của Zalo để xin link chia sẻ thật và truyền `share={slug}` vào Mini App. Người nhận link được điều hướng tới đúng chuyến; nếu chưa đăng nhập, sau đăng nhập vẫn quay lại đúng chuyến.

## Tin tức
Quản lý được ở cả Web Admin và Admin trong Mini App:
- thêm / sửa / xóa;
- ảnh bìa;
- DRAFT / PUBLISHED / HIDDEN;
- Tin tức / Chính sách / Khuyến mãi / Thông báo;
- thống kê lượt xem.

## Gửi thông báo
Admin có thể gửi thông báo nội bộ:
- toàn bộ user;
- một user;
- nhiều User ID;
- gắn `action_url` như `/rides/123` hoặc `/news/...`.

Đây là thông báo trong hệ thống Mini App. Push notification ngoài ứng dụng Zalo/OA là luồng riêng và phụ thuộc quyền/chính sách OA của Zalo.

## Web Admin
Web Admin V6 có giao diện xanh cobalt, dashboard mới, quản lý chuyến/ảnh minh chứng, logo/banner, tin tức, broadcast, pricing, user, xác minh, tranh chấp, hoa hồng và audit log.

## Triển khai backend
Giữ nguyên `.env` V5 đang chạy. Upload source V6 đè source ứng dụng nhưng không xóa dữ liệu/upload cũ. Document root vẫn trỏ tới thư mục `public` như V5.
