# TỔNG HỢP KIẾN TRÚC KỸ THUẬT

## 12.1. Kiến trúc Hệ thống

### Frontend
- **Vite** (Build tool & Dev server)
- **React** hoặc **Vue.js** (UI Framework)
- **TypeScript** (Type safety)
- **State Management**: Zustand/Redux (React) hoặc Pinia (Vue)
- **UI Library**: Material-UI, Ant Design, hoặc Tailwind CSS
- **Routing**: React Router hoặc Vue Router
- **HTTP Client**: Axios hoặc Fetch API
- Responsive Design

Chi tiết: [Frontend Architecture](../04-frontend/01-frontend-architecture.md)

### Backend
- **Node.js** (Runtime)
- **Express.js** hoặc **Fastify** (Web Framework)
- **TypeScript** (Type safety)
- RESTful API
- **Mongoose** (MongoDB ODM)
- **JWT** (Authentication)
- **Bcrypt** (Password hashing)

Chi tiết: [Backend Architecture](../03-backend/01-backend-architecture.md)

### Database
- **MongoDB** (NoSQL Document Database)
- **MongoDB Atlas** (Cloud) hoặc Self-hosted
- Collections với Indexes cho performance
- Aggregation Pipeline cho Analytics

Chi tiết: [Database Schema](../05-data/01-database-schema.md)

### Caching
- **Redis** (Optional, cho performance)
- In-memory caching cho frequent queries

### Message Queue
- **Bull** hoặc **Agenda** (Job queue với Redis)
- Async processing cho background tasks

### File Storage
- **GridFS** (MongoDB) cho files nhỏ
- **AWS S3**, **Azure Blob**, hoặc **MinIO** cho files lớn
- **Multer** (File upload middleware)

---

## 12.2. Deployment & Infrastructure

- **Cloud-ready**: AWS, Azure, GCP, hoặc On-premise
- **Containerization**: Docker, Docker Compose
- **CI/CD**: GitHub Actions, GitLab CI, hoặc Jenkins
- **Scalability**: 
  - Horizontal scaling với Load balancer
  - MongoDB Replica Set cho High Availability
  - MongoDB Sharding cho large datasets
- **Environment**: 
  - Development: Vite dev server + Node.js
  - Production: Build static files + Node.js server

Chi tiết: [Deployment Guide](../08-deployment/01-setup-instructions.md)

---

## 12.3. Data Architecture

- **MongoDB Collections**: 
  - Document-based storage
  - Embedded documents cho related data
  - References cho relationships
- **Time-series Data**: 
  - MongoDB Collections với timestamp indexes
  - Aggregation Pipeline cho time-based queries
  - TTL indexes cho auto-delete old data
- **Data Processing**: 
  - MongoDB Aggregation Pipeline
  - Map-Reduce (nếu cần)
  - Scheduled jobs với Bull/Agenda
- **Real-time Processing**: 
  - WebSocket (Socket.io) cho real-time updates
  - MongoDB Change Streams cho data changes

Chi tiết: [Data Layer](../05-data/)

---

## 12.4. Data Layer Abstraction & Demo Mode

Hệ thống hỗ trợ **2 chế độ vận hành** thông qua **Configuration Flag**:

### Data Storage Modes

**Mode 1: Demo Mode (Development/Testing)**
- Sử dụng **JSON files** hoặc **In-memory storage** với cấu trúc tương tự MongoDB
- Dữ liệu demo được định nghĩa sẵn trong `data/demo/` folder
- Không cần MongoDB server
- Phù hợp cho development, testing, và demo
- Cấu trúc dữ liệu giống hệt MongoDB collections

**Mode 2: Production Mode (Self-hosted MongoDB)**
- Sử dụng **MongoDB** thực tế (Self-hosted hoặc MongoDB Atlas)
- Kết nối qua Mongoose
- Dữ liệu lưu trữ trong MongoDB database
- Phù hợp cho production environment

### Configuration Flag

**Environment Variable:**
```env
# .env file
DATA_MODE=demo  # hoặc 'mongodb'
# DATA_MODE=mongodb  # Cho production
```

**Configuration File:**
```typescript
// src/config/data.config.ts
export const DATA_CONFIG = {
  mode: process.env.DATA_MODE || 'demo', // 'demo' | 'mongodb'
  mongodb: {
    uri: process.env.MONGODB_URI || 'mongodb://localhost:27017/amom',
    options: {
      // MongoDB connection options
    }
  },
  demo: {
    dataPath: './data/demo', // Path to demo JSON files
    autoSave: false, // Auto-save changes to JSON files (optional)
  }
};
```

Chi tiết: [Data Layer Abstraction](../03-backend/02-data-layer-abstraction.md)

---

**Next**: [Implementation Roadmap](./03-implementation-roadmap.md)
