Kiến trúc tổng thể
Hệ thống AIMY gồm ba project độc lập trong cùng một workspace (không phải monorepo có công cụ chung): Topi, Tuke, Tux.
Ba project
Topi — Admin Portal (legacy)
Trạng thái: Maintenance Mode (hạn chế sửa core).
| Stack | React 16.x, UmiJS v2, DvaJS (Redux wrapper), Ant Design 3.x |
| Kiến trúc | Flux pattern — state tập trung ở src/models (Dva effects/reducers) |
| Cấu trúc | Feature-based: src/pages/[Feature] (mỗi feature có models/, components/, services/) |
| Styling | LESS Module |
| Quy tắc | Không nâng cấp library (Antd/React) để tránh breaking; file component PascalCase |
| Port local | 5008 |
Tuke — Web App hiện đại
Trạng thái: Active Development (giao diện end-user mới).
| Stack | Next.js 14+ (App Router), TypeScript, Tailwind CSS 3.x |
| Routing | File-system routing trong app/ |
| State | Zustand cho global client state |
| Data fetching | Server-side fetching hoặc client-side hooks |
| Quy tắc | Ưu tiên Tailwind utility; component ở src/components; strict TS, không any |
| Port local | 3000 |
Tux — Backend Core Platform
Trạng thái: Core logic & API. Đây là nơi chứa hầu hết "luồng bên trong" mà wiki này mô tả.
| Stack | .NET 8, ASP.NET Core, EF Core, Azure Functions (Workers) |
| Kiến trúc | DDD + Clean Architecture |
| Port local | 5003 (Swagger: http://localhost:5003/swagger) |
Phân lớp Tux:
Quy ước Tux:
- 100% Dependency Injection; interface bắt đầu bằng
I(IUserService); async method kết thúc bằngAsync. - Không truy cập
DbContexttrực tiếp từ Controller — phải qua Service/Repository. - Workers (Azure Functions) lo tác vụ async: gửi email, report, sync, xử lý EntityEvent.
Ráp lại: một request đi qua đâu
Đây chính là lý do người dùng thấy "tức thì" còn email/history diễn ra ở hậu trường — xem Platform để hiểu phần Workers.
Liên quan đáng nhớ
- Topi/Tuke dùng npm; project độc lập, không có root
package.json. Wiki này (VitePress) dùng pnpm, là một project Node tách biệt nữa trong/wiki. - Deploy production của các app dùng Azure Pipelines (không phải Cloudflare). Riêng wiki này deploy Cloudflare Pages.
Tiếp theo: Database & lưu trữ.