package model import ( "time" "gorm.io/gorm" ) const CommentLengthLimit = 2000 type Comment struct { // db fields ID uint `json:"id" gorm:"primarykey"` CreatedAt time.Time UpdatedAt time.Time DeletedAt gorm.DeletedAt `gorm:"index"` // db foreign key to reference parent post PostID uint Post *Post `json:"post"` Author string `json:"author"` Contents string `json:"contents"` // db key to reference parent comment ReplyToID *uint ReplyTo *Comment `json:"reply_to,omitempty"` Replies []*Comment `json:"replies" gorm:"many2many:comment_replies"` } type Post struct { // db fields ID uint `json:"id" gorm:"primarykey"` CreatedAt time.Time UpdatedAt time.Time DeletedAt gorm.DeletedAt `gorm:"index"` Title string `json:"title"` Author string `json:"author"` Contents string `json:"contents"` Comments []*Comment `json:"comments" gorm:"foreignKey:PostID"` AllowComments bool `json:"allowComments"` } func PostFromInput(input *PostInput) *Post { return &Post{ Author: input.Author, Title: input.Title, Contents: input.Contents, AllowComments: input.AllowComments, } } func CommentFromInput(input *CommentInput) *Comment { return &Comment{ Author: input.Author, Contents: input.Contents, Replies: make([]*Comment, 0), } }