package comment import ( "time" ) // CommentResponse - полный ответ для комментария type CommentResponse struct { ID uint `json:"id"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` AuthorID uint `json:"author_id"` AuthorName string `json:"author_name"` FeedbackID uint `json:"feedback_id"` Text string `json:"text"` ParentID *uint `json:"parent_id,omitempty"` IsEdited bool `json:"is_edited"` IsVerified bool `json:"is_verified"` Replies []CommentShortResponse `json:"replies,omitempty"` RepliesCount int64 `json:"replies_count,omitempty"` } // CommentShortResponse - краткий ответ для комментария type CommentShortResponse struct { ID uint `json:"id"` CreatedAt time.Time `json:"created_at"` AuthorID uint `json:"author_id"` AuthorName string `json:"author_name"` Text string `json:"text"` IsEdited bool `json:"is_edited"` } // CreateCommentRequest - DTO для создания комментария type CreateCommentRequest struct { FeedbackID uint `json:"feedback_id" binding:"required"` Text string `json:"text" binding:"required,min=1,max=5000"` ParentID *uint `json:"parent_id"` // опционально, для ответов на комментарии } // UpdateCommentRequest - DTO для обновления комментария type UpdateCommentRequest struct { Text string `json:"text" binding:"required,min=1,max=5000"` } // ListCommentsRequest - DTO для списка комментариев с фильтрацией type ListCommentsRequest struct { Page int `form:"page,default=1"` PageSize int `form:"page_size,default=20"` FeedbackID *uint `form:"feedback_id"` AuthorID *uint `form:"author_id"` ParentID *uint `form:"parent_id"` Verified *bool `form:"verified"` SortBy string `form:"sort_by,default=created_at"` SortOrder string `form:"sort_order,default=desc"` }