Module 04
⭐⭐⭐ Difficile
~3h
🛒 E-commerce — Entités, Relations & Migrations
Modéliser un système e-commerce complet avec TypeORM. Entités, relations OneToMany/ManyToMany, soft delete, QueryBuilder, transactions et migrations.
📊 Modèle de données
User (1) ──────── (N) Order
User (1) ──────── (N) Review
Product (N) ─── (N) Tag [ManyToMany via product_tags]
Product (N) ─── (1) Category
Order (1) ────── (N) OrderItem
OrderItem (N) ── (1) Product
🔧 Entités à créer
// entities/order.entity.ts
@Entity('orders')
export class Order {
@PrimaryGeneratedColumn('uuid') id: string;
@Column({ type: 'enum', enum: OrderStatus, default: OrderStatus.PENDING })
status: OrderStatus;
@Column({ type: 'decimal', precision: 10, scale: 2 })
total: number;
@ManyToOne(() => User, u => u.orders)
user: User;
@OneToMany(() => OrderItem, item => item.order, { cascade: true })
items: OrderItem[];
@CreateDateColumn() createdAt: Date;
}
export enum OrderStatus {
PENDING = 'pending',
PAID = 'paid',
SHIPPED = 'shipped',
DELIVERED = 'delivered',
CANCELLED = 'cancelled',
}
// entities/order-item.entity.ts
@Entity('order_items')
export class OrderItem {
@PrimaryGeneratedColumn() id: number;
@Column({ type: 'int' }) quantity: number;
@Column({ type: 'decimal', precision: 10, scale: 2 }) unitPrice: number;
@ManyToOne(() => Order, o => o.items) order: Order;
@ManyToOne(() => Product) product: Product;
}
✅ Fonctionnalités à implémenter
- CRUD Products avec soft delete et restore
- Système de catégories et tags (ManyToMany)
- Création de commande en transaction (décrémente le stock)
- QueryBuilder pour la recherche full-text produits
- Migration pour ajouter le champ
ratingà Product - Stats commandes par statut (agrégation SQL)