generator client { provider = "prisma-client-js" } model User { id Int @id @default(autoincrement()) username String @unique password String ownedWallets Wallet[] @relation("UserWallets") followedWallets WalletFollow[] // Intermediate table relation } model Wallet { id Int @id @default(autoincrement()) publicKey String privateKey String userId Int owner User @relation("UserWallets", fields: [userId], references: [id]) followers WalletFollow[] // Intermediate table relation holdings Holding[] @@index([userId]) } // Intermediate table for many-to-many follow relationship model WalletFollow { id Int @id @default(autoincrement()) userId Int walletId Int user User @relation(fields: [userId], references: [id]) wallet Wallet @relation(fields: [walletId], references: [id]) createdAt DateTime @default(now()) @@unique([userId, walletId]) // Prevent duplicate follows @@index([userId]) @@index([walletId]) } model Holding { id Int @id @default(autoincrement()) tokenMint String @unique tokenName String ammount Float totalAcquisitionValueUSD Float totalSellValueUSD Float walletId Int wallet Wallet @relation(fields: [walletId], references: [id]) transactions Transaction[] pnl Float @default(0.0) } enum TransactionStatus { ORIGINAL ORIGINAL_FOLLOWED PENDING FAILED SENT CONFIRMED } model Transaction { id Int @id @default(autoincrement()) transactionId String amount Float date DateTime amountUSD Float holdingId Int holding Holding @relation(fields: [holdingId], references: [id]) isClosed Boolean @default(false) status TransactionStatus originalId Int? original Transaction? @relation("OriginalTransaction", fields: [originalId], references: [id]) relatedTo Transaction[] @relation("OriginalTransaction") timestamp DateTime @default(now()) } datasource db { provider = "mysql" url = "mysql://root:Zelen0ku4e@192.168.0.10:3306/trader" } model Timeseries { id Int @id @default(autoincrement()) timestamp DateTime @default(now()) data String }