TypeORM কি?
TypeORM একটি জনপ্রিয় ORM (Object-Relational Mapping) লাইব্রেরি যা TypeScript এবং JavaScript এর জন্য তৈরি। এটি ডেটাবেসের সাথে কাজ করার জন্য সহজতর উপায় প্রদান করে, যেখানে SQL কোড লিখতে না হলেও ডেটাবেসের টেবিলগুলির সাথে ইন্টারঅ্যাক্ট করা যায়। TypeORM ডাটাবেসের সঠিক মডেলিং এবং ডেটাবেস কুয়েরি কার্যক্রম পরিচালনা করতে সাহায্য করে, যাতে ডেভেলপাররা ভালোভাবে ডেটাবেস পরিচালনা করতে পারেন।
TypeORM ব্যবহার করা প্রজেক্টের ফোল্ডার গঠন
একটি TypeORM প্রজেক্টে সাধারণত নিম্নলিখিত ফোল্ডার গঠন এবং ফাইল কাঠামো থাকে:
my-app/
│
├── dist/ # Transpiled output (compiled JavaScript files)
├── node_modules/ # Node.js modules
├── src/ # Source code
│ ├── controllers/ # Controllers (handle requests)
│ ├── entities/ # Entities (define database tables)
│ ├── migrations/ # Database migrations
│ ├── routes/ # Define all the routes
│ ├── services/ # Business logic
│ ├── utils/ # Utility functions
│ ├── app.ts # Entry point of the application
│ └── database.ts # Database connection setup
├── .env # Environment variables
├── .gitignore # Git ignore file
├── ormconfig.json # TypeORM configuration file
├── package.json # Project dependencies and scripts
└── tsconfig.json # TypeScript configuration file
প্রজেক্টের ফোল্ডার গঠন বিশ্লেষণ
- dist/:
এই ফোল্ডারটিsrc/থেকে কম্পাইল করা JavaScript ফাইল ধারণ করে। এটি TypeScript কোড কম্পাইল করার পর পাওয়া যায়। - node_modules/:
Node.js এর সমস্ত ডিপেনডেন্সি এই ফোল্ডারে থাকে। এটি npm install বা yarn চালানোর পর অটোমেটিকভাবে তৈরি হয়। - src/:
এটি প্রজেক্টের সোর্স কোডের জন্য মূল ফোল্ডার। এর মধ্যে সকল TypeScript ফাইল থাকে।controllers/:
এই ফোল্ডারে সমস্ত controller ফাইল রাখা হয় যা HTTP রিকোয়েস্ট এবং রেসপন্স হ্যান্ডল করে। এটি আপনার API এন্ডপয়েন্টের জন্য প্রয়োজনীয় লজিক ধারণ করে।উদাহরণ:
import { Request, Response } from 'express'; import { User } from '../entities/User'; export class UserController { async getAllUsers(req: Request, res: Response) { const users = await User.find(); return res.json(users); } }entities/:
TypeORM এর entity ফাইলগুলি এখানে থাকে, যা ডেটাবেস টেবিলগুলির কাঠামো নির্ধারণ করে। প্রতিটি entity একটি টেবিলের প্রতিনিধিত্ব করে এবং এটি ডেটাবেসের জন্য মডেল তৈরি করে।উদাহরণ:
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() name: string; @Column() email: string; }migrations/:
এই ফোল্ডারে ডেটাবেস মাইগ্রেশন ফাইল থাকে, যা ডেটাবেস স্কিমার পরিবর্তন ট্র্যাক করে এবং সেগুলি প্রয়োগ করার জন্য ব্যবহৃত হয়। TypeORM মাইগ্রেশন ব্যবহার করে আপনি আপনার ডেটাবেস স্কিমার পরিবর্তন করতে পারেন যেমন টেবিল তৈরি, কলাম যোগ করা ইত্যাদি।উদাহরণ:
npx typeorm migration:create -n CreateUserTableroutes/:
এই ফোল্ডারে রাউট সংক্রান্ত ফাইল রাখা হয়, যেখানে API রাউটগুলি ডিফাইন করা হয়। এটি controllers এর সাথে সম্পর্কিত থাকে।উদাহরণ:
import express from 'express'; import { UserController } from '../controllers/UserController'; const router = express.Router(); const userController = new UserController(); router.get('/users', userController.getAllUsers); export default router;services/:
Services হল ব্যবসায়িক লজিক এবং ডেটা প্রসেসিংয়ের জন্য ফাইল, যেখানে আপনি মডেলস, রেপোজিটরিজ এবং অন্যান্য ডেটাবেস অপারেশন পরিচালনা করেন।উদাহরণ:
import { User } from '../entities/User'; export class UserService { async createUser(name: string, email: string) { const user = new User(); user.name = name; user.email = email; await user.save(); } }- utils/:
এখানে সাধারণ সাহায্যকারী ফাংশন রাখা হয় যা কোডের পুনঃব্যবহারযোগ্য অংশ হতে পারে, যেমন ফাইল আপলোডের জন্য ইউটিলিটি বা লগিং ফাংশন। app.ts:
এটি অ্যাপ্লিকেশনটির এন্ট্রি পয়েন্ট। এখানে Express সার্ভার শুরু করা এবং রাউটগুলো যুক্ত করা হয়।উদাহরণ:
import express from 'express'; import { createConnection } from 'typeorm'; import userRoutes from './routes/userRoutes'; const app = express(); app.use(express.json()); createConnection().then(() => { app.listen(3000, () => { console.log('Server started on http://localhost:3000'); }); }); app.use('/api', userRoutes);database.ts:
এখানে TypeORM ডাটাবেস কনফিগারেশন এবং সংযোগ নির্ধারণ করা হয়।উদাহরণ:
import { createConnection } from 'typeorm'; createConnection({ type: 'postgres', host: 'localhost', port: 5432, username: 'test', password: 'test', database: 'test_db', entities: [ // Entities to be used ], synchronize: true, }).then(() => { console.log('Connected to the database'); }).catch(error => console.log('Error connecting to the database: ', error));
মূল কনফিগারেশন ফাইলসমূহ
ormconfig.json: TypeORM এর জন্য কনফিগারেশন ফাইল, যেখানে ডাটাবেস কনফিগারেশন এবং অন্যান্য মাইগ্রেশন/সিঙ্ক্রোনাইজেশন সেটিংস রাখা হয়।
উদাহরণ:
{ "type": "postgres", "host": "localhost", "port": 5432, "username": "test", "password": "test", "database": "test_db", "synchronize": true, "logging": false, "entities": [ "src/entities/*.ts" ], "migrations": [ "src/migrations/*.ts" ] }.env: এই ফাইলটি প্রজেক্টের পরিবেশের তথ্য ধারণ করে, যেমন ডাটাবেসের ইউজারনেম, পাসওয়ার্ড, হোস্ট, পোর্ট ইত্যাদি। এটি dotenv প্যাকেজের মাধ্যমে লোড করা হয়।
উদাহরণ:
DB_HOST=localhost DB_PORT=5432 DB_USERNAME=test DB_PASSWORD=test DB_DATABASE=test_dbpackage.json: আপনার প্রকল্পের ডিপেনডেন্সি এবং স্ক্রিপ্টের জন্য ব্যবহৃত হয়। TypeORM এবং অন্যান্য প্রয়োজনীয় প্যাকেজ এখানে অন্তর্ভুক্ত থাকে।
উদাহরণ:
{ "name": "typeorm-project", "version": "1.0.0", "main": "dist/app.js", "scripts": { "start": "ts-node src/app.ts", "build": "tsc", "migration:run": "typeorm migration:run" }, "dependencies": { "typeorm": "^0.2.34", "express": "^4.17.1", "pg": "^8.5.1", "reflect-metadata": "^0.1.13" }, "devDependencies": { "typescript": "^4.1.3", "ts-node": "^9.1.1" } }tsconfig.json: TypeScript কনফিগারেশন ফাইল, যেখানে TypeScript কম্পাইলার সেটিংস রাখা হয়।
উদাহরণ:
{ "compilerOptions": { "target": "ES6", "module": "commonjs", "lib": ["es6", "es2017"], "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "outDir": "./dist" }, "include": ["src/**/*"] }
সারাংশ
TypeORM ব্যবহার করে তৈরি একটি প্রজেক্টে বিভিন্ন গুরুত্বপূর্ণ ফোল্ডার এবং কনফিগারেশন ফাইল থাকে। এর মধ্যে entities/, controllers/, services/, এবং migrations/ ফোল্ডারগুলো ডেটাবেস ম্যানেজমেন্ট, API রাউটিং, এবং ব্যবসায়িক লজিককে সাজানোর জন্য ব্যবহৃত হয়। ormconfig.json, .env, এবং tsconfig.json ফাইলগুলো ডাটাবেস সংযোগ, পরিবেশ সেটিংস এবং TypeScript কনফিগারেশন ম্যানেজ করতে সাহায্য করে। TypeORM-এ ডেটাবেস পরিচালনা এবং মাইগ্রেশন সহজ করার জন্য এই ফোল্ডার গঠন এবং ফাইল কাঠামো অত্যন্ত গুরুত্বপূর্ণ।
Read more