80 lines
1.9 KiB
Markdown
80 lines
1.9 KiB
Markdown
# Backend Workbench Alignment Design
|
|
|
|
## Goal
|
|
|
|
Align the Go backend with the latest Svelte workbench prototype. The frontend currently models a Discord-like project workbench with dynamic projects, project-scoped channels, and channel-specific first-screen data.
|
|
|
|
## API Contract
|
|
|
|
Add `GET /api/projects/:id/workspace`.
|
|
|
|
The response intentionally matches `apps/web/src/features/workbench/types.ts` and uses camelCase field names:
|
|
|
|
- `project`
|
|
- `channels`
|
|
- `tags`
|
|
- `recentSessions`
|
|
- `inbox`
|
|
- `tasks`
|
|
- `aiSessions`
|
|
- `notesSources`
|
|
- `cronPlans`
|
|
|
|
## Project
|
|
|
|
The project payload contains:
|
|
|
|
- `id`
|
|
- `name`
|
|
- `description`
|
|
- `initials`
|
|
- `unreadCount`
|
|
|
|
`unreadCount` is the count of open inbox items in the requested project.
|
|
|
|
## Channels
|
|
|
|
System channels are derived by the backend for every project:
|
|
|
|
- `overview`
|
|
- `inbox`
|
|
- `tasks`
|
|
- `ai_sessions`
|
|
- `notes_sources`
|
|
- `cron`
|
|
|
|
Custom channels are stored in the database as project-scoped URL shortcuts:
|
|
|
|
- `title`
|
|
- `icon`
|
|
- `url`
|
|
- `sortOrder`
|
|
|
|
System channel counts are derived from project data. Custom channels do not have counts.
|
|
|
|
## Channel Data
|
|
|
|
The workspace response includes first-screen channel data:
|
|
|
|
- Inbox items map to mail-like message rows.
|
|
- Tasks map to todo-style cards with a `completed` boolean.
|
|
- AI sessions map to session list rows.
|
|
- Notes and sources are merged into one attachment/file-management list.
|
|
- Cron plans are metadata-only scheduled plans.
|
|
|
|
Cron plans do not execute autonomous agent work in this MVP.
|
|
|
|
## Access Control
|
|
|
|
The endpoint only returns a workspace when the authenticated user owns the project. This follows the existing protected router and project dashboard behavior.
|
|
|
|
## Tests
|
|
|
|
Backend tests should verify:
|
|
|
|
- The workspace rejects projects owned by another user.
|
|
- The workspace returns camelCase fields aligned with the frontend type.
|
|
- System channel counts are scoped to the requested project.
|
|
- Custom channels and Cron plans are project-scoped.
|
|
|