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;

image.png