Générateur d'Entités TypeORM depuis SQL DDL (TypeScript)
Convertissez vos instructions SQL CREATE TABLE DDL en classes d'entités TypeScript TypeORM propres avec @Column, @PrimaryGeneratedColumn, relations et index.
/**
* TypeORM Entity Definitions (Generated by ToolsAA)
* Target Dialect: POSTGRES
* Date: 2026-10-21
*/
import {
Column,
CreateDateColumn,
Entity,
Index,
JoinColumn,
ManyToOne,
OneToMany,
OneToOne,
PrimaryGeneratedColumn,
Unique,
UpdateDateColumn,
} from 'typeorm';
OrderStatusEnum {
PENDING = 'PENDING',
PAID = 'PAID',
PROCESSING = 'PROCESSING',
SHIPPED = 'SHIPPED',
DELIVERED = 'DELIVERED',
CANCELLED = 'CANCELLED',
}
UserRoleEnum {
ADMIN = 'ADMIN',
CUSTOMER = 'CUSTOMER',
VENDOR = 'VENDOR',
}
@Entity('users')
User {
@PrimaryGeneratedColumn('uuid', { name: 'id' })
id!: string;
@Column({ type: 'varchar', length: 255, name: 'email', unique: true })
email!: string;
@Column({ type: 'varchar', length: 150, name: 'full_name', nullable: true })
fullName: string | null;
@Column({ type: 'enum', enum: UserRoleEnum, default: UserRoleEnum.CUSTOMER, name: 'role' })
role!: UserRoleEnum;
@Column({ type: 'boolean', name: 'is_verified', default: false })
isVerified!: boolean;
@Column({ type: 'jsonb', name: 'metadata', nullable: true })
metadata: Record<string, any> | null;
@CreateDateColumn({ name: 'created_at', type: 'timestamptz' })
createdAt!: Date;
@UpdateDateColumn({ name: 'updated_at', type: 'timestamptz' })
updatedAt!: Date;
@OneToOne(() => UserProfile, (userProfile) => userProfile.user)
userProfile?: UserProfile | null;
@OneToMany(() => Order, (order) => order.customer)
orders!: Order[];
}
@Entity('user_profiles')
UserProfile {
@PrimaryGeneratedColumn('uuid', { name: 'id' })
id!: string;
@Column({ type: 'uuid', name: 'user_id', unique: true })
userId!: string;
@Column({ type: 'varchar', length: 500, name: 'avatar_url', nullable: true })
avatarUrl: string | null;
@Column({ type: 'varchar', length: 32, name: 'phone_number', nullable: true })
phoneNumber: string | null;
@Column({ type: 'text', name: 'shipping_address', nullable: true })
shippingAddress: string | null;
@Column({ type: 'varchar', length: 64, name: 'tax_identifier', nullable: true })
taxIdentifier: string | null;
@OneToOne(() => User, (user) => user.userProfile, { onDelete: 'CASCADE' })
@JoinColumn({ name: 'user_id' })
user!: User;
}
@Entity('products')
@Index('idx_products_sku', ['sku'])
Product {
@PrimaryGeneratedColumn({ name: 'id' })
id!: number;
@Column({ type: 'varchar', length: 64, name: 'sku', unique: true })
sku!: string;
@Column({ type: 'varchar', length: 200, name: 'title' })
title!: string;
@Column({ type: 'text', name: 'description', nullable: true })
description: string | null;
@Column({ type: 'decimal', precision: 12, scale: 2, name: 'unit_price', default: 0.00 })
unitPrice!: string;
@Column({ type: 'int', name: 'inventory_count', default: 0 })
inventoryCount!: number;
@Column({ type: 'boolean', name: 'is_active', default: true })
isActive!: boolean;
@CreateDateColumn({ name: 'created_at', type: 'timestamptz' })
createdAt!: Date;
@OneToMany(() => OrderItem, (orderItem) => orderItem.product)
orderItems!: OrderItem[];
}
@Entity('orders')
@Index('idx_orders_status', ['status'])
Order {
@PrimaryGeneratedColumn('uuid', { name: 'id' })
id!: string;
@Column({ type: 'uuid', name: 'customer_id' })
customerId!: string;
@Column({ type: 'varchar', length: 64, name: 'order_number', unique: true })
orderNumber!: string;
@Column({ type: 'enum', enum: OrderStatusEnum, default: OrderStatusEnum.PENDING, name: 'status' })
status!: OrderStatusEnum;
@Column({ type: 'decimal', precision: 12, scale: 2, name: 'total_amount', default: 0.00 })
totalAmount!: string;
@Column({ type: 'decimal', precision: 10, scale: 2, name: 'tax_amount', default: 0.00 })
taxAmount!: string;
@Column({ type: 'text', name: 'shipping_notes', nullable: true })
shippingNotes: string | null;
@CreateDateColumn({ name: 'created_at', type: 'timestamptz' })
createdAt!: Date;
@UpdateDateColumn({ name: 'updated_at', type: 'timestamptz' })
updatedAt!: Date;
@ManyToOne(() => User, (user) => user.orders, { onDelete: 'RESTRICT' })
@JoinColumn({ name: 'customer_id' })
customer!: User;
@OneToMany(() => OrderItem, (orderItem) => orderItem.order)
orderItems!: OrderItem[];
}
@Entity('order_items')
@Unique('uq_order_product', ['orderId', 'productId'])
OrderItem {
@PrimaryGeneratedColumn({ name: 'id' })
id!: number;
@Column({ type: 'uuid', name: 'order_id' })
orderId!: string;
@Column({ type: 'int', name: 'product_id' })
productId!: number;
@Column({ type: 'int', name: 'quantity', default: 1 })
quantity!: number;
@Column({ type: 'decimal', precision: 12, scale: 2, name: 'unit_price' })
unitPrice!: string;
@Column({ type: 'decimal', precision: 12, scale: 2, name: 'subtotal' })
subtotal!: string;
@ManyToOne(() => Order, (order) => order.orderItems, { onDelete: 'CASCADE' })
@JoinColumn({ name: 'order_id' })
order!: Order;
@ManyToOne(() => Product, (product) => product.orderItems, { onDelete: 'RESTRICT' })
@JoinColumn({ name: 'product_id' })
product!: Product;
}
Confidentialité 100% Côté Client
Aucun envoi vers un serveur ni connexion directe. L'analyse du code SQL et la génération des entités TypeORM s'effectuent exclusivement dans votre navigateur.
Décorateurs TypeORM Intelligents
Génération automatique des clés primaires (@PrimaryGeneratedColumn, @PrimaryColumn), types de colonnes, @CreateDateColumn, @UpdateDateColumn, @Index et @Unique.
Multi-Dialecte & Relations Bidirectionnelles
Prise en charge de PostgreSQL, MySQL, SQLite et SQL Server avec relations typées @ManyToOne, @OneToMany et @OneToOne avec options CASCADE.