# Template Microservice Node.js > Template chuẩn để tạo các microservice mới trong hệ sinh thái @goodgo sử dụng Node.js/TypeScript. ## Tổng Quan Template này cung cấp nền tảng hoàn chỉnh, sẵn sàng production để xây dựng các microservice với: > **Lưu ý**: Template này dành cho tương lai. Hiện tại dự án GoodGo chủ yếu sử dụng .NET services. Xem [dotnet-template.md](./dotnet-template.md) cho template đang sử dụng. - **Framework**: Express.js với TypeScript - **Database**: Prisma ORM với PostgreSQL - **Validation**: Zod cho validation biến môi trường và đầu vào - **Observability**: Prometheus metrics, logging có cấu trúc, tích hợp OpenTelemetry/Jaeger - **Resilience**: Graceful shutdown, rate limiting (Redis), circuit breaker, health checks - **Caching**: Chiến lược caching với Redis - **Security**: Đã cấu hình Helmet & CORS ## Cấu Trúc Dự Án ``` src/ ├── config/ # Cấu hình & Validate biến môi trường ├── middlewares/ # Express middlewares (error, logger, metrics) ├── modules/ # Feature modules (controller, service, repository) ├── routes/ # Định nghĩa API routes └── main.ts # Entry point & App bootstrapping ``` ## Bắt Đầu ### Yêu Cầu - Node.js >= 20 - pnpm - Docker (yêu cầu Redis) ### Cài Đặt 1. **Clone & Cài đặt dependencies**: ```bash pnpm install ``` 2. **Khởi động infrastructure**: ```bash cd deployments/local docker-compose up -d redis ``` 3. **Thiết lập database**: ```bash pnpm prisma migrate dev pnpm prisma db seed ``` 4. **Khởi động development server**: ```bash pnpm dev ``` ## Kiến Trúc ### Kiến Trúc Phân Lớp ```mermaid graph TD Request[HTTP Request] --> Middleware[Middleware Chain] subgraph SingleService[Ranh Giới Service] Middleware --> Correlation[Correlation ID] Correlation --> Auth[Authentication] Auth --> Validation[Validation] Validation --> Error[Error Handler] Error --> Logger[Request Logger] Logger --> Metrics[Metrics Collector] Metrics --> Router[Router Layer] Router --> Controller[Controller Layer] Controller --> Service[Service Layer] Service --> Repository[Repository Layer] Repository --> Database[(PostgreSQL)] Service --> Cache[(Redis)] end style Correlation fill:#e1f5fe style Auth fill:#f3e5f5 style Validation fill:#e8f5e8 ``` ### Chuỗi Middleware 1. **Correlation Middleware**: Tạo/truyền correlation và request IDs 2. **Authentication Middleware**: Xác thực JWT tokens 3. **Validation Middleware**: Validate dữ liệu đầu vào với Zod schemas 4. **Error Handler**: Bắt và format lỗi 5. **Logger Middleware**: Ghi log request/response 6. **Metrics Middleware**: Thu thập Prometheus metrics ### Pattern Controller → Service → Repository - **Controller**: Xử lý HTTP requests, điều phối services - **Service**: Chứa business logic, độc lập với HTTP - **Repository**: Trừu tượng hóa thao tác database với Prisma ## Các API Endpoints ### Health Endpoints | Endpoint | Mục Đích | |----------|----------| | `/health` | Trạng thái health đầy đủ | | `/health/live` | Kiểm tra sống | | `/health/ready` | Kiểm tra sẵn sàng | ### Quản Lý Feature | Method | Endpoint | Mô Tả | |--------|----------|-------| | `GET` | `/api/v1/features` | Lấy tất cả features | | `GET` | `/api/v1/features/{id}` | Lấy feature theo ID | | `POST` | `/api/v1/features` | Tạo feature (admin) | | `PUT` | `/api/v1/features/{id}` | Cập nhật feature | | `DELETE` | `/api/v1/features/{id}` | Xóa feature | | `PATCH` | `/api/v1/features/{id}/toggle` | Chuyển đổi trạng thái | ## Định Dạng Response ```json { "success": true, "data": { ... }, "message": "Hoạt động hoàn thành", "timestamp": "2024-01-01T00:00:00.000Z" } ``` ## Biến Môi Trường | Biến | Mô Tả | Bắt buộc | |------|-------|----------| | `PORT` | Cổng server | Không (mặc định: 5000) | | `DATABASE_URL` | Kết nối PostgreSQL | **Có** | | `REDIS_URL` | Kết nối Redis | Không | | `JWT_SECRET` | Khóa bí mật JWT | **Có** | | `TRACING_ENABLED` | Bật Jaeger tracing | Không | ## Tích Hợp Nền Tảng ### Thêm vào docker-compose.yml ```yaml services: your-service: build: context: ../.. dockerfile: services/your-service/Dockerfile labels: - "traefik.enable=true" - "traefik.http.routers.your-service.rule=PathPrefix(`/api/v1/your-service`)" - "traefik.http.services.your-service.loadbalancer.server.port=5002" ``` ### Điểm Truy Cập - **API**: http://localhost/api/v1/your-service - **Health**: http://localhost/api/v1/your-service/health - **API Docs**: http://localhost/api/v1/your-service/api-docs - **Traefik Dashboard**: http://localhost:8080 ## Kiểm Thử ```bash # Chạy tất cả tests pnpm test # Chạy với coverage pnpm test:coverage # Chạy E2E tests pnpm test:e2e ``` ## Docker ```bash # Build image docker build -t your-service:latest . # Chạy container docker run -p 5000:5000 --env-file .env your-service:latest ``` ## Tạo Service Mới 1. Sao chép template: ```bash cp -r services/_template_nodejs services/your-service-name ``` 2. Cập nhật tên trong `package.json` 3. Cấu hình môi trường trong `deployments/local/.env.local` 4. Cập nhật Prisma schema và chạy migrations 5. Triển khai modules trong `src/modules/` 6. Đăng ký trong `deployments/local/docker-compose.yml` ## Tài Liệu Liên Quan - [Chi Tiết Kiến Trúc](../architecture/microservices-communication.md) - [Tiêu Chuẩn Thiết Kế API](../guides/api-design.md) - [Patterns Kiểm Thử](../guides/testing.md)