|
|
| |
| |
| |
|
|
| Object.defineProperty(exports, "__esModule", { value: true }); |
|
|
| const { |
| PrismaClientKnownRequestError, |
| PrismaClientUnknownRequestError, |
| PrismaClientRustPanicError, |
| PrismaClientInitializationError, |
| PrismaClientValidationError, |
| getPrismaClient, |
| sqltag, |
| empty, |
| join, |
| raw, |
| skip, |
| Decimal, |
| Debug, |
| objectEnumValues, |
| makeStrictEnum, |
| Extensions, |
| warnOnce, |
| defineDmmfProperty, |
| Public, |
| getRuntime, |
| createParam, |
| } = require('@prisma/client/runtime/wasm-engine-edge.js') |
|
|
|
|
| const Prisma = {} |
|
|
| exports.Prisma = Prisma |
| exports.$Enums = {} |
|
|
| |
| |
| |
| |
| Prisma.prismaVersion = { |
| client: "6.19.3", |
| engine: "c2990dca591cba766e3b7ef5d9e8a84796e47ab7" |
| } |
|
|
| Prisma.PrismaClientKnownRequestError = PrismaClientKnownRequestError; |
| Prisma.PrismaClientUnknownRequestError = PrismaClientUnknownRequestError |
| Prisma.PrismaClientRustPanicError = PrismaClientRustPanicError |
| Prisma.PrismaClientInitializationError = PrismaClientInitializationError |
| Prisma.PrismaClientValidationError = PrismaClientValidationError |
| Prisma.Decimal = Decimal |
|
|
| |
| |
| |
| Prisma.sql = sqltag |
| Prisma.empty = empty |
| Prisma.join = join |
| Prisma.raw = raw |
| Prisma.validator = Public.validator |
|
|
| |
| |
| |
| Prisma.getExtensionContext = Extensions.getExtensionContext |
| Prisma.defineExtension = Extensions.defineExtension |
|
|
| |
| |
| |
| Prisma.DbNull = objectEnumValues.instances.DbNull |
| Prisma.JsonNull = objectEnumValues.instances.JsonNull |
| Prisma.AnyNull = objectEnumValues.instances.AnyNull |
|
|
| Prisma.NullTypes = { |
| DbNull: objectEnumValues.classes.DbNull, |
| JsonNull: objectEnumValues.classes.JsonNull, |
| AnyNull: objectEnumValues.classes.AnyNull |
| } |
|
|
|
|
|
|
|
|
|
|
| |
| |
| |
| exports.Prisma.TransactionIsolationLevel = makeStrictEnum({ |
| Serializable: 'Serializable' |
| }); |
|
|
| exports.Prisma.UserScalarFieldEnum = { |
| id: 'id', |
| email: 'email', |
| passwordHash: 'passwordHash', |
| isActive: 'isActive', |
| telegramChatId: 'telegramChatId', |
| createdAt: 'createdAt', |
| updatedAt: 'updatedAt' |
| }; |
|
|
| exports.Prisma.MarketScalarFieldEnum = { |
| id: 'id', |
| question: 'question', |
| category: 'category', |
| countryCode: 'countryCode', |
| yesPrice: 'yesPrice', |
| noPrice: 'noPrice', |
| volumeEur: 'volumeEur', |
| liquidityEur: 'liquidityEur', |
| spread: 'spread', |
| bestBid: 'bestBid', |
| bestAsk: 'bestAsk', |
| clobTokenId: 'clobTokenId', |
| analyzable: 'analyzable', |
| status: 'status', |
| closesAt: 'closesAt', |
| lastSynced: 'lastSynced' |
| }; |
|
|
| exports.Prisma.AISignalScalarFieldEnum = { |
| id: 'id', |
| marketId: 'marketId', |
| signal: 'signal', |
| confidence: 'confidence', |
| summary: 'summary', |
| keyRisk: 'keyRisk', |
| newsCount: 'newsCount', |
| modelVersion: 'modelVersion', |
| impliedProb: 'impliedProb', |
| fairProb: 'fairProb', |
| edgePoints: 'edgePoints', |
| generatedAt: 'generatedAt' |
| }; |
|
|
| exports.Prisma.PositionScalarFieldEnum = { |
| id: 'id', |
| userId: 'userId', |
| marketId: 'marketId', |
| outcome: 'outcome', |
| amountEur: 'amountEur', |
| entryPrice: 'entryPrice', |
| currentPrice: 'currentPrice', |
| pnl: 'pnl', |
| kellyFraction: 'kellyFraction', |
| status: 'status', |
| openedAt: 'openedAt', |
| closedAt: 'closedAt' |
| }; |
|
|
| exports.Prisma.WatchlistScalarFieldEnum = { |
| id: 'id', |
| userId: 'userId', |
| marketId: 'marketId', |
| alertThreshold: 'alertThreshold', |
| createdAt: 'createdAt' |
| }; |
|
|
| exports.Prisma.AlertScalarFieldEnum = { |
| id: 'id', |
| userId: 'userId', |
| marketId: 'marketId', |
| type: 'type', |
| message: 'message', |
| sentAt: 'sentAt' |
| }; |
|
|
| exports.Prisma.SortOrder = { |
| asc: 'asc', |
| desc: 'desc' |
| }; |
|
|
| exports.Prisma.NullsOrder = { |
| first: 'first', |
| last: 'last' |
| }; |
|
|
|
|
| exports.Prisma.ModelName = { |
| User: 'User', |
| Market: 'Market', |
| AISignal: 'AISignal', |
| Position: 'Position', |
| Watchlist: 'Watchlist', |
| Alert: 'Alert' |
| }; |
| |
| |
| |
| const config = { |
| "generator": { |
| "name": "client", |
| "provider": { |
| "fromEnvVar": null, |
| "value": "prisma-client-js" |
| }, |
| "output": { |
| "value": "/Users/josesalazar/proyecto-hackaton/backend/node_modules/@prisma/client", |
| "fromEnvVar": null |
| }, |
| "config": { |
| "engineType": "library" |
| }, |
| "binaryTargets": [ |
| { |
| "fromEnvVar": null, |
| "value": "darwin-arm64", |
| "native": true |
| } |
| ], |
| "previewFeatures": [], |
| "sourceFilePath": "/Users/josesalazar/proyecto-hackaton/backend/prisma/schema.prisma" |
| }, |
| "relativeEnvPaths": { |
| "rootEnvPath": null, |
| "schemaEnvPath": "../../../.env" |
| }, |
| "relativePath": "../../../prisma", |
| "clientVersion": "6.19.3", |
| "engineVersion": "c2990dca591cba766e3b7ef5d9e8a84796e47ab7", |
| "datasourceNames": [ |
| "db" |
| ], |
| "activeProvider": "sqlite", |
| "postinstall": false, |
| "inlineDatasources": { |
| "db": { |
| "url": { |
| "fromEnvVar": "DATABASE_URL", |
| "value": null |
| } |
| } |
| }, |
| "inlineSchema": "/**\n * Schema de Prisma ORM para base de datos SQLite.\n * Define 6 modelos: User, Market, AISignal, Position, Watchlist, Alert.\n * Relaciones:\n * - Market 1:N AISignal, Position, Watchlist, Alert\n * - User 1:N Position, Watchlist, Alert\n * No modificar sin consenso del equipo. Generar migraciones con:\n * npx prisma migrate dev\n * npx prisma generate\n */\n\ngenerator client {\n provider = \"prisma-client-js\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel User {\n id Int @id @default(autoincrement())\n email String @unique\n passwordHash String\n isActive Boolean @default(true)\n telegramChatId String? // Configurado manualmente para demo\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n positions Position[]\n watchlist Watchlist[]\n alerts Alert[]\n}\n\nmodel Market {\n id String @id // ID nativo de Polymarket\n question String // Texto de la pregunta del mercado\n category String? // politics | crypto | economics | sports\n countryCode String? // ISO2 — usado por Leaflet para burbujas\n yesPrice Float? // Precio YES: 0.0 a 1.0\n noPrice Float? // Precio NO: 0.0 a 1.0\n volumeEur Float? // Volumen en Eur\n liquidityEur Float? // Liquidez en Eur\n spread Float? // Bid/ask spread (0-1, ej 0.02 = 2c)\n bestBid Float? // Mejor oferta de compra\n bestAsk Float? // Mejor oferta de venta\n clobTokenId String? // YES outcome CLOB token ID (para prices-history)\n analyzable Boolean @default(true) // Si la IA tiene edge plausible aqui\n status String @default(\"active\") // active | closed | resolved\n closesAt DateTime? // Fecha de cierre del mercado\n lastSynced DateTime @default(now()) // Ultima sincronizacion de precios\n\n signals AISignal[]\n positions Position[]\n watchlist Watchlist[]\n alerts Alert[]\n}\n\nmodel AISignal {\n id Int @id @default(autoincrement())\n marketId String\n market Market @relation(fields: [marketId], references: [id], onDelete: Cascade)\n signal String // bullish | bearish | neutral\n confidence Float // 0.0 a 1.0\n summary String? // 2 frases generadas por Qwen3\n keyRisk String? // 1 frase de riesgo principal\n newsCount Int @default(0) // Titulares relevantes usados\n modelVersion String @default(\"Qwen3-8B\") // Modelo LLM que genero la senal\n impliedProb Float? // Probabilidad implicita YES al generar (0-1)\n fairProb Float? // Probabilidad \"justa\" segun IA (0-1)\n edgePoints Float? // (fairProb - impliedProb) * 100, signo conserva direccion\n generatedAt DateTime @default(now())\n\n @@index([marketId, generatedAt])\n}\n\nmodel Position {\n id Int @id @default(autoincrement())\n userId Int\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n marketId String\n market Market @relation(fields: [marketId], references: [id], onDelete: Cascade)\n outcome String // YES | NO\n amountEur Float // Capital virtual apostado\n entryPrice Float // Precio al abrir la posicion\n currentPrice Float? // Precio actual (actualizado por scheduler)\n pnl Float @default(0) // Profit and Loss calculado\n kellyFraction Float? // Fraccion de Kelly al abrir\n status String @default(\"open\") // open | closed\n openedAt DateTime @default(now())\n closedAt DateTime?\n\n @@index([userId, status])\n @@index([marketId])\n}\n\nmodel Watchlist {\n id Int @id @default(autoincrement())\n userId Int\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n marketId String\n market Market @relation(fields: [marketId], references: [id], onDelete: Cascade)\n alertThreshold Float? // Umbral de precio para alerta Telegram\n createdAt DateTime @default(now())\n\n @@unique([userId, marketId])\n @@index([userId])\n}\n\nmodel Alert {\n id Int @id @default(autoincrement())\n userId Int\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n marketId String\n market Market @relation(fields: [marketId], references: [id], onDelete: Cascade)\n type String // price_threshold | signal_change\n message String // Texto enviado por Telegram\n sentAt DateTime @default(now())\n\n @@index([userId, sentAt])\n @@index([marketId])\n}\n", |
| "inlineSchemaHash": "317e51352744228f8aa2577b7d08529ce57f6e47ee90dbf1318c8edc1a7164fb", |
| "copyEngine": true |
| } |
| config.dirname = '/' |
|
|
| config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"passwordHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"telegramChatId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"positions\",\"kind\":\"object\",\"type\":\"Position\",\"relationName\":\"PositionToUser\"},{\"name\":\"watchlist\",\"kind\":\"object\",\"type\":\"Watchlist\",\"relationName\":\"UserToWatchlist\"},{\"name\":\"alerts\",\"kind\":\"object\",\"type\":\"Alert\",\"relationName\":\"AlertToUser\"}],\"dbName\":null},\"Market\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"question\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"category\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"countryCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"yesPrice\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"noPrice\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"volumeEur\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"liquidityEur\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"spread\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"bestBid\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"bestAsk\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"clobTokenId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"analyzable\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"closesAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"lastSynced\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"signals\",\"kind\":\"object\",\"type\":\"AISignal\",\"relationName\":\"AISignalToMarket\"},{\"name\":\"positions\",\"kind\":\"object\",\"type\":\"Position\",\"relationName\":\"MarketToPosition\"},{\"name\":\"watchlist\",\"kind\":\"object\",\"type\":\"Watchlist\",\"relationName\":\"MarketToWatchlist\"},{\"name\":\"alerts\",\"kind\":\"object\",\"type\":\"Alert\",\"relationName\":\"AlertToMarket\"}],\"dbName\":null},\"AISignal\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"marketId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"market\",\"kind\":\"object\",\"type\":\"Market\",\"relationName\":\"AISignalToMarket\"},{\"name\":\"signal\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"confidence\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"summary\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"keyRisk\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"newsCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"modelVersion\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"impliedProb\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"fairProb\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"edgePoints\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"generatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Position\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PositionToUser\"},{\"name\":\"marketId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"market\",\"kind\":\"object\",\"type\":\"Market\",\"relationName\":\"MarketToPosition\"},{\"name\":\"outcome\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"amountEur\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"entryPrice\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"currentPrice\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"pnl\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"kellyFraction\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"openedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"closedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Watchlist\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToWatchlist\"},{\"name\":\"marketId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"market\",\"kind\":\"object\",\"type\":\"Market\",\"relationName\":\"MarketToWatchlist\"},{\"name\":\"alertThreshold\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Alert\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"AlertToUser\"},{\"name\":\"marketId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"market\",\"kind\":\"object\",\"type\":\"Market\",\"relationName\":\"AlertToMarket\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"message\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sentAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") |
| defineDmmfProperty(exports.Prisma, config.runtimeDataModel) |
| config.engineWasm = { |
| getRuntime: async () => require('./query_engine_bg.js'), |
| getQueryEngineWasmModule: async () => { |
| const loader = (await import('#wasm-engine-loader')).default |
| const engine = (await loader).default |
| return engine |
| } |
| } |
| config.compilerWasm = undefined |
|
|
| config.injectableEdgeEnv = () => ({ |
| parsed: { |
| DATABASE_URL: typeof globalThis !== 'undefined' && globalThis['DATABASE_URL'] || typeof process !== 'undefined' && process.env && process.env.DATABASE_URL || undefined |
| } |
| }) |
|
|
| if (typeof globalThis !== 'undefined' && globalThis['DEBUG'] || typeof process !== 'undefined' && process.env && process.env.DEBUG || undefined) { |
| Debug.enable(typeof globalThis !== 'undefined' && globalThis['DEBUG'] || typeof process !== 'undefined' && process.env && process.env.DEBUG || undefined) |
| } |
|
|
| const PrismaClient = getPrismaClient(config) |
| exports.PrismaClient = PrismaClient |
| Object.assign(exports, Prisma) |
|
|
|
|