stones/prisma/schema.prisma

126 lines
3.3 KiB
Plaintext

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Contact {
id String @id @default(cuid())
ethereumAddress String @unique
ethereumAddress2 String?
warpcastAddress String?
ensName String?
name String?
farcaster String?
twitter String?
discord String?
telegram String?
email String?
otherSocial String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations
nftHoldings NftHolding[]
tokenHoldings TokenHolding[]
daoMemberships DaoMembership[]
notes Note[]
tags TagsOnContacts[]
}
model NftHolding {
id String @id @default(cuid())
contactId String
contractAddress String
tokenId String
collectionName String?
acquiredAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
contact Contact @relation(fields: [contactId], references: [id], onDelete: Cascade)
@@unique([contactId, contractAddress, tokenId])
}
model TokenHolding {
id String @id @default(cuid())
contactId String
contractAddress String
tokenSymbol String?
balance String
lastUpdated DateTime @default(now())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
contact Contact @relation(fields: [contactId], references: [id], onDelete: Cascade)
@@unique([contactId, contractAddress])
}
model DaoMembership {
id String @id @default(cuid())
contactId String
daoName String
daoType String
joinedAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
contact Contact @relation(fields: [contactId], references: [id], onDelete: Cascade)
@@unique([contactId, daoName])
}
model Note {
id String @id @default(cuid())
contactId String
content String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
contact Contact @relation(fields: [contactId], references: [id], onDelete: Cascade)
}
model Tag {
id String @id @default(cuid())
name String @unique
color String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
contacts TagsOnContacts[]
}
model TagsOnContacts {
contactId String
tagId String
assignedAt DateTime @default(now())
contact Contact @relation(fields: [contactId], references: [id], onDelete: Cascade)
tag Tag @relation(fields: [tagId], references: [id], onDelete: Cascade)
@@id([contactId, tagId])
}
model DataSource {
id String @id @default(cuid())
name String @unique
type String
description String?
lastScraped DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model ScrapingJob {
id String @id @default(cuid())
sourceName String
status String
startedAt DateTime?
completedAt DateTime?
recordsProcessed Int @default(0)
recordsAdded Int @default(0)
recordsUpdated Int @default(0)
errorMessage String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}