Thay đổi ARCHITEC.md cập nhật các thông tin để chuẩn bị refactor lại dự án

This commit is contained in:
2026-06-10 17:13:56 +07:00
parent ec7a9186b6
commit 3f1b31b233
17 changed files with 326 additions and 139 deletions
+45 -23
View File
@@ -4,48 +4,70 @@ Tài liệu này tổng hợp toàn bộ cấu trúc hệ thống phục vụ qu
## 1. Mô hình Dữ liệu (Database Schema - MongoDB)
### User (Người dùng)
- `username`: String (Unique)
- `email`: String (Unique)
### 1.1. User (Người dùng)
- `_id`: ObjectId
- `username`: String (Unique, bắt buộc)
- `email`: String (Unique, bắt buộc)
- `password`: String (Hashed)
- `role`: String ['admin', 'Chủ sở hữu', 'editor', 'moderator', 'Thành viên']
- `role`: String ['admin', 'moderator', 'user', 'guest'] (Chuẩn hóa mới)
- `fullName`: String
- `avatarUrl`: String
- `agreedToRules`: Boolean
- `avatarUrl`: String (Đường dẫn stream ảnh đại diện)
- `agreedToRules`: Boolean (Trạng thái đồng ý điều khoản)
- `storage.used`: Number (Dung lượng đã dùng - bytes)
- `storage.quota`: Number (Hạn mức dung lượng - bytes)
- `createdAt`: Date
- `updatedAt`: Date
### Asset (Tệp tin/Phương tiện)
### 1.2. Asset (Tệp tin/Phương tiện)
- `_id`: ObjectId
- `filePath`: String (Đường dẫn vật lý)
- `fileSize`: Number (Bytes)
- `uploadedBy`: ObjectId (Ref: User)
- `coordinates`: Object { `lat`: Number, `lng`: Number } (GPS từ EXIF)
- `coordinates`: Object { `lat`: Number, `lng`: Number } (Tọa độ GPS trích xuất từ EXIF)
- `createdAt`: Date
### Scene (Cảnh 360)
- `name`/`title`: String
- `description`: String
- `assetId`: ObjectId (Ref: Asset)
- `scene_url`: String
- `gps`: Object { `lat`: Number, `lng`: Number }
### 1.3. Tour (Cấu trúc Tour - Đề xuất mới)
- `_id`: ObjectId
- `name`: String (Tên của tour)
- `description`: String (Mô tả tổng quát)
- `location`: Object { `lat`: Number, `lng`: Number } (Vị trí trung tâm của tour)
- `createdBy`: ObjectId (Ref: User)
- `tourId`: ObjectId (Ref: Scene) - ID của cảnh gốc tạo nên tour
- `rootSceneId`: ObjectId (Ref: Scene - Cảnh khởi đầu)
- `privacy`: String ['public', 'private', 'member', 'shared']
- `scenes`: Array [ObjectId (Ref: Scene)] (Danh sách các cảnh thuộc tour)
- `createdAt`: Date
- `updatedAt`: Date
### 1.4. Scene (Cảnh 360)
- `_id`: ObjectId
- `tourId`: ObjectId (Ref: Tour - Tour cha sở hữu)
- `name`: String (Tên cảnh)
- `description`: String (Mô tả chi tiết cảnh)
- `assetId`: ObjectId (Ref: Asset)
- `scene_url`: String (Đường dẫn ảnh đã xử lý)
- `gps`: Object { `lat`: Number, `lng`: Number } (Vị trí địa lý riêng của cảnh)
- `createdBy`: ObjectId (Ref: User)
- `uploadedAt`: Date (Thời gian gốc của ảnh được upload)
- `status`: String ['processing', 'completed', 'failed']
- `shareToken`: String (Dùng cho link truy cập nhanh)
- `shareToken`: String (Dùng cho link chia sẻ)
- `shareTokenExpires`: Date
- `sharedWith`: Array [ObjectId (Ref: User)]
- `sharedEmails`: Array [String]
- `views`: Number
- `views`: Number (Tổng lượt xem)
- `viewHistory`: Array [ { `date`: Date, `count`: Number } ]
- `createdAt`: Date
### Hotspot (Điểm điều hướng)
- `parent_scene_id`: ObjectId (Ref: Scene)
- `target_scene_id`: ObjectId (Ref: Scene)
- `title`: String
### 1.5. Hotspot / Link (Điểm điều hướng & Liên kết)
- `_id`: ObjectId
- `parent_scene_id`: ObjectId (Ref: Scene - Cảnh chứa điểm này)
- `target_scene_id`: ObjectId (Ref: Scene - Cảnh đích đến)
- `target_tour_id`: ObjectId (Ref: Tour - Dùng cho liên kết sang tour khác)
- `title`: String (Tên của liên kết/hotspot)
- `description`: String
- `coordinates`: Object { `yaw`: Number, `pitch`: Number }
- `is_auto_return`: Boolean (Tự động tạo link quay lại)
- `is_auto_return`: Boolean (Đánh dấu link quay lại tự động)
### Setting (Cấu hình hệ thống)
### 1.6. Setting (Cấu hình hệ thống)
- `timezone`: String (Mặc định: 'Asia/Ho_Chi_Minh')
- `language`: String (Mặc định: 'vi')