Instruction file imported from devfullcycle/mba-ia-dev-workflow (
.cursor/rules/typeorm.mdc). Copyright stays with the author.
TypeORM Pattern
Rules
- Dual identifier: every entity has an auto-incremented
id(integer, primary key, internal only) and auuid(v4, unique, exposed to the external world). Never exposeidin API responses — always useuuid - Table naming: lowercase, plural, snake_case (e.g.,
users,course_prerequisites,quiz_attempts) - Synchronize:
synchronize: truein development,synchronize: falsein production - Soft delete only: use
deletedAtcolumn with TypeORM's@DeleteDateColumn()— never hard delete (RN-022) - Data Mapper pattern: entities are plain data holders, repositories handle persistence — no Active Record
Entity example
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
} from 'typeorm';
@Entity('users')
export class User {
@PrimaryGeneratedColumn()
id: number;
@PrimaryGeneratedColumn('uuid')
uuid: string;
@Column({ length: 100 })
name: string;
@Column({ unique: true })
email: string;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
@DeleteDateColumn()
deletedAt: Date | null;
}