Events & plans
ai_usage
AI usage log (migration 0038): every Gemini call, for /admin/ai-usage.
Columns
| Column | Type | Null | Default | Keys |
|---|---|---|---|---|
| id | uuid | no | gen_random_uuid() | PK |
| created_at | timestamp | no | now() | |
| purpose | text | no | — | |
| source | text | yes | — | |
| model | text | no | — | |
| model_version | text | yes | — | |
| status | text okrefusederror | no | — | |
| duration_ms | integer | no | — | |
| input_tokens | integer | no | 0 | |
| output_text_tokens | integer | no | 0 | |
| output_image_tokens | integer | no | 0 | |
| thought_tokens | integer | no | 0 | |
| cost_usd | numeric(12, 6) | yes | — | |
| event_id | uuid | yes | — | |
| flyer_id | uuid | yes | — | |
| dancer_id | uuid | yes | — | |
| error | text | yes | — |
Value lists come from .$type<'a' | 'b'>() in the schema — enforced in TypeScript only, not by the database.
Keys, constraints & indexes
Unique
None besides the primary key.
Indexes
- (created_at)ai_usage_created_idx
- (purpose)ai_usage_purpose_idx
Foreign keys
- event_id → events.id on delete set null
- flyer_id → event_flyers.id on delete set null
- dancer_id → dancers.id on delete set null
Used by
Code that reads or writes this table, found by static analysis of the tRPC routers and API handlers (including helpers they call).
tRPC procedures
REST & webhooks
- ANY /mcp
- ANY /mcp/public
Relations
Rendering diagram…
Diagram source
erDiagram
ai_usage {
uuid id PK
uuid event_id FK
uuid flyer_id FK
uuid dancer_id FK
}
dancers {
uuid id PK
text email UK
text neon_auth_id UK
text username UK
}
event_flyers {
uuid id PK
uuid event_id FK
uuid post_id FK
uuid look_id FK
uuid created_by FK
}
events {
uuid id PK
uuid host_profile_id FK
uuid edited_by FK
}
events |o--o{ ai_usage : "event_id"
event_flyers |o--o{ ai_usage : "flyer_id"
dancers |o--o{ ai_usage : "dancer_id"
events ||--o{ event_flyers : "event_id"
dancers |o--o{ event_flyers : "created_by"
dancers |o--o{ events : "edited_by" Defined at server/database/schema.ts:1095 as aiUsage.