Database
Schema
The schema lives at packages/server/prisma/schema.prisma. Models:
User
| Field | Type | Notes |
|---|---|---|
id | UUID | Primary key |
email | string | Unique |
name | string | |
deletedAt | DateTime? | Soft delete |
ApiKey
| Field | Type | Notes |
|---|---|---|
keyHash | string | SHA-256 of the raw key, unique |
keyPrefix | string | First 10 chars for display |
revokedAt | DateTime? | Null = active |
Team
| Field | Type | Notes |
|---|---|---|
slug | string | Unique, auto-generated |
visibility | enum | PUBLIC / PRIVATE |
joinPolicy | enum | AUTO_JOIN / APPROVAL_REQUIRED |
deletedAt | DateTime? | Soft delete |
TeamMember
| Field | Type | Notes |
|---|---|---|
role | enum | OWNER / ADMIN / MEMBER |
Unique constraint on (teamId, userId).
TeamJoinRequest
Tracks pending and reviewed join requests for teams that require approval.
TeamInvitation
Tracks invitations from an owner/admin to an existing Doto user.
Task
| Field | Type | Notes |
|---|---|---|
status | enum | INBOX / ACCEPTED / IN_PROGRESS / DONE / REJECTED / NEEDS_CLARIFICATION |
priority | enum | P0 / P1 / P2 / P3 |
parentId | UUID? | Self-relation for tree structure |
depth | int | Computed on creation, max 4 (root = 0) |
tags | string[] | Auto-populated by AI |
aiClassification | JSON? | { tags, suggestedPriority, reasoning } |
deletedAt | DateTime? | Soft delete, cascades to children |
Prisma v7
Prisma 7 moves the database URL out of schema.prisma and into prisma.config.ts:
typescript
// packages/server/prisma.config.ts
import { defineConfig } from 'prisma/config';
export default defineConfig({
schema: 'prisma/schema.prisma',
migrations: { path: 'prisma/migrations' },
datasource: { url: process.env.DATABASE_URL! },
});The PrismaClient must be initialized with a driver adapter:
typescript
import { PrismaClient } from '@prisma/client';
import { PrismaPg } from '@prisma/adapter-pg';
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL });
const prisma = new PrismaClient({ adapter });Migrations
Create a new migration (development only):
bash
DATABASE_URL=... bun --cwd packages/server run prisma migrate dev --name <description>Apply pending migrations (production / CI):
bash
DATABASE_URL=... bun --cwd packages/server run prisma migrate deployCheck migration status:
bash
DATABASE_URL=... bun --cwd packages/server run prisma migrate statusIn Docker, prisma migrate deploy runs automatically on container startup via scripts/entrypoint.sh.
Regenerate the client
After changing schema.prisma, regenerate the Prisma client:
bash
DATABASE_URL=... bun --cwd packages/server run prisma generate