1 Commits

Author SHA1 Message Date
ton a468628fb0 update 2026-09-08 20:53:22 +07:00
+158
View File
@@ -625,9 +625,12 @@ Describe the high-level approach to solving the problem.
Explain the design reasoning behind each major decision — why the solution was designed this way, and how each decision connects to form a cohesive approach that solves the user problem. Explain the design reasoning behind each major decision — why the solution was designed this way, and how each decision connects to form a cohesive approach that solves the user problem.
| Decision ID | Decision | Rationale | Alternatives Rejected |
|-------------|----------|-----------|----------------------|
| Decision ID | Decision | Rationale | Alternatives Rejected | | Decision ID | Decision | Rationale | Alternatives Rejected |
|-------------|----------|-----------|----------------------| |-------------|----------|-----------|----------------------|
| SD-001 | Use NATS for async messaging | Required for real-time messaging with low overhead | Kafka - too complex for current scale | | SD-001 | Use NATS for async messaging | Required for real-time messaging with low overhead | Kafka - too complex for current scale |
| SD-001.1 | NATS subject naming | Use `catalog:updates` for inventory changes | Static polling |
| SD-002 | Use WebSockets for real-time updates | Required for <100ms feedback | REST polling - too slow, too many requests | | SD-002 | Use WebSockets for real-time updates | Required for <100ms feedback | REST polling - too slow, too many requests |
| SD-003 | Store comparison list in localStorage | Allows offline comparison editing | Redux - overkill for this feature | | SD-003 | Store comparison list in localStorage | Allows offline comparison editing | Redux - overkill for this feature |
| SD-004 | Server-side rendering for comparison view | SEO for comparison pages shared via unique links | Client-side rendering - no SEO benefit | | SD-004 | Server-side rendering for comparison view | SEO for comparison pages shared via unique links | Client-side rendering - no SEO benefit |
@@ -681,6 +684,161 @@ Link each solution component to specific requirements and assign Solution Design
| Export comparison | FR-201 | SD-005 | Export comparison to PDF/CSV (uses server-side rendering) | | Export comparison | FR-201 | SD-005 | Export comparison to PDF/CSV (uses server-side rendering) |
### Walkthrough Template
```markdown
# Walkthrough: Feature Name
## Structural Guidance
- One **overview sequence diagram** per participant (high-level flow, all major steps)
- **Detailed sub-diagrams** for complex interaction points (e.g., multi-step checkout, validation error paths)
- Use sequence diagrams for request/response patterns; use state machine diagrams for multi-participant state transitions
---
## Customer
### Session Start
**WT-001**: User opens app, navigates to `/compare`
> Cross-reference: `2-solution_design.md:SD-004` (SSR for SEO-friendly comparison links)
**Sequence**:
```mermaid
sequenceDiagram
participant User as Customer (Browser)
participant UI as SvelteKit SSR
participant WineAPI as Wine Service
User->>UI: GET /compare
UI->>WineAPI: Get wine list
WineAPI-->>UI: JSON response
UI-->>User: Rendered HTML
```
---
### Select Wines for Comparison
**WT-002**: User selects 3 wines from inventory table
| Step | Action | System Response | Traceability |
|------|--------|-----------------|--------------|
| WT-002.1 | Clicks "Add to Compare" on Wine A | Adds to localStorage comparison array | FR-101, SD-003 |
| WT-002.2 | Clicks "Add to Compare" on Wine B | Adds to array, updates sidebar count | FR-101, SD-003 |
| WT-002.3 | Clicks "Add to Compare" on Wine C | Adds to array, triggers comparison preview | FR-101, SD-003 |
**WT-003**: Comparison preview renders with selected wines
> Cross-reference: `5-ui_specification.md:UI-002` (Wine Table)
**Sequence**:
```mermaid
sequenceDiagram
participant User as Customer
participant UI as StateStore
participant Sidebar as ComparisonSidebar
User->>UI: addToCompare(wine)
UI->>Sidebar: emit 'comparison:updated'
Sidebar->>Sidebar: Render preview (3 wines)
Sidebar-->>User: Visual feedback
```
---
### Edit Wine Details
**WT-004**: User modifies price or notes for a selected wine
> Cross-reference: `2-solution_design.md:SD-003` (localStorage storage)
**WT-005**: User clicks "Save Changes"
**Sequence**:
```mermaid
sequenceDiagram
participant User as Customer
participant UI as FormComponent
participant Local as localStorage
participant Backend as WineAPI
User->>UI: Edit form fields
UI->>Local: Update cached values
User->>UI: Click Save
UI->>Backend: PUT /api/v1/wine/:id
Backend-->>UI: 200 OK
UI-->>User: Confirmation toast
```
---
### Error Paths
**WT-006**: Backend rejects edit (validation error)
> Same participant POV — shows rejection from customer's perspective
```mermaid
sequenceDiagram
participant User as Customer
participant UI as FormComponent
participant Backend as WineAPI
User->>UI: Click Save
UI->>Backend: PUT /api/v1/wine/:id
Backend-->>UI: 422 Unprocessable Entity
UI->>UI: Render field-level errors
UI-->>User: "Price must be numeric" inline message
```
**WT-007**: User clears comparison list
> See Retailer section step 4.2 — retailer sees updated catalog
```mermaid
sequenceDiagram
participant User as Customer
participant UI as StateStore
participant Local as localStorage
User->>UI: Click "Clear All"
UI->>Local: Set comparison = []
Local-->>UI: Confirm write
UI-->>User: Sidebar collapses
```
---
## Retailer
### Receive Updated Catalog
**WT-008**: Retailer views updated wine inventory
> Cross-reference: `3-walkthrough.md:#Customer` (WT-005 save event triggers notification)
**Sequence**:
```mermaid
sequenceDiagram
participant Retailer as Retailer Dashboard
participant Nats as NATS Bridge
participant Backend as WineService
Retailer->>Nats: Listen to catalog:updates
Backend-->>Nats: catalog:updated {wine_ids:[...]}
Nats-->>Retailer: Push notification
Retailer->>Retailer: Refresh inventory table
```
> Cross-reference: `2-solution_design.md:SD-001` (NATS async messaging)
---
```
### Specification Template ### Specification Template
```yaml ```yaml