Add method to initialize DB

This commit is contained in:
Adw8 2025-01-27 18:47:36 +05:30
parent 77a59ac520
commit da2d490814
4 changed files with 24 additions and 16 deletions

2
.gitignore vendored
View File

@ -6,3 +6,5 @@ node_modules
.env.development
.env.production
.env.test
database.sqlite

View File

@ -1,6 +1,7 @@
import { NextRequest, NextResponse } from 'next/server'
import { fal } from "@fal-ai/client"
import { FLUX_MODELS } from '../../../services/fluxService'
import { initializeDataSource } from '../../../data-source'
import { verifyPayment, isSignatureUsed, markSignatureAsUsed } from '../../../utils/verifyPayment'
@ -19,6 +20,8 @@ const IMAGE_HEIGHT: number = 1024
export async function POST(req: NextRequest): Promise<NextResponse> {
try {
await initializeDataSource();
const { prompt, modelId, transactionSignature } = await req.json()
if (!prompt || !modelId) {
@ -35,13 +38,6 @@ export async function POST(req: NextRequest): Promise<NextResponse> {
)
}
if (await isSignatureUsed(transactionSignature)) {
return NextResponse.json(
{ error: 'Transaction signature has already been used' },
{ status: 400 }
)
}
const model = FLUX_MODELS.find((model) => model.modelId === modelId)
if (!model) {
return NextResponse.json(
@ -54,7 +50,10 @@ export async function POST(req: NextRequest): Promise<NextResponse> {
const isPaymentVerified = await verifyPayment(transactionSignature, expectedAmount)
if (!isPaymentVerified) {
throw new Error('Payment verification failed');
return NextResponse.json(
{ error: 'Payment verification failed or transaction signature has already been used' },
{ status: 400 }
)
}
await markSignatureAsUsed(transactionSignature)

View File

@ -11,10 +11,14 @@ export const AppDataSource = new DataSource({
subscribers: [],
});
AppDataSource.initialize()
.then(() => {
console.log('Data Source has been initialized!');
})
.catch((err) => {
export async function initializeDataSource() {
try {
if (!AppDataSource.isInitialized){
await AppDataSource.initialize();
console.log('Data Source has been initialized!');
};
} catch (err) {
console.error('Error during Data Source initialization:', err);
});
throw err;
}
}

View File

@ -19,7 +19,10 @@ const connection = new Connection(
export async function isSignatureUsed(transactionSignature: string): Promise<boolean> {
const paymentRepository = AppDataSource.getRepository(Payment);
const payment = await paymentRepository.findOneBy({ transactionSignature });
return !!payment;
if (payment) {
return true;
}
return false;
}
export async function markSignatureAsUsed(transactionSignature: string): Promise<void> {
@ -39,7 +42,7 @@ export async function verifyPayment(
return false;
}
const transaction = await connection.getParsedTransaction(transactionSignature, 'finalized');
const transaction = await connection.getParsedTransaction(transactionSignature, 'confirmed');
if (!transaction) {
throw new Error('Transaction not found');
}