Soft Delete এবং Auditing এর জন্য Decorators ব্যবহার

Soft Deletes এবং Auditing - টাইপওআরএম (TypeORM) - Web Development

301

TypeORM-এ Soft Delete এবং Auditing

TypeORM একটি শক্তিশালী ORM (Object-Relational Mapping) যা TypeScript এবং JavaScript-এর জন্য ডিজাইন করা হয়েছে এবং এটি ডেটাবেস পরিচালনা করতে অনেক সুবিধা প্রদান করে। Soft Delete এবং Auditing হল দুটি গুরুত্বপূর্ণ ফিচার যা ডেটাবেস ম্যানেজমেন্ট এবং অ্যাপ্লিকেশন ডেভেলপমেন্টে খুবই সহায়ক।

  • Soft Delete হল একটি কৌশল, যেখানে ডেটা সরাসরি ডিলিট না করে, একটি নির্দিষ্ট কলামে তার স্টেট পরিবর্তন করা হয় (যেমন isDeleted: true), যাতে সেই ডেটাটি ভবিষ্যতে পুনরুদ্ধার করা সম্ভব হয়।
  • Auditing হল একটি পদ্ধতি যার মাধ্যমে আপনার অ্যাপ্লিকেশনে ডেটার পরিবর্তন লগ করা হয়, যেমন কবে কোন ব্যবহারকারী ডেটা পরিবর্তন করেছে বা কোন তথ্য আপডেট হয়েছে।

TypeORM-এ এই ফিচারগুলো বাস্তবায়ন করতে Decorators ব্যবহার করা হয়, যা ডেটা সঠিকভাবে ট্র্যাক করা এবং পরিচালনা করার জন্য সহায়ক।


১. Soft Delete

Soft Delete ব্যবহার করার মাধ্যমে আপনি ডেটা সরাসরি ডিলিট না করে, ডেটার একটি ফ্ল্যাগ বা স্টেট পরিবর্তন করেন। TypeORM এ Soft Delete বাস্তবায়ন করতে @DeleteDateColumn() ডেকোরেটর ব্যবহার করা হয়।

Soft Delete এর উদাহরণ:

ধরা যাক, আপনার একটি User টেবিল আছে এবং আপনি চান যে, যখন একটি User ডিলিট হবে, তখন সেটি সম্পূর্ণভাবে ডাটাবেস থেকে মুছে না গিয়ে deletedAt ফিল্ডে তার ডিলিট টাইম স্ট্যাম্প রাখবে।

import { Entity, PrimaryGeneratedColumn, Column, DeleteDateColumn } from "typeorm";

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @DeleteDateColumn()
  deletedAt: Date | null;  // This column is used for soft delete
}

এখানে, @DeleteDateColumn() ডেকোরেটরটি deletedAt কলামটি তৈরি করে, যা null থাকবে যখন ব্যবহারকারী ডিলিট হবে না, আর ডিলিট হওয়ার সময় এটি ডিলিটের সময়ের তারিখ বা টাইমস্ট্যাম্প রাখবে।

Soft Delete অপারেশন:

import { createConnection } from "typeorm";
import { User } from "./entity/User";

createConnection().then(async connection => {
  const userRepository = connection.getRepository(User);

  // নতুন ইউজার তৈরি করা
  const user = new User();
  user.name = "John Doe";
  await userRepository.save(user);

  // ইউজারকে Soft Delete করা
  await userRepository.softDelete(user.id);

  console.log("User Soft Deleted");
}).catch(error => console.log(error));

এখানে, softDelete() মেথড ব্যবহার করে ইউজারকে soft delete করা হয়েছে, যার ফলে deletedAt ফিল্ডে ডিলিট টাইমস্ট্যাম্প সংরক্ষিত হয়েছে, এবং ডেটা ফিজিক্যালি ডিলিট হয়নি।

Soft Delete এর পরে Find অপারেশন:

const deletedUser = await userRepository.findOne({ where: { id: user.id } });
console.log(deletedUser); // This will return null if the user is soft deleted

Soft Delete করার পর, findOne() কলের মাধ্যমে আপনি ডিলিট করা রেকর্ডটি খুঁজে পাবেন না। তবে, soft remove মেথড ব্যবহার করলে, আপনি সমস্ত রেকর্ড সহ ডিলিট হওয়া রেকর্ডগুলোও দেখতে পারবেন।

const allUsersIncludingDeleted = await userRepository.find({ withDeleted: true });
console.log(allUsersIncludingDeleted); // This will include the deleted users

২. Auditing

Auditing হল ডেটার পরিবর্তন লগ করার একটি পদ্ধতি, যাতে আপনি জানতে পারেন কবে এবং কিভাবে ডেটা পরিবর্তিত হয়েছে। TypeORM এ Auditing করতে @CreateDateColumn() এবং @UpdateDateColumn() ডেকোরেটর ব্যবহার করা হয়, যা তৈরি এবং আপডেটের তারিখ রেকর্ড করে।

