schema.prisma 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. generator client {
  2. provider = "prisma-client-js"
  3. }
  4. datasource db {
  5. provider = "postgresql"
  6. url = env("DATABASE_URL")
  7. }
  8. model WeatherForecast {
  9. id String @id @default(cuid())
  10. city String
  11. targetDate DateTime
  12. model String // 'gfs', 'ecmwf', 'icon'
  13. modelRunTime DateTime
  14. predictedHigh Float
  15. stdDev Float
  16. rawData Json
  17. createdAt DateTime @default(now())
  18. @@index([city, targetDate, model])
  19. }
  20. model MarketSnapshot {
  21. id String @id @default(cuid())
  22. polymarketId Int
  23. marketGroupId Int
  24. city String
  25. targetDate DateTime
  26. bucketLabel String
  27. yesPrice Float
  28. noPrice Float
  29. volume24h Float
  30. liquidity Float
  31. yesTokenId String
  32. noTokenId String
  33. createdAt DateTime @default(now())
  34. @@index([city, targetDate, createdAt])
  35. }
  36. model Signal {
  37. id String @id @default(cuid())
  38. type String // 'TAIL_NO', 'LATENCY_ARB', 'PARITY_ARB'
  39. city String
  40. targetDate DateTime
  41. bucketLabel String
  42. marketYesPrice Float
  43. modelProbability Float
  44. edge Float
  45. expectedReturn Float
  46. agreementScore Float
  47. confidence String
  48. recommendedSize Float
  49. executed Boolean @default(false)
  50. executedAt DateTime?
  51. tradeId String?
  52. trade Trade? @relation(fields: [tradeId], references: [id])
  53. createdAt DateTime @default(now())
  54. @@unique([type, city, targetDate, bucketLabel], name: "type_city_date_bucket")
  55. @@index([type, city, targetDate])
  56. }
  57. model Trade {
  58. id String @id @default(cuid())
  59. signalId String?
  60. signals Signal[]
  61. side String // 'BUY_YES', 'BUY_NO'
  62. tokenId String
  63. price Float
  64. size Float
  65. costBasis Float // price * size
  66. orderId String? // Polymarket order ID
  67. status String // 'PENDING', 'FILLED', 'CANCELLED'
  68. dryRun Boolean @default(true)
  69. filledPrice Float?
  70. pnl Float?
  71. resolvedAt DateTime?
  72. createdAt DateTime @default(now())
  73. @@index([status, createdAt])
  74. }
  75. model DailyMetrics {
  76. id String @id @default(cuid())
  77. date DateTime @unique
  78. totalTrades Int
  79. winningTrades Int
  80. losingTrades Int
  81. grossPnl Float
  82. netPnl Float
  83. winRate Float
  84. avgEdge Float
  85. maxDrawdown Float
  86. createdAt DateTime @default(now())
  87. }