220 lines
6.2 KiB
Markdown
220 lines
6.2 KiB
Markdown
# Multi-vertical Architecture Design
|
|
|
|
## Overview
|
|
|
|
This document describes the architectural approach for supporting **multi-vertical business operations** in the GoodGo platform. The design enables a single Merchant to operate across multiple business verticals (Retail, F&B, Services) without creating tightly-coupled "spaghetti code."
|
|
|
|
## Design Principle
|
|
|
|
> **Merchant Service manages "WHO" (Identity) and "RULES" (Configuration), while "HOW" (Execution) is delegated to satellite services.**
|
|
|
|
## Architecture Layers
|
|
|
|
```mermaid
|
|
graph TB
|
|
subgraph Clients ["📱 Client Layer"]
|
|
POS["Smart POS"]
|
|
WEB["Web Dashboard"]
|
|
APP["Mobile App"]
|
|
end
|
|
|
|
subgraph Gateway ["⚡ API Gateway"]
|
|
TRAEFIK["Traefik"]
|
|
end
|
|
|
|
subgraph Core ["🟡 Core Layer - Identity & Configuration"]
|
|
IAM["🔐 IAM Service"]
|
|
MERCHANT["🏪 Merchant Service"]
|
|
WALLET["💰 Wallet Service"]
|
|
end
|
|
|
|
subgraph Orchestration ["🔴 Orchestration Layer"]
|
|
CATALOG["📦 Catalog Service"]
|
|
ORDER["📝 Order Service"]
|
|
end
|
|
|
|
subgraph Verticals ["🔵 Vertical Engines"]
|
|
INVENTORY["🏭 Inventory"]
|
|
BOOKING["📅 Booking"]
|
|
FNB["🍳 F&B Engine"]
|
|
end
|
|
|
|
Clients --> Gateway
|
|
Gateway --> Core
|
|
Gateway --> Orchestration
|
|
ORDER --> Verticals
|
|
```
|
|
|
|
## Layer Responsibilities
|
|
|
|
### 1. Core Layer (Configuration & Identity)
|
|
|
|
| Service | Responsibility |
|
|
|---------|----------------|
|
|
| **IAM Service** | User authentication, roles, permissions |
|
|
| **Merchant Service** | Shop identity, feature flags, business settings |
|
|
| **Wallet Service** | Payment processing, balance management |
|
|
|
|
### 2. Orchestration Layer
|
|
|
|
| Service | Responsibility |
|
|
|---------|----------------|
|
|
| **Catalog Service** | Polymorphic product management |
|
|
| **Order Service** | Order processing with Strategy Pattern |
|
|
|
|
### 3. Vertical Engines
|
|
|
|
| Service | Vertical | Core Logic |
|
|
|---------|----------|------------|
|
|
| **Inventory Service** | Retail, F&B | Stock management, recipes |
|
|
| **Booking Service** | Services | Appointment scheduling |
|
|
| **F&B Engine** | Food & Beverage | Tables, sessions, kitchen display |
|
|
|
|
## Strategy Pattern for Order Processing
|
|
|
|
The **Order Service** acts as the "brain" that routes each line item to the appropriate vertical engine based on product type.
|
|
|
|
```mermaid
|
|
flowchart LR
|
|
ORDER["Order Service"]
|
|
|
|
subgraph Strategies ["Line Item Strategies"]
|
|
RETAIL["RetailStrategy"]
|
|
SERVICE["ServiceStrategy"]
|
|
FNB["FnbStrategy"]
|
|
end
|
|
|
|
ORDER --> |"ProductType.Physical"| RETAIL
|
|
ORDER --> |"ProductType.Service"| SERVICE
|
|
ORDER --> |"ProductType.PreparedFood"| FNB
|
|
|
|
RETAIL --> INVENTORY["Inventory Service"]
|
|
SERVICE --> BOOKING["Booking Service"]
|
|
FNB --> KITCHEN["F&B Engine"]
|
|
```
|
|
|
|
### Strategy Interface
|
|
|
|
```csharp
|
|
public interface ILineItemStrategy
|
|
{
|
|
ProductType SupportedType { get; }
|
|
Task ValidateAsync(OrderItem item, Guid shopId);
|
|
Task ExecuteAsync(OrderItem item, Guid shopId);
|
|
}
|
|
```
|
|
|
|
### Hybrid Order Support
|
|
|
|
A single order can contain multiple product types:
|
|
- ☕ Coffee (PreparedFood → F&B Engine)
|
|
- 👕 Merchandise T-shirt (Physical → Inventory Service)
|
|
- 💆 Spa voucher (Service → Booking Service)
|
|
|
|
Each line item is processed by its corresponding strategy.
|
|
|
|
## Merchant Service Configuration Model
|
|
|
|
### BusinessCategory Enum
|
|
|
|
```csharp
|
|
public enum BusinessCategory
|
|
{
|
|
Retail = 1, // Physical goods
|
|
FoodBeverage = 2, // Restaurants, cafes
|
|
Services = 3, // Spa, salon, clinic
|
|
Other = 99 // Hybrid
|
|
}
|
|
```
|
|
|
|
### ShopFeatures (Feature Flags)
|
|
|
|
```csharp
|
|
public record ShopFeatures(
|
|
bool HasInventory = false, // Enable Inventory Service
|
|
bool HasBooking = false, // Enable Booking Service
|
|
bool HasTables = false, // Enable table management
|
|
bool HasKitchen = false, // Enable KDS
|
|
bool HasShipping = false, // Enable shipping
|
|
bool HasDelivery = false // Enable delivery
|
|
);
|
|
```
|
|
|
|
### Dynamic Settings (JSONB)
|
|
|
|
Business-specific parameters stored as JSON:
|
|
|
|
```json
|
|
{
|
|
"fnb": {
|
|
"serviceChargePercent": 5,
|
|
"defaultTableCapacity": 4
|
|
},
|
|
"booking": {
|
|
"slotDurationMinutes": 30,
|
|
"advanceBookingDays": 14
|
|
},
|
|
"retail": {
|
|
"lowStockThreshold": 10
|
|
}
|
|
}
|
|
```
|
|
|
|
## Data Flow Examples
|
|
|
|
### Retail Order Flow
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant POS
|
|
participant Order as Order Service
|
|
participant Merchant as Merchant Service
|
|
participant Inventory as Inventory Service
|
|
participant Wallet as Wallet Service
|
|
|
|
POS->>Order: Create Order (Physical item)
|
|
Order->>Merchant: Get ShopFeatures
|
|
Merchant-->>Order: {HasInventory: true}
|
|
Order->>Inventory: Validate stock
|
|
Inventory-->>Order: Stock OK
|
|
Order->>Wallet: Process payment
|
|
Wallet-->>Order: Payment success
|
|
Order->>Inventory: Deduct stock
|
|
Order-->>POS: Order completed
|
|
```
|
|
|
|
### F&B Order Flow
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant POS
|
|
participant Order as Order Service
|
|
participant FnB as F&B Engine
|
|
participant Inventory as Inventory Service
|
|
|
|
POS->>Order: Create Order (Table 5, Coffee)
|
|
Order->>FnB: Add to active session
|
|
FnB->>FnB: Create KitchenTicket
|
|
FnB-->>Order: Ticket created
|
|
Note over FnB: Display on KDS
|
|
FnB->>Inventory: Deduct ingredients (optional)
|
|
Order-->>POS: Order confirmed
|
|
```
|
|
|
|
## Benefits of This Architecture
|
|
|
|
| Benefit | Description |
|
|
|---------|-------------|
|
|
| **Single Responsibility** | Each service handles one domain |
|
|
| **Extensibility** | Add new verticals without modifying core |
|
|
| **Testability** | Strategies are independently testable |
|
|
| **Hybrid Support** | Mixed orders handled naturally |
|
|
| **Configuration-Driven** | Behavior changes via feature flags |
|
|
|
|
## Related Resources
|
|
|
|
- [Implementation Plan](file:///Users/velikho/.gemini/antigravity/brain/fc592f5c-fd0a-4a19-87d0-d09926a1cdde/implementation_plan.md)
|
|
- [Domain-Driven Design Skill](file:///Users/velikho/Desktop/WORKING/Base/.agent/skills/domain-driven-design/SKILL.md)
|
|
- [CQRS Pattern Skill](file:///Users/velikho/Desktop/WORKING/Base/.agent/skills/cqrs-mediatr/SKILL.md)
|
|
- [Inter-Service Communication](file:///Users/velikho/Desktop/WORKING/Base/.agent/skills/inter-service-communication/SKILL.md)
|