Gerador de Entidades TypeORM a partir de SQL DDL (TypeScript)
Converta instruções SQL CREATE TABLE DDL em classes de entidade TypeORM em TypeScript com decoradores @Column, @PrimaryGeneratedColumn, relações e índices.
/**
* 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;
}
Privacidade 100% no Cliente
Zero uploads para servidores ou conexões diretas. Toda a análise sintática de SQL e a compilação TypeORM ocorrem dentro do seu navegador.
Decoradores TypeORM Inteligentes
Gera automaticamente chaves primárias (@PrimaryGeneratedColumn, @PrimaryColumn), tipos nativos, @CreateDateColumn, @UpdateDateColumn, @Index e @Unique.
Multi-Dialeto e Relações Bidirecionais
Compatível com PostgreSQL, MySQL, SQLite e SQL Server com anotações @ManyToOne, @OneToMany e @OneToOne bidirecionais e regras de cascata.