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") contentSource String @default("") 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[] relatedNotifications Notification[] } 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 Notification { id String @id @default(dbgenerated("uuid_generate_v7()")) @db.Uuid type String createdAt DateTime @default(now()) notified User @relation("NotificationToNotified", fields: [notifiedId], references: [id], onDelete: Cascade) notifiedId String @db.Uuid account User @relation(fields: [accountId], references: [id], onDelete: Cascade) accountId String @db.Uuid 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 notifications Notification[] // One to many relation with Notification notified Notification[] @relation("NotificationToNotified") // One to many relation with Notification }