Skip to content

Commit

Permalink
Add pending transactions (#364)
Browse files Browse the repository at this point in the history
* Add pending transactions

* ci: version bump to 0.86.1-rc-pending-txs.0

* Improve schema

* ci: version bump to 0.86.1-rc-pending-txs.1

* Always include destination chain id

* ci: version bump to 0.86.1-rc-pending-txs.2

---------

Co-authored-by: Automated Version Bump <[email protected]>
  • Loading branch information
motechFR and Automated Version Bump authored Sep 29, 2024
1 parent a863cc2 commit 64fb936
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 29 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@charmverse/core",
"version": "0.86.0",
"version": "0.86.1-rc-pending-txs.2",
"description": "Core API for Charmverse",
"type": "commonjs",
"types": "./dist/cjs/index.d.ts",
Expand Down
37 changes: 37 additions & 0 deletions src/prisma/migrations/20240928234126_pending_txs/migration.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
-- CreateEnum
CREATE TYPE "TransactionStatus" AS ENUM ('pending', 'completed', 'failed');

-- CreateTable
CREATE TABLE "PendingNftTransaction" (
"id" UUID NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"userId" UUID NOT NULL,
"sourceChainTxHash" TEXT NOT NULL,
"sourceChainId" INTEGER NOT NULL,
"targetAmountReceived" BIGINT NOT NULL,
"targetCurrencyContractAddress" TEXT NOT NULL,
"destinationChainId" INTEGER NOT NULL,
"destinationChainTxHash" TEXT,
"contractAddress" TEXT NOT NULL,
"tokenId" BIGINT NOT NULL,
"tokenAmount" INTEGER NOT NULL,
"senderAddress" TEXT NOT NULL,
"status" "TransactionStatus" NOT NULL DEFAULT 'pending',

CONSTRAINT "PendingNftTransaction_pkey" PRIMARY KEY ("id")
);

-- CreateIndex
CREATE INDEX "PendingNftTransaction_userId_idx" ON "PendingNftTransaction"("userId");

-- CreateIndex
CREATE INDEX "PendingNftTransaction_status_idx" ON "PendingNftTransaction"("status");

-- CreateIndex
CREATE UNIQUE INDEX "PendingNftTransaction_sourceChainTxHash_sourceChainId_key" ON "PendingNftTransaction"("sourceChainTxHash", "sourceChainId");

-- CreateIndex
CREATE UNIQUE INDEX "PendingNftTransaction_destinationChainTxHash_destinationCha_key" ON "PendingNftTransaction"("destinationChainTxHash", "destinationChainId");

-- AddForeignKey
ALTER TABLE "PendingNftTransaction" ADD CONSTRAINT "PendingNftTransaction_userId_fkey" FOREIGN KEY ("userId") REFERENCES "Scout"("id") ON DELETE CASCADE ON UPDATE CASCADE;
95 changes: 67 additions & 28 deletions src/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -2785,34 +2785,35 @@ enum BuilderStatus {
}

model Scout {
createdAt DateTime @default(now())
id String @id @default(uuid()) @db.Uuid
email String?
username String @unique
displayName String
farcasterId Int? // every user only has one farcaster account
farcasterName String? // every user only has one farcaster account
walletAddress String? // grab most recent wallet when someone signs in w/farcaster
walletENS String?
avatar String?
bio String?
builderStatus BuilderStatus?
sendMarketing Boolean @default(false)
agreedToTermsAt DateTime?
onboardedAt DateTime?
currentBalance Int @default(0)
strikes BuilderStrike[]
events BuilderEvent[]
githubUser GithubUser[]
gemsPayoutEvents GemsPayoutEvent[]
pointsReceived PointsReceipt[] @relation("pointsReceiptRecipient")
pointsSent PointsReceipt[] @relation("pointsReceiptSender")
userWeeklyStats UserWeeklyStats[]
userSeasonStats UserSeasonStats[]
userAllTimeStats UserAllTimeStats[]
nftPurchaseEvents NFTPurchaseEvent[] @relation("nftPurchaseEventScout")
builderNfts BuilderNft[]
activities ScoutGameActivity[]
createdAt DateTime @default(now())
id String @id @default(uuid()) @db.Uuid
email String?
username String @unique
displayName String
farcasterId Int? // every user only has one farcaster account
farcasterName String? // every user only has one farcaster account
walletAddress String? // grab most recent wallet when someone signs in w/farcaster
walletENS String?
avatar String?
bio String?
builderStatus BuilderStatus?
sendMarketing Boolean @default(false)
agreedToTermsAt DateTime?
onboardedAt DateTime?
currentBalance Int @default(0)
strikes BuilderStrike[]
events BuilderEvent[]
githubUser GithubUser[]
gemsPayoutEvents GemsPayoutEvent[]
pointsReceived PointsReceipt[] @relation("pointsReceiptRecipient")
pointsSent PointsReceipt[] @relation("pointsReceiptSender")
userWeeklyStats UserWeeklyStats[]
userSeasonStats UserSeasonStats[]
userAllTimeStats UserAllTimeStats[]
nftPurchaseEvents NFTPurchaseEvent[] @relation("nftPurchaseEventScout")
builderNfts BuilderNft[]
activities ScoutGameActivity[]
PendingNftTransaction PendingNftTransaction[]
@@index([username])
@@index([farcasterId])
Expand Down Expand Up @@ -3103,3 +3104,41 @@ model ScoutGameActivity {
@@index([onchainChainId])
@@index([notificationSentAt])
}

enum TransactionStatus {
pending
completed
failed
}

model PendingNftTransaction {
id String @id @default(uuid()) @db.Uuid
createdAt DateTime @default(now())
userId String @db.Uuid
user Scout @relation(fields: [userId], references: [id], onDelete: Cascade)
// Amount supposed to be received
sourceChainTxHash String
sourceChainId Int
targetAmountReceived BigInt
targetCurrencyContractAddress String
destinationChainId Int
destinationChainTxHash String?
// Token info
contractAddress String
tokenId BigInt
tokenAmount Int
// Wallet to mint to
senderAddress String
status TransactionStatus @default(pending)
@@unique([sourceChainTxHash, sourceChainId])
@@unique([destinationChainTxHash, destinationChainId])
@@index([userId])
@@index([status])
}

0 comments on commit 64fb936

Please sign in to comment.