* create comment * reply to comment thread * edit comment * delete comment * resolve comment
82 lines
1.8 KiB
TypeScript
82 lines
1.8 KiB
TypeScript
import {
|
|
Entity,
|
|
PrimaryGeneratedColumn,
|
|
Column,
|
|
ManyToOne,
|
|
JoinColumn,
|
|
CreateDateColumn,
|
|
OneToMany,
|
|
DeleteDateColumn,
|
|
} from 'typeorm';
|
|
import { User } from '../../user/entities/user.entity';
|
|
import { Page } from '../../page/entities/page.entity';
|
|
import { Workspace } from '../../workspace/entities/workspace.entity';
|
|
|
|
@Entity('comments')
|
|
export class Comment {
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id: string;
|
|
|
|
@Column({ type: 'jsonb', nullable: true })
|
|
content: any;
|
|
|
|
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
selection: string;
|
|
|
|
@Column({ type: 'varchar', length: 55, nullable: true })
|
|
type: string;
|
|
|
|
@Column()
|
|
creatorId: string;
|
|
|
|
@ManyToOne(() => User, (user) => user.comments)
|
|
@JoinColumn({ name: 'creatorId' })
|
|
creator: User;
|
|
|
|
@Column()
|
|
pageId: string;
|
|
|
|
@ManyToOne(() => Page, (page) => page.comments, { onDelete: 'CASCADE' })
|
|
@JoinColumn({ name: 'pageId' })
|
|
page: Page;
|
|
|
|
@Column({ type: 'uuid', nullable: true })
|
|
parentCommentId: string;
|
|
|
|
@ManyToOne(() => Comment, (comment) => comment.replies, {
|
|
onDelete: 'CASCADE',
|
|
})
|
|
@JoinColumn({ name: 'parentCommentId' })
|
|
parentComment: Comment;
|
|
|
|
@OneToMany(() => Comment, (comment) => comment.parentComment)
|
|
replies: Comment[];
|
|
|
|
@Column({ nullable: true })
|
|
resolvedById: string;
|
|
|
|
@ManyToOne(() => User)
|
|
@JoinColumn({ name: 'resolvedById' })
|
|
resolvedBy: User;
|
|
|
|
@Column({ type: 'timestamp', nullable: true })
|
|
resolvedAt: Date;
|
|
|
|
@Column()
|
|
workspaceId: string;
|
|
|
|
@ManyToOne(() => Workspace, (workspace) => workspace.comments, {
|
|
onDelete: 'CASCADE',
|
|
})
|
|
@JoinColumn({ name: 'workspaceId' })
|
|
workspace: Workspace;
|
|
|
|
@CreateDateColumn()
|
|
createdAt: Date;
|
|
|
|
@Column({ type: 'timestamp', nullable: true })
|
|
editedAt: Date;
|
|
|
|
@DeleteDateColumn({ nullable: true })
|
|
deletedAt: Date;
|
|
}
|