UNPKG

@wearesage/schema

Version:

A flexible schema definition and validation system for TypeScript with multi-database support

62 lines (53 loc) 1.24 kB
import "reflect-metadata"; import { Entity, Id, Property, OneToOne, OneToMany } from "../.."; import { Cart } from "./Cart"; import { Order } from "./Order"; import { Review } from "./Review"; /** * A simple "User" can have exactly one Cart (One-to-One), * can place multiple Orders (One-to-Many), * and can write multiple Reviews (One-to-Many). */ @Entity() export class User { @Id() id: string; @Property({ required: true }) name: string; @Property({ required: true, unique: true }) email: string; @Property({ default: () => new Date() }) createdAt: Date; @Property() updatedAt: Date; /** * One-to-one with Cart. * The "inverse" property on Cart is "user". */ @OneToOne({ target: () => Cart, inverse: "user", name: "HAS_CART", }) cart: Cart; /** * One user can have many orders. * The "inverse" property on Order is "user". */ @OneToMany({ target: () => Order, inverse: "user", name: "PLACED_ORDER", }) orders: Order[] = []; /** * One user can write many reviews. * The "inverse" property on Review is "author". */ @OneToMany({ target: () => Review, inverse: "author", name: "WROTE_REVIEW", }) reviews: Review[] = []; }