From 3514c04c2581f391aa44b3ec89e98f8e88b6bed6 Mon Sep 17 00:00:00 2001 From: Adw8 Date: Mon, 27 Jan 2025 19:11:11 +0530 Subject: [PATCH] Check if signature exists before writing to DB --- src/app/api/flux/route.ts | 2 +- src/data-source.ts | 1 + src/utils/verifyPayment.ts | 17 +++++++++++++---- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/app/api/flux/route.ts b/src/app/api/flux/route.ts index 17f0f89..e7b1000 100644 --- a/src/app/api/flux/route.ts +++ b/src/app/api/flux/route.ts @@ -56,7 +56,7 @@ export async function POST(req: NextRequest): Promise { ) } - await markSignatureAsUsed(transactionSignature) + await markSignatureAsUsed(transactionSignature); console.log('Generating with Flux model:', modelId) console.log('Prompt:', prompt) diff --git a/src/data-source.ts b/src/data-source.ts index 6f5f10c..6e63b8d 100644 --- a/src/data-source.ts +++ b/src/data-source.ts @@ -1,4 +1,5 @@ import { DataSource } from 'typeorm'; + import { Payment } from './entity/Payment'; export const AppDataSource = new DataSource({ diff --git a/src/utils/verifyPayment.ts b/src/utils/verifyPayment.ts index 8bd827f..6446acf 100644 --- a/src/utils/verifyPayment.ts +++ b/src/utils/verifyPayment.ts @@ -3,6 +3,7 @@ import { TOKEN_PROGRAM_ID } from '@solana/spl-token'; import { AppDataSource } from '../data-source'; import { Payment } from '../entity/Payment'; +import { getManager } from 'typeorm'; const SOLANA_RPC_URL = process.env.NEXT_PUBLIC_SOLANA_RPC_URL; const SOLANA_WEBSOCKET_URL = process.env.NEXT_PUBLIC_SOLANA_WEBSOCKET_URL; @@ -26,10 +27,18 @@ export async function isSignatureUsed(transactionSignature: string): Promise { - const paymentRepository = AppDataSource.getRepository(Payment); - const payment = new Payment(); - payment.transactionSignature = transactionSignature; - await paymentRepository.save(payment); + await AppDataSource.transaction(async (transactionalEntityManager) => { + const paymentRepository = transactionalEntityManager.getRepository(Payment); + + // Check if the payment with the given signature already exists + const exists = await paymentRepository.exists({ where: { transactionSignature } }); + + // If not, create a new payment entry + if (!exists) { + const newPayment = paymentRepository.create({ transactionSignature }); + await paymentRepository.save(newPayment); + } + }); } export async function verifyPayment(