tinker / prisma /schema.sqlite.prisma
truegleai's picture
feat: full cloud-ready deployment (SQLite + Ollama cloud + integrated WebSocket)
f31cfe8 verified
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = "file:./data/tinker.db"
relationMode = "prisma"
}
model User {
id String @id @default(cuid())
name String?
email String @unique
password String?
emailVerified DateTime?
image String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
subscription String @default("free")
credits Int @default(10)
maxDeals Int @default(5)
accounts Account[]
sessions Session[]
deals Deal[]
scanLogs ScanLog[]
negotiations Negotiation[]
transactions Transaction[]
queueItems QueueItem[]
@@map("users")
}
model Account {
id String @id @default(cuid())
userId String
type String
provider String
providerAccountId String
refresh_token String?
access_token String?
expires_at Int?
token_type String?
scope String?
id_token String?
session_state String?
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([provider, providerAccountId])
@@map("accounts")
}
model Session {
id String @id @default(cuid())
sessionToken String @unique
userId String
expires DateTime
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@map("sessions")
}
model Deal {
id String @id @default(cuid())
userId String
title String
sourceUrl String
marketplace String
buyPrice Float
estimatedSell Float
profitMargin Float
confidence Float @default(0)
status String @default("pending")
scrapedAt DateTime @default(now())
analyzedAt DateTime?
negotiatedAt DateTime?
transactedAt DateTime?
sellerContact String?
notes String?
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
negotiations Negotiation[]
transaction Transaction?
@@index([userId, status])
@@map("deals")
}
model ScanLog {
id String @id @default(cuid())
userId String?
marketplace String
itemsScanned Int @default(0)
dealsFound Int @default(0)
duration Int
status String @default("completed")
error String?
createdAt DateTime @default(now())
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
@@index([createdAt])
@@map("scan_logs")
}
model Negotiation {
id String @id @default(cuid())
dealId String
userId String
message String
response String?
offeredPrice Float?
acceptedPrice Float?
status String @default("pending")
turn Int @default(1)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deal Deal @relation(fields: [dealId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([dealId])
@@map("negotiations")
}
model Transaction {
id String @id @default(cuid())
dealId String @unique
userId String
amount Float
fee Float @default(0)
netProfit Float
paymentMethod String
paymentStatus String @default("pending")
shippingAddress String?
trackingNumber String?
status String @default("pending")
createdAt DateTime @default(now())
completedAt DateTime?
deal Deal @relation(fields: [dealId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([userId, status])
@@map("transactions")
}
model QueueItem {
id String @id @default(cuid())
userId String
dealId String?
action String
priority Int @default(5)
status String @default("queued")
data String?
error String?
retries Int @default(0)
maxRetries Int @default(3)
scheduled DateTime?
startedAt DateTime?
finishedAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([status, priority])
@@map("queue_items")
}