import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinTable } from 'typeorm' import { User } from './User' @Entity("links") export class Link { // Unique link id. @PrimaryGeneratedColumn() id: number; // Experimental: subdomain which should be a part of the short url. // For instance in the URL "abc.example.com/def", abc is the subdomain. // "def.example.com/def" won't resolve to the URL that "abc.example.com/def" does. // https://stackoverflow.com/a/67535817 @Column({ type: 'varchar', nullable: true }) subdomain: string | null; // Shortened Uri. @Column() shortUri: string; // URL to which the user should be redirected @Column() fullUrl: string; // Unix timestamp of link creation date. @Column('bigint') createDate: number; // Unix timestamp of when the link should expire. // If null, the link will never expire unless deleted. @Column('bigint', { nullable: true }) expiryDate: number | null; // Aggregated amount of visits. @Column('bigint') visits: number; // Link privacy: // - true, if link is private // - false, if link can be shown in a list of recent links publicly. @Column() privacy: boolean; // User to which the shortened URL belongs. @ManyToOne(() => User, (user) => user.links, { nullable: true }) @JoinTable() author: User | null; }