package repositories import ( "context" "gorm.io/gorm" "tercul/internal/models" ) // CommentRepository defines CRUD methods specific to Comment. type CommentRepository interface { BaseRepository[models.Comment] ListByUserID(ctx context.Context, userID uint) ([]models.Comment, error) ListByWorkID(ctx context.Context, workID uint) ([]models.Comment, error) ListByTranslationID(ctx context.Context, translationID uint) ([]models.Comment, error) ListByParentID(ctx context.Context, parentID uint) ([]models.Comment, error) } type commentRepository struct { BaseRepository[models.Comment] db *gorm.DB } // NewCommentRepository creates a new CommentRepository. func NewCommentRepository(db *gorm.DB) CommentRepository { return &commentRepository{ BaseRepository: NewBaseRepositoryImpl[models.Comment](db), db: db, } } // ListByUserID finds comments by user ID func (r *commentRepository) ListByUserID(ctx context.Context, userID uint) ([]models.Comment, error) { var comments []models.Comment if err := r.db.WithContext(ctx).Where("user_id = ?", userID).Find(&comments).Error; err != nil { return nil, err } return comments, nil } // ListByWorkID finds comments by work ID func (r *commentRepository) ListByWorkID(ctx context.Context, workID uint) ([]models.Comment, error) { var comments []models.Comment if err := r.db.WithContext(ctx).Where("work_id = ?", workID).Find(&comments).Error; err != nil { return nil, err } return comments, nil } // ListByTranslationID finds comments by translation ID func (r *commentRepository) ListByTranslationID(ctx context.Context, translationID uint) ([]models.Comment, error) { var comments []models.Comment if err := r.db.WithContext(ctx).Where("translation_id = ?", translationID).Find(&comments).Error; err != nil { return nil, err } return comments, nil } // ListByParentID finds comments by parent ID func (r *commentRepository) ListByParentID(ctx context.Context, parentID uint) ([]models.Comment, error) { var comments []models.Comment if err := r.db.WithContext(ctx).Where("parent_id = ?", parentID).Find(&comments).Error; err != nil { return nil, err } return comments, nil }