Entity Level Validation Overview
Entity Level Validation হলো এমন একটি প্রক্রিয়া যেখানে ডেটা মডেল বা Entity এর ফিল্ডগুলোর মান যাচাই করা হয়। TypeORM এ Decorators ব্যবহার করে আমরা Entity এর প্রপার্টি বা কলামের উপরে বিভিন্ন ধরনের ভ্যালিডেশন প্রয়োগ করতে পারি। এই ধরনের ভ্যালিডেশন আমাদের ডেটাবেসের সাথে কাজ করার আগে ইনপুট ডেটার সঠিকতা নিশ্চিত করতে সাহায্য করে।
TypeORM এর সাথে Entity Level Validation সাধারণত class-validator লাইব্রেরির মাধ্যমে করা হয়। class-validator একটি সাধারণ এবং শক্তিশালী লাইব্রেরি যা TypeScript ক্লাস এবং প্রপার্টিগুলির জন্য ভ্যালিডেশন প্রদান করে। এটি TypeORM এর সাথে একত্রে ব্যবহার করা যায় যাতে Entity প্রপার্টির উপরে বিভিন্ন ধরনের ভ্যালিডেশন চেক করা যায়, যেমন required, maxLength, minLength, email, ইত্যাদি।
TypeORM এবং class-validator সেটআপ
প্রথমে, আপনাকে class-validator এবং class-transformer প্যাকেজগুলি ইনস্টল করতে হবে, যা TypeORM এর Entity-এ ভ্যালিডেশন ডেকোরেটর ব্যবহার করতে সহায়ক।
ইনস্টলেশন:
npm install class-validator class-transformer
এই দুটি প্যাকেজ ইনস্টল করার পর আপনি Entity Level Validation এর জন্য class-validator এর ডেকোরেটর ব্যবহার করতে পারবেন।
Entity Level Validation: Decorators ব্যবহার করা
class-validator লাইব্রেরি দিয়ে TypeORM Entity-এ বিভিন্ন ধরনের ভ্যালিডেশন ডেকোরেটর ব্যবহার করা হয়। এখানে আমরা কিছু সাধারণ ভ্যালিডেশন ডেকোরেটরের উদাহরণ দেখব।
১. @IsString() – স্ট্রিং ভ্যালিডেশন
এই ডেকোরেটরটি নিশ্চিত করে যে প্রপার্টির মান একটি স্ট্রিং টাইপ।
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
import { IsString } from "class-validator";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
@IsString()
name: string;
}
এখানে @IsString() ডেকোরেটরটি name প্রপার্টির মানের জন্য স্ট্রিং ভ্যালিডেশন প্রয়োগ করছে।
২. @IsEmail() – ইমেইল ভ্যালিডেশন
এই ডেকোরেটরটি নিশ্চিত করে যে প্রপার্টির মান একটি বৈধ ইমেইল ঠিকানা।
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
import { IsEmail } from "class-validator";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
@IsEmail()
email: string;
}
এখানে @IsEmail() ডেকোরেটরটি email প্রপার্টির জন্য ইমেইল ভ্যালিডেশন প্রয়োগ করছে।
৩. @IsInt() – ইন্টিজার ভ্যালিডেশন
এই ডেকোরেটরটি নিশ্চিত করে যে প্রপার্টির মান একটি পূর্ণসংখ্যা (integer)।
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
import { IsInt } from "class-validator";
@Entity()
export class Product {
@PrimaryGeneratedColumn()
id: number;
@Column()
@IsInt()
price: number;
}
এখানে @IsInt() ডেকোরেটরটি price প্রপার্টির জন্য পূর্ণসংখ্যা ভ্যালিডেশন প্রয়োগ করছে।
৪. @Length() – স্ট্রিং দৈর্ঘ্য ভ্যালিডেশন
এই ডেকোরেটরটি স্ট্রিং প্রপার্টির দৈর্ঘ্য সীমাবদ্ধ করতে ব্যবহৃত হয়।
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
import { Length } from "class-validator";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
@Length(3, 20) // নামের দৈর্ঘ্য ৩ থেকে ২০ অক্ষরের মধ্যে থাকতে হবে
name: string;
}
এখানে @Length(3, 20) ডেকোরেটরটি name প্রপার্টির জন্য দৈর্ঘ্য সীমাবদ্ধতা সেট করছে। নামের দৈর্ঘ্য অবশ্যই ৩ থেকে ২০ অক্ষরের মধ্যে হতে হবে।
৫. @IsOptional() – ঐচ্ছিক ফিল্ড
এই ডেকোরেটরটি ফিল্ডকে ঐচ্ছিক করে তোলে, অর্থাৎ এটি অবশ্যই পূর্ণ করতে হবে না, কিন্তু থাকলে এটি ভ্যালিড হতে হবে।
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
import { IsOptional, IsString } from "class-validator";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
@IsString()
name: string;
@Column()
@IsOptional()
@IsString()
address?: string;
}
এখানে, @IsOptional() ডেকোরেটরটি address প্রপার্টিকে ঐচ্ছিক করে দিচ্ছে, অর্থাৎ এটি যদি থাকে, তবে তার মান অবশ্যই স্ট্রিং হতে হবে।
৬. @Min() এবং @Max() – নম্বর সীমা ভ্যালিডেশন
এই ডেকোরেটরটি ব্যবহার করে আপনি সংখ্যা প্রপার্টির জন্য ন্যূনতম এবং সর্বোচ্চ মান সীমা নির্ধারণ করতে পারেন।
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
import { Min, Max } from "class-validator";
@Entity()
export class Product {
@PrimaryGeneratedColumn()
id: number;
@Column()
@Min(0)
@Max(1000)
price: number;
}
এখানে, @Min(0) এবং @Max(1000) ডেকোরেটরগুলি price প্রপার্টির জন্য ন্যূনতম ০ এবং সর্বোচ্চ ১০০০ সীমা নির্ধারণ করছে।
Validation চালানো
TypeORM এ Entity Validation চালানোর জন্য, আপনি class-validator লাইব্রেরির validate ফাংশন ব্যবহার করতে পারেন। উদাহরণস্বরূপ:
import { validate } from "class-validator";
import { User } from "./entity/User";
const user = new User();
user.name = "John";
user.email = "invalid-email";
validate(user).then(errors => {
if (errors.length > 0) {
console.log("Validation failed: ", errors);
} else {
console.log("Validation succeeded");
}
});
এখানে, validate(user) ফাংশনটি User Entity এর উপর করা সব ভ্যালিডেশন চেক করবে এবং যদি কোনো ত্রুটি থাকে তবে সেগুলো রিটার্ন করবে।
সারাংশ
Entity Level Validation TypeORM এবং class-validator লাইব্রেরি ব্যবহার করে সহজেই করা যায়। TypeORM এর Entity ফিল্ডগুলোতে বিভিন্ন ভ্যালিডেশন ডেকোরেটর যেমন @IsString(), @IsEmail(), @Length(), ইত্যাদি ব্যবহার করা যায়, যা ডেটার সঠিকতা নিশ্চিত করতে সাহায্য করে। class-validator লাইব্রেরি এবং TypeORM এর সমন্বয়ে আপনি আপনার Entity ডেটার মান পরীক্ষা এবং যাচাই করতে পারবেন, যা অ্যাপ্লিকেশনকে আরও নিরাপদ এবং নির্ভরযোগ্য করে তোলে।
Read more