33 lines
947 B
Markdown
33 lines
947 B
Markdown
## Context
|
|
|
|
The platform needs a simple key-value configuration system for user preferences like theme, editor, and git identity.
|
|
|
|
## Goals / Non-Goals
|
|
|
|
**Goals:**
|
|
- Store user config as JSONB in PostgreSQL
|
|
- Support partial updates (PATCH semantics)
|
|
- Apply theme in frontend on load
|
|
- Provide settings UI
|
|
|
|
**Non-Goals:**
|
|
- Complex nested config structures
|
|
- Config validation beyond type checking
|
|
- Per-project config (global only)
|
|
|
|
## Decisions
|
|
|
|
1. **JSONB column for flexibility**
|
|
- Rationale: Simple key-value, no schema migrations for new keys
|
|
|
|
2. **Merge semantics for updates**
|
|
- Rationale: Frontend can update single key without sending entire config
|
|
|
|
3. **Lazy creation**
|
|
- Rationale: Config row created on first write, not on user creation
|
|
|
|
## Risks
|
|
|
|
- **[JSONB query performance]** → Only querying by user_id, not by config keys
|
|
- **[No schema validation]** → Frontend validates known keys, backend accepts any JSON
|