# Catalog Service

> Quản lý sản phẩm đa hình cho nền tảng thương mại đa ngành hàng.

## Tổng Quan

Catalog Service quản lý sản phẩm cho nhiều ngành dọc (Retail, F&B, Services) với mô hình dữ liệu thống nhất sử dụng JSONB cho thuộc tính theo từng loại.

### Tính Năng Chính

- **Sản phẩm Đa hình** - Bảng sản phẩm đơn hỗ trợ Physical, Service, PreparedFood
- **Thuộc tính JSONB** - Thuộc tính động theo loại (Cân nặng, Thời lượng, Topping...)
- **Đa tenant** - Catalog sản phẩm theo Shop
- **Quản lý Danh mục** - Danh mục sản phẩm phân cấp

## Bối Cảnh Kiến Trúc

```mermaid
graph LR
    POS["POS / Web"] --> CATALOG["📦 Catalog Service"]
    CATALOG --> MERCHANT["🏪 Merchant Service"]
    ORDER["📝 Order Service"] --> CATALOG
    
    style CATALOG fill:#4a90d9,stroke:#2d5986,color:#fff
```

## Yêu Cầu

| Yêu cầu | Phiên bản |
|---------|-----------|
| .NET SDK | 10.0.101+ |
| Docker | 24.0+ |
| PostgreSQL | 15+ |

## Bắt Đầu Nhanh

```bash
cd services/catalog-service-net
cp .env.example .env
dotnet restore
dotnet run --project src/CatalogService.API
```

## Cấu Trúc Dự Án

```
catalog-service-net/
├── src/
│   ├── CatalogService.API/          # Controllers, CQRS
│   ├── CatalogService.Domain/       # Aggregates, Entities
│   └── CatalogService.Infrastructure/ # EF Core, Repositories
├── tests/
│   ├── CatalogService.UnitTests/
│   └── CatalogService.FunctionalTests/
└── docs/
```

## API Endpoints

| Method | Endpoint | Mô tả |
|--------|----------|-------|
| `GET` | `/api/v1/products` | Danh sách sản phẩm theo shop |
| `GET` | `/api/v1/products/{id}` | Chi tiết sản phẩm |
| `POST` | `/api/v1/products` | Tạo sản phẩm |
| `PUT` | `/api/v1/products/{id}` | Cập nhật sản phẩm |
| `DELETE` | `/api/v1/products/{id}` | Xóa sản phẩm |
| `GET` | `/api/v1/categories` | Danh sách danh mục |
| `POST` | `/api/v1/categories` | Tạo danh mục |

## Domain Model

### Loại Sản Phẩm

| Loại | Thuộc tính | Ví dụ |
|------|------------|-------|
| `Physical` | Cân nặng, Kích thước, SKU | Áo, Điện thoại |
| `Service` | Thời lượng, Cần nhân viên | Cắt tóc, Massage |
| `PreparedFood` | Công thức, Topping, Bếp | Cà phê, Pizza |

### Product Entity (JSONB Attributes)

```csharp
public class Product : Entity, IAggregateRoot
{
    public Guid ShopId { get; private set; }
    public string Name { get; private set; }
    public decimal Price { get; private set; }
    public ProductType Type { get; private set; }
    public JsonDocument? Attributes { get; private set; } // Theo loại
}
```

## Services Liên Quan

- [Order Service](../../order-service-net/docs/vi/README.md) - Sử dụng dữ liệu sản phẩm
- [Merchant Service](../../merchant-service-net/docs/vi/README.md) - Cấu hình Shop
- [Inventory Service](../../inventory-service-net/docs/vi/README.md) - Tồn kho sản phẩm Physical

## Tài Nguyên

- [Kiến Trúc Đa Ngành Hàng](../../../../docs/vi/architecture/multi-vertical-architecture.md)
- [DDD với .NET](https://docs.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/)

## License

Proprietary - GoodGo Platform
