// Domain model
class Order extends Aggregate<OrderProps> {
static create(customerId: string): Order {
return new Order({
// New order - auto-generated ID
customerId,
status: "draft",
items: [],
createdAt: new Date(),
});
}
static fromDatabase(data: OrderRow): Order {
return new Order({
// Existing order - ID from database
id: Id.from(data.id),
customerId: data.customer_id,
status: data.status,
items: data.items.map(
(item) =>
new OrderItem({
id: Id.from(item.id),
productId: item.product_id,
quantity: item.quantity,
})
),
createdAt: data.created_at,
});
}
}
// Usage
const newOrder = Order.create("customer-123");
console.log(newOrder.isNew()); // true
const existingOrder = Order.fromDatabase(dbRow);
console.log(existingOrder.isNew()); // false