# Kiến trúc WebClientTpos

Kiến trúc frontend cơ sở cho GoodGo Platform sử dụng Blazor WebAssembly với mô hình BFF.

## Tổng quan

Ứng dụng này triển khai mô hình **Backend for Frontend (BFF)** với YARP reverse proxy:

- **Client**: Blazor WebAssembly chạy trên trình duyệt
- **BFF**: ASP.NET Core server proxy yêu cầu đến microservices
- **Shared**: DTOs chung với validation (chia sẻ giữa Client/BFF)

## Sơ đồ Kiến trúc

```mermaid
flowchart TD
    subgraph Browser["🌐 Trình duyệt"]
        C[Blazor WASM Client]
    end
    
    subgraph BFF["⚙️ Lớp BFF"]
        Y[YARP Reverse Proxy]
        SA[Tài nguyên tĩnh]
    end
    
    subgraph MS["🔧 Microservices"]
        IAM[Dịch vụ IAM]
        MER[Dịch vụ Merchant]
        CAT[Dịch vụ Catalog]
        ORD[Dịch vụ Order]
    end
    
    C -->|Tệp tĩnh| SA
    C -->|/api/*| Y
    Y -->|/api/iam/**| IAM
    Y -->|/api/merchants/**| MER
    Y -->|/api/catalog/**| CAT
    Y -->|/api/orders/**| ORD
    
    style C fill:#3498DB,color:#ECF0F1,stroke:#2980B9,stroke-width:3px
    style Y fill:#8E44AD,color:#ECF0F1,stroke:#7D3C98,stroke-width:2px
    style SA fill:#34495E,color:#ECF0F1,stroke:#2C3E50,stroke-width:2px
    style IAM fill:#27AE60,color:#ECF0F1,stroke:#229954,stroke-width:2px
    style MER fill:#27AE60,color:#ECF0F1,stroke:#229954,stroke-width:2px
    style CAT fill:#27AE60,color:#ECF0F1,stroke:#229954,stroke-width:2px
    style ORD fill:#27AE60,color:#ECF0F1,stroke:#229954,stroke-width:2px
```

## Cấu trúc Dự án

```
web-client-base-net/
├── src/
│   ├── WebClientTpos.Client/    # Blazor WebAssembly
│   │   ├── Layout/              # MainLayout, NavMenu
│   │   ├── Pages/               # Trang Razor
│   │   └── wwwroot/             # Tài nguyên tĩnh, CSS
│   ├── WebClientTpos.Server/    # BFF + YARP Proxy
│   │   ├── Program.cs           # Cấu hình ứng dụng
│   │   └── yarp.json            # Routes proxy
│   └── WebClientTpos.Shared/    # DTOs chung
│       └── DTOs/                # ProductDto, UserDto
└── docs/
```

## Shared DTOs

| DTO | Mục đích | Validation |
|-----|----------|------------|
| `ProductDto` | Dữ liệu sản phẩm | Tên (3-100 ký tự), Giá (0.01-1 tỷ) |
| `RegisterDto` | Đăng ký người dùng | Email, Mật khẩu (8+ ký tự, độ phức tạp) |
| `LoginDto` | Đăng nhập | Email, Mật khẩu |
| `ApiResponse<T>` | Wrapper response chuẩn | Success, Data, Error |

## YARP Routes

| Route | Dịch vụ đích | Cổng |
|-------|-------------|------|
| `/api/iam/**` | Dịch vụ IAM | 5101 |
| `/api/merchants/**` | Dịch vụ Merchant | 5102 |
| `/api/catalog/**` | Dịch vụ Catalog | 5103 |
| `/api/orders/**` | Dịch vụ Order | 5104 |

## Trang Blazor

| Trang | Route | Mô tả |
|-------|-------|-------|
| Home | `/` | Trang chủ |
| Products | `/products` | Quản lý sản phẩm |
| Auth | `/auth` | Đăng nhập/Đăng ký |
| Counter | `/counter` | Component demo |
| Weather | `/weather` | Demo fetch dữ liệu |

## Công nghệ chính

- **.NET 10** - Framework mới nhất
- **Blazor WebAssembly** - SPA phía client
- **YARP** - Reverse proxy cho microservices
- **Data Annotations** - Validation chia sẻ
