72 lines
3.0 KiB
Markdown
72 lines
3.0 KiB
Markdown
# Data Model
|
|
|
|
**Feature**: Anonymous Desire Aggregator
|
|
**Date**: 2025-10-09
|
|
|
|
This document defines the key data entities for the feature, with notes on where the state is managed.
|
|
|
|
---
|
|
|
|
### 1. Session
|
|
|
|
Represents a single decision-making event. **Note**: This object lives in the browser's Local Storage and is synchronized between clients via WebSocket messages.
|
|
|
|
| Attribute | Type | Description | Notes |
|
|
|---|---|---|---|
|
|
| `sessionId` | String | Unique identifier for the session. | The only piece of session data the backend is aware of. |
|
|
| `topic` | String | The subject of the session. | Set by the creator client. |
|
|
| `participantCount` | Integer | The number of expected participants. | Set by the creator client. |
|
|
| `status` | Enum | The current state of the session. | `WAITING`, `ANALYZING`, `COMPLETE`, `LOCKED`. |
|
|
| `participants` | Array\[Participant] | List of participants in the session. | Managed by clients. |
|
|
| `desireSets` | Array\[DesireSet] | List of all desire sets submitted by participants. | Managed by clients. |
|
|
| `decision` | Decision | The final calculated result. | Received from backend and stored by clients. |
|
|
|
|
---
|
|
|
|
### 2. Participant
|
|
|
|
Represents an anonymous user in the session. **Note**: Lives within the `Session` object in Local Storage.
|
|
|
|
| Attribute | Type | Description |
|
|
|---|---|---|
|
|
| `participantId` | String | Unique identifier for the participant (e.g., a random ID generated by the client). |
|
|
| `isCreator` | Boolean | Flag to identify the participant who initiated the session. |
|
|
| `hasSubmitted` | Boolean | Flag to indicate if the participant has submitted their desires. |
|
|
|
|
---
|
|
|
|
### 3. Desire Set
|
|
|
|
Represents the raw text input from a single participant. **Note**: Lives within the `Session` object in Local Storage.
|
|
|
|
| Attribute | Type | Description |
|
|
|---|---|---|
|
|
| `participantId` | String | The ID of the participant who submitted this set. |
|
|
| `wants` | Array\[String] | List of raw text desires the user wants. |
|
|
| `accepts` | Array\[String] | List of raw text desires the user accepts. |
|
|
| `noGoes` | Array\[String] | List of raw text desires the user does not want. |
|
|
|
|
---
|
|
|
|
### 4. Semantic Desire
|
|
|
|
Represents a unique conceptual desire identified by the LLM analysis. **Note**: This is a read-only, transient data structure. It exists in the `Decision` object.
|
|
|
|
| Attribute | Type | Description |
|
|
|---|---|---|
|
|
| `title` | String | The canonical name for the desire group. |
|
|
| `rawInputs` | Array\[String] | The list of original user text inputs that were grouped into this desire. |
|
|
|
|
---
|
|
|
|
### 5. Decision
|
|
|
|
Represents the final, categorized output of the analysis. **Note**: Lives within the `Session` object in Local Storage.
|
|
|
|
| Attribute | Type | Description |
|
|
|---|---|---|
|
|
| `goTos` | Array\[Semantic Desire] | Desires everyone wants. |
|
|
| `alsoGoods` | Array\[Semantic Desire] | Desires some want and others accept. |
|
|
| `considerables` | Array\[Semantic Desire] | Other desires that were wanted or accepted. |
|
|
| `noGoes` | Array\[Semantic Desire] | Desires that at least one person does not want. |
|