diff --git a/.changeset/five-plants-tickle.md b/.changeset/five-plants-tickle.md new file mode 100644 index 000000000..9dafaaa74 --- /dev/null +++ b/.changeset/five-plants-tickle.md @@ -0,0 +1,5 @@ +--- +'backend': patch +--- + +prisma v6 diff --git a/bun.lockb b/bun.lockb index 6d0da1893..818a77131 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index c9354f3e8..968fa3be4 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,6 @@ "build": "tsc -p tsconfig.build.json", "cleanup-console": "find dist -type f -name \"*.js\" -exec sed -i '/console\\.time(\\(.*\\))\\;/d;/console\\.timeEnd(\\(.*\\))\\;/d' {} \\;", "generate": "graphql-codegen --config codegen.ts", - "prisma-merge": "bun run prisma/prisma-merge.ts", "test": "vitest", "vitest": "vitest", "task": "bun run tasks/index.ts", @@ -28,7 +27,7 @@ "@ethersproject/bignumber": "^5.6.0", "@ethersproject/constants": "^5.6.0", "@googleapis/sheets": "^9.0.0", - "@prisma/client": "4.10.0", + "@prisma/client": "^6.0.0", "@sanity/client": "^2.23.1", "@sentry/integrations": "^7.0.0", "@sentry/node": "^8.0.0", @@ -49,7 +48,7 @@ "lodash": "^4.17.15", "memory-cache": "^0.2.0", "moment-timezone": "^0.5.34", - "prisma": "4.10.0", + "prisma": "^6.2.1", "stellate": "2.7.1", "ts-dotenv": "^0.8.1", "viem": "^2.21.55" @@ -67,7 +66,6 @@ "@graphql-codegen/typescript-operations": "^2.2.0", "@graphql-codegen/typescript-resolvers": "2.4.1", "@graphql-tools/schema": "^8.3.1", - "@types/glob": "^8.1.0", "@types/lodash": "^4.14.177", "@types/memory-cache": "^0.2.1", "@types/node": "^18.0.0", diff --git a/prisma/prisma-merge.ts b/prisma/prisma-merge.ts deleted file mode 100644 index 4ae7c1e35..000000000 --- a/prisma/prisma-merge.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Prisma has a built in support for that now. -// Update Prisma to v5.15.0 or later and this script is no longer needed. - -import fs from 'fs'; -import gl from 'glob'; - -const PREFIX = '//******** AUTO GENERATED FILE, DO NOT EDIT. *********\n\n'; - -export function glob(path: string): Promise { - return new Promise((resolve, reject) => { - gl.glob(path, (error, matches) => { - if (error) { - return reject(error); - } - resolve(matches); - }); - }); -} - -export async function merge(schemaFilePattern: string, outputFile: string) { - // const targetFiles = await glob(outputFile); - // if (targetFiles.length !== 1) { - // throw new Error(`Cannot determine target file: ${targetFiles}`); - // } - - const filesToMerge = await glob(schemaFilePattern); - - let prismaFile = PREFIX; - - for (const file of filesToMerge) { - prismaFile += `\n\n${fs.readFileSync(file, { encoding: 'utf8' })}`; - } - - // Overwrite file - fs.writeFileSync(outputFile, prismaFile, { encoding: 'utf8' }); -} - -merge('prisma/schema/*.prisma', 'prisma/schema.prisma'); diff --git a/prisma/prisma-types.ts b/prisma/prisma-types.ts index 09dbb1ad1..994a9a5fb 100644 --- a/prisma/prisma-types.ts +++ b/prisma/prisma-types.ts @@ -48,19 +48,19 @@ export type JoinExitEvent = PrismaPoolEvent & { }; }; -export const poolWithTokens = Prisma.validator()({ +export const poolWithTokens = Prisma.validator()({ include: { tokens: true }, }); export type PrismaPoolWithTokens = Prisma.PrismaPoolGetPayload; -const poolTokenWithDynamicData = Prisma.validator()({ +const poolTokenWithDynamicData = Prisma.validator()({ include: { token: true }, }); export type PrismaPoolTokenWithDynamicData = Prisma.PrismaPoolTokenGetPayload; -export const prismaPoolWithExpandedNesting = Prisma.validator()({ +export const prismaPoolWithExpandedNesting = Prisma.validator()({ include: { dynamicData: true, staking: { @@ -150,7 +150,7 @@ export const prismaPoolWithExpandedNesting = Prisma.validator; -export const nestedPoolWithSingleLayerNesting = Prisma.validator()({ +export const nestedPoolWithSingleLayerNesting = Prisma.validator()({ include: { dynamicData: true, tokens: { @@ -179,7 +179,7 @@ export type PrismaNestedPoolWithSingleLayerNesting = Prisma.PrismaPoolGetPayload typeof nestedPoolWithSingleLayerNesting >; -const nestedPoolWithNoNesting = Prisma.validator()({ +const nestedPoolWithNoNesting = Prisma.validator()({ include: { dynamicData: true, tokens: { @@ -193,7 +193,7 @@ const nestedPoolWithNoNesting = Prisma.validator()({ export type PrismaNestedPoolWithNoNesting = Prisma.PrismaPoolGetPayload; -const prismaPoolTokenWithExpandedNesting = Prisma.validator()({ +const prismaPoolTokenWithExpandedNesting = Prisma.validator()({ include: { token: { include: { @@ -233,7 +233,7 @@ export type PrismaPoolTokenWithExpandedNesting = Prisma.PrismaPoolTokenGetPayloa typeof prismaPoolTokenWithExpandedNesting >; -const prismaPoolTokenWithSingleLayerNesting = Prisma.validator()({ +const prismaPoolTokenWithSingleLayerNesting = Prisma.validator()({ include: { token: true, nestedPool: { @@ -258,7 +258,7 @@ export type PrismaTokenWithTypes = PrismaToken & { types: PrismaTokenTypeOption[]; }; -export const prismaPoolMinimal = Prisma.validator()({ +export const prismaPoolMinimal = Prisma.validator()({ include: { dynamicData: true, allTokens: { @@ -348,7 +348,7 @@ export const prismaPoolMinimal = Prisma.validator()({ export type PrismaPoolMinimal = Prisma.PrismaPoolGetPayload; -export const prismaPoolBatchSwapWithSwaps = Prisma.validator()({ +export const prismaPoolBatchSwapWithSwaps = Prisma.validator()({ include: { swaps: { include: { @@ -368,7 +368,7 @@ export const prismaPoolBatchSwapWithSwaps = Prisma.validator; -export const prismaPoolAndHookWithDynamic = Prisma.validator()({ +export const prismaPoolAndHookWithDynamic = Prisma.validator()({ include: { dynamicData: true, tokens: { diff --git a/prisma/schema.prisma b/prisma/schema.prisma deleted file mode 100644 index 314cdf566..000000000 --- a/prisma/schema.prisma +++ /dev/null @@ -1,1085 +0,0 @@ -//******** AUTO GENERATED FILE, DO NOT EDIT. ********* - - - -// This is your Prisma schema file, -// learn more about it in the docs: https://pris.ly/d/prisma-schema - -generator client { - provider = "prisma-client-js" - binaryTargets = ["native", "linux-arm64-openssl-1.0.x"] //, "linux-arm64-openssl-3.0.x"] -} - -datasource db { - provider = "postgresql" - url = env("DATABASE_URL") -} - -enum Chain { - ARBITRUM - AVALANCHE - BASE - FANTOM - GNOSIS - MAINNET - OPTIMISM - POLYGON - SEPOLIA - ZKEVM - FRAXTAL - MODE - SONIC -} - -model PrismaLastBlockSynced { - @@id([category, chain]) - - category PrismaLastBlockSyncedCategory - chain Chain @default(MAINNET) - blockNumber Int -} - -enum PrismaLastBlockSyncedCategory { - POOLS - POOLS_V3 - FARMS - COW_AMM_POOLS - COW_AMM_JOIN_EXITS - COW_AMM_SWAPS - COW_AMM_SNAPSHOTS - SNAPSHOTS_COW_AMM - SNAPSHOTS_V2 - SNAPSHOTS_V3 -} - - -model PrismaFbeets { - id String @id - ratio String -} - -model PrismaPool { - @@id([id, chain]) - @@unique([address, chain]) - - id String - chain Chain - createTime Int - - address String - symbol String - name String - type PrismaPoolType - version Int @default(1) - decimals Int @default(18) - pauseManager String? - swapFeeManager String - poolCreator String? - factory String? - - protocolVersion Int @default(2) - - typeData Json @default("{}") - - tokens PrismaPoolToken[] - - dynamicData PrismaPoolDynamicData? - - liquidityManagement Json @default("{}") - - snapshots PrismaPoolSnapshot[] - swaps PrismaPoolSwap[] - aprItems PrismaPoolAprItem[] - categories String[] @default([]) - tokensWithPoolNested PrismaPoolToken[] @relation(name: "PoolNestedInToken") - - allTokens PrismaPoolExpandedTokens[] - allTokensNested PrismaPoolExpandedTokens[] @relation(name: "NestedPoolForAllToken") - filters PrismaPoolFilterMap[] - staking PrismaPoolStaking[] - - userWalletBalances PrismaUserWalletBalance[] - userStakedBalances PrismaUserStakedBalance[] - - userPoolBalanceSnapshots PrismaUserPoolBalanceSnapshot[] - - hook Json? - - @@index([id, chain]) - @@index([categories(ops: ArrayOps)], type: Gin) -} - -enum PrismaPoolType { - WEIGHTED - STABLE - META_STABLE - PHANTOM_STABLE - COMPOSABLE_STABLE - ELEMENT - UNKNOWN - LIQUIDITY_BOOTSTRAPPING - INVESTMENT - GYRO - GYRO3 - GYROE - FX - COW_AMM -} - -model PrismaPoolDynamicData { - @@id([id, chain]) - @@unique([poolId, chain]) - // Indexes used for sorting pools in the UI by different metrics - @@index(totalLiquidity) - @@index(totalSharesNum(sort: Desc)) - @@index(volume24h) - @@index(apr) - - id String - poolId String - pool PrismaPool @relation(fields:[poolId, chain], references: [id, chain], onDelete: Cascade) - chain Chain - blockNumber Int - updatedAt DateTime @updatedAt - - protocolYieldFee String? - protocolSwapFee String @default("0") - swapFee String - aggregateSwapFee String @default("0") - aggregateYieldFee String @default("0") - swapEnabled Boolean - isPaused Boolean @default(false) - isInRecoveryMode Boolean @default(false) - totalShares String - totalSharesNum Float @default(0) - totalLiquidity Float - volume24h Float @default(0) - fees24h Float @default(0) - surplus24h Float @default(0) - yieldCapture24h Float @default(0) - apr Float @default(0) - volume48h Float @default(0) - fees48h Float @default(0) - surplus48h Float @default(0) - yieldCapture48h Float @default(0) - totalLiquidity24hAgo Float @default(0) - totalShares24hAgo String @default("0") - lifetimeVolume Float @default(0) - lifetimeSwapFees Float @default(0) - holdersCount Int @default(0) - swapsCount Int @default(0) - - sharePriceAth Float @default(0) - sharePriceAthTimestamp Int @default(0) - sharePriceAtl Float @default(0) - sharePriceAtlTimestamp Int @default(0) - - totalLiquidityAth Float @default(0) - totalLiquidityAthTimestamp Int @default(0) - totalLiquidityAtl Float @default(0) - totalLiquidityAtlTimestamp Int @default(0) - - volume24hAth Float @default(0) - volume24hAthTimestamp Int @default(0) - volume24hAtl Float @default(0) - volume24hAtlTimestamp Int @default(0) - - fees24hAth Float @default(0) - fees24hAthTimestamp Int @default(0) - fees24hAtl Float @default(0) - fees24hAtlTimestamp Int @default(0) - - tokenPairsData Json @default("[]") -} - -model PrismaPoolToken { - @@id([id, chain]) - - id String - poolId String - pool PrismaPool @relation(fields:[poolId, chain], references: [id, chain], onDelete: Cascade) - chain Chain - - address String - token PrismaToken @relation(fields:[address, chain], references: [address, chain], onDelete: Cascade) - index Int - - nestedPoolId String? - nestedPool PrismaPool? @relation(name: "PoolNestedInToken", fields:[nestedPoolId, chain], references: [id, chain], onDelete: Cascade) - - priceRateProvider String? - exemptFromProtocolYieldFee Boolean @default(false) - - scalingFactor String? - - balance String - balanceUSD Float - weight String? - priceRate String - latestFxPrice Float? - - @@index([poolId, chain]) - @@index([address, chain]) - @@index([nestedPoolId, chain]) -} - -model PrismaPoolSwap { - @@id([id, chain]) - - id String - poolId String - pool PrismaPool @relation(fields:[poolId, chain], references: [id, chain], onDelete: Cascade) - chain Chain - - userAddress String - tokenIn String - tokenInSym String - tokenOut String - tokenOutSym String - tokenAmountIn String - tokenAmountOut String - timestamp Int - tx String - valueUSD Float - - batchSwapId String? - batchSwap PrismaPoolBatchSwap? @relation(fields:[batchSwapId, chain], references: [id, chain]) - batchSwapIdx Int? - - @@index([poolId, chain]) -} - -model PrismaPoolBatchSwap { - @@id([id, chain]) - - id String - chain Chain - userAddress String - tokenIn String - tokenOut String - tokenAmountIn String - tokenAmountOut String - timestamp Int - tx String - valueUSD Float - tokenInPrice Float @default(0) - tokenOutPrice Float @default(0) - - swaps PrismaPoolSwap[] -} - -model PrismaPoolAprItem { - @@id([id, chain]) - - id String - poolId String - pool PrismaPool @relation(fields:[poolId, chain], references: [id, chain], onDelete: Cascade) - chain Chain - title String - rewardTokenAddress String? - rewardTokenSymbol String? - apr Float - range PrismaPoolAprRange? - - type PrismaPoolAprType? - group PrismaPoolAprItemGroup? - - @@index([poolId, chain]) -} - -model PrismaPoolAprRange { - @@id([id, chain]) - @@unique([aprItemId, chain]) - - id String - chain Chain - aprItemId String - aprItem PrismaPoolAprItem @relation(fields:[aprItemId, chain], references: [id, chain], onDelete: Cascade) - min Float - max Float -} - -enum PrismaPoolAprType { - SWAP_FEE - SWAP_FEE_24H - SWAP_FEE_7D - SWAP_FEE_30D - NATIVE_REWARD - THIRD_PARTY_REWARD - IB_YIELD - VOTING - LOCKING - AURA - MERKL - SURPLUS - SURPLUS_24H - SURPLUS_7D - SURPLUS_30D -} - -enum PrismaPoolAprItemGroup { - BEEFY - OVERNIGHT - REAPER - YEARN - IDLE - TRANCHESS - GEARBOX - AAVE - ANKR - TESSERA - TETU - OVIX - EULER - MAKER - DEFAULT - MORPHO -} - -model PrismaPoolExpandedTokens { - @@id([tokenAddress, poolId, chain]) - - tokenAddress String - token PrismaToken @relation(fields:[tokenAddress, chain], references: [address, chain]) - poolId String - pool PrismaPool @relation(fields:[poolId, chain], references: [id, chain], onDelete: Cascade) - chain Chain - - nestedPoolId String? - nestedPool PrismaPool? @relation(name: "NestedPoolForAllToken", fields:[nestedPoolId, chain], references: [id, chain], onDelete: Cascade) - - @@index([tokenAddress, chain]) -} - - -model PrismaPoolFilter { - @@id([id, chain]) - - id String - chain Chain - title String - - pools PrismaPoolFilterMap[] -} - -model PrismaPoolFilterMap { - @@id([id, chain]) - - id String - chain Chain - filterId String - filter PrismaPoolFilter @relation(fields:[filterId, chain], references: [id, chain]) - poolId String - pool PrismaPool @relation(fields:[poolId, chain], references: [id, chain], onDelete: Cascade) -} - -model PrismaPoolStaking { - @@id([id, chain]) - - id String - poolId String - pool PrismaPool @relation(fields:[poolId, chain], references: [id, chain], onDelete: Cascade) - chain Chain - type PrismaPoolStakingType - address String - farm PrismaPoolStakingMasterChefFarm? - gauge PrismaPoolStakingGauge? - reliquary PrismaPoolStakingReliquaryFarm? - aura PrismaPoolStakingAura? - vebal PrismaPoolStakingVebal? - - userStakedBalances PrismaUserStakedBalance[] - - @@index([poolId, chain]) -} - - -enum PrismaPoolStakingType { - MASTER_CHEF - GAUGE - RELIQUARY - FRESH_BEETS - AURA - VEBAL -} - -model PrismaPoolStakingMasterChefFarm { - @@id([id, chain]) - @@unique([stakingId, chain]) - - id String - stakingId String - staking PrismaPoolStaking @relation(fields:[stakingId, chain], references: [id, chain]) - chain Chain - beetsPerBlock String - rewarders PrismaPoolStakingMasterChefFarmRewarder[] -} - -model PrismaPoolStakingMasterChefFarmRewarder { - @@id([id, chain]) - - id String - farmId String - farm PrismaPoolStakingMasterChefFarm @relation(fields:[farmId, chain], references: [id, chain]) - chain Chain - - address String - tokenAddress String - rewardPerSecond String - - @@index([farmId, chain]) -} - -model PrismaPoolStakingGauge { - @@id([id, chain]) - @@unique([stakingId, chain]) - - id String - stakingId String - staking PrismaPoolStaking @relation(fields:[stakingId, chain], references: [id, chain], onDelete: Cascade) - chain Chain - - gaugeAddress String - votingGauge PrismaVotingGauge[] - rewards PrismaPoolStakingGaugeReward[] - status PrismaPoolStakingGaugeStatus @default(ACTIVE) - version Int @default(1) - workingSupply String @default("0.0") - totalSupply String @default("0.0") -} - -model PrismaPoolStakingAura { - @@id([id, chain]) - @@unique([stakingId, chain]) - - id String - stakingId String - staking PrismaPoolStaking @relation(fields:[stakingId, chain], references: [id, chain], onDelete: Cascade) - chain Chain - - auraPoolAddress String - auraPoolId String - apr Float - isShutdown Boolean -} - -model PrismaPoolStakingVebal { - @@id([id, chain]) - @@unique([stakingId, chain]) - - id String - stakingId String - staking PrismaPoolStaking @relation(fields:[stakingId, chain], references: [id, chain], onDelete: Cascade) - chain Chain - - vebalAddress String -} - -enum PrismaPoolStakingGaugeStatus { - KILLED - ACTIVE - PREFERRED -} - - -model PrismaPoolStakingGaugeReward{ - @@id([id, chain]) - - id String - gaugeId String - gauge PrismaPoolStakingGauge @relation(fields:[gaugeId, chain], references: [id, chain], onDelete: Cascade) - chain Chain - - tokenAddress String - rewardPerSecond String - isVeBalemissions Boolean @default(false) - - @@index([gaugeId, chain]) -} - - -model PrismaPoolStakingReliquaryFarm { - @@id([id, chain]) - @@unique([stakingId, chain]) - - id String - stakingId String - staking PrismaPoolStaking @relation(fields:[stakingId, chain], references: [id, chain]) - chain Chain - - name String - beetsPerSecond String - totalBalance String @default("0") - totalWeightedBalance String @default("0") - levels PrismaPoolStakingReliquaryFarmLevel[] - snapshots PrismaReliquaryFarmSnapshot[] - relicSnapshots PrismaUserRelicSnapshot[] -} - -model PrismaPoolStakingReliquaryFarmLevel { - @@id([id, chain]) - - id String - farmId String - farm PrismaPoolStakingReliquaryFarm @relation(fields:[farmId, chain], references: [id, chain]) - chain Chain - - level Int - balance String - requiredMaturity Int - allocationPoints Int - apr Float - - @@index([farmId, chain]) -} - - -model PrismaPoolSnapshot { - @@id([id, chain]) - - id String - poolId String - pool PrismaPool @relation(fields:[poolId, chain], references: [id, chain], onDelete: Cascade) - chain Chain - timestamp Int - protocolVersion Int @default(2) - - totalLiquidity Float - sharePrice Float - volume24h Float - fees24h Float - surplus24h Float @default(0) - totalShares String - totalSharesNum Float - totalSwapVolume Float - totalSwapFee Float - totalSurplus Float @default(0) - swapsCount Int - holdersCount Int - amounts String[] - totalVolumes String[] @default([]) // Used for V3 snapshots - dailyVolumes String[] @default([]) // Used for V3 snapshots - totalSwapFees String[] @default([]) // Used for V3 snapshots - dailySwapFees String[] @default([]) // Used for V3 snapshots - totalSurpluses String[] @default([]) // Used for cow amm snapshots - dailySurpluses String[] @default([]) // Used for cow amm snapshots - totalProtocolSwapFees String[] @default([]) // Used for V3 snapshots - dailyProtocolSwapFees String[] @default([]) // Used for V3 snapshots - totalProtocolYieldFees String[] @default([]) // Used for V3 snapshots - dailyProtocolYieldFees String[] @default([]) // Used for V3 snapshots - - @@index([protocolVersion]) - @@index([timestamp(sort: Desc)]) - @@index([poolId, chain]) -} - -model PrismaReliquaryFarmSnapshot { - @@id([id, chain]) - - id String - farmId String - stakingFarm PrismaPoolStakingReliquaryFarm @relation(fields:[farmId, chain], references: [id, chain]) - chain Chain - - timestamp Int - relicCount Int - userCount Int - totalBalance String - dailyDeposited String - dailyWithdrawn String - totalLiquidity String @default("0") - levelBalances PrismaReliquaryLevelSnapshot[] - tokenBalances PrismaReliquaryTokenBalanceSnapshot[] - - @@index([farmId, chain]) -} - -model PrismaReliquaryLevelSnapshot { - @@id([id, chain]) - - id String - farmSnapshotId String - farmSnapshot PrismaReliquaryFarmSnapshot @relation(fields:[farmSnapshotId, chain], references: [id, chain]) - chain Chain - - level String - balance String - - @@index([farmSnapshotId, chain]) -} - -model PrismaReliquaryTokenBalanceSnapshot { - @@id([id, chain]) - - id String - farmSnapshotId String - farmSnapshot PrismaReliquaryFarmSnapshot @relation(fields:[farmSnapshotId, chain], references: [id, chain]) - chain Chain - - address String - symbol String - name String - decimals Int - balance String - - @@index([farmSnapshotId, chain]) -} - -enum PoolEventType { - JOIN - EXIT - SWAP -} - -model PrismaPoolEvent { - id String - tx String - type PoolEventType - chain Chain - poolId String - userAddress String - blockNumber Int - blockTimestamp Int - logIndex Int - protocolVersion Int @default(2) - valueUSD Float - payload Json - - @@id([id, chain]) - @@index([type]) - @@index([chain, poolId, userAddress]) - @@index([protocolVersion]) - @@index([blockTimestamp(sort: Desc), blockNumber(sort: Desc), logIndex(sort: Desc)]) - @@map("PartitionedPoolEvent") -} - - - -model PrismaSftmxStakingData { - id String @id - totalFtm String - totalFtmStaked String - totalFtmInPool String - numberOfVaults Int - stakingApr String - exchangeRate String - - maxDepositLimit String - minDepositLimit String - withdrawalDelay Int - - undelegatePaused Boolean - withdrawPaused Boolean - maintenancePaused Boolean - - withdrawalRequests PrismaSftmxWithdrawalRequest[] - vaults PrismaSftmxVault[] - - snapshots PrismaSftmxStakingDataSnapshot[] -} - -model PrismaSftmxVault { - id String @id - vaultIndex Int - ftmStakingId String - ftmStaking PrismaSftmxStakingData @relation(fields:[ftmStakingId], references: [id]) - - ftmStaked String - matured Boolean - unlockTimestamp Int - validatorId String - validatorAddress String -} - -model PrismaSftmxWithdrawalRequest { - id String @id - ftmStakingId String - ftmStaking PrismaSftmxStakingData @relation(fields:[ftmStakingId], references: [id]) - - user String - amountSftmx String - requestTimestamp Int - isWithdrawn Boolean -} - -model PrismaSftmxStakingDataSnapshot { - id String @id - ftmStakingId String - ftmStaking PrismaSftmxStakingData @relation(fields:[ftmStakingId], references: [id]) - - timestamp Int - freePoolFtmAmount String - lockedFtmAmount String - totalFtmAmount String - exchangeRate String -} - - -model PrismaStakedSonicData { - id String @id - totalAssets String - totalAssetsDelegated String - totalAssetsPool String - stakingApr String - exchangeRate String - - - delegatedValidators PrismaStakedSonicDelegatedValidator[] - snapshots PrismaSonicStakingDataSnapshot[] - -} - -model PrismaStakedSonicDelegatedValidator { - validatorId String @id - - sonicStakingId String - sonicStaking PrismaStakedSonicData @relation(fields:[sonicStakingId], references: [id]) - - assetsDelegated String -} - - -model PrismaSonicStakingDataSnapshot { - id String @id - sonicStakingId String - sonicStaking PrismaStakedSonicData @relation(fields:[sonicStakingId], references: [id]) - - timestamp Int - totalAssetsPool String - totalAssetsDelegated String - totalAssets String - exchangeRate String -} - -model PrismaToken { - @@id([address, chain]) - - address String - chain Chain - - symbol String - name String - description String? - decimals Int - - logoURI String? - websiteUrl String? - discordUrl String? - telegramUrl String? - twitterUsername String? - priority Int @default(0) - coingeckoPlatformId String? - coingeckoContractAddress String? - coingeckoTokenId String? - excludedFromCoingecko Boolean @default(false) - - currentPrice PrismaTokenCurrentPrice? - dynamicData PrismaTokenDynamicData? - prices PrismaTokenPrice[] - - types PrismaTokenType[] - - expandedPools PrismaPoolExpandedTokens[] - poolTokens PrismaPoolToken[] - - underlyingTokenAddress String? - isBufferAllowed Boolean @default(true) - unwrapRate String @default("1") - - walletBalances PrismaUserWalletBalance[] - stakedBalances PrismaUserStakedBalance[] - - @@index([address, chain]) -} - - -model PrismaTokenCurrentPrice { - @@id([tokenAddress, chain]) - - tokenAddress String - token PrismaToken @relation(fields:[tokenAddress, chain], references: [address, chain], onDelete: Cascade) - chain Chain - - updatedAt DateTime @updatedAt - updatedBy String? - timestamp Int - price Float - - @@index(tokenAddress) - @@index(chain) -} - -model PrismaTokenPrice { - @@id([tokenAddress, timestamp, chain]) - - tokenAddress String - token PrismaToken @relation(fields:[tokenAddress, chain], references: [address, chain], onDelete: Cascade) - chain Chain - updatedAt DateTime @updatedAt - updatedBy String? - timestamp Int - price Float - - high Float - low Float - open Float - close Float - - @@index([timestamp, chain]) - @@index([tokenAddress, chain]) -} - -model PrismaTokenDynamicData { - @@id([tokenAddress, chain]) - - coingeckoId String - tokenAddress String - token PrismaToken @relation(fields:[tokenAddress, chain], references: [address, chain], onDelete: Cascade) - chain Chain - updatedAt DateTime @updatedAt - - price Float - ath Float - atl Float - marketCap Float? - fdv Float? - high24h Float - low24h Float - priceChange24h Float - priceChangePercent24h Float - priceChangePercent7d Float? - priceChangePercent14d Float? - priceChangePercent30d Float? - - @@index([tokenAddress, chain]) -} - -model PrismaTokenType { - @@id([id, chain]) - @@unique([tokenAddress, type, chain]) - - id String - tokenAddress String - token PrismaToken @relation(fields:[tokenAddress, chain], references: [address, chain], onDelete: Cascade) - chain Chain - type PrismaTokenTypeOption -} - -enum PrismaTokenTypeOption { - WHITE_LISTED - BPT - PHANTOM_BPT - ERC4626 -} - -model PrismaPriceRateProviderData { - @@id([chain, rateProviderAddress]) - - chain Chain - rateProviderAddress String - - tokenAddress String - - reviewed Boolean - name String? - summary String? - reviewUrl String? - warnings String? - upgradableComponents Json? - - @@index([chain, rateProviderAddress]) - @@index([tokenAddress]) -} - -model PrismaErc4626ReviewData { - @@id([chain, erc4626Address]) - - chain Chain - erc4626Address String - - assetAddress String - - name String - summary String - reviewFile String - warnings String - - @@index([chain, erc4626Address]) - @@index([assetAddress]) -} - -model PrismaUser { - address String @id - - userSnapshots PrismaUserPoolBalanceSnapshot[] - relicSnapshots PrismaUserRelicSnapshot[] - - walletBalances PrismaUserWalletBalance[] - stakedBalances PrismaUserStakedBalance[] - - veBalBalance PrismaVeBalUserBalance[] - - veBalBalanceSnapshots PrismaVeBalUserBalanceSnapshot[] -} - - - -model PrismaUserWalletBalance { - @@id([id, chain]) - @@index(userAddress) - - id String - chain Chain - - balance String - balanceNum Float - updatedAt DateTime @updatedAt - - userAddress String - user PrismaUser @relation(fields:[userAddress], references: [address], onDelete: Cascade) - - poolId String? - pool PrismaPool? @relation(fields:[poolId, chain], references: [id, chain], onDelete: Cascade) - - tokenAddress String - token PrismaToken @relation(fields:[tokenAddress, chain], references: [address, chain], onDelete: Cascade) - - @@index([poolId, chain]) -} - - -model PrismaUserStakedBalance { - @@id([id, chain]) - @@index(userAddress) - - id String - chain Chain - balance String - balanceNum Float - updatedAt DateTime @updatedAt - - userAddress String - user PrismaUser @relation(fields:[userAddress], references: [address], onDelete: Cascade) - - poolId String? - pool PrismaPool? @relation(fields:[poolId, chain], references: [id, chain], onDelete: Cascade) - - tokenAddress String - token PrismaToken @relation(fields:[tokenAddress, chain], references: [address, chain], onDelete: Cascade) - - stakingId String - staking PrismaPoolStaking @relation(fields:[stakingId, chain], references: [id, chain], onDelete: Cascade) - - @@index([poolId, chain]) - @@index([stakingId, chain]) -} - -model PrismaUserBalanceSyncStatus { - @@id([type, chain]) - - type PrismaUserBalanceType - chain Chain - blockNumber Int -} - -enum PrismaUserBalanceType { - WALLET - STAKED - RELIQUARY - AURA - VEBAL -} - -model PrismaUserPoolBalanceSnapshot { - @@id([id, chain]) - - id String - userAddress String - user PrismaUser @relation(fields:[userAddress], references: [address]) - chain Chain - timestamp Int - - poolToken String - poolId String? - pool PrismaPool? @relation(fields:[poolId, chain], references:[id, chain]) - - walletBalance String - gaugeBalance String - farmBalance String - totalBalance String - percentShare String - totalValueUSD String - fees24h String -} - -model PrismaUserRelicSnapshot { - @@id([id, chain]) - - id String - userAddress String - user PrismaUser @relation(fields:[userAddress], references: [address]) - chain Chain - timestamp Int - - relicId Int - farmId String - farm PrismaPoolStakingReliquaryFarm @relation(fields:[farmId, chain], references: [id, chain]) - balance String - entryTimestamp Int - level Int -} - -model PrismaVeBalUserBalanceSnapshot { - @@id([userAddress, timestamp]) - userAddress String - user PrismaUser @relation(fields:[userAddress], references: [address]) - chain Chain - timestamp Int - - bias String - slope String - balance String -} - -model PrismaVeBalUserBalance { - @@id([id, chain]) - - id String - chain Chain - - balance String - locked String @default("0") - - userAddress String - user PrismaUser @relation(fields:[userAddress], references: [address]) - -} - -model PrismaVeBalTotalSupply { - @@id([address, chain]) - - address String - chain Chain - - totalSupply String -} - -enum PrismaVotingGaugeStatus { - KILLED - ACTIVE -} - -model PrismaVotingGauge { - @@id([id, chain]) - - id String - chain Chain - - stakingGauge PrismaPoolStakingGauge? @relation(fields: [stakingGaugeId, chain], references: [id, chain], onDelete: Cascade) - status PrismaVotingGaugeStatus @default(ACTIVE) - gaugeAddress String - stakingGaugeId String? - relativeWeight String? - relativeWeightCap String? - addedTimestamp Int? -} \ No newline at end of file diff --git a/prisma/schema/base.prisma b/prisma/schema/base.prisma index 122fdb2df..73d61305d 100644 --- a/prisma/schema/base.prisma +++ b/prisma/schema/base.prisma @@ -3,6 +3,7 @@ generator client { provider = "prisma-client-js" + previewFeatures = ["prismaSchemaFolder"] binaryTargets = ["native", "linux-arm64-openssl-1.0.x"] //, "linux-arm64-openssl-3.0.x"] }