mirror of
https://github.com/versia-pub/server.git
synced 2025-12-06 16:38:19 +01:00
190 lines
7.7 KiB
Plaintext
190 lines
7.7 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
previewFeatures = ["postgresqlExtensions"]
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
extensions = [pg_uuidv7]
|
|
}
|
|
|
|
model Application {
|
|
id String @id @default(dbgenerated("uuid_generate_v7()")) @db.Uuid
|
|
name String
|
|
website String?
|
|
vapid_key String?
|
|
client_id String
|
|
secret String
|
|
scopes String
|
|
redirect_uris String
|
|
statuses Status[] // One to many relation with Status
|
|
tokens Token[] // One to many relation with Token
|
|
}
|
|
|
|
model Emoji {
|
|
id String @id @default(dbgenerated("uuid_generate_v7()")) @db.Uuid
|
|
shortcode String
|
|
url String
|
|
visible_in_picker Boolean
|
|
instance Instance? @relation(fields: [instanceId], references: [id], onDelete: Cascade)
|
|
instanceId String? @db.Uuid
|
|
alt String?
|
|
content_type String
|
|
users User[] // Many to many relation with User
|
|
statuses Status[] // Many to many relation with Status
|
|
}
|
|
|
|
model Instance {
|
|
id String @id @default(dbgenerated("uuid_generate_v7()")) @db.Uuid
|
|
base_url String
|
|
name String
|
|
version String
|
|
logo Json
|
|
emojis Emoji[] // One to many relation with Emoji
|
|
statuses Status[] // One to many relation with Status
|
|
users User[] // One to many relation with User
|
|
}
|
|
|
|
model Like {
|
|
id String @id @default(dbgenerated("uuid_generate_v7()")) @db.Uuid
|
|
liker User @relation("UserLiked", fields: [likerId], references: [id], onDelete: Cascade)
|
|
likerId String @db.Uuid
|
|
liked Status @relation("LikedToStatus", fields: [likedId], references: [id], onDelete: Cascade)
|
|
likedId String @db.Uuid
|
|
createdAt DateTime @default(now())
|
|
}
|
|
|
|
model LysandObject {
|
|
id String @id @default(dbgenerated("uuid_generate_v7()")) @db.Uuid
|
|
remote_id String @unique
|
|
type String
|
|
uri String @unique
|
|
created_at DateTime @default(now())
|
|
author LysandObject? @relation("LysandObjectToAuthor", fields: [authorId], references: [id], onDelete: Cascade)
|
|
authorId String? @db.Uuid
|
|
extra_data Json
|
|
extensions Json
|
|
children LysandObject[] @relation("LysandObjectToAuthor")
|
|
}
|
|
|
|
model Relationship {
|
|
id String @id @default(dbgenerated("uuid_generate_v7()")) @db.Uuid
|
|
owner User @relation("OwnerToRelationship", fields: [ownerId], references: [id], onDelete: Cascade)
|
|
ownerId String @db.Uuid
|
|
subject User @relation("SubjectToRelationship", fields: [subjectId], references: [id], onDelete: Cascade)
|
|
subjectId String @db.Uuid
|
|
following Boolean
|
|
showingReblogs Boolean
|
|
notifying Boolean
|
|
followedBy Boolean
|
|
blocking Boolean
|
|
blockedBy Boolean
|
|
muting Boolean
|
|
mutingNotifications Boolean
|
|
requested Boolean
|
|
domainBlocking Boolean
|
|
endorsed Boolean
|
|
languages String[]
|
|
note String
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model Status {
|
|
id String @id @default(dbgenerated("uuid_generate_v7()")) @db.Uuid
|
|
uri String @unique
|
|
author User @relation("UserStatuses", fields: [authorId], references: [id], onDelete: Cascade)
|
|
authorId String @db.Uuid
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
reblog Status? @relation("StatusToStatus", fields: [reblogId], references: [id], onDelete: Cascade)
|
|
reblogId String? @db.Uuid
|
|
isReblog Boolean
|
|
content String @default("")
|
|
contentType String @default("text/plain")
|
|
visibility String
|
|
inReplyToPost Status? @relation("StatusToStatusReply", fields: [inReplyToPostId], references: [id], onDelete: SetNull)
|
|
inReplyToPostId String? @db.Uuid
|
|
quotingPost Status? @relation("StatusToStatusQuote", fields: [quotingPostId], references: [id], onDelete: SetNull)
|
|
quotingPostId String? @db.Uuid
|
|
instance Instance? @relation(fields: [instanceId], references: [id], onDelete: Cascade)
|
|
instanceId String? @db.Uuid
|
|
sensitive Boolean
|
|
spoilerText String @default("")
|
|
application Application? @relation(fields: [applicationId], references: [id], onDelete: SetNull)
|
|
applicationId String? @db.Uuid
|
|
emojis Emoji[] @relation
|
|
mentions User[]
|
|
likes Like[] @relation("LikedToStatus")
|
|
reblogs Status[] @relation("StatusToStatus")
|
|
replies Status[] @relation("StatusToStatusReply")
|
|
quotes Status[] @relation("StatusToStatusQuote")
|
|
pinnedBy User[] @relation("UserPinnedNotes")
|
|
attachments Attachment[]
|
|
}
|
|
|
|
model Token {
|
|
id String @id @default(dbgenerated("uuid_generate_v7()")) @db.Uuid
|
|
token_type String
|
|
scope String
|
|
access_token String
|
|
code String
|
|
created_at DateTime @default(now())
|
|
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
userId String? @db.Uuid
|
|
application Application? @relation(fields: [applicationId], references: [id], onDelete: Cascade)
|
|
applicationId String? @db.Uuid
|
|
}
|
|
|
|
model Attachment {
|
|
id String @id @default(dbgenerated("uuid_generate_v7()")) @db.Uuid
|
|
url String
|
|
remote_url String?
|
|
thumbnail_url String?
|
|
mime_type String
|
|
description String?
|
|
blurhash String?
|
|
sha256 String?
|
|
fps Int?
|
|
duration Int?
|
|
width Int?
|
|
height Int?
|
|
size Int?
|
|
status Status? @relation(fields: [statusId], references: [id], onDelete: Cascade)
|
|
statusId String? @db.Uuid
|
|
}
|
|
|
|
model User {
|
|
id String @id @default(dbgenerated("uuid_generate_v7()")) @db.Uuid
|
|
uri String @unique
|
|
username String @unique
|
|
displayName String
|
|
password String? // Nullable
|
|
email String? @unique // Nullable
|
|
note String @default("")
|
|
isAdmin Boolean @default(false)
|
|
endpoints Json? // Nullable
|
|
source Json
|
|
avatar String
|
|
header String
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
isBot Boolean @default(false)
|
|
isLocked Boolean @default(false)
|
|
isDiscoverable Boolean @default(false)
|
|
sanctions String[] @default([])
|
|
publicKey String
|
|
privateKey String? // Nullable
|
|
relationships Relationship[] @relation("OwnerToRelationship") // One to many relation with Relationship
|
|
relationshipSubjects Relationship[] @relation("SubjectToRelationship") // One to many relation with Relationship
|
|
instance Instance? @relation(fields: [instanceId], references: [id], onDelete: Cascade) // Many to one relation with Instance
|
|
instanceId String? @db.Uuid
|
|
pinnedNotes Status[] @relation("UserPinnedNotes") // Many to many relation with Status
|
|
emojis Emoji[] // Many to many relation with Emoji
|
|
statuses Status[] @relation("UserStatuses") // One to many relation with Status
|
|
tokens Token[] // One to many relation with Token
|
|
likes Like[] @relation("UserLiked") // One to many relation with Like
|
|
statusesMentioned Status[] // Many to many relation with Status
|
|
}
|