TypeORM Soft Delete ve Flag Kullanımı


TypeORM Soft Delete ve Flag Kullanımı

Giriş: Soft Delete Nedir ve Neden Kullanılır?

Veri tabanı işlemlerinde "Silme" işlemi genellikle geri döndürülemez şekilde yapılır. Ancak bazı uygulamalarda, kaydın tümden silinmesi yerine sadece görünürlüğü kapatılır ve verinin arka planda tutulması gerekir. Bu yönteme soft delete (yumuşak silme) denir. TypeORM, bu işlemi modern uygulamalarda kullanışlı hale getiren güçlü bir ORM aracıdır. TypeORM soft delete sayesinde, verilerinizi kaybetmeden silme işlemlerini güvenli ve esnek biçimde yönetebilirsiniz.

TypeORM Soft Delete Kullanımı

TypeORM, soft delete işlemini hem @DeleteDateColumn ile hem de flag (ör. isDeleted) yaklaşımıyla destekler. En yaygın yöntem, @DeleteDateColumn tanımlayarak entity'de ilgili alanı işaretlemektir. Bu sayede, bir kayıt silindiğinde gerçekte veritabanından silinmez, sadece deletedAt kolonuna zaman damgası eklenir:

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

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

    @Column()
    name: string;

    @DeleteDateColumn({ nullable: true })
    deletedAt?: Date;
}

Artık TypeORM repository veya manager üzerinden kolayca soft delete işlemi ile kayıtları "silmek" mümkündür:

await userRepository.softDelete(id);

Bu işlemde deletedAt alanı güncellenir ve kayıt normal sorgularda gelmez. İstenirse, withDeleted() fonksiyonu kullanılarak silinen kayıtlar da dahil tüm veriler listelenebilir:

const users = await userRepository.find({ withDeleted: true });

Flag ile Silme Kontrolü: isDeleted Kullanımı

Bazı projelerde isDeleted gibi boolean bir flag kullanmak gerekebilir. Bu senaryolarda, entity'ye ilgili alan eklenir ve soft delete işlemi manuel gerçekleştirilir:

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

    @Column()
    name: string;

    @Column({ default: false })
    isDeleted: boolean;
}

// Soft delete işlemi
await productRepository.update(id, { isDeleted: true });

Bu yöntemde, sorgularda her zaman isDeleted: false kontrolünün yapılması gerekmektedir. Ek olarak, verilerin güvenliğini sağlamak için bu yapı genellikle uygulama seviyesinde değerlendirilir.

Sonuç: TypeORM Soft Delete ve Flag Yaklaşımlarının Karşılaştırması

TypeORM Soft Delete ve Flag kullanımı, uygulamanızda verileri silerken tam kontrol ve esneklik sağlar. @DeleteDateColumn ile otomatik yönetim ve sorgularda entegrasyon kolaylaşırken, isDeleted flag ile daha özelleştirilebilir, kompleks silme kuralları uygulanabilir. Projenizin gereksinimlerine göre en uygun yöntemi seçerek, veri kaybının önüne geçebilir ve yönetimi kolaylaştırabilirsiniz. TypeORM soft delete fonksiyonu, modern REST API ve kurumsal yazılım projelerinde veri kalitesini ve güvenliğini artıran önemli bir araçtır.