UNPKG

@wearesage/schema

Version:

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

65 lines (56 loc) 1.49 kB
import "reflect-metadata"; import { Entity, Id, Property, OneToMany, ManyToMany } from "../.."; import { Role } from "./Role"; import { GroupMembership } from "./GroupMembership"; import { Resource } from "./Resource"; /** * A User can belong to many Groups (through GroupMembership), * can have many Roles, * can own or manage certain Resources. */ @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; /** * A user can have multiple roles (Many-to-Many). * The "inverse" property on Role is "users". */ @ManyToMany({ target: () => Role, inverse: "users", name: "HAS_ROLE", }) roles: Role[] = []; /** * A user can be a member of multiple groups, * but we handle that via the GroupMembership entity * (see Group.memberships). * If you want direct access to memberships, * you can define a OneToMany relationship: */ @OneToMany({ target: () => GroupMembership, inverse: "user", name: "MEMBERSHIP_LINK", }) memberships: GroupMembership[] = []; /** * A user can own many resources, e.g. "created" or "manages" them. * The "inverse" property on Resource is "owner". */ @OneToMany({ target: () => Resource, inverse: "owner", name: "OWNS_RESOURCE", }) ownedResources: Resource[] = []; }