5.9 KiB
5.9 KiB
Tài liệu Kiến trúc Hệ thống 3D Tours
Tài liệu này tổng hợp toàn bộ cấu trúc hệ thống phục vụ quá trình refactor dự án.
1. Mô hình Dữ liệu (Database Schema - MongoDB)
User (Người dùng)
username: String (Unique)email: String (Unique)password: String (Hashed)role: String ['admin', 'Chủ sở hữu', 'editor', 'moderator', 'Thành viên']fullName: StringavatarUrl: StringagreedToRules: Boolean
Asset (Tệp tin/Phương tiện)
filePath: String (Đường dẫn vật lý)fileSize: Number (Bytes)uploadedBy: ObjectId (Ref: User)coordinates: Object {lat: Number,lng: Number } (GPS từ EXIF)createdAt: Date
Scene (Cảnh 360)
name/title: Stringdescription: StringassetId: ObjectId (Ref: Asset)scene_url: Stringgps: Object {lat: Number,lng: Number }createdBy: ObjectId (Ref: User)privacy: String ['public', 'private', 'member', 'shared']status: String ['processing', 'completed', 'failed']shareToken: String (Dùng cho link truy cập nhanh)shareTokenExpires: DatesharedWith: Array [ObjectId (Ref: User)]sharedEmails: Array [String]views: NumberviewHistory: Array [ {date: Date,count: Number } ]
Hotspot (Điểm điều hướng)
parent_scene_id: ObjectId (Ref: Scene)target_scene_id: ObjectId (Ref: Scene)title: Stringdescription: Stringcoordinates: Object {yaw: Number,pitch: Number }is_auto_return: Boolean (Tự động tạo link quay lại)
Setting (Cấu hình hệ thống)
timezone: String (Mặc định: 'Asia/Ho_Chi_Minh')language: String (Mặc định: 'vi')
2. Danh sách API Endpoints
Quản trị hệ thống (Admin Only)
POST /api/admin/backup: Xuất toàn bộ DB và Uploads (Zip)POST /api/admin/restore: Khôi phục hệ thống từ file ZipGET /api/admin/maintenance/stray-files: Tìm file rác (không có trong DB)POST /api/admin/maintenance/cleanup: Dọn dẹp dữ liệu mồ côiGET /api/admin/users: Quản lý danh sách người dùng (Phân trang)PUT /api/admin/users/:id: Cập nhật User (Quyền, Password...)DELETE /api/admin/users/:id: Xóa User và dọn dẹp data liên quan
Cảnh 3D (Scenes)
POST /api/scenes: Tạo mới (Upload ảnh, Resize 8K, Inject GPS)GET /api/scenes: Lấy danh sách hiển thị trên bản đồ (Theo quyền truy cập)GET /api/scenes/:id: Chi tiết một cảnhPUT /api/scenes/:id: Cập nhật Metadata, Privacy hoặc thay thế ảnhDELETE /api/scenes/:id: Xóa Scene và các scene con liên kết (BFS)GET /api/share/:sceneId: Trang trung gian hỗ trợ Open Graph (FB/Zalo)
Điểm điều hướng (Hotspots)
GET /api/hotspots/:scene_id: Lấy danh sách điểm tương tác của cảnhPOST /api/hotspots/create: Tạo mới (Hỗ trợ tự động tạo link ngược)PUT /api/hotspots/update/:id: Cập nhật vị trí/tiêu đềDELETE /api/hotspots/delete/:id: Xóa hotspot
Tài sản & Media (Assets)
GET /api/assets/view/:assetId: Stream ảnh panorama (Có Referer & Token Verification)GET /api/assets/view_avatar/:filename: Stream ảnh đại diệnGET /api/me/assets: Kho ảnh của tôiDELETE /api/assets/:id: Xóa file vật lý và bản ghiGET /api/me/assets/top-large: Thống kê file chiếm dung lượng lớn
Người dùng & Hồ sơ (User Profile)
POST /api/auth/register: Đăng ký tài khoảnPOST /api/auth/login: Đăng nhập (Trả về JWT)GET /api/me/profile: Thông tin cá nhân & Quota lưu trữPUT /api/me/profile: Cập nhật hồ sơ & AvatarGET /api/users/search: Tìm kiếm người dùng để chia sẻ
Hệ thống (System)
GET /api/system/settings: Lấy cấu hình (Timezone, Lang)PUT /api/system/settings: Cập nhật cấu hình hệ thốngPOST /api/maintenance/reset-all: Xóa sạch dữ liệu (Dev only)
3. Trung tâm Xử lý Hình ảnh (Backend Worker)
- Công nghệ: BullMQ + Redis + Sharp.
- Hàng đợi:
image-processing. - Công việc:
- Resize ảnh Equirectangular sang 8K.
- Inject tọa độ GPS vào metadata (Exiftool/ExifHelper).
- Cập nhật trạng thái
Scenetừprocessing->completed.
4. Kiến trúc Frontend
Thành phần chính:
- Bản đồ: Leaflet.js + MarkerCluster.
- Trình xem 360: Pannellum.
- Quản lý trạng thái: LocalStorage (Lưu JWT, vị trí map, scene đang xem).
Luồng logic đặc biệt:
- Bảo mật ảnh: Ảnh được stream qua API thay vì link trực tiếp. API yêu cầu xác thực
Referer(chống hotlinking) vàJWThoặcShareToken. - Chia sẻ (Privacy Cascading): Khi đổi Privacy của Scene mẹ, các Scene con trong chuỗi Tour sẽ được đồng bộ quyền truy cập và Token.
- Open Graph: Route
/api/share/:idchèn Meta Tags động và Watermark 360 badge vào ảnh thumbnail để hiển thị đẹp trên mạng xã hội.
5. Các Middleware Bảo mật
authMiddleware.js: Xác thực JWT (protect,optionalAuth).securityMiddleware.js:verifyReferer: Chặn truy cập trực tiếp từ trình duyệt/site khác.setNoCacheHeaders: Chặn lưu cache các tài sản nhạy cảm.
quotaMiddleware.js: Kiểm tra dung lượng lưu trữ dựa trên Role người dùng.
6. Ghi chú cho Refactor
- Cần chuẩn hóa các đường dẫn tuyệt đối (hiện đang fix cứng
/home/locpham/...). - Chuyển đổi các logic xử lý file đồng bộ (
fs.unlinkSync) sang bất đồng bộ để tối ưu I/O. - Tách nhỏ
apiRoutes.jsthành các route con (admin, scenes, users, assets). - Bổ sung Unit Test cho logic tính toán tọa độ Hotspot ngược.