UNPKG

@wearesage/schema

Version:

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

101 lines (83 loc) 1.78 kB
import "reflect-metadata"; import { Entity, Id, Property, OneToMany, ManyToMany } from "../.."; import { Post } from "./Post"; import { Message } from "./Message"; import { Group } from "./Group"; import { Event } from "./Event"; @Entity() export class User { @Id() id: string; @Property({ required: true }) displayName: string; @Property({ required: true, unique: true }) email: string; @Property() bio: string; @Property() profileImageUrl: string; @Property() dateJoined: Date; @Property() isVerified: boolean = false; @OneToMany({ target: () => Post, inverse: "author", name: "CREATED_BY", }) posts: Post[] = []; @OneToMany({ target: () => Comment, inverse: "author", name: "AUTHORED_BY", }) comments: Comment[] = []; @ManyToMany({ target: () => User, inverse: "followers", name: "FOLLOWS", }) following: User[] = []; @ManyToMany({ target: () => User, inverse: "following", name: "FOLLOWED_BY", }) followers: User[] = []; @OneToMany({ target: () => Message, inverse: "sender", name: "SENT_BY", }) sentMessages: Message[] = []; @OneToMany({ target: () => Message, inverse: "recipient", name: "RECEIVED_BY", }) receivedMessages: Message[] = []; @ManyToMany({ target: () => Group, inverse: "members", name: "MEMBER_OF", }) groups: Group[] = []; @OneToMany({ target: () => Group, inverse: "owner", name: "OWNS_GROUP", }) ownedGroups: Group[] = []; @OneToMany({ target: () => Event, inverse: "host", name: "HOSTED_BY", }) hostedEvents: Event[] = []; @ManyToMany({ target: () => Event, inverse: "attendees", name: "ATTENDING", }) eventsAttending: Event[] = []; }