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(