Auditing এর উদাহরণ:

ধরা যাক, আপনি একটি Product টেবিল তৈরি করেছেন এবং আপনি চান যে, প্রতিটি নতুন Product তৈরি হওয়ার সময় তৈরি তারিখ (createdAt) এবং আপডেট হওয়া সময় (updatedAt) স্বয়ংক্রিয়ভাবে সংরক্ষিত হোক।

import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from "typeorm";

@Entity()
export class Product {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  price: number;

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;
}

এখানে, @CreateDateColumn() এবং @UpdateDateColumn() ডেকোরেটরটি স্বয়ংক্রিয়ভাবে createdAt এবং updatedAt কলামে তারিখ এবং সময় রাখে। যখন একটি নতুন রেকর্ড তৈরি হয়, তখন createdAt এ তৈরি তারিখ সংরক্ষিত হবে এবং যখন সেই রেকর্ড আপডেট হবে, তখন updatedAt এ আপডেটের তারিখ সংরক্ষিত হবে।

Auditing এর মাধ্যমে ডেটার পরিবর্তন ট্র্যাক করা:

import { createConnection } from "typeorm";
import { Product } from "./entity/Product";

createConnection().then(async connection => {
  const productRepository = connection.getRepository(Product);

  // নতুন প্রোডাক্ট তৈরি করা
  const product = new Product();
  product.name = "Laptop";
  product.price = 1500;
  await productRepository.save(product);

  console.log("Product Created:", product);

  // প্রোডাক্ট আপডেট করা
  product.price = 1400;
  await productRepository.save(product);

  console.log("Product Updated:", product);
}).catch(error => console.log(error));

এখানে, Product তৈরি এবং আপডেট করার সময় createdAt এবং updatedAt কলামে সিস্টেমের তারিখ স্বয়ংক্রিয়ভাবে রেকর্ড হয়ে যাবে।


৩. Soft Delete এবং Auditing একসাথে ব্যবহার

TypeORM এ আপনি Soft Delete এবং Auditing একসাথে ব্যবহার করতে পারেন, যাতে যখন কোন এন্টিটি ডিলিট হয়, তখন ডেটার পরিবর্তন এবং ডিলিটের তথ্য উভয়ই ট্র্যাক করা যায়।

উদাহরণ:

import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn } from "typeorm";

@Entity()
export class Product {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  price: number;

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;

  @DeleteDateColumn()
  deletedAt: Date | null;
}

এখানে, Soft Delete এর জন্য @DeleteDateColumn() ব্যবহার করা হয়েছে এবং Auditing এর জন্য @CreateDateColumn() এবং @UpdateDateColumn() ব্যবহার করা হয়েছে। এর ফলে, আপনি ডিলিট করা তথ্য, তৈরি হওয়া সময় এবং আপডেট হওয়া সময় ট্র্যাক করতে পারবেন।

Soft Delete এবং Auditing একসাথে অপারেশন:

import { createConnection } from "typeorm";
import { Product } from "./entity/Product";

createConnection().then(async connection => {
  const productRepository = connection.getRepository(Product);

  // নতুন প্রোডাক্ট তৈরি করা
  const product = new Product();
  product.name = "Smartphone";
  product.price = 700;
  await productRepository.save(product);

  console.log("Product Created:", product);

  // প্রোডাক্ট ডিলিট করা (soft delete)
  await productRepository.softDelete(product.id);

  console.log("Product Soft Deleted:", product);
}).catch(error => console.log(error));

এখানে, Product এন্টিটি তৈরি, আপডেট এবং ডিলিট হওয়ার সময় সকল তথ্য স্বয়ংক্রিয়ভাবে সংরক্ষিত হবে এবং আপনি Soft Delete এবং Auditing উভয় ফিচার একসাথে ব্যবহার করতে পারবেন।


সারাংশ

Soft Delete এবং Auditing ডেকোরেটরের মাধ্যমে TypeORM-এ ডেটা পরিচালনার ক্ষেত্রে আরও উন্নত ফিচার যোগ করা যায়। Soft Delete এর মাধ্যমে ডেটা সরাসরি ডিলিট না করে তার স্থিতি পরিবর্তন করা হয়, এবং Auditing এর মাধ্যমে ডেটার পরিবর্তন এবং অন্যান্য কার্যক্রম লগ করা হয়। TypeORM এ এই ফিচারগুলো ডেকোরেটরের মাধ্যমে সহজেই বাস্তবায়ন করা যায়, যা ডেটাবেস ব্যবস্থাপনায় আরও কার্যকরী এবং নির্ভরযোগ্য সিস্টেম তৈরি করতে সহায়তা করে।

Content added By
Promotion

Are you sure to start over?

Loading...