postiz/libraries/nestjs-libraries/src/database/prisma/schema.prisma

730 lines
21 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"
runtime = "nodejs"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Organization {
id String @id @default(uuid())
name String
description String?
apiKey String?
users UserOrganization[]
media Media[]
paymentId String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
github GitHub[]
subscription Subscription?
Integration Integration[]
post Post[] @relation("organization")
submittedPost Post[] @relation("submittedForOrg")
allowTrial Boolean @default(false)
isTrailing Boolean @default(false)
Comments Comments[]
notifications Notifications[]
buyerOrganization MessagesGroup[]
usedCodes UsedCodes[]
credits Credits[]
plugs Plugs[]
customers Customer[]
webhooks Webhooks[]
tags Tags[]
signatures Signatures[]
autoPost AutoPost[]
sets Sets[]
thirdParty ThirdParty[]
errors Errors[]
}
model Tags {
id String @id @default(uuid())
name String
color String
orgId String
organization Organization @relation(fields: [orgId], references: [id])
posts TagsPosts[]
deletedAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([orgId])
@@index([deletedAt])
}
model TagsPosts {
postId String
post Post @relation(fields: [postId], references: [id])
tagId String
tag Tags @relation(fields: [tagId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@id([postId, tagId])
@@unique([postId, tagId])
}
model User {
id String @id @default(uuid())
email String
password String?
providerName Provider
name String?
lastName String?
isSuperAdmin Boolean @default(false)
bio String?
audience Int @default(0)
pictureId String?
picture Media? @relation(fields: [pictureId], references: [id])
providerId String?
organizations UserOrganization[]
timezone Int
comments Comments[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
lastReadNotifications DateTime @default(now())
inviteId String?
activated Boolean @default(true)
items ItemUser[]
marketplace Boolean @default(true)
account String?
connectedAccount Boolean @default(false)
groupBuyer MessagesGroup[] @relation("groupBuyer")
groupSeller MessagesGroup[] @relation("groupSeller")
orderBuyer Orders[] @relation("orderBuyer")
orderSeller Orders[] @relation("orderSeller")
payoutProblems PayoutProblems[]
lastOnline DateTime @default(now())
agencies SocialMediaAgency[]
ip String?
agent String?
@@unique([email, providerName])
@@index([lastReadNotifications])
@@index([inviteId])
@@index([account])
@@index([lastOnline])
@@index([pictureId])
}
model UsedCodes {
id String @id @default(uuid())
code String
orgId String
organization Organization @relation(fields: [orgId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([code])
}
model UserOrganization {
id String @id @default(uuid())
user User @relation(fields: [userId], references: [id])
userId String
organization Organization @relation(fields: [organizationId], references: [id])
organizationId String
disabled Boolean @default(false)
role Role @default(USER)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([userId, organizationId])
@@index([disabled])
}
model GitHub {
id String @id @default(uuid())
login String?
name String?
token String
jobId String?
organization Organization @relation(fields: [organizationId], references: [id])
organizationId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([login])
@@index([organizationId])
}
model Trending {
id String @id @default(uuid())
trendingList String
language String?
hash String
date DateTime
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([language])
@@index([hash])
}
model TrendingLog {
id String @id @default(uuid())
language String?
date DateTime
}
model ItemUser {
id String @id @default(uuid())
user User @relation(fields: [userId], references: [id])
userId String
key String
@@unique([userId, key])
@@index([userId])
@@index([key])
}
model Star {
id String @id @default(uuid())
stars Int
totalStars Int
forks Int
totalForks Int
login String
date DateTime @default(now()) @db.Date
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([login, date])
}
model Media {
id String @id @default(uuid())
name String
path String
organization Organization @relation(fields: [organizationId], references: [id])
organizationId String
thumbnail String?
thumbnailTimestamp Int?
alt String?
fileSize Int @default(0)
type String @default("image")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
userPicture User[]
agencies SocialMediaAgency[]
deletedAt DateTime?
@@index([name])
@@index([organizationId])
@@index([type])
}
model SocialMediaAgency {
id String @id @default(uuid())
user User @relation(fields: [userId], references: [id])
userId String @unique()
name String
logoId String?
logo Media? @relation(fields: [logoId], references: [id])
website String?
slug String?
facebook String?
instagram String?
twitter String?
linkedIn String?
youtube String?
tiktok String?
otherSocialMedia String?
shortDescription String
description String
niches SocialMediaAgencyNiche[]
approved Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
@@index([userId])
@@index([deletedAt])
@@index([id])
}
model SocialMediaAgencyNiche {
agencyId String
agency SocialMediaAgency @relation(fields: [agencyId], references: [id])
niche String
@@id([agencyId, niche])
}
model Credits {
id String @id @default(uuid())
organization Organization @relation(fields: [organizationId], references: [id])
organizationId String
credits Int
type String @default("ai_images")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([organizationId])
@@index([createdAt])
}
model Subscription {
id String @id @default(cuid())
organizationId String @unique
organization Organization @relation(fields: [organizationId], references: [id])
subscriptionTier SubscriptionTier
identifier String?
cancelAt DateTime?
period Period
totalChannels Int
isLifetime Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
@@index([organizationId])
@@index([deletedAt])
}
model Customer {
id String @id @default(uuid())
name String
orgId String
organization Organization @relation(fields: [orgId], references: [id])
integrations Integration[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
@@unique([orgId, name, deletedAt])
}
model Integration {
id String @id @default(cuid())
internalId String
organizationId String
name String
organization Organization @relation(fields: [organizationId], references: [id])
picture String?
providerIdentifier String
type String
token String
disabled Boolean @default(false)
tokenExpiration DateTime?
refreshToken String?
posts Post[]
profile String?
deletedAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime? @updatedAt
orderItems OrderItems[]
inBetweenSteps Boolean @default(false)
refreshNeeded Boolean @default(false)
postingTimes String @default("[{\"time\":120}, {\"time\":400}, {\"time\":700}]")
customInstanceDetails String?
customerId String?
customer Customer? @relation(fields: [customerId], references: [id])
plugs Plugs[]
exisingPlugData ExisingPlugData[]
rootInternalId String?
additionalSettings String? @default("[]")
webhooks IntegrationsWebhooks[]
@@unique([organizationId, internalId])
@@index([rootInternalId])
@@index([organizationId])
@@index([providerIdentifier])
@@index([updatedAt])
@@index([createdAt])
@@index([deletedAt])
@@index([customerId])
@@index([inBetweenSteps])
@@index([refreshNeeded])
@@index([disabled])
}
model Signatures {
id String @id @default(uuid())
organizationId String
organization Organization @relation(fields: [organizationId], references: [id])
content String
autoAdd Boolean
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
@@index([createdAt])
@@index([organizationId])
@@index([deletedAt])
}
model Comments {
id String @id @default(uuid())
content String
organizationId String
organization Organization @relation(fields: [organizationId], references: [id])
postId String
post Post @relation(fields: [postId], references: [id])
userId String
user User @relation(fields: [userId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
@@index([createdAt])
@@index([organizationId])
@@index([userId])
@@index([postId])
@@index([deletedAt])
}
model Post {
id String @id @default(cuid())
state State @default(QUEUE)
publishDate DateTime
organizationId String
integrationId String
content String
group String
organization Organization @relation("organization", fields: [organizationId], references: [id])
integration Integration @relation(fields: [integrationId], references: [id])
title String?
description String?
parentPostId String?
releaseId String?
releaseURL String?
settings String?
parentPost Post? @relation("parentPostId", fields: [parentPostId], references: [id])
childrenPost Post[] @relation("parentPostId")
image String?
submittedForOrderId String?
submittedForOrder Orders? @relation(fields: [submittedForOrderId], references: [id])
submittedForOrganizationId String?
submittedForOrganization Organization? @relation("submittedForOrg", fields: [submittedForOrganizationId], references: [id])
approvedSubmitForOrder APPROVED_SUBMIT_FOR_ORDER @default(NO)
lastMessageId String?
lastMessage Messages? @relation(fields: [lastMessageId], references: [id])
intervalInDays Int?
payoutProblems PayoutProblems[]
comments Comments[]
tags TagsPosts[]
errors Errors[]
error String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
@@index([group])
@@index([deletedAt])
@@index([publishDate])
@@index([state])
@@index([organizationId])
@@index([parentPostId])
@@index([submittedForOrderId])
@@index([intervalInDays])
@@index([approvedSubmitForOrder])
@@index([lastMessageId])
@@index([createdAt])
@@index([updatedAt])
@@index([releaseURL])
@@index([integrationId])
}
model Notifications {
id String @id @default(uuid())
organizationId String
organization Organization @relation(fields: [organizationId], references: [id])
content String
link String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
@@index([createdAt])
@@index([organizationId])
@@index([deletedAt])
}
model MessagesGroup {
id String @id @default(uuid())
buyerOrganizationId String
buyerOrganization Organization @relation(fields: [buyerOrganizationId], references: [id])
buyerId String
buyer User @relation("groupBuyer", fields: [buyerId], references: [id])
sellerId String
seller User @relation("groupSeller", fields: [sellerId], references: [id])
messages Messages[]
orders Orders[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([buyerId, sellerId])
@@index([createdAt])
@@index([updatedAt])
@@index([buyerOrganizationId])
}
model PayoutProblems {
id String @id @default(uuid())
status String
orderId String
order Orders @relation(fields: [orderId], references: [id])
userId String
user User @relation(fields: [userId], references: [id])
postId String?
post Post? @relation(fields: [postId], references: [id])
amount Int
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Orders {
id String @id @default(uuid())
buyerId String
sellerId String
posts Post[]
buyer User @relation("orderBuyer", fields: [buyerId], references: [id])
seller User @relation("orderSeller", fields: [sellerId], references: [id])
status OrderStatus
ordersItems OrderItems[]
messageGroupId String
messageGroup MessagesGroup @relation(fields: [messageGroupId], references: [id])
captureId String?
payoutProblems PayoutProblems[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([buyerId])
@@index([sellerId])
@@index([updatedAt])
@@index([createdAt])
@@index([messageGroupId])
}
model OrderItems {
id String @id @default(uuid())
orderId String
order Orders @relation(fields: [orderId], references: [id])
integrationId String
integration Integration @relation(fields: [integrationId], references: [id])
quantity Int
price Int
@@index([orderId])
@@index([integrationId])
}
model Messages {
id String @id @default(uuid())
from From
content String?
groupId String
group MessagesGroup @relation(fields: [groupId], references: [id])
special String?
posts Post[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
@@index([groupId])
@@index([createdAt])
@@index([deletedAt])
}
model Plugs {
id String @id @default(uuid())
organizationId String
organization Organization @relation(fields: [organizationId], references: [id])
plugFunction String
data String
integrationId String
integration Integration @relation(fields: [integrationId], references: [id])
activated Boolean @default(true)
@@unique([plugFunction, integrationId])
@@index([organizationId])
}
model ExisingPlugData {
id String @id @default(uuid())
integrationId String
integration Integration @relation(fields: [integrationId], references: [id])
methodName String
value String
@@unique([integrationId, methodName, value])
}
model PopularPosts {
id String @id @default(uuid())
category String
topic String
content String
hook String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model IntegrationsWebhooks {
integrationId String
integration Integration @relation(fields: [integrationId], references: [id])
webhookId String
webhook Webhooks @relation(fields: [webhookId], references: [id])
@@id([integrationId, webhookId])
@@unique([integrationId, webhookId])
@@index([integrationId])
@@index([webhookId])
}
model Webhooks {
id String @id @default(uuid())
name String
organizationId String
organization Organization @relation(fields: [organizationId], references: [id])
integrations IntegrationsWebhooks[]
url String
deletedAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([organizationId])
@@index([deletedAt])
}
model AutoPost {
id String @id @default(uuid())
organizationId String
organization Organization @relation(fields: [organizationId], references: [id])
title String
content String?
onSlot Boolean
syncLast Boolean
url String
lastUrl String
active Boolean
addPicture Boolean
generateContent Boolean
integrations String
deletedAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([deletedAt])
}
model Sets {
id String @id @default(uuid())
organizationId String
organization Organization @relation(fields: [organizationId], references: [id])
name String
content String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([organizationId])
}
model ThirdParty {
id String @id @default(uuid())
organizationId String
organization Organization @relation(fields: [organizationId], references: [id])
identifier String
name String
internalId String
apiKey String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
@@unique([organizationId, internalId])
@@index([organizationId])
@@index([deletedAt])
}
model Errors {
id String @id @default(uuid())
message String
body String @default("{}")
platform String
organizationId String
organization Organization @relation(fields: [organizationId], references: [id])
postId String
post Post @relation(fields: [postId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([organizationId])
@@index([createdAt])
}
model Mentions {
name String
username String
platform String
image String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@id([name, username, platform, image])
@@index([createdAt])
}
enum OrderStatus {
PENDING
ACCEPTED
CANCELED
COMPLETED
}
enum From {
BUYER
SELLER
}
enum State {
QUEUE
PUBLISHED
ERROR
DRAFT
}
enum SubscriptionTier {
STANDARD
PRO
TEAM
ULTIMATE
}
enum Period {
MONTHLY
YEARLY
}
enum Provider {
LOCAL
GITHUB
GOOGLE
FARCASTER
WALLET
GENERIC
}
enum Role {
SUPERADMIN
ADMIN
USER
}
enum APPROVED_SUBMIT_FOR_ORDER {
NO
WAITING_CONFIRMATION
YES
}