happy-server/prisma/schema.prisma
2025-07-18 23:33:44 -07:00

127 lines
3.2 KiB
Plaintext

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
generator json {
provider = "prisma-json-types-generator"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
//
// Account
//
model Account {
id String @id @default(cuid())
publicKey String @unique
seq Int @default(0)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
Session Session[]
Update Update[]
AccountPushToken AccountPushToken[]
TerminalAuthRequest TerminalAuthRequest[]
}
model TerminalAuthRequest {
id String @id @default(cuid())
publicKey String @unique
response String?
responseAccountId String?
responseAccount Account? @relation(fields: [responseAccountId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model AccountPushToken {
id String @id @default(cuid())
accountId String
account Account @relation(fields: [accountId], references: [id])
token String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([accountId, token])
}
//
// Sessions
//
model Session {
id String @id @default(cuid())
tag String
accountId String
account Account @relation(fields: [accountId], references: [id])
metadata String
metadataVersion Int @default(0)
agentState String?
agentStateVersion Int @default(0)
seq Int @default(0)
active Boolean @default(true)
lastActiveAt DateTime @default(now())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
messages SessionMessage[]
@@unique([accountId, tag])
}
model SessionMessage {
id String @id @default(cuid())
sessionId String
session Session @relation(fields: [sessionId], references: [id])
localId String?
seq Int
/// [SessionMessageContent]
content Json
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([sessionId, localId])
}
model Update {
id String @id @default(cuid())
accountId String
account Account @relation(fields: [accountId], references: [id])
seq Int
/// [UpdateBody]
content Json
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
//
// Utility
//
model GlobalLock {
key String @id @default(cuid())
value String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
expiresAt DateTime
}
model RepeatKey {
key String @id
value String
createdAt DateTime @default(now())
expiresAt DateTime
}
model SimpleCache {
key String @id
value String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}