Init npm
npm init -y
Install Typescript
npm i --save-dev typescript @types/node
Change rootDir and outDir in tsconfig.json
"rootDir": "./src",
"outDir": "./dist",
Add dummy data in in bank_accounts.json
[
{
"id": 1,
"account_number": 10014523,
"account_holder_name": "Abhishek Raut",
"email": "abhisheraut@gmail.com",
"account_type": "current",
"branch_name": "Nagpur Main Branch",
"ifsc_code": "AXIS0001234",
"balance": 152000.50,
"is_active": true,
"created_at": "2024-10-05T12:30:00Z",
"updated_at": "2025-01-10T09:00:00Z"
},
{
"id": 2,
"account_number": 10023987,
"account_holder_name": "Aarav Mehta",
"email": "aarav.mehta@example.com",
"account_type": "savings",
"branch_name": "Pune Camp Branch",
"ifsc_code": "HDFC0005678",
"balance": 48300.75,
"is_active": true,
"created_at": "2024-11-01T09:45:00Z",
"updated_at": "2025-01-05T15:10:00Z"
}
]
in prima we will simulate all the database methods
import Database from "./bank_accounts.json" with { type: "json" };
type DatabaseUserType = typeof Database[number];
type OptionalUser = Partial<DatabaseUserType>;
interface Prisma {
findUnique(where: OptionalUser): Promise<OptionalUser | null>;
}
export class PrismaClient implements Prisma {
private simulateDelay(): Promise<void> {
// Simulate network/database delay (10-50ms)
const delay = Math.floor(Math.random() * 40) + 10;
return new Promise(resolve => setTimeout(resolve, delay));
}
async findUnique(where: OptionalUser): Promise<OptionalUser | null> {
await this.simulateDelay();
for (const elem of Database) {
let match = true;
for (const key in where) {
const k = key as keyof DatabaseUserType;
if (where[k] !== elem[k]) {
match = false;
break;
}
}
if (match) return elem;
}
return null;
}
}
database connection
import { PrismaClient } from "../Prisma/prisma.js";
class PrismaSingleton {
private static instance: PrismaClient;
private constructor() {
// Private constructor ensures class cannot be instantiated directly
}
public static getInstance(): PrismaClient {
if (!PrismaSingleton.instance) {
PrismaSingleton.instance = new PrismaClient();
}
return PrismaSingleton.instance;
}
}
const globalForPrisma = globalThis as unknown as {
prisma: PrismaClient | undefined;
};
export const prisma =
globalForPrisma.prisma ?? PrismaSingleton.getInstance();
if (process.env.NODE_ENV !== "production") {
globalForPrisma.prisma = prisma;
}
export default prisma;